diff options
author | Kees Cook <keescook@chromium.org> | 2018-01-10 15:53:20 -0500 |
---|---|---|
committer | Kees Cook <keescook@chromium.org> | 2018-01-15 15:07:46 -0500 |
commit | 4229a470175be14e1d2648713be8a5e8e8fbea02 (patch) | |
tree | 9800d572b0046b2226f1b853f15c3055e304078e | |
parent | c75886862480bb243833e94292db9c44b8af9868 (diff) |
stddef.h: Introduce sizeof_field()
The size of fields within a structure is needed in a few places in the
kernel already, and will be needed for the usercopy whitelisting when
declaring whitelist regions within structures. This creates a dedicated
macro and redefines offsetofend() to use it.
Existing usage, ignoring the 1200+ lustre assert uses:
$ git grep -E 'sizeof\(\(\((struct )?[a-zA-Z_]+ \*\)0\)->' | \
grep -v staging/lustre | wc -l
65
Signed-off-by: Kees Cook <keescook@chromium.org>
-rw-r--r-- | include/linux/stddef.h | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/include/linux/stddef.h b/include/linux/stddef.h index 2181719fd907..998a4ba28eba 100644 --- a/include/linux/stddef.h +++ b/include/linux/stddef.h | |||
@@ -20,12 +20,20 @@ enum { | |||
20 | #endif | 20 | #endif |
21 | 21 | ||
22 | /** | 22 | /** |
23 | * sizeof_field(TYPE, MEMBER) | ||
24 | * | ||
25 | * @TYPE: The structure containing the field of interest | ||
26 | * @MEMBER: The field to return the size of | ||
27 | */ | ||
28 | #define sizeof_field(TYPE, MEMBER) sizeof((((TYPE *)0)->MEMBER)) | ||
29 | |||
30 | /** | ||
23 | * offsetofend(TYPE, MEMBER) | 31 | * offsetofend(TYPE, MEMBER) |
24 | * | 32 | * |
25 | * @TYPE: The type of the structure | 33 | * @TYPE: The type of the structure |
26 | * @MEMBER: The member within the structure to get the end offset of | 34 | * @MEMBER: The member within the structure to get the end offset of |
27 | */ | 35 | */ |
28 | #define offsetofend(TYPE, MEMBER) \ | 36 | #define offsetofend(TYPE, MEMBER) \ |
29 | (offsetof(TYPE, MEMBER) + sizeof(((TYPE *)0)->MEMBER)) | 37 | (offsetof(TYPE, MEMBER) + sizeof_field(TYPE, MEMBER)) |
30 | 38 | ||
31 | #endif | 39 | #endif |