| From foo@baz Mon Jul 23 08:24:46 CEST 2018 |
| From: Stefano Brivio <sbrivio@redhat.com> |
| Date: Fri, 13 Jul 2018 13:21:07 +0200 |
| Subject: skbuff: Unconditionally copy pfmemalloc in __skb_clone() |
| |
| From: Stefano Brivio <sbrivio@redhat.com> |
| |
| [ 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> |
| --- |
| net/core/skbuff.c | 3 +-- |
| 1 file changed, 1 insertion(+), 2 deletions(-) |
| |
| --- a/net/core/skbuff.c |
| +++ b/net/core/skbuff.c |
| @@ -904,8 +904,7 @@ static struct sk_buff *__skb_clone(struc |
| n->cloned = 1; |
| n->nohdr = 0; |
| n->peeked = 0; |
| - if (skb->pfmemalloc) |
| - n->pfmemalloc = 1; |
| + C(pfmemalloc); |
| n->destructor = NULL; |
| C(tail); |
| C(end); |