Commit 80a80f51 authored by Stefano Brivio's avatar Stefano Brivio Committed by Greg Kroah-Hartman

skbuff: Unconditionally copy pfmemalloc in __skb_clone()

[ Upstream commit e78bfb07 ]

Commit 8b700862 ("net: Don't copy pfmemalloc flag in
__copy_skb_header()") introduced a different handling for the
pfmemalloc flag in copy and clone paths.

In __skb_clone(), now, the flag is set only if it was set in the
original skb, but not cleared if it wasn't. This is wrong and
might lead to socket buffers being flagged with pfmemalloc even
if the skb data wasn't allocated from pfmemalloc reserves. Copy
the flag instead of ORing it.
Reported-by: default avatarSabrina Dubroca <sd@queasysnail.net>
Fixes: 8b700862 ("net: Don't copy pfmemalloc flag in __copy_skb_header()")
Signed-off-by: default avatarStefano Brivio <sbrivio@redhat.com>
Tested-by: default avatarSabrina Dubroca <sd@queasysnail.net>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent d629be85
...@@ -828,8 +828,7 @@ static struct sk_buff *__skb_clone(struct sk_buff *n, struct sk_buff *skb) ...@@ -828,8 +828,7 @@ static struct sk_buff *__skb_clone(struct sk_buff *n, struct sk_buff *skb)
n->cloned = 1; n->cloned = 1;
n->nohdr = 0; n->nohdr = 0;
n->peeked = 0; n->peeked = 0;
if (skb->pfmemalloc) C(pfmemalloc);
n->pfmemalloc = 1;
n->destructor = NULL; n->destructor = NULL;
C(tail); C(tail);
C(end); C(end);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment