mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-09 23:00:21 +00:00
netlink: Avoid netlink mmap alloc if msg size exceeds frame size
An insufficent ring frame size configuration can lead to an unnecessary skb allocation for every Netlink message. Check frame size before taking the queue lock and allocating the skb and re-check with lock to be safe. Signed-off-by: Thomas Graf <tgraf@suug.ch> Reviewed-by: Daniel Borkmann <dborkman@redhat.com> Signed-off-by: Jesse Gross <jesse@nicira.com>
This commit is contained in:
parent
bb9b18fb55
commit
aae9f0e22c
@ -1769,6 +1769,9 @@ struct sk_buff *netlink_alloc_skb(struct sock *ssk, unsigned int size,
|
||||
if (ring->pg_vec == NULL)
|
||||
goto out_put;
|
||||
|
||||
if (ring->frame_size - NL_MMAP_HDRLEN < size)
|
||||
goto out_put;
|
||||
|
||||
skb = alloc_skb_head(gfp_mask);
|
||||
if (skb == NULL)
|
||||
goto err1;
|
||||
@ -1778,6 +1781,7 @@ struct sk_buff *netlink_alloc_skb(struct sock *ssk, unsigned int size,
|
||||
if (ring->pg_vec == NULL)
|
||||
goto out_free;
|
||||
|
||||
/* check again under lock */
|
||||
maxlen = ring->frame_size - NL_MMAP_HDRLEN;
|
||||
if (maxlen < size)
|
||||
goto out_free;
|
||||
|
Loading…
x
Reference in New Issue
Block a user