sctp: increase sk_wmem_alloc when head->truesize is increased
authorXin Long <lucien.xin@gmail.com>
Mon, 26 Nov 2018 06:52:44 +0000 (14:52 +0800)
committerDavid S. Miller <davem@davemloft.net>
Tue, 27 Nov 2018 23:42:31 +0000 (15:42 -0800)
I changed to count sk_wmem_alloc by skb truesize instead of 1 to
fix the sk_wmem_alloc leak caused by later truesize's change in
xfrm in Commit 02968ccf0125 ("sctp: count sk_wmem_alloc by skb
truesize in sctp_packet_transmit").

But I should have also increased sk_wmem_alloc when head->truesize
is increased in sctp_packet_gso_append() as xfrm does. Otherwise,
sctp gso packet will cause sk_wmem_alloc underflow.

Fixes: 02968ccf0125 ("sctp: count sk_wmem_alloc by skb truesize in sctp_packet_transmit")
Signed-off-by: Xin Long <lucien.xin@gmail.com>
Acked-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/sctp/output.c

index b0e74a3e77ec507c87a54ecc10dbce1c6a7b554b..025f48e14a91f19facf557acb27ee45c0dee46c8 100644 (file)
@@ -410,6 +410,7 @@ static void sctp_packet_gso_append(struct sk_buff *head, struct sk_buff *skb)
        head->truesize += skb->truesize;
        head->data_len += skb->len;
        head->len += skb->len;
+       refcount_add(skb->truesize, &head->sk->sk_wmem_alloc);
 
        __skb_header_release(skb);
 }