arc: Fix for undefined shift behavior (CID 211523)

find_msb_set() can return 0, resulting in a undefined shift of 255 bits.
Fixes #27319

Signed-off-by: Ruud Derwig <Ruud.Derwig@synopsys.com>
This commit is contained in:
Ruud Derwig 2020-08-18 17:29:27 +02:00 committed by Anas Nashif
commit 80194192d4

View file

@ -29,10 +29,11 @@
static inline void _region_init(uint32_t index, uint32_t region_addr, uint32_t size,
uint32_t region_attr)
{
uint8_t bits = find_msb_set(size) - 1;
index = index * 2U;
if (size > 0) {
uint8_t bits = find_msb_set(size) - 1;
if (bits < ARC_FEATURE_MPU_ALIGNMENT_BITS) {
bits = ARC_FEATURE_MPU_ALIGNMENT_BITS;
}
@ -41,7 +42,6 @@ static inline void _region_init(uint32_t index, uint32_t region_addr, uint32_t s
bits++;
}
if (size > 0) {
region_attr &= ~(AUX_MPU_RDP_SIZE_MASK);
region_attr |= AUX_MPU_RDP_REGION_SIZE(bits);
region_addr |= AUX_MPU_RDB_VALID_MASK;