[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
integer overflow in muli instruction
From: |
Bruno Haible |
Subject: |
integer overflow in muli instruction |
Date: |
Fri, 19 Feb 2021 18:22:58 +0100 |
User-agent: |
KMail/5.1.3 (Linux/4.4.0-201-generic; KDE/5.18.0; x86_64; ; ) |
On Ubuntu 16.04 (x86_64, with CC="gcc -ftrapv") I get 4 test suite failures.
One of these is
FAIL: /media/develdata/devel/build/poke-0.90/build-64/testsuite/../poke/poke
killed: 11472 exp34 0 0 CHILDKILLED SIGABRT SIGABRT
To reproduce it:
(poke) atoi ("deadbeef", 16)
In the debugger:
(poke) atoi ("deadbeef", 16)
Thread 1 "poke" received signal SIGABRT, Aborted.
0x00007ffff6e2c438 in __GI_raise (sig=sig@entry=6) at
../sysdeps/unix/sysv/linux/raise.c:54
54 ../sysdeps/unix/sysv/linux/raise.c: Datei oder Verzeichnis nicht
gefunden.
(gdb) up
#1 0x00007ffff6e2e03a in __GI_abort () at abort.c:89
89 abort.c: Datei oder Verzeichnis nicht gefunden.
(gdb) up
#2 0x00007ffff7ba43f2 in __mulvsi3 () from
/media/develdata/devel/inst-x86_64-64/lib/libpoke.so.0
(gdb) up
#3 0x00007ffff7b8ab28 in pvm_execute_or_initialize (jitter_initialize=56,
jitter_initial_program_point=0x7e5028,
jitter_original_state=0x632310) at ../../libpoke/pvm.jitter:2242
2242 PVM_BINOP (INT, INT, INT, *);
(gdb) list
2237 #
2238 # Stack: ( INT INT -- INT INT INT )
2239
2240 instruction muli ()
2241 code
2242 PVM_BINOP (INT, INT, INT, *);
2243 end
2244 end
2245
2246 # Instruction: muliu
So, apparently the atoi invocation ends up doing a 'muli' VM instruction,
and this instruction does a signed integer multiplication that overflows.
Since signed integer overflow is undefined behaviour in ISO C, 'gcc -ftrapv'
is right in aborting here.
I would suggest to use checked integer multiplication, for example by using
the macro INT_MULTIPLY_OVERFLOW from intprops.h (Gnulib module 'intprops').
Bruno
- integer overflow in muli instruction,
Bruno Haible <=
- Re: integer overflow in muli instruction, Jose E. Marchesi, 2021/02/20
- Re: integer overflow in muli instruction, Bruno Haible, 2021/02/20
- Re: integer overflow in muli instruction, Jose E. Marchesi, 2021/02/23
- Re: integer overflow in muli instruction, Jose E. Marchesi, 2021/02/23
- Re: integer overflow in muli instruction, Bruno Haible, 2021/02/23
- Re: integer overflow in muli instruction, Bruno Haible, 2021/02/23
- Re: integer overflow in muli instruction, Jose E. Marchesi, 2021/02/23