Re: [PATCH] disas: sparc: Fix integer overflow in compare_opcodes() for loop
Laurent Vivier <[email protected]> Thu, 28 May 2026 09:38:04 +0200
| Newsgroups | org.nongnu.qemu-trivial,org.nongnu.qemu-devel |
|---|---|
| Message-ID | <[email protected]> |
Le 27/05/2026 à 19:57, Christian Barry a écrit : > From: Christian Barry <[email protected]> > > Replaced left-shift of a literal 1 by i inside of two for loops in compare_opcodes() with a call to BIT(i). This makes it so 1 is interpreted as an unsigned long int, preventing overflows. > > Resolves: https://gitlab.com/qemu-project/qemu/-/work_items/2618 > > Signed-off-by: Christian Barry <[email protected]> > Co-developed-by: Eduardo Augusto Cavalcanti <[email protected]> > Signed-off-by: Eduardo Augusto Cavalcanti <[email protected]> Reviewed-by: Laurent Vivier <[email protected]> > --- > disas/sparc.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/disas/sparc.c b/disas/sparc.c > index 5689533ce1..6fc057e3a2 100644 > --- a/disas/sparc.c > +++ b/disas/sparc.c > @@ -27,6 +27,7 @@ > see <http://www.gnu.org/licenses/>. */ > > #include "qemu/osdep.h" > +#include "qemu/bitops.h" > #include "disas/dis-asm.h" > > /* The SPARC opcode table (and other related data) is defined in > @@ -2515,7 +2516,7 @@ compare_opcodes (const void * a, const void * b) > another, it is important to order the opcodes in the right order. */ > for (i = 0; i < 32; ++i) > { > - unsigned long int x = 1 << i; > + unsigned long int x = BIT(i); > int x0 = (match0 & x) != 0; > int x1 = (match1 & x) != 0; > > @@ -2525,7 +2526,7 @@ compare_opcodes (const void * a, const void * b) > > for (i = 0; i < 32; ++i) > { > - unsigned long int x = 1 << i; > + unsigned long int x = BIT(i); > int x0 = (lose0 & x) != 0; > int x1 = (lose1 & x) != 0; >