summaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorStefano Brivio <sbrivio@redhat.com>2018-07-13 13:21:07 +0200
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2018-07-25 11:25:09 +0200
commit829f4fd66354560fa66c83a3d199453036bef7ed (patch)
treeb74e139a956a8373e2899fe609bb9af444717c13 /net
parent6403b54a4f7e097842d7814fe20124b32e5d3e1d (diff)
downloadlinux-stable-829f4fd66354560fa66c83a3d199453036bef7ed.tar.gz
linux-stable-829f4fd66354560fa66c83a3d199453036bef7ed.tar.bz2
linux-stable-829f4fd66354560fa66c83a3d199453036bef7ed.zip
skbuff: Unconditionally copy pfmemalloc in __skb_clone()
[ Upstream commit e78bfb0751d4e312699106ba7efbed2bab1a53ca ] Commit 8b7008620b84 ("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: Sabrina Dubroca <sd@queasysnail.net> Fixes: 8b7008620b84 ("net: Don't copy pfmemalloc flag in __copy_skb_header()") Signed-off-by: Stefano Brivio <sbrivio@redhat.com> Tested-by: Sabrina Dubroca <sd@queasysnail.net> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'net')
-rw-r--r--net/core/skbuff.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/net/core/skbuff.c b/net/core/skbuff.c
index 159518a80a46..23041b5c0b27 100644
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
@@ -858,8 +858,7 @@ static struct sk_buff *__skb_clone(struct sk_buff *n, struct sk_buff *skb)
n->cloned = 1;
n->nohdr = 0;
n->peeked = 0;
- if (skb->pfmemalloc)
- n->pfmemalloc = 1;
+ C(pfmemalloc);
n->destructor = NULL;
C(tail);
C(end);