From f6c29f62283b05ca12bc032870b5e69bd50d82ba Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Wed, 15 Feb 2023 18:17:33 +0100 Subject: Fix accessing bit 31 Shifting (signed) 1 to left 31 positions is undefined behavior. So make this an unsigned so it becomes defined behavior. --- defpager/backing.c | 4 ++-- mach-defpager/default_pager.c | 12 ++++++------ procfs/process.c | 6 +++--- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/defpager/backing.c b/defpager/backing.c index aa9810c0..56fe6551 100644 --- a/defpager/backing.c +++ b/defpager/backing.c @@ -96,7 +96,7 @@ allocate_backing_page () bit--; /* Mark it */ - *bmap_rotor |= 1 << bit; + *bmap_rotor |= 1U << bit; /* Return the correct offset */ pfn = (bmap_rotor - bmap) * 8 + bit; @@ -123,7 +123,7 @@ return_backing_pages (off_t *map, int maplen) b = bmap + pfn & ~7; bit = pfn & 7; - assert_backtrace ((*b & (1 << bit)) == 0); + assert_backtrace ((*b & (1U << bit)) == 0); *b |= 1 << bit; } pthread_mutex_unlock (&bmap_lock); diff --git a/mach-defpager/default_pager.c b/mach-defpager/default_pager.c index 78bcb279..02d1f1a9 100644 --- a/mach-defpager/default_pager.c +++ b/mach-defpager/default_pager.c @@ -268,13 +268,13 @@ new_partition (const char *name, struct file_direct *fdp, continue; /* There are some zero bits in this word. */ for (j = 0; j < 32; ++j) - if ((bm & (1 << j)) == 0) + if ((bm & (1U << j)) == 0) { unsigned int p = i*32 + j; if (p >= part->total_size) break; ++bad; - part->bitmap[p / NB_BM] |= 1 << (p % NB_BM); + part->bitmap[p / NB_BM] |= 1U << (p % NB_BM); } } part->free -= bad; @@ -371,7 +371,7 @@ new_partition (const char *name, struct file_direct *fdp, for (i = 0; i < hdr->nr_badpages; ++i) { const u_int32_t bad = hdr->badpages[i]; - part->bitmap[bad / NB_BM] |= 1 << (bad % NB_BM); + part->bitmap[bad / NB_BM] |= 1U << (bad % NB_BM); part->free--; } printf ("%uk swap-space", @@ -556,12 +556,12 @@ ddprintf ("pager_alloc_page(%d,%d)\n",pindex,lock_it); bm_entry_t b = *bm; for (bit = 0; bit < NB_BM; bit++) - if ((b & (1<free--; } @@ -598,7 +598,7 @@ ddprintf ("pager_dealloc_page(%d,%lx,%d)\n",pindex,page,lock_it); if (lock_it) pthread_mutex_lock(&part->p_lock); - part->bitmap[bm_e] &= ~(1<bitmap[bm_e] &= ~(1U<free++; if (lock_it) diff --git a/procfs/process.c b/procfs/process.c index f608bed6..a9ba51ab 100644 --- a/procfs/process.c +++ b/procfs/process.c @@ -47,8 +47,8 @@ static char state_char (struct proc_stat *ps) { int i; - for (i = 0; (1 << i) & (PSTAT_STATE_P_STATES | PSTAT_STATE_T_STATES); i++) - if (proc_stat_state (ps) & (1 << i)) + for (i = 0; (1U << i) & (PSTAT_STATE_P_STATES | PSTAT_STATE_T_STATES); i++) + if (proc_stat_state (ps) & (1U << i)) return proc_stat_state_tags[i]; return '?'; @@ -69,7 +69,7 @@ static const char *state_string (struct proc_stat *ps) int i; for (i = 0; state_strings[i]; i++) - if (proc_stat_state (ps) & (1 << i)) + if (proc_stat_state (ps) & (1U << i)) return state_strings[i]; return "? (unknown)"; -- cgit v1.2.3