Received: by 2002:a05:7412:8521:b0:e2:908c:2ebd with SMTP id t33csp2488128rdf; Mon, 6 Nov 2023 16:24:25 -0800 (PST) X-Google-Smtp-Source: AGHT+IGk4VnzGJmINJj7hkZtX3f5rZI+CL3jGlpJ1muS4gJ/peq12feNunwmFQYtGRwDrzMqzOsm X-Received: by 2002:a17:90b:4b04:b0:281:1404:c36f with SMTP id lx4-20020a17090b4b0400b002811404c36fmr3202015pjb.16.1699316664935; Mon, 06 Nov 2023 16:24:24 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1699316664; cv=none; d=google.com; s=arc-20160816; b=Ub+E1edCYxiLb9jFdjQPhxxe382sKKDrS9lX1VA96dT1wiMlbz55S2lhqh7ACEMB8o To7CSeDiqF4DQwaIRVoyel6Q6pfy8TaUAQEG5mX+jkMYEqd9k04ne/vjLt2IMP0b9tgW EqLut/qWhHZdimAi7Kb83utM8Lx4ZCExXNpoFM0HJGjdh9nSXtrbjmNCMbUf5K7m7eIj l1b043aQtVxr1WCkNqUScSU6GcMWMAUzGhcuFg0O0R12Ud2Csio0RrsvQsvfA66VRyBP d2fwbKCNUH8+GwH7+GzBI4xJG/xmdROLrs5Xf14jX+6flqci/CNP88RlNIBGzsD8w2T5 4Pkg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:cc:to:subject :message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=VpkgociZWtNmHNqup8fc4OP6m9kvy0WIbsUu3JqjrFo=; fh=T6vAM0U7TVpR86c8W7CuXjlKEw8o4Mr/+Qhcs1dRUno=; b=K9RPLmo9G8s9andIhoyCTtX6RGnlBVmL87Z2mtigFGuhPL3Q8Aaovl7jYE7R9U1d+f nKHzYMaOW+jpJn1woSBikwRbuTvaP8mZpK4v40sEYmTpxdsATHg9or3o8NcqZyZpKd9C E1vuhRAstfmuXoWe7q1lZ3SfRAmbNdc5cg4V+BSXERsq9ssOFTSwIaPL8GmFA7G7asZa pY45Hk7dm93584QuFz7NEaZnNkTJnnzF258zS2z5UJJBMWNYad/fWaoaeCxmU//9bN2l /yH3lehYb/XlMKdl+ayHxFQ+OBxwuk21zsyESVkaeBxRsQMAjs8SmgPuszaTWpvjlUCK ssDQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=GaVApw0h; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from lipwig.vger.email (lipwig.vger.email. [23.128.96.33]) by mx.google.com with ESMTPS id gp5-20020a17090adf0500b00280c306d7f0si9251961pjb.159.2023.11.06.16.24.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 06 Nov 2023 16:24:24 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) client-ip=23.128.96.33; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=GaVApw0h; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by lipwig.vger.email (Postfix) with ESMTP id BA0F4802F540; Mon, 6 Nov 2023 16:24:22 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at lipwig.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232848AbjKGAYL (ORCPT + 99 others); Mon, 6 Nov 2023 19:24:11 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55910 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232821AbjKGAYK (ORCPT ); Mon, 6 Nov 2023 19:24:10 -0500 Received: from mail-vs1-xe35.google.com (mail-vs1-xe35.google.com [IPv6:2607:f8b0:4864:20::e35]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 935461BC for ; Mon, 6 Nov 2023 16:24:04 -0800 (PST) Received: by mail-vs1-xe35.google.com with SMTP id ada2fe7eead31-45d96a9eac8so1485420137.0 for ; Mon, 06 Nov 2023 16:24:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1699316643; x=1699921443; darn=vger.kernel.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=VpkgociZWtNmHNqup8fc4OP6m9kvy0WIbsUu3JqjrFo=; b=GaVApw0hOud1Xw6db4glBTFJo8iBe1OqNQoGimb+Dtp+ClwWvIbxnPmHJakYWqO+nk 3LOPE8evloiG3m1Pd5se8xet9e5/WYduh1HWtdb2sFo8NMQdTVmqqsXWVeY0MwtqsQZi gB3NNIn71w9awI2qYBu2Myc1kvU4uf1TI5DGSk7x6aASQCpqONOGkSpWiqpW/NFSs2IQ usMwoNyRZMjfyhLcoW8a9IWrmKwglyEw+wwAMfQ6HTTvr6mIoZ3CEMf3JiUqWgFP7Sse yZXJQLVIB87K6smWXXP7X5aKZQsVpqTJ0C413h8hgLX7qnkz2MGnj6u9e1+qzgH1phWZ 4Haw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699316643; x=1699921443; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=VpkgociZWtNmHNqup8fc4OP6m9kvy0WIbsUu3JqjrFo=; b=FexO+nxz8Rf09to4BO2OypdWjFrDp5XHPiTmCJl6QhhNU9yrGV0Jd3PMJvAKkOGSxj /eiu4m5bvzPbARE2t6lhF6y1tHwV7qviwNiYvravm61CxG60h/6vu8cPcQzyB5UY2wO2 ypzIboI7OsNiTnmfwa78BK9DDUMACaKXR+x9GXzx7yhVatzXKPrHVVqo1m4XbWDXFa5S bzuEWZS/sQDm8OzkZ1DOTHvjre87zIj6c6L58hRqYj7RFN26mZBc7Y16gER/1+WvKthw 5wyNmegU+e4v7wtlhboTQNMbbjhJ68S9D5XmE1scYi6ib4cc0CaV6X1ByuETkQ3Bc2Pw i5Tw== X-Gm-Message-State: AOJu0Yx+rto2uAgBoz/S+YwnNAap6iCWkCqaYGac57Jiq4Rc8Y+HCcbT 9w9JY76NtQ0D0NbEMzhde+DTvWZrkS2blmlmPnLHKQ== X-Received: by 2002:a05:6102:2049:b0:45f:642e:41c with SMTP id q9-20020a056102204900b0045f642e041cmr2136927vsr.13.1699316643304; Mon, 06 Nov 2023 16:24:03 -0800 (PST) MIME-Version: 1.0 References: <20231106024413.2801438-1-almasrymina@google.com> <20231106024413.2801438-10-almasrymina@google.com> In-Reply-To: From: Mina Almasry Date: Mon, 6 Nov 2023 16:23:52 -0800 Message-ID: Subject: Re: [RFC PATCH v3 09/12] net: add support for skbs with unreadable frags To: David Ahern Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-media@vger.kernel.org, dri-devel@lists.freedesktop.org, linaro-mm-sig@lists.linaro.org, "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Jesper Dangaard Brouer , Ilias Apalodimas , Arnd Bergmann , Willem de Bruijn , Shuah Khan , Sumit Semwal , =?UTF-8?Q?Christian_K=C3=B6nig?= , Shakeel Butt , Jeroen de Borst , Praveen Kaligineedi , Willem de Bruijn , Kaiyuan Zhang Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-8.4 required=5.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE, USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lipwig.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (lipwig.vger.email [0.0.0.0]); Mon, 06 Nov 2023 16:24:22 -0800 (PST) On Mon, Nov 6, 2023 at 4:16=E2=80=AFPM David Ahern wro= te: > > On 11/5/23 7:44 PM, Mina Almasry wrote: > > diff --git a/net/core/datagram.c b/net/core/datagram.c > > index 176eb5834746..cdd4fb129968 100644 > > --- a/net/core/datagram.c > > +++ b/net/core/datagram.c > > @@ -425,6 +425,9 @@ static int __skb_datagram_iter(const struct sk_buff= *skb, int offset, > > return 0; > > } > > > > + if (skb_frags_not_readable(skb)) > > + goto short_copy; > > + > > /* Copy paged appendix. Hmm... why does this look so complicated?= */ > > for (i =3D 0; i < skb_shinfo(skb)->nr_frags; i++) { > > int end; > > @@ -616,6 +619,9 @@ int __zerocopy_sg_from_iter(struct msghdr *msg, str= uct sock *sk, > > { > > int frag; > > > > + if (skb_frags_not_readable(skb)) > > + return -EFAULT; > > This check .... > > + > > if (msg && msg->msg_ubuf && msg->sg_from_iter) > > return msg->sg_from_iter(sk, skb, from, length); > > > ... should go here. That allows custome sg_from_iter to have access to > the skb. What matters is not expecting struct page (e.g., refcounting); > if the custom iter does not do that then all is well. io_uring's iter > does not look at the pages, so all good. > > > > > diff --git a/net/core/gro.c b/net/core/gro.c > > index 42d7f6755f32..56046d65386a 100644 > > --- a/net/core/gro.c > > +++ b/net/core/gro.c > > @@ -390,6 +390,9 @@ static void gro_pull_from_frag0(struct sk_buff *skb= , int grow) > > { > > struct skb_shared_info *pinfo =3D skb_shinfo(skb); > > > > + if (WARN_ON_ONCE(skb_frags_not_readable(skb))) > > + return; > > + > > BUG_ON(skb->end - skb->tail < grow); > > > > memcpy(skb_tail_pointer(skb), NAPI_GRO_CB(skb)->frag0, grow); > > @@ -411,7 +414,7 @@ static void gro_try_pull_from_frag0(struct sk_buff = *skb) > > { > > int grow =3D skb_gro_offset(skb) - skb_headlen(skb); > > > > - if (grow > 0) > > + if (grow > 0 && !skb_frags_not_readable(skb)) > > gro_pull_from_frag0(skb, grow); > > } > > > > diff --git a/net/core/skbuff.c b/net/core/skbuff.c > > index 13eca4fd25e1..f01673ed2eff 100644 > > --- a/net/core/skbuff.c > > +++ b/net/core/skbuff.c > > @@ -1230,6 +1230,14 @@ void skb_dump(const char *level, const struct sk= _buff *skb, bool full_pkt) > > struct page *p; > > u8 *vaddr; > > > > + if (skb_frag_is_page_pool_iov(frag)) { > > Why skb_frag_is_page_pool_iov here vs skb_frags_not_readable? Seems like a silly choice on my end. I should probably check skb_frags_not_readable() and not kmap any frags in that case. Will do. --=20 Thanks, Mina