From: Konstantin Khorenko <[email protected]> sock_setsockopt() sk_attach_filter() sock_kmalloc()
Memory size to be allocated depends on the number of rules provided by userspace, but not more than net.core.optmem_max (20480 by default), which still allows to allocate 3rd order pages via kmalloc() => it's better to substitute it with kvmalloc(). But sock_kmalloc() can be called with GFP_ATOMIC from some places, so we cannot unconditionally call kvmalloc() instead of kmalloc(). Hopefully sk_attach_filter() calls sock_kmalloc() with GFP_KERNEL, so kvmalloc() can be used there. => use kvmalloc_check() which calls kvmalloc() if it's allowed by provided flags. https://jira.sw.ru/browse/PSBM-82593 Signed-off-by: Konstantin Khorenko <[email protected]> Ughh, but ok. Reviewed-by: Andrey Ryabinin <[email protected]> (cherry picked from commit 29b736c18d060941df7fc08dda6d07ddf386d0c1) VZ 8 rebase part https://jira.sw.ru/browse/PSBM-127798 Signed-off-by: Alexander Mikhalitsyn <[email protected]> --- net/core/sock.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/net/core/sock.c b/net/core/sock.c index 18b8908d200a..03ad9fbb2906 100644 --- a/net/core/sock.c +++ b/net/core/sock.c @@ -2107,7 +2107,7 @@ void *sock_kmalloc(struct sock *sk, int size, gfp_t priority) * might sleep. */ atomic_add(size, &sk->sk_omem_alloc); - mem = kmalloc(size, priority); + mem = kvmalloc_check(size, priority); if (mem) return mem; atomic_sub(size, &sk->sk_omem_alloc); @@ -2126,9 +2126,9 @@ static inline void __sock_kfree_s(struct sock *sk, void *mem, int size, if (WARN_ON_ONCE(!mem)) return; if (nullify) - kzfree(mem); - else - kfree(mem); + memset(mem, 0, size); + + kvfree(mem); atomic_sub(size, &sk->sk_omem_alloc); } -- 2.28.0 _______________________________________________ Devel mailing list [email protected] https://lists.openvz.org/mailman/listinfo/devel
