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:
parent
af1d924c42
commit
80194192d4
1 changed files with 10 additions and 10 deletions
|
@ -29,19 +29,19 @@
|
||||||
static inline void _region_init(uint32_t index, uint32_t region_addr, uint32_t size,
|
static inline void _region_init(uint32_t index, uint32_t region_addr, uint32_t size,
|
||||||
uint32_t region_attr)
|
uint32_t region_attr)
|
||||||
{
|
{
|
||||||
uint8_t bits = find_msb_set(size) - 1;
|
|
||||||
|
|
||||||
index = index * 2U;
|
index = index * 2U;
|
||||||
|
|
||||||
if (bits < ARC_FEATURE_MPU_ALIGNMENT_BITS) {
|
|
||||||
bits = ARC_FEATURE_MPU_ALIGNMENT_BITS;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((1 << bits) < size) {
|
|
||||||
bits++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (size > 0) {
|
if (size > 0) {
|
||||||
|
uint8_t bits = find_msb_set(size) - 1;
|
||||||
|
|
||||||
|
if (bits < ARC_FEATURE_MPU_ALIGNMENT_BITS) {
|
||||||
|
bits = ARC_FEATURE_MPU_ALIGNMENT_BITS;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((1 << bits) < size) {
|
||||||
|
bits++;
|
||||||
|
}
|
||||||
|
|
||||||
region_attr &= ~(AUX_MPU_RDP_SIZE_MASK);
|
region_attr &= ~(AUX_MPU_RDP_SIZE_MASK);
|
||||||
region_attr |= AUX_MPU_RDP_REGION_SIZE(bits);
|
region_attr |= AUX_MPU_RDP_REGION_SIZE(bits);
|
||||||
region_addr |= AUX_MPU_RDB_VALID_MASK;
|
region_addr |= AUX_MPU_RDB_VALID_MASK;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue