From patchwork Tue Oct 24 23:44:42 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yousuk Seung X-Patchwork-Id: 830070 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=google.com header.i=@google.com header.b="hy4fTSKc"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yM8yL5fDlz9sPm for ; Wed, 25 Oct 2017 10:44:58 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751725AbdJXXoz (ORCPT ); Tue, 24 Oct 2017 19:44:55 -0400 Received: from mail-io0-f194.google.com ([209.85.223.194]:43204 "EHLO mail-io0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751277AbdJXXoy (ORCPT ); Tue, 24 Oct 2017 19:44:54 -0400 Received: by mail-io0-f194.google.com with SMTP id 134so25718543ioo.0 for ; Tue, 24 Oct 2017 16:44:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=lf5+nBxCg5cBTRMYFGD0gx57cUxAk95g5/X2vuZqPNs=; b=hy4fTSKcylJBuLIo93p3lcVRJYDACaAmPHWNG5ycAC/lEh4IrBMWRiNEL+kKujbrLC uWSoBOpRkUL0K43nGPgtbWp3WfqoCKfuQ1Lc88vZ/qaWYmmKp5Nu2L8qR7f0OepwN7jj uKTBztWO1NOa7ov2D1lrZdG7S6NuuUJYGIPQe43Aw/9cdCAcOYTg9K93RRBUwH1cwqIP qCQLx9BigBCZfX9iy0c7T6DIwLm7Qrx/Oz+NwF3vwS3JJbsEmCCoMSfDZ0ueDb4XhBwM 9Vri2jSRnGL68u3hCDvGG0OQut/E5ZJxXndSbTu2Tt6NswEBuPiwS4QLez81RTxPV6rM 5e+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=lf5+nBxCg5cBTRMYFGD0gx57cUxAk95g5/X2vuZqPNs=; b=S3ZBIRDlL4efFEpHPyI3+BpupkE9hK0crLmLTvc0GPLcD6wvnE75A1H6qURWnurXP5 O+WLxs/DGuN7yvxMuimuJkPRL4Ki5umXjhSn4TMMU8yE2Et7RpT5boC2B01PGC6++gcN AvZvFzZ66/RtHwwsXVjwM9Wzdgu4tE1QraSnt34a2m6gHTlMlzO+yuH73nm/nEocuKU5 Np80oFdST0AaQIsr5+lN15v6MiZR+SJj3ZrBJEaPoDi5VMs2vX7fQ9R7AO+9mBsBz67n DRKgYt1hByKdpPzhJ5O8qcza+6ieAH3bWBPiRL37+FG9xKmHJEuNMfX8Xl7DB/fUDspy 6UFA== X-Gm-Message-State: AMCzsaXNj8ViE9WrHBQ31vnqwz+l3A+PHdgXyLxFWZJ9ezoLdLwOkXzw P7u+2RBVTh1jDn7e5u4mAnidjg== X-Google-Smtp-Source: ABhQp+QDehGFR14mq761eOl4gqNu5WuxIfkeNGldWFVPFJeRp9+3AiG4HaJE6a5zVG/6cDAVHTL1pw== X-Received: by 10.107.139.144 with SMTP id n138mr22257567iod.173.1508888693370; Tue, 24 Oct 2017 16:44:53 -0700 (PDT) Received: from ysseung.svl.corp.google.com ([100.116.92.22]) by smtp.gmail.com with ESMTPSA id y192sm678867itb.30.2017.10.24.16.44.52 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 24 Oct 2017 16:44:52 -0700 (PDT) From: Yousuk Seung To: David Miller Cc: netdev@vger.kernel.org, Yousuk Seung , Neal Cardwell , Soheil Hassas Yeganeh Subject: [PATCH net] tcp: call tcp_rate_skb_sent() when retransmit with unaligned skb->data Date: Tue, 24 Oct 2017 16:44:42 -0700 Message-Id: <20171024234442.1464-1-ysseung@google.com> X-Mailer: git-send-email 2.15.0.rc0.271.g36b669edcc-goog Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org 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. Signed-off-by: Yousuk Seung Signed-off-by: Neal Cardwell Signed-off-by: Soheil Hassas Yeganeh Acked-by: Eric Dumazet --- net/ipv4/tcp_output.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index 973befc36fd4..1151870018e3 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c @@ -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); }