Whamcloud - gitweb
LU-16980 build: fix gcc-12 [-Werror=use-after-free] error 19/51819/2
authorJian Yu <yujian@whamcloud.com>
Mon, 31 Jul 2023 17:24:02 +0000 (10:24 -0700)
committerOleg Drokin <green@whamcloud.com>
Mon, 7 Aug 2023 03:51:06 +0000 (03:51 +0000)
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);
      |                      ^~~~~~~~~~~~~~~~~~~

Change-Id: Ibe783ab0d13e2ecde1736946323932ab5db53740
Signed-off-by: Jian Yu <yujian@whamcloud.com>
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/51819
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Timothy Day <timday@amazon.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/tests/test_brw.c
lustre/utils/obd.c

index a99c7a6..a15cbc1 100644 (file)
@@ -113,7 +113,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;
index b7c808a..64a43de 100644 (file)
@@ -5121,7 +5121,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;