[Devel] [PATCH rh7 2/2] net/sock: teach sock_kmalloc() to call kvmalloc() when possible

Andrey Ryabinin aryabinin at virtuozzo.com
Wed Mar 21 20:07:55 MSK 2018



On 03/21/2018 04:10 PM, Konstantin Khorenko wrote:
> On 03/21/2018 03:59 PM, Andrey Ryabinin wrote:
>>
>>
>> On 03/21/2018 02:11 PM, Konstantin Khorenko wrote:
>>> 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.
>>>
>>
>> seems fishy. What we are going to do when we GFP_ATOMIC will ask for 3 order?
> 
> In this particular case (from sk_attach_filter()) sock_kmalloc() is called with GFP_KERNEL,
> so we cover the problem case we've got.
> 
> When we face high-order kmalloc with GFP_ATOMIC, well, we'll find a way.

Ughh, but ok.

Reviewed-by: Andrey Ryabinin <aryabinin at virtuozzo.com>



More information about the Devel mailing list