svn commit: r327676 - head/sys/compat/linuxkpi/common/include/linux
Rodney W. Grimes
freebsd at pdx.rh.CN85.dnsmgr.net
Sun Jan 7 18:02:36 UTC 2018
[ Charset UTF-8 unsupported, converting... ]
> Author: kp
> Date: Sun Jan 7 13:39:12 2018
> New Revision: 327676
> URL: https://svnweb.freebsd.org/changeset/base/327676
>
> Log:
> linuxkpi: Implement kcalloc() based on mallocarray()
>
> This means we now get integer overflow protection, which Linux code
> might expect as it is also provided by kcalloc() in Linux.
>
> Modified:
> head/sys/compat/linuxkpi/common/include/linux/slab.h
>
> Modified: head/sys/compat/linuxkpi/common/include/linux/slab.h
> ==============================================================================
> --- head/sys/compat/linuxkpi/common/include/linux/slab.h Sun Jan 7 13:35:15 2018 (r327675)
> +++ head/sys/compat/linuxkpi/common/include/linux/slab.h Sun Jan 7 13:39:12 2018 (r327676)
> @@ -46,7 +46,6 @@ MALLOC_DECLARE(M_KMALLOC);
> #define kzalloc(size, flags) kmalloc(size, (flags) | __GFP_ZERO)
> #define kzalloc_node(size, flags, node) kmalloc(size, (flags) | __GFP_ZERO)
> #define kfree_const(ptr) kfree(ptr)
> -#define kcalloc(n, size, flags) kmalloc((n) * (size), (flags) | __GFP_ZERO)
Would not:
#define kcalloc(n, size, flags) mallocarray(mallocarray((n), (size), M_KMALLOC, linux_check_m_flags((flags | __GFP_ZERO))
work just fine, saving a call and stack use of about framesize + 32 bytes?
> #define vzalloc(size) __vmalloc(size, GFP_KERNEL | __GFP_NOWARN | __GFP_ZERO, 0)
> #define vfree(arg) kfree(arg)
> #define kvfree(arg) kfree(arg)
> @@ -98,6 +97,13 @@ static inline void *
> kmalloc(size_t size, gfp_t flags)
> {
> return (malloc(size, M_KMALLOC, linux_check_m_flags(flags)));
> +}
> +
> +static inline void *
> +kcalloc(size_t n, size_t size, gfp_t flags)
> +{
> + flags |= __GFP_ZERO;
> + return (mallocarray(n, size, M_KMALLOC, linux_check_m_flags(flags)));
> }
>
> static inline void *
>
>
--
Rod Grimes rgrimes at freebsd.org
More information about the svn-src-head
mailing list