Skip to content

Commit f979a19

Browse files
authored
[armv8][mpu] Fix undefined behaviour in shifting 8 bit value (#1668)
1 parent 9aa50b3 commit f979a19

File tree

1 file changed

+2
-1
lines changed

1 file changed

+2
-1
lines changed

CMSIS/Core/Include/mpu_armv8.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -261,12 +261,13 @@ __STATIC_INLINE void ARM_MPU_SetMemAttrEx(MPU_Type* mpu, uint8_t idx, uint8_t at
261261
const uint8_t reg = idx / 4U;
262262
const uint32_t pos = ((idx % 4U) * 8U);
263263
const uint32_t mask = 0xFFU << pos;
264+
const uint32_t val = (uint32_t)attr << pos;
264265

265266
if (reg >= (sizeof(mpu->MAIR) / sizeof(mpu->MAIR[0]))) {
266267
return; // invalid index
267268
}
268269

269-
mpu->MAIR[reg] = ((mpu->MAIR[reg] & ~mask) | ((attr << pos) & mask));
270+
mpu->MAIR[reg] = ((mpu->MAIR[reg] & ~mask) | (val & mask));
270271
}
271272

272273
/** Set the memory attribute encoding.

0 commit comments

Comments
 (0)