diff options
author | Thomas Weißschuh <linux@weissschuh.net> | 2025-04-19 12:46:22 +0200 |
---|---|---|
committer | Thomas Weißschuh <linux@weissschuh.net> | 2025-04-19 14:18:05 +0200 |
commit | 4d231a7df1a85c7572b67a4666cb73adb977fbf6 (patch) | |
tree | bd051f1a0a9e000ef7b86cc424e400fa8f6c5c1e /tools/include/nolibc | |
parent | 0e75768ba24d669dbf76530e21fd51cfe2fbd2a9 (diff) |
tools/nolibc: fix integer overflow in i{64,}toa_r() and
In twos complement the most negative number can not be negated.
Fixes: b1c21e7d99cd ("tools/nolibc/stdlib: add i64toa() and u64toa()")
Fixes: 66c397c4d2e1 ("tools/nolibc/stdlib: replace the ltoa() function with more efficient ones")
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
Acked-by: Willy Tarreau <w@1wt.eu>
Link: https://lore.kernel.org/r/20250419-nolibc-ubsan-v2-5-060b8a016917@weissschuh.net
Diffstat (limited to 'tools/include/nolibc')
-rw-r--r-- | tools/include/nolibc/stdlib.h | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/tools/include/nolibc/stdlib.h b/tools/include/nolibc/stdlib.h index 86ad378ab1ea..32b3038002c1 100644 --- a/tools/include/nolibc/stdlib.h +++ b/tools/include/nolibc/stdlib.h @@ -275,7 +275,7 @@ int itoa_r(long in, char *buffer) int len = 0; if (in < 0) { - in = -in; + in = -(unsigned long)in; *(ptr++) = '-'; len++; } @@ -411,7 +411,7 @@ int i64toa_r(int64_t in, char *buffer) int len = 0; if (in < 0) { - in = -in; + in = -(uint64_t)in; *(ptr++) = '-'; len++; } |