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 37911D711BC for ; Wed, 20 Nov 2024 15:53:15 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C86136B008C; Wed, 20 Nov 2024 10:53:14 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id C361B6B0092; Wed, 20 Nov 2024 10:53:14 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id AFE366B0093; Wed, 20 Nov 2024 10:53:14 -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 94ADF6B008C for ; Wed, 20 Nov 2024 10:53:14 -0500 (EST) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 3CD2BAE5D4 for ; Wed, 20 Nov 2024 15:53:14 +0000 (UTC) X-FDA: 82806916584.11.C517643 Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.223.131]) by imf15.hostedemail.com (Postfix) with ESMTP id 00CC2A000E for ; Wed, 20 Nov 2024 15:52:18 +0000 (UTC) Authentication-Results: imf15.hostedemail.com; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=JaYUmmbs; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=HUqdD94n; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=JaYUmmbs; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=HUqdD94n; dmarc=none; spf=pass (imf15.hostedemail.com: domain of jack@suse.cz designates 195.135.223.131 as permitted sender) smtp.mailfrom=jack@suse.cz ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1732117925; a=rsa-sha256; cv=none; b=cd2N0zGk0VXGQlxLkXloHtvw45FBI2zLxEngpcSMtIivl68TlrtJ9VvbdpqcOpCHVrUqan V0D1IG6eFd+2LNxVGFUFV4W4kYmc13GIn5XawLSa3S1Qv2g70XdsHlNKqzLa1v5VIDUKC7 H84AT88JFg0m6EiGOrup1CI1GPkgpPs= ARC-Authentication-Results: i=1; imf15.hostedemail.com; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=JaYUmmbs; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=HUqdD94n; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=JaYUmmbs; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=HUqdD94n; dmarc=none; spf=pass (imf15.hostedemail.com: domain of jack@suse.cz designates 195.135.223.131 as permitted sender) smtp.mailfrom=jack@suse.cz ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1732117925; 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=cUE17i4NjRRS9xF6ZGmKI9ElNGRKRlw1EV2n76eGf94=; b=64P6+s7NNJvBKGZpvtWUfjD3MmpnP+dilub8/pxSP+Z9lV3GaSPmWq2gFHp4Vd2nBUl0Rn sxAkEJULdzC56gTp02buiAf3t2d5wyAi52IAGfAS+X9E21Zf3ZlsfhiS2ME4Be+6clOyi7 VXY+RSYJ9zOARCu35l7ReWt9jpTUDJg= Received: from imap1.dmz-prg2.suse.org (imap1.dmz-prg2.suse.org [IPv6:2a07:de40:b281:104:10:150:64:97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id 25EFF1F79B; Wed, 20 Nov 2024 15:53:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_rsa; t=1732117990; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=cUE17i4NjRRS9xF6ZGmKI9ElNGRKRlw1EV2n76eGf94=; b=JaYUmmbsLL0KHavUnz/VjTpmfWbyjVAW/QXMu/hR1vnM0JbWB4VO+62bnIWnqlZICJm4cU 1FyuzvlZ7ViZ3eXCCUQ+tUmHqN0TzRq0Nw2fZ+gRtpwxL6hH+4e6UMITgjjI53AapUzlSW TnSoTuIMDAc4LuSThpRdK8mOn8jKCIA= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_ed25519; t=1732117990; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=cUE17i4NjRRS9xF6ZGmKI9ElNGRKRlw1EV2n76eGf94=; b=HUqdD94nSoR9gFep6avivM3P0fK/ZSPNLgmEn7aN+plGxU1pWLp8QL39BgB1bFfcvv5n6p CBsvZEeTWD7V3nAw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_rsa; t=1732117990; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=cUE17i4NjRRS9xF6ZGmKI9ElNGRKRlw1EV2n76eGf94=; b=JaYUmmbsLL0KHavUnz/VjTpmfWbyjVAW/QXMu/hR1vnM0JbWB4VO+62bnIWnqlZICJm4cU 1FyuzvlZ7ViZ3eXCCUQ+tUmHqN0TzRq0Nw2fZ+gRtpwxL6hH+4e6UMITgjjI53AapUzlSW TnSoTuIMDAc4LuSThpRdK8mOn8jKCIA= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_ed25519; t=1732117990; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=cUE17i4NjRRS9xF6ZGmKI9ElNGRKRlw1EV2n76eGf94=; b=HUqdD94nSoR9gFep6avivM3P0fK/ZSPNLgmEn7aN+plGxU1pWLp8QL39BgB1bFfcvv5n6p CBsvZEeTWD7V3nAw== Received: from imap1.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id 199BC13297; Wed, 20 Nov 2024 15:53:10 +0000 (UTC) Received: from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167]) by imap1.dmz-prg2.suse.org with ESMTPSA id EHc8BuYFPmdgSwAAD6G6ig (envelope-from ); Wed, 20 Nov 2024 15:53:10 +0000 Received: by quack3.suse.cz (Postfix, from userid 1000) id C75C8A08A2; Wed, 20 Nov 2024 16:53:09 +0100 (CET) Date: Wed, 20 Nov 2024 16:53:09 +0100 From: Jan Kara To: Josef Bacik Cc: kernel-team@fb.com, linux-fsdevel@vger.kernel.org, jack@suse.cz, amir73il@gmail.com, brauner@kernel.org, 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: <20241120155309.lecjqqhohgcgyrkf@quack3> References: <5ea5f8e283d1edb55aa79c35187bfe344056af14.1731684329.git.josef@toxicpanda.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <5ea5f8e283d1edb55aa79c35187bfe344056af14.1731684329.git.josef@toxicpanda.com> X-Rspamd-Action: no action X-Rspam-User: X-Rspamd-Queue-Id: 00CC2A000E X-Rspamd-Server: rspam01 X-Stat-Signature: uc867rngmgnbztj9zpoyzggr7o9qgdhb X-HE-Tag: 1732117938-530550 X-HE-Meta: U2FsdGVkX18dYq3//fiviaUQOfZOJEJIP6HaZ8DBQEvmW3JfphG8lg+aPIQDM1QDiqQd/9TLO3VV+5cjp/9Z2f5UbNBUTUm6KSGBxWi5nYOFYcBUB3GCW51XjJMiHBhsPASki4obl7QYLJuhwy6Hk7KAKdeZJdcDC5e/h+cbPVO6XJ7hybY7mZPX27XhWwlCaqALa/qVxKTQ3vWWLDhMAk/McNv6AZOhwExwtZX933artsihYBWdIqUIAGC7PpfhA4PCxih5RLIB/DOuUd4didB68vppR27lvDZztiEo8GbSOdxe9f9FVDZpeXSiHM1wPfL0A0c7eYyBwkL9TZ8xvI2VCV19cqAl9AGkLUGWOR3E/GgjGdK39LLWuF2SUVvqTAQXxgXVaqM6P6Jc1S45HrtwTEUC8mjLwrr78bOo/Yg4BOkeMKLG86NUVjc+P5w/newi4qpV5xSGthdzVn3yMIOtaGrFdG5X1dRaC2QZOgoMF5296vQWAlMNeIN/ZKT4qK96SQQP9/1CuuQo4rLbPDUAvgrWwj0ErxkkukPSYthwcmKrOEE6cGINDwp6mxnQKSTjqdtiZE5kdw/2WMUXiMm0eDdcyel3onTutS75Pw0mbSyPxrrLHzdmsQZhZ8/rOR4n+d/ufpEasuHprpXoak++Yqf+Tw8Mm0UbVhXjdntgQwoDjpd5BOKWKmTgDt/9p41/4xIWsD2oYJpLBgsOhxmTe9hOVH9ZMbdqBX95DoeF+Dou35SPXI9/qOeuLWqIXpFiiy/ijONlzVOcsQ6Vd9nb/UFZOGdlkAWFGNlZy1rBOUCxjspFyDHl4VjjUf1KMUD7kDNJ4uOM558PfVzSqAjRXlZ2MzkuewSYskGkGHXycuJ6P011CFlHrJaz4K1fxLfycrgmGhWXIXiQny+T/KGknaCSVaUCisBSeATh4tW3QjCX88z7ygqcv1bYNEx3qCFZ91RW7yynHkDXyZs 9yVWgEjV 8byPRymRRSeiSPJNKL3T/SKPMFGqAYDA4xz3W1DmU5axUOrkIO0WRK6WUaJT9xFHOokW6MIyDTNhpEgEc/V3Q4hBtPTLuyHPcxf/uDNi4TuPtCt9QseCWRGoV/qM8u/ujvZl6NtippQoqMLMcg2AEXqfHBa9xcgMfFbK18Fij2CWeg0Egru9J1M0P89LXM6dIyNLJBBLIykxjRdVseOCKHRtiB13s/fD4t/ghA07DOzT5jl29Tv74vsZbKU3OAC0x42I9ERaXhF9ODkUP8UYGoNM1ixsFmgWCyJGHQNZfoOR8/gP2NUK94bc/R1iQQDB4g9pUV9JBffCVPD1xmnmnU6TcuINOLzEqbt1NqgWb2wNKgv0qHHtrKKUWh6QRgLMu4yIyeCU3pGzV6I7dEKqOichhkrOb/z4tVN3b3FZ84z8kDFZWmA0ouLtrkIIvX5hv6CDj 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 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) + +#define FMODE_FSNOTIFY_NONE(mode) \ + ((mode & FMODE_FSNOTIFY_MASK) == FMODE_NONOTIFY) +#define FMODE_FSNOTIFY_PERM(mode) \ + (!(mode & FMODE_NONOTIFY_PERM)) +#define FMODE_FSNOTIFY_HSM(mode) \ + ((mode & FMODE_FSNOTIFY_MASK) == 0) Also I've moved file_set_fsnotify_mode() out of line into fsnotify.c. The function gets quite big and the call is not IMO so expensive to warrant inlining. Furthermore it saves exporting some fsnotify internals to modules (in later patches). Honza -- Jan Kara SUSE Labs, CR