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=-13.3 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 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 DE18AC432BE for ; Wed, 1 Sep 2021 06:20:41 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id C111C61008 for ; Wed, 1 Sep 2021 06:20:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242291AbhIAGVg (ORCPT ); Wed, 1 Sep 2021 02:21:36 -0400 Received: from relay.sw.ru ([185.231.240.75]:41322 "EHLO relay.sw.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242071AbhIAGVe (ORCPT ); Wed, 1 Sep 2021 02:21:34 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=virtuozzo.com; s=relay; h=Content-Type:MIME-Version:Date:Message-ID:From: Subject; bh=CMn1n/Dh7ekMa8GdsiwO8//8ZOlUAm/ndqbU97gmQrE=; b=TfISTGvLL9l2i0BUL sWUB5ThmJHilTO/IVkK3C72J4BJVljG2C6JpxX3J7dtHiLut1cG06OgdPHSOTMX5aP3UbPepCHlQe sMYjjZ4sCuf1fQfzQQRA6l9jmAXyAzW5Bvuv/vSL8c0jwcLC6ts+J62x2scs2zP5czjYIzVWqpsS8 =; Received: from [10.93.0.56] by relay.sw.ru with esmtp (Exim 4.94.2) (envelope-from ) id 1mLJbo-000R9a-Rw; Wed, 01 Sep 2021 09:20:28 +0300 Subject: Re: [PATCH net-next v3 RFC] skb_expand_head() adjust skb->truesize incorrectly To: Eric Dumazet , Christoph Paasch , "David S. Miller" Cc: Hideaki YOSHIFUJI , David Ahern , Jakub Kicinski , netdev , linux-kernel@vger.kernel.org, kernel@openvz.org, Julian Wiedmann , Alexey Kuznetsov References: <8fd56805-2ac8-dcbe-1337-b20f91f759d6@gmail.com> From: Vasily Averin Message-ID: Date: Wed, 1 Sep 2021 09:20:27 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 8/31/21 10:38 PM, Eric Dumazet wrote: > On 8/31/21 7:34 AM, Vasily Averin wrote: >> RFC because it have an extra changes: >> new is_skb_wmem() helper can be called >> - either before pskb_expand_head(), to create skb clones >> for skb with destructors that does not change sk->sk_wmem_alloc >> - or after pskb_expand_head(), to change owner in skb_set_owner_w() >> >> In current patch I've added both these ways, >> we need to keep one of them. If nobody object I vote for 2nd way: >> diff --git a/net/core/skbuff.c b/net/core/skbuff.c >> index f931176..3ce33f2 100644 >> --- a/net/core/skbuff.c >> +++ b/net/core/skbuff.c >> @@ -1804,30 +1804,47 @@ struct sk_buff *skb_realloc_headroom(struct sk_buff *skb, unsigned int headroom) >> struct sk_buff *skb_expand_head(struct sk_buff *skb, unsigned int headroom) >> { ... skipped ... >> - return skb; >> + if (oskb) { >> + if (sk) >> + skb_set_owner_w(skb, sk); > > Broken for non full sockets. > Calling skb_set_owner_w(skb, sk) for them is a bug. I think you're wrong here. It is 100% equivalent of old code, skb_set_owner_w() handles sk_fullsock(sk) inside and does not adjust sk->sk_wmem_alloc. Please explain if I'm wrong. >> + consume_skb(oskb); >> + } else if (sk) { >> + delta = osize - skb_end_offset(skb); >> + if (!is_skb_wmem(skb)) >> + skb_set_owner_w(skb, sk); > > This would be broken for non full sockets. > Calling skb_set_owner_w(skb, sk) for them is a bug. See my comment above. >> + skb->truesize += delta; >> + if (sk_fullsock(sk)) >> + refcount_add(delta, &sk->sk_wmem_alloc); > > >> + } return skb; Strange line, will fix it. >> } >> EXPORT_SYMBOL(skb_expand_head);