Patch "bpf, sockmap: Skb verdict SK_PASS to self already checked rmem limits" has been added to the 5.9-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    bpf, sockmap: Skb verdict SK_PASS to self already checked rmem limits

to the 5.9-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     bpf-sockmap-skb-verdict-sk_pass-to-self-already-chec.patch
and it can be found in the queue-5.9 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 89fe6e35827c7d691523d81cefe853799000166b
Author: John Fastabend <john.fastabend@xxxxxxxxx>
Date:   Fri Oct 9 11:36:16 2020 -0700

    bpf, sockmap: Skb verdict SK_PASS to self already checked rmem limits
    
    [ Upstream commit cfea28f890cf292d5fe90680db64b68086ef25ba ]
    
    For sk_skb case where skb_verdict program returns SK_PASS to continue to
    pass packet up the stack, the memory limits were already checked before
    enqueuing in skb_queue_tail from TCP side. So, lets remove the extra checks
    here. The theory is if the TCP stack believes we have memory to receive
    the packet then lets trust the stack and not double check the limits.
    
    In fact the accounting here can cause a drop if sk_rmem_alloc has increased
    after the stack accepted this packet, but before the duplicate check here.
    And worse if this happens because TCP stack already believes the data has
    been received there is no retransmit.
    
    Fixes: 51199405f9672 ("bpf: skb_verdict, support SK_PASS on RX BPF path")
    Signed-off-by: John Fastabend <john.fastabend@xxxxxxxxx>
    Signed-off-by: Alexei Starovoitov <ast@xxxxxxxxxx>
    Link: https://lore.kernel.org/bpf/160226857664.5692.668205469388498375.stgit@john-Precision-5820-Tower
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/net/core/skmsg.c b/net/core/skmsg.c
index f41b06e60ad90..aa78784292a7e 100644
--- a/net/core/skmsg.c
+++ b/net/core/skmsg.c
@@ -762,6 +762,7 @@ EXPORT_SYMBOL_GPL(sk_psock_tls_strp_read);
 static void sk_psock_verdict_apply(struct sk_psock *psock,
 				   struct sk_buff *skb, int verdict)
 {
+	struct tcp_skb_cb *tcp;
 	struct sock *sk_other;
 
 	switch (verdict) {
@@ -771,16 +772,12 @@ static void sk_psock_verdict_apply(struct sk_psock *psock,
 		    !sk_psock_test_state(psock, SK_PSOCK_TX_ENABLED)) {
 			goto out_free;
 		}
-		if (atomic_read(&sk_other->sk_rmem_alloc) <=
-		    sk_other->sk_rcvbuf) {
-			struct tcp_skb_cb *tcp = TCP_SKB_CB(skb);
 
-			tcp->bpf.flags |= BPF_F_INGRESS;
-			skb_queue_tail(&psock->ingress_skb, skb);
-			schedule_work(&psock->work);
-			break;
-		}
-		goto out_free;
+		tcp = TCP_SKB_CB(skb);
+		tcp->bpf.flags |= BPF_F_INGRESS;
+		skb_queue_tail(&psock->ingress_skb, skb);
+		schedule_work(&psock->work);
+		break;
 	case __SK_REDIRECT:
 		sk_psock_skb_redirect(skb);
 		break;



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux