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 6AB31D6E2A5 for ; Thu, 21 Nov 2024 09:45:30 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 00FEF6B007B; Thu, 21 Nov 2024 04:45:30 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id F01BE6B0082; Thu, 21 Nov 2024 04:45:29 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id DCA7B6B0083; Thu, 21 Nov 2024 04:45:29 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id BF47E6B007B for ; Thu, 21 Nov 2024 04:45:29 -0500 (EST) Received: from smtpin21.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 63C92160CC2 for ; Thu, 21 Nov 2024 09:45:29 +0000 (UTC) X-FDA: 82809617898.21.5F3A7DC Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf24.hostedemail.com (Postfix) with ESMTP id EC7CF180014 for ; Thu, 21 Nov 2024 09:45:20 +0000 (UTC) Authentication-Results: imf24.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=JvQbRRj4; spf=pass (imf24.hostedemail.com: domain of brauner@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=brauner@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1732182235; 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: in-reply-to:in-reply-to:references:references:dkim-signature; bh=Qds5sw/Kk1Z6kTZbNcHS9YQVeD/R5mu1rngjJSXheAw=; b=7W9fLHFYcb9Jw8XeGMwphTFaTdiBagZdgwlJj2i7Eq+RnwWwhhUb0vHnZXWjACPVMOwu5C /p60NEdgAJ8MGEZhsHA1QEZjzpF392szWIBLEjQq0XcmQ1mjhIXfqMyNpMujLCBmSJ5+Q/ xMX3myeDWb4ESFS5KgyCzrX97xxRkpM= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1732182235; a=rsa-sha256; cv=none; b=fDAhNo2q92cza1scwcBSCC0EJp7v+ExLe0Z/kvzdqETconxAdp+TKyA3NugWdFxyjsX/MU wjZ5NZmCJg3FEdqynGs+eY08PXDC9qVbO2006Ux9RRYMeewWlZBSlQLZby999SEfHPJuNB 9iEpeZtT9xd5/t8QpEiiUFIfTWYwycg= ARC-Authentication-Results: i=1; imf24.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=JvQbRRj4; spf=pass (imf24.hostedemail.com: domain of brauner@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=brauner@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id E66095C53F3; Thu, 21 Nov 2024 09:44:42 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id DE788C4CECC; Thu, 21 Nov 2024 09:45:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1732182326; bh=nR6Fy8BGli1AlLmlleeK5DC+YwdhxCJdaekFYFy9zek=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=JvQbRRj4sm/HAswLm+uEPJpFCHenM3QhEJpdW/zRcI2UtBZ7xvMagK560XlqTAZs6 dwBJuxyD3zv0hZfM5Gfv1/rDiqxZjiIwzPe9upYWy5q3puSJlkr+zVXtY0HTQ03HL/ vO9kHutmP/K0tAjySseSOeJuW9lkoKW2heaaBct7nGk/F9LGX0g0Js6vc3vNmlu+BB oPW8edpmXZUElFXTLG4qI6feF+rU5Ma9h3Ls+6tGVGS62b0HzNFZCuIS/X3f9bzo4P N0NW2nNRz4DAq3gguneCMkCe0sqmNB01G8CDSBezQX9CUDqlHmY2h0wtXBtiCIYtCT PhdRicjOZ55ng== Date: Thu, 21 Nov 2024 10:45:20 +0100 From: Christian Brauner To: Jan Kara Cc: Josef Bacik , kernel-team@fb.com, linux-fsdevel@vger.kernel.org, amir73il@gmail.com, torvalds@linux-foundation.org, viro@zeniv.linux.org.uk, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, linux-mm@kvack.org, linux-ext4@vger.kernel.org Subject: Re: [PATCH v8 02/19] fsnotify: opt-in for permission events at file open time Message-ID: <20241121-boxring-abhandeln-c2095863da2d@brauner> References: <5ea5f8e283d1edb55aa79c35187bfe344056af14.1731684329.git.josef@toxicpanda.com> <20241120155309.lecjqqhohgcgyrkf@quack3> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <20241120155309.lecjqqhohgcgyrkf@quack3> X-Rspamd-Server: rspam10 X-Stat-Signature: oq88jnoooxpo8rzi89kozsz17uaa37mz X-Rspamd-Queue-Id: EC7CF180014 X-Rspam-User: X-HE-Tag: 1732182320-878855 X-HE-Meta: U2FsdGVkX19SzcqMtvxvJB3PKYhmguTfMU5pS5fIM60O4ATQPBjgKyr4Xlhacpog4LUUZ9vjXzEjjc8Z2RXbrvbBLkthv6GaxMsoqsncvFYHdwU7DuYrESgbtr2wn0XTFxG2pQFqbQpPajUt+rJMYx1l9BWOFl8Yg6FbUd4fJWnTWzSvD8u9030vmDO+B4DNlTRSbMmwROEADP8nByOdoe3NpLbXElN6Yqhvk4bFUW3YZ+BfpO0P2tLl0uvjX2wvYvf37ERjIqjE8vBRaVBpJYMp6VSepuACl6WGzu+XwIHizwla4QcbXVrS8iSyZdqk484KKhtORCG9C4Wbjf8R2rhB9OVTm1vabSyBxqP9hz+j79VWqpGJpVr5HqWb33ZkvYKefCI6EkA2dZgDCS4h/ivoVUmv1i3VP07zDsa204GPDR8YfjElLHcz9zyuTd7CS94sEfwHPeXwmznXiBexb1NT+/7k/e1Y9JulfrcO29vP6KkGkwQnf031ZbE1tMrgymJv1dJwNC/MAQgYPg56Syk7PYD5q+jAU4UDgBfxrjI+/+0Y1V1lHolmX4Mh/AG3/euIjxLUR3ZPmCo2Rouu8P3lr6dhr4QOcMVaYlOzBJ9AOKgVgMkmWsjBJMgYRP4AoElSgHdRtQScdugi7CNPZFGADyLdIpnmkJh5RYgUpGFN5BEr5x7CK+/uT5lmAOiYpCzTigvdy28OCmIu7Xc93pyb3cK53vZuy9iHgVkuqRe0QIFaQi/Yw4BQW0SGekZdTNnn/TTLAjbbRQ1OKmuXX+h2JefAU4waVwAcR3c5uVkyT3+BhDyYjmGPYKD98mhRmg3kL6aPEOpSdY07aTAUIs5J5YTHYYMVq782QvZLyG/rOAbI9hPUOrmrIFanEDDh7/L0FVFzo89cs2B901KR+BihSpmW9OPm7XH1P+ZiiN5/d4PRRyR+7P6OkjrbYYmBAaU5QN34kHAngJzGriD uEDHv7aO EbvXrgCKIZRXbOJHDrULdP9hBfs2agt9yamQ3Ni10ZCDFkToKA2gpxQ1foOU5K4oL4XUaH1n5au9odMlNy4oznvc3bYxvhckHrwG9Mm+vaqjI3EZvmWzUWFeiWlMnmKc+IdPI89+2NpBnb9iO2lDNMNryNCLtuxkzYEF7HD/pxRVHHZw0126+Wu3TkAuXqxVBJLPRQPIx7B/oPXp7I6d4U7pVE/K8a/J/q8FgedKVrRIDsMBcdoBwpcIEL6FAmrMaAI15Y51dN+EzGMjykC8iEXWoNFMAm/VRxgG3xRzY6XOImL4gnfLV1XFPh3mMq2TF87j8At3+KU0RlXPmGgJBowrrGahLg7fkrvPBbLb/8yVApgLmjh5CNIBn5iHIixOnHGclvv66P4u1iiKWm/FLMdQTO2KdWweUuuqi 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 Wed, Nov 20, 2024 at 04:53:09PM +0100, Jan Kara wrote: > On Fri 15-11-24 10:30:15, Josef Bacik wrote: > > From: Amir Goldstein > > > > Legacy inotify/fanotify listeners can add watches for events on inode, > > parent or mount and expect to get events (e.g. FS_MODIFY) on files that > > were already open at the time of setting up the watches. > > > > fanotify permission events are typically used by Anti-malware sofware, > > that is watching the entire mount and it is not common to have more that > > one Anti-malware engine installed on a system. > > > > To reduce the overhead of the fsnotify_file_perm() hooks on every file > > access, relax the semantics of the legacy FAN_ACCESS_PERM event to generate > > events only if there were *any* permission event listeners on the > > filesystem at the time that the file was opened. > > > > The new semantic is implemented by extending the FMODE_NONOTIFY bit into > > two FMODE_NONOTIFY_* bits, that are used to store a mode for which of the > > events types to report. > > > > This is going to apply to the new fanotify pre-content events in order > > to reduce the cost of the new pre-content event vfs hooks. > > > > Suggested-by: Linus Torvalds > > Link: https://lore.kernel.org/linux-fsdevel/CAHk-=wj8L=mtcRTi=NECHMGfZQgXOp_uix1YVh04fEmrKaMnXA@mail.gmail.com/ > > Signed-off-by: Amir Goldstein > > FWIW I've ended up somewhat massaging this patch (see below). > > > diff --git a/include/linux/fs.h b/include/linux/fs.h > > index 23bd058576b1..8e5c783013d2 100644 > > --- a/include/linux/fs.h > > +++ b/include/linux/fs.h > > @@ -173,13 +173,14 @@ typedef int (dio_iodone_t)(struct kiocb *iocb, loff_t offset, > > > > #define FMODE_NOREUSE ((__force fmode_t)(1 << 23)) > > > > -/* FMODE_* bit 24 */ > > - > > /* File is embedded in backing_file object */ > > -#define FMODE_BACKING ((__force fmode_t)(1 << 25)) > > +#define FMODE_BACKING ((__force fmode_t)(1 << 24)) > > > > -/* File was opened by fanotify and shouldn't generate fanotify events */ > > -#define FMODE_NONOTIFY ((__force fmode_t)(1 << 26)) > > +/* File shouldn't generate fanotify pre-content events */ > > +#define FMODE_NONOTIFY_HSM ((__force fmode_t)(1 << 25)) > > + > > +/* File shouldn't generate fanotify permission events */ > > +#define FMODE_NONOTIFY_PERM ((__force fmode_t)(1 << 26)) > > Firstly, I've kept FMODE_NONOTIFY to stay a single bit instead of two bit > constant. I've seen too many bugs caused by people expecting the constant > has a single bit set when it actually had more in my life. So I've ended up > with: > > +/* > + * Together with FMODE_NONOTIFY_PERM defines which fsnotify events shouldn't be > + * generated (see below) > + */ > +#define FMODE_NONOTIFY ((__force fmode_t)(1 << 25)) > + > +/* > + * Together with FMODE_NONOTIFY defines which fsnotify events shouldn't be > + * generated (see below) > + */ > +#define FMODE_NONOTIFY_PERM ((__force fmode_t)(1 << 26)) > > and > > +/* > + * The two FMODE_NONOTIFY* define which fsnotify events should not be generated > + * for a file. These are the possible values of (f->f_mode & > + * FMODE_FSNOTIFY_MASK) and their meaning: > + * > + * FMODE_NONOTIFY - suppress all (incl. non-permission) events. > + * FMODE_NONOTIFY_PERM - suppress permission (incl. pre-content) events. > + * FMODE_NONOTIFY | FMODE_NONOTIFY_PERM - suppress only pre-content events. > + */ > +#define FMODE_FSNOTIFY_MASK \ > + (FMODE_NONOTIFY | FMODE_NONOTIFY_PERM) This is fine by me. But I want to preemptively caution to please not spread the disease of further defines based on such multi-bit defines like fanotify does. I'm specifically worried about stuff like: #define ALL_FSNOTIFY_PERM_EVENTS (FS_OPEN_PERM | FS_ACCESS_PERM | \ FS_OPEN_EXEC_PERM) #define FS_EVENTS_POSS_ON_CHILD (ALL_FSNOTIFY_PERM_EVENTS | \ FS_ACCESS | FS_MODIFY | FS_ATTRIB | \ FS_CLOSE_WRITE | FS_CLOSE_NOWRITE | \ FS_OPEN | FS_OPEN_EXEC)