From fbcb200628981f0cf01114c2016d2ebfbe575b28 Mon Sep 17 00:00:00 2001 From: Jian Yu Date: Mon, 31 Jul 2023 13:20:21 -0700 Subject: [PATCH] LU-16980 build: fix gcc-12 [-Werror=use-after-free] error This patch fixes the following [-Werror=use-after-free] and [-Werror=stringop-overflow=] errors detected by gcc 12: libcfs/include/libcfs/util/list.h:481:42: error: pointer 'tmp' used after 'free' [-Werror=use-after-free] 481 | pos = list_entry(pos->member.next, typeof(*pos), member), \ | ^ libcfs/include/libcfs/util/list.h:239:28: note: in definition of macro 'list_entry' 239 | ((type *)((char *)(ptr)-(char *)(&((type *)0)->member))) | ^~~ obd.c:5118:9: note: in expansion of macro 'list_for_each_entry' 5118 | list_for_each_entry(tmp, head, lpn_list) { | ^~~~~~~~~~~~~~~~~~~ obd.c:5124:17: note: call to 'free' here 5124 | free(tmp); | ^~~~~~~~~ test_brw.c: In function 'main': test_brw.c:227:22: error: 'write' specified size between 9223372036854775808 and 18446744073709551615 exceeds maximum object size 9223372036854775807 [-Werror=stringop-overflow=] 227 | rc = write(fd, buf, len); | ^~~~~~~~~~~~~~~~~~~ Lustre-change: https://review.whamcloud.com/51819 Lustre-commit: TBD (from 8fa48300347ac3c7dffb361d1686c434127fe3e1) Change-Id: Ibe783ab0d13e2ecde1736946323932ab5db53740 Signed-off-by: Jian Yu Reviewed-on: https://review.whamcloud.com/c/ex/lustre-release/+/51825 Tested-by: jenkins Tested-by: Maloo Reviewed-by: Andreas Dilger --- lustre/tests/test_brw.c | 2 +- lustre/utils/obd.c | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/lustre/tests/test_brw.c b/lustre/tests/test_brw.c index 855ee8e..c5d3395 100644 --- a/lustre/tests/test_brw.c +++ b/lustre/tests/test_brw.c @@ -114,7 +114,7 @@ int main(int argc, char **argv) int fd; char *buf; long long count, last; - long pg_vec, len; + size_t pg_vec, len; uint64_t objid, offset; struct stat st; int flags = 0; diff --git a/lustre/utils/obd.c b/lustre/utils/obd.c index 98eb872..6f69bce 100644 --- a/lustre/utils/obd.c +++ b/lustre/utils/obd.c @@ -5409,7 +5409,6 @@ int llog_poollist(char *fsname, char *poolname) else printf("%s.%s\n", fsname, tmp->lpn_name); list_del(&tmp->lpn_list); - free(tmp); } return rc; -- 1.8.3.1