Linux commit v5.17-rc3-1-gf68f2ff91512
fortify: Detect struct member overflows in memcpy() at compile-time
memcpy and memset of collections of struct members
will trigger:
error: call to '__write_overflow_field' declared with attribute
warning: detected write beyond size of field (1st parameter);
maybe use struct_group()?
[-Werror] __write_overflow_field(p_size_field, size);
Lustre-change: https://review.whamcloud.com/48364
Lustre-commit:
a3a51806ef361f55421a1bc07f64c78730ae50d5
Test-Parameters: trivial
HPE-bug-id: LUS-11194
Signed-off-by: Shaun Tancheff <shaun.tancheff@hpe.com>
Change-Id: Iacd1ab03d1b90ce62b5d7b65e1cd518a5f7981f2
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/53264
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
int kstrtobool_from_user(const char __user *s, size_t count, bool *res);
#endif
+
+#ifndef memset_startat
+/** from linux 5.19 include/linux/string.h: */
+#define memset_startat(obj, v, member) \
+({ \
+ u8 *__ptr = (u8 *)(obj); \
+ typeof(v) __val = (v); \
+ memset(__ptr + offsetof(typeof(*(obj)), member), __val, \
+ sizeof(*(obj)) - offsetof(typeof(*(obj)), member)); \
+})
+#endif /* memset_startat() */
+
#endif
#include <linux/spinlock.h>
#include <linux/wait.h>
#include <linux/pagevec.h>
+#include <libcfs/linux/linux-misc.h>
#include <lustre_dlm.h>
struct obd_info;
void cl_io_print(const struct lu_env *env, void *cookie,
lu_printer_t printer, const struct cl_io *io);
-#define CL_IO_SLICE_CLEAN(foo_io, base) \
-do { \
- typeof(foo_io) __foo_io = (foo_io); \
- \
- memset(&__foo_io->base, 0, \
- sizeof(*__foo_io) - offsetof(typeof(*__foo_io), base)); \
-} while (0)
+#define CL_IO_SLICE_CLEAN(obj, base) memset_startat(obj, 0, base)
/** @} cl_io */
{
CLASSERT(sizeof(*loa) == LMA_OLD_SIZE);
- memset(&loa->loa_parent_fid, 0,
- sizeof(*loa) - offsetof(typeof(*loa), loa_parent_fid));
+ memset_startat(loa, 0, loa_parent_fid);
lustre_lma_init(&loa->loa_lma, fid, compat, incompat);
}
EXPORT_SYMBOL(lustre_loa_init);