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 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7FEEBC47258 for ; Thu, 25 Jan 2024 16:54:34 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id DB0196B0087; Thu, 25 Jan 2024 11:54:33 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id D678A6B008A; Thu, 25 Jan 2024 11:54:33 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id BD6096B009C; Thu, 25 Jan 2024 11:54:33 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id A9C446B0087 for ; Thu, 25 Jan 2024 11:54:33 -0500 (EST) Received: from smtpin24.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 7D6241C18A2 for ; Thu, 25 Jan 2024 16:54:33 +0000 (UTC) X-FDA: 81718432026.24.1F92954 Received: from mail-ed1-f48.google.com (mail-ed1-f48.google.com [209.85.208.48]) by imf20.hostedemail.com (Postfix) with ESMTP id A31CE1C0020 for ; Thu, 25 Jan 2024 16:54:31 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=Lb9HBUmn; spf=pass (imf20.hostedemail.com: domain of edumazet@google.com designates 209.85.208.48 as permitted sender) smtp.mailfrom=edumazet@google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1706201671; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=oOiXeojwLOXICuMt5BTSyUSoCml0QlNFyHPEHrk0k4U=; b=uRYelTOwpxET6o9NC5NCXZFb8Njh7trlkhNywPpEX7ebttV0HB9xl7iniiaREw5PkNU8Cw hp1fd5ODWE4jHBFaCgRV70G/Oj9wG1j3kHG+vGEusWuTpOu2plgoBprKZLKxoHiuYc8i20 d1bcH/ZoGRtDH5jN8JK1pvyS8W1jYPE= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1706201671; a=rsa-sha256; cv=none; b=Yji5VC1R14Te+lYBTnQZoPShf+SFFw5GRYJK06CyE467bvIDWY1LbaPOswd1d1qo+o7dT6 ISWm8yN+gsxQ4hz5WRXFcswbRKwqwoUMJx54zp/HWu2hIjxDRap/4bH34dha2qh4grtyBv MEa+kA+4SI6s2YLfd5RBJniE4Hiveh0= ARC-Authentication-Results: i=1; imf20.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=Lb9HBUmn; spf=pass (imf20.hostedemail.com: domain of edumazet@google.com designates 209.85.208.48 as permitted sender) smtp.mailfrom=edumazet@google.com; dmarc=pass (policy=reject) header.from=google.com Received: by mail-ed1-f48.google.com with SMTP id 4fb4d7f45d1cf-55818b7053eso19566a12.0 for ; Thu, 25 Jan 2024 08:54:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1706201670; x=1706806470; darn=kvack.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=oOiXeojwLOXICuMt5BTSyUSoCml0QlNFyHPEHrk0k4U=; b=Lb9HBUmnK7RENX0GjfQofh9LwFo38fyA4o31PJfbZz0E0iheor9n9AlGkMCJS7slh2 7fDezF4lig5v9XuqvWzRlWsXPq1EtpP0hh4lnTBT2OgLKu5HdHIl+goYXzSv2PJ0dQ9q /zVypjLPzS+Umu6a+DrXHToN8sqza1E3T2AEnuOHK7GWH38q8H32e11Ru01C6tdeSPP6 Z+emn6Y9mLja77nZnQWcJDcN/+98US0PR7HxexH100ba3OF2jPX830pp+O/5M+MPCcPV 7v/yL1G19HLZRK2dULcdRGVu09ony6LS9NICtp4CpM5QXmMD07SkwjKo4Q0sR+FgPrtD WMEQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706201670; x=1706806470; 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=oOiXeojwLOXICuMt5BTSyUSoCml0QlNFyHPEHrk0k4U=; b=hqLRcYdVR56cyD/O2LPTYaNAP1Bsv/AvdzsrGh80m3Z2ldtJOArNAuEeAiRo+QBdIA UfH9y4JvvlnxNQCOUCYljq6ZQG/yQGig/S/fLUvcCzdBC7hFvcOtSZe/GN5fps2rImel 6t/TMf2rlwlaYN8j9sfXuF9Jf8ozgaVFP5pnoL27FIiSXkzT9C1b3I7GE3/2oEVO91Uc huhliGZZK4eXn2vOW2XacaJUiFDbCmAYF0jEEZa4+155ng6/ik5fIMYO1KXPARfuoLZd GaccsRSGv6UlZc27TqPEv29ySbl+usdOV9jg1+Z8InN1LGGB0LDwj5wzJfqwJQXAlKqe EW+w== X-Gm-Message-State: AOJu0YzrVBqK8dSS22jS0qdLkc3ffQ68IHhWT0tFKWY2QKPof9fzKTn4 mQVlR/C95QlxYG5SwIo6T3ZyK0BrUJKNaQCcLrJLK2ojBVlVeC8B/1DjxmZ+Y8cHO03+eBlB2by PRoy07hHQtYaJR1BXXGXtILMOEIWUJ+vUCDY7 X-Google-Smtp-Source: AGHT+IE2z6ya/M/OiUUYRxn7uUuauoi1OOC2cn8v/ECFbMfBGDjI6n2fTEYDKPs48TdYcboyo2CW2Wt5Fy7VrwBeh4Q= X-Received: by 2002:a05:6402:c08:b0:55c:e69d:5d4e with SMTP id co8-20020a0564020c0800b0055ce69d5d4emr234145edb.0.1706201669987; Thu, 25 Jan 2024 08:54:29 -0800 (PST) MIME-Version: 1.0 References: <20240125103317.2334989-1-edumazet@google.com> In-Reply-To: From: Eric Dumazet Date: Thu, 25 Jan 2024 17:54:18 +0100 Message-ID: Subject: Re: [PATCH net] tcp: add sanity checks to rx zerocopy To: Matthew Wilcox Cc: "David S . Miller" , Jakub Kicinski , Paolo Abeni , Neal Cardwell , netdev@vger.kernel.org, eric.dumazet@gmail.com, ZhangPeng , Arjun Roy , linux-mm@kvack.org, Andrew Morton , linux-fsdevel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Stat-Signature: du1td7t4zzepm4m37ha9oiq5p4xt6hdb X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: A31CE1C0020 X-Rspam-User: X-HE-Tag: 1706201671-529680 X-HE-Meta: U2FsdGVkX19ZmsLjRQmKmQa31fuMMgSIVk6+NXNLcTX8yrIZ7d7n/vQh6PID1XAGZmqkJnJ5E9h1JRbjgxwUj3te/FrOlwSKrWaUee4WftP+A0E6PN0SbJr6TLULL4UKkIm9RBFV0nJpVob8YFe2tA5ACHv3zrf5K4MQGFpQodxpWtjc/6IvCNIjvzMmqYLo9yEHN4EHy75XNi8uwusjT+lfB285gYC9aczzeiq5k8HTOc1lRh6eFQ3ch41nXO67DCAxWejeRyHIdQnUotDbjp1pRpa2GYQ1zqQuwth441fWMRNdgUuZ9y+mXCz8h4Fh9Pcp0tk53BoF/QJEn97/4LyxEJtHQ2Wqmyt+PyiQr2/Cs9TvfwHhgPiLMropfv7vKyR+rNgkK0DiEHsmKWFhNvLP4P7k+pdbLbLW1prgf9/NcY1D9VsL42PHJJru/hqGhU3TL/4vffnpbM/DL/XMOPMW6MdrLaDh4H8DmkHT/qvjxn2zaoVgqfygpPrrfkbu5QT/O4o+bQjCYMWHD9sQ2avHBFrixfO30hB21oYevUo4AsKUKbieypdx26sCwqzF7w99qRvRE/q4uyKxh8y+Q+zozUOiIzM6siu2lNPfVKTf3MmBmAvE6WKOhhvXPcgtLEBaIoEKwdzw65jL14n4Gy8ecJlna97sUFqEr5b6m7JkejNrCcXq7nr/zpnbls7dEIi8B5iIdLs4Bepuy0HPdp/s3dUMtorl/bflkBCJFs6k/Fu8Ad53i8n+NB0NGNSBa/7ak5W0PWn5hoopxbzj7UcppBwSQUE6+BxHoGLIhkP+MXCzY6KGTmasdc4Eif+LV4Q/weuOZnhTly4ADH20k3o7wMFmZXQ1D+17gFpd/z/2Q92tn1SW/HqjQbBz0HY8fZNn3qfkZ/iRlQHb+yPUJbmFEm7MiL6mW360s99cxexxZ000n/4hIHiPK49JkBthxQwM6kCyl8u6pewYgAY ZjV0sKFp lM8YEIFraTnFfmWdF0i/W2C+k8U09eokjlt24tKesLKlLasqq1swWUWdZa9nogy7dBB+/uBCGPE5NmtxCfCUHgCsC1gUOxpuqMk11Woo52nf9UtG6jL7JYjPTx0WNj0qhZQKXENUogpfRd7qIi7Z0IfI7nFeo2GsnhqSEQaOAGQDJ5zmZ+nH7WMOVmnyEmBfan0GxcNSABbsJUr3jQyacRfnH5veqFRKKa3eZ43usZ1tRrHnhdT1ImCGptIkPRBVBpu7tpVgFyZEfGltNkCUsGCmJEeNCQZUAVyM2LlPiIo+Ej3jm4L81zV62Ti1E2xAylz72jpUZESR7gi8q9ygWjMtlHapJsqGphnoJ1c0MWQUQpl0= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On Thu, Jan 25, 2024 at 5:09=E2=80=AFPM Matthew Wilcox wrote: > > > Fixing email address for linux-mm. > > On Thu, Jan 25, 2024 at 04:07:50PM +0000, Matthew Wilcox wrote: > > On Thu, Jan 25, 2024 at 10:33:17AM +0000, Eric Dumazet wrote: > > > +++ b/net/ipv4/tcp.c > > > @@ -1786,7 +1786,17 @@ static skb_frag_t *skb_advance_to_frag(struct = sk_buff *skb, u32 offset_skb, > > > > > > static bool can_map_frag(const skb_frag_t *frag) > > > { > > > - return skb_frag_size(frag) =3D=3D PAGE_SIZE && !skb_frag_off(frag= ); > > > + struct page *page; > > > + > > > + if (skb_frag_size(frag) !=3D PAGE_SIZE || skb_frag_off(frag)) > > > + return false; > > > + > > > + page =3D skb_frag_page(frag); > > > + > > > + if (PageCompound(page) || page->mapping) > > > + return false; > > > > I'm not entirely sure why you're testing PageCompound here. If a drive= r > > allocates a compound page, we'd still want to be able to insert it, > > right? I tried to get something that would be free of merge conflicts, up to linux= -4.18 I was not sure if I had to use compound_head(page) in order to test for the mapping ? page =3D compound_head(page); if (page->mapping) return false; I guess that we would have to adjust the page pointer based on skb_frag_off(frag), right now we bail if skb_frag_off(frag) is not zero. I would leave this change for future kernels if there is interest. > > > > I have a feeling that we want to fix this in the VM layer. There are > > some weird places calling vm_insert_page() and we should probably make > > them all fail. > > > > Something like this, perhaps? Perhaps, but backports to stable versions (without folio) would be a bit of a work ? > > > > diff --git a/mm/memory.c b/mm/memory.c > > index 1a60faad2e49..ae0abab56d38 100644 > > --- a/mm/memory.c > > +++ b/mm/memory.c > > @@ -1871,6 +1871,10 @@ static int insert_page_into_pte_locked(struct vm= _area_struct *vma, pte_t *pte, > > > > if (!pte_none(ptep_get(pte))) > > return -EBUSY; > > + if (folio->mapping && > > + ((addr - vma->vm_start) / PAGE_SIZE + vma->vm_pgoff) !=3D > > + (folio->index + folio_page_idx(folio, page))) > > + return -EINVAL; > > /* Ok, finally just insert the thing.. */ > > folio_get(folio); > > inc_mm_counter(vma->vm_mm, mm_counter_file(folio)); > >