[CRIU] [PATCH] sfds: Fix UB in choose_service_fd_base due to calling __builtin_clz(0)
Kirill Tkhai
ktkhai at virtuozzo.com
Tue Apr 10 13:35:04 MSK 2018
From: Radoslaw Burny <rburny at google.com>
__builtin_clz(0) leads to undefined behaviour:
https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html
Set nr = 1 directly to avoid this.
Link: https://github.com/checkpoint-restore/criu/issues/470
Signed-off-by: Radoslaw Burny <rburny at google.com>
Acked-by: Kirill Tkhai <ktkhai at virtuozzo.com>
---
criu/util.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/criu/util.c b/criu/util.c
index b19bf5175..46d67eca6 100644
--- a/criu/util.c
+++ b/criu/util.c
@@ -589,7 +589,10 @@ static int choose_service_fd_base(struct pstree_item *me)
real_nr = nr;
nr /= (1024 / sizeof(void *));
- nr = 1 << (32 - __builtin_clz(nr));
+ if (nr)
+ nr = 1 << (32 - __builtin_clz(nr));
+ else
+ nr = 1;
nr *= (1024 / sizeof(void *));
if (nr > service_fd_rlim_cur) {
More information about the CRIU
mailing list