lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Tue, 18 Oct 2022 01:22:41 -0700 From: Kees Cook <keescook@...omium.org> To: linux-hardening@...r.kernel.org Cc: Kees Cook <keescook@...omium.org>, Guenter Roeck <linux@...ck-us.net>, Andy Shevchenko <andriy.shevchenko@...el.com>, Paolo Abeni <pabeni@...hat.com>, Geert Uytterhoeven <geert@...ux-m68k.org>, linux-kernel@...r.kernel.org Subject: [PATCH] string: Add __alloc_size hint to kmemdup() Add __alloc_size() hint to kmemdup() so the compiler can reason about the length of the returned buffer. Cc: Guenter Roeck <linux@...ck-us.net> Cc: Andy Shevchenko <andriy.shevchenko@...el.com> Cc: Paolo Abeni <pabeni@...hat.com> Cc: Geert Uytterhoeven <geert@...ux-m68k.org> Signed-off-by: Kees Cook <keescook@...omium.org> --- include/linux/fortify-string.h | 3 ++- include/linux/string.h | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/include/linux/fortify-string.h b/include/linux/fortify-string.h index b166364ce3e0..aa1a50009632 100644 --- a/include/linux/fortify-string.h +++ b/include/linux/fortify-string.h @@ -661,7 +661,8 @@ __FORTIFY_INLINE void *memchr_inv(const void * const POS0 p, int c, size_t size) return __real_memchr_inv(p, c, size); } -extern void *__real_kmemdup(const void *src, size_t len, gfp_t gfp) __RENAME(kmemdup); +extern void *__real_kmemdup(const void *src, size_t len, gfp_t gfp) __RENAME(kmemdup) + __alloc_size(2); __FORTIFY_INLINE void *kmemdup(const void * const POS0 p, size_t size, gfp_t gfp) { size_t p_size = __struct_size(p); diff --git a/include/linux/string.h b/include/linux/string.h index cf7607b32102..af1d69e5610e 100644 --- a/include/linux/string.h +++ b/include/linux/string.h @@ -176,7 +176,7 @@ extern void kfree_const(const void *x); extern char *kstrdup(const char *s, gfp_t gfp) __malloc; extern const char *kstrdup_const(const char *s, gfp_t gfp); extern char *kstrndup(const char *s, size_t len, gfp_t gfp); -extern void *kmemdup(const void *src, size_t len, gfp_t gfp); +extern void *kmemdup(const void *src, size_t len, gfp_t gfp) __alloc_size(2); extern char *kmemdup_nul(const char *s, size_t len, gfp_t gfp); extern char **argv_split(gfp_t gfp, const char *str, int *argcp); -- 2.34.1
Powered by blists - more mailing lists