From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.6 required=3.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS,USER_AGENT_GIT,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id ACEC0C282E0 for ; Fri, 19 Apr 2019 23:02:09 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 69E5A21736 for ; Fri, 19 Apr 2019 23:02:09 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="ecM0z9Wk" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726082AbfDSXCI (ORCPT ); Fri, 19 Apr 2019 19:02:08 -0400 Received: from mail-pl1-f201.google.com ([209.85.214.201]:40580 "EHLO mail-pl1-f201.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725860AbfDSXCI (ORCPT ); Fri, 19 Apr 2019 19:02:08 -0400 Received: by mail-pl1-f201.google.com with SMTP id q7so4239664plr.7 for ; Fri, 19 Apr 2019 16:02:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:message-id:mime-version:subject:from:to:cc; bh=GCNGMP5DCmQLBNsNCH4a7lcoc2zFz0gEMNnNwEvCVWU=; b=ecM0z9WkBvNX5jeK4pNgaEIaH6BVsltal2NbcqzRimw+jbxU+QIZsAbJISOpSX4Ooo QhKwEf7KVxdF9wFaq186M6guQ3veUBIDhOhGR1rnvzZydsHNCPh04XkDwEehAECNc2jh +ZRJySoaL/cVN8is6OlgWhF/jkCR/jyO+zw58vaa9jhkvLVuOJNQ0t/y4CT4oOPgxywm 9/Okt+nwVZUcTjZYwg5GmfkcY2UbIwQ05FqQs6aBaFrtUGADkSjYqnElYMh2cLur/rNx +7KjHlEIOwiWUcBMSFqTBDbbYDekh3jyDPlDz/o0h7uuzzkCLFcwCyzYEjOcU9VebFyB WoHg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:message-id:mime-version:subject:from:to:cc; bh=GCNGMP5DCmQLBNsNCH4a7lcoc2zFz0gEMNnNwEvCVWU=; b=fHSjhNopZUtvykZW1XmtJIw3kWhwZt1FT0rLS82s4qaUMdtVkcSH/KfCDHqmqgbtOS IeRQR0gjlWyR5XkP4XZ359h59I4kMkhg5p0Ns3GlkkOiiMgaCifdXIKetsxpvR2O8k1o BzhhFR8QpiR5SZhCv8m84BAewI2ShyBKtMhzEVYRLKSIkl3gGmzP2T2rb20OoY8g3rt0 r5MVuS8Mhi8695iTNbPfv1dJSfCfFIop7l8FFvGUR03qAe3K0i53xsEnsFcc4SmfWvcU P5de7SN12yen7zZl7CrhHNXaTyMLk44rDBO0XAjSODx9ldYrskQF3FKXDMpcJJqut2v1 aaeA== X-Gm-Message-State: APjAAAX/5l3CCiGvve16SAVzycC5/sRuWkH55g/uy+IOqfJwsKOuoiDH kX4U75AKI4LBGjcR+AcmdET4NJfhasN/ZQ== X-Google-Smtp-Source: APXvYqxV9iVhbryzVLa34GbymMaUpn+wH64jBk7jO7uy2slx/mNcYhdVdar8/7+HpajKiwkayrV4wX7w8447cQ== X-Received: by 2002:a63:ad4b:: with SMTP id y11mr6364689pgo.405.1555714927098; Fri, 19 Apr 2019 16:02:07 -0700 (PDT) Date: Fri, 19 Apr 2019 16:02:03 -0700 Message-Id: <20190419230203.160648-1-edumazet@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.21.0.593.g511ec345e18-goog Subject: [PATCH net-next] tcp: properly reset skb->truesize for tx recycling From: Eric Dumazet To: "David S . Miller" Cc: netdev , Eric Dumazet , Eric Dumazet , Soheil Hassas Yeganeh , Willem de Bruijn Content-Type: text/plain; charset="UTF-8" Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org tcp sendmsg() and sendpage() normally advance skb->data_len and skb->truesize by the payload added to an skb. But sendmsg(fd, ..., MSG_ZEROCOPY) has to account for whole pages, even if a single byte of payload is used in the page. This means that we can not assume skb->truesize can be adjusted by skb->data_len. We must instead overwrite its value. Otherwise skb->truesize is too big and can hit socket sndbuf limit, especially if the skb is recycled multiple times :/ Fixes: 472c2e07eef0 ("tcp: add one skb cache for tx") Signed-off-by: Eric Dumazet Cc: Soheil Hassas Yeganeh Cc: Willem de Bruijn --- net/ipv4/tcp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index 603e770d59b3db96adca9602319d2f6970a56285..f7567a3698eb4d6c24dbe6a2f110413ce14d24a7 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -868,7 +868,7 @@ struct sk_buff *sk_stream_alloc_skb(struct sock *sk, int size, gfp_t gfp, if (likely(!size)) { skb = sk->sk_tx_skb_cache; if (skb && !skb_cloned(skb)) { - skb->truesize -= skb->data_len; + skb->truesize = SKB_TRUESIZE(skb_end_offset(skb)); sk->sk_tx_skb_cache = NULL; pskb_trim(skb, 0); INIT_LIST_HEAD(&skb->tcp_tsorted_anchor); -- 2.21.0.593.g511ec345e18-goog