All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] hw/intc/hex-l2vic: avoid shift into sign bit
@ 2026-10-23  8:46 Peter Maydell
  2026-10-23 10:22 ` Tommaso Califano
  2026-10-23 13:32 ` Brian Cain
  0 siblings, 2 replies; 3+ messages in thread
From: Peter Maydell @ 2026-10-23  8:46 UTC (permalink / raw)
  To: qemu-devel; +Cc: Brian Cain, Pierrick Bouvier

In fastl2vic_write() we do:
   val = 1 << (irq % 32);

Because '1' is a signed integer, this can shift into the sign
bit of 'int'; the cast to uint64_t to assign to 'val' then
results in all the high bits being set. This happens to cause
no visible problems because l2vic_write never looks at those
bits, but it's obviously not intended. Use 1ULL so that we
do the shift as 64 bits unsigned.

Resolves: Coverity CID 1685261
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
 hw/intc/hex-l2vic.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/hw/intc/hex-l2vic.c b/hw/intc/hex-l2vic.c
index 736f1be3b1d..89b44200928 100644
--- a/hw/intc/hex-l2vic.c
+++ b/hw/intc/hex-l2vic.c
@@ -381,7 +381,7 @@ static void fastl2vic_write(void *opaque, hwaddr offset, uint64_t val,
         uint32_t cmd = (val >> 16) & 0x3;
         uint32_t irq = val & 0x3ff;
         uint32_t slice = (irq / 32) * 4;
-        val = 1 << (irq % 32);
+        val = 1ULL << (irq % 32);
 
         if (cmd == FASTL2VIC_ENABLE) {
             l2vic_write(opaque, L2VIC_INT_ENABLE_SETn + slice, val, size);
-- 
2.43.0



^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2026-10-23 13:33 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-23  8:46 [PATCH] hw/intc/hex-l2vic: avoid shift into sign bit Peter Maydell
2026-10-23 10:22 ` Tommaso Califano
2026-10-23 13:32 ` Brian Cain

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.