tcp: call tcp_rate_skb_sent() when retransmit with unaligned skb->data
Subsystems (3)
PATCH 1/1 tcp: call tcp_rate_skb_sent() when retransmit with unaligned skb->data
Current implementation calls tcp_rate_skb_sent() when tcp_transmit_skb() is called when it clones skb only. Not calling tcp_rate_skb_sent() is OK for all such code paths except from __tcp_retransmit_skb() which happens when skb->data address is not aligned. This may rarely happen e.g. when small amount of data is sent initially and the receiver partially acks odd number of bytes for some reason, possibly malicious.
--- net/ipv4/tcp_output.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
net/ipv4/tcp_output.c +3 -1
@@ -2843,8 +2843,10 @@ int __tcp_retransmit_skb(struct sock *sk, struct sk_buff *skb, int segs) nskb =__pskb_copy (skb,MAX_TCP_HEADER ,GFP_ATOMIC ); err = nskb ?tcp_transmit_skb (sk, nskb,0 ,GFP_ATOMIC ) : -ENOBUFS ; -if (!err) +if (!err) { skb->skb_mstamp = tp->tcp_mstamp; +tcp_rate_skb_sent (sk, skb); + } }else { err =tcp_transmit_skb (sk, skb,1 ,GFP_ATOMIC ); }
Signature · 1 line
2.15.0.rc0.271.g36b669edcc-goog
David Miller
maintainerFrom: Yousuk Seung <[email protected]>
Date: Tue, 24 Oct 2017 16:44:42 -0700
Quoted 11 lines
Current implementation calls
tcp_rate_skb_sent()whentcp_transmit_skb()is called when it clones skb only. Not callingtcp_rate_skb_sent()is OK for all such code paths except from__tcp_retransmit_skb()which happens whenskb->dataaddress is not aligned. This may rarely happen e.g. when small amount of data is sent initially and the receiver partially acks odd number of bytes for some reason, possibly malicious.Signed-off-by Yousuk Seung <[email protected]>Signed-off-by Neal Cardwell <[email protected]>Signed-off-by Soheil Hassas Yeganeh <[email protected]>Acked-by Eric Dumazet <[email protected]>
This doesn't apply to any of m trees.