summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
47dc43d)
GCC 11 warns about string and memory operations on fixed address:
In function ‘strlen’,
inlined from ‘changelog_rec_sname’ at include/uapi/linux/lustre/lustre_user.h:1981:19,
inlined from ‘mdd_changelog_rec_ext_rename’ at lustre/mdd/mdd_dir.c:932:2,
inlined from ‘mdd_changelog_ns_store’ at lustre/mdd/mdd_dir.c:1061:3:
include/linux/fortify-string.h:25:33: error: ‘__builtin_strlen’
reading 1 or more bytes from a region of size 0 [-Werror=stringop-overread]
25 | #define __underlying_strlen __builtin_strlen
The reason is that we are looking for an address right after the end
of the chanelog record header which gcc thinks is an overrun. Rework
the code to allow us to index the memory right after the changelog
record header.
Also fix a long hidden bug in the lustre snmp code.
Change-Id: I13479b9074a392330d39f01656b26f9e9a91a8ec
Signed-off-by: James Simmons <jsimmons@infradead.org>
Reviewed-on: https://review.whamcloud.com/46319
Tested-by: jenkins <devops@whamcloud.com>
Reviewed-by: Alexey Lyashkov <alexey.lyashkov@hpe.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Jian Yu <yujian@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
+#ifndef __KERNEL__
+# define __USE_ISOC99 1
+# include <stdbool.h>
+# include <stdio.h> /* snprintf() */
+# include <sys/stat.h>
+
+# define __USE_GNU 1
+# define __USE_XOPEN2K8 1
+# define FILEID_LUSTRE 0x97 /* for name_to_handle_at() (and llapi_fd2fid()) */
+#endif /* !__KERNEL__ */
#include <linux/fs.h>
#include <linux/limits.h>
#include <linux/fs.h>
#include <linux/limits.h>
#include <linux/lustre/lustre_fiemap.h>
#include <linux/lustre/lustre_ver.h>
#include <linux/lustre/lustre_fiemap.h>
#include <linux/lustre/lustre_ver.h>
-#ifndef __KERNEL__
-# define __USE_ISOC99 1
-# include <stdbool.h>
-# include <stdio.h> /* snprintf() */
-# include <sys/stat.h>
-# define FILEID_LUSTRE 0x97 /* for name_to_handle_at() (and llapi_fd2fid()) */
-#endif /* !__KERNEL__ */
-
#if defined(__cplusplus)
extern "C" {
#endif
#if defined(__cplusplus)
extern "C" {
#endif
(enum changelog_rec_extra_flags)(cref & CLFE_SUPPORTED));
}
(enum changelog_rec_extra_flags)(cref & CLFE_SUPPORTED));
}
-static inline __kernel_size_t changelog_rec_snamelen(const struct changelog_rec *rec)
+static inline char *changelog_rec_sname(const struct changelog_rec *rec)
- return rec->cr_namelen - strlen(changelog_rec_name(rec)) - 1;
+ return strchrnul(changelog_rec_name(rec), '\0') + 1;
-static inline char *changelog_rec_sname(const struct changelog_rec *rec)
+static inline __kernel_size_t changelog_rec_snamelen(const struct changelog_rec *rec)
- char *cr_name = changelog_rec_name(rec);
-
- return cr_name + strlen(cr_name) + 1;
+ return strlen(changelog_rec_sname(rec));
# Lustre MPI test Makefile
# Lustre MPI test Makefile
-AM_CFLAGS := -fPIC -D_LARGEFILE64_SOURCE=1 -D_FILE_OFFSET_BITS=64
+AM_CFLAGS := -fPIC -D_GNU_SOURCE -D_LARGEFILE64_SOURCE=1 -D_FILE_OFFSET_BITS=64
/* deregister ourselves with the agent */
unregister_mib(clusterFileSystems_variables_oid,
sizeof(clusterFileSystems_variables_oid)/
/* deregister ourselves with the agent */
unregister_mib(clusterFileSystems_variables_oid,
sizeof(clusterFileSystems_variables_oid)/
- sizeof(clusterFileSystems_variables_oid));
+ sizeof(clusterFileSystems_variables_oid[0]));
terminate_trap_handler();
terminate_trap_handler();