From patchwork Wed Sep 4 20:27:53 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 13791357 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 307EFCD4F24 for ; Wed, 4 Sep 2024 20:29:25 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A4A1E6B0349; Wed, 4 Sep 2024 16:29:22 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 9D16A6B034A; Wed, 4 Sep 2024 16:29:22 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 789E86B034B; Wed, 4 Sep 2024 16:29:22 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 561186B0349 for ; Wed, 4 Sep 2024 16:29:22 -0400 (EDT) Received: from smtpin16.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id F28ED12093E for ; Wed, 4 Sep 2024 20:29:21 +0000 (UTC) X-FDA: 82528195722.16.84F8E2B Received: from mail-oi1-f172.google.com (mail-oi1-f172.google.com [209.85.167.172]) by imf19.hostedemail.com (Postfix) with ESMTP id 245A61A0014 for ; Wed, 4 Sep 2024 20:29:19 +0000 (UTC) Authentication-Results: imf19.hostedemail.com; dkim=pass header.d=toxicpanda-com.20230601.gappssmtp.com header.s=20230601 header.b=E6z8Zmv6; spf=none (imf19.hostedemail.com: domain of josef@toxicpanda.com has no SPF policy when checking 209.85.167.172) smtp.mailfrom=josef@toxicpanda.com; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1725481665; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=jN13mVwJhuqjX4PmJ7GJ6BtR6lc23krv9oFHMk0R8ZY=; b=uz+zvoOytlRSAfFjH4J62F4ZWbC9x29x07zMs1aof0rn5TpJDbfRMANe84lTr44qTg1Aui i/qhuvbCBupz/26XbLvzmfPiUWhOQjU3E9m4vnVYZrb88gum3OzkLD61IyBKXbhn5i5rHB recPEHQA5F0jpAcInuyVxhSpSxM6fgA= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1725481665; a=rsa-sha256; cv=none; b=4TZxSKOaEs/peb3ZcTiS7xe5EbE3D/K9V9p7vmxlzTmQNkWZjpnSBsV/T9ZuypvDYztHg4 /sA9C5IpeWoDQ/Y+vmEBEHVtgbh29WbK9DAD0dkwrLtzyAnBvpV3OYlia0q+tbOt76yvyd P6txOfaNFhwoUhsihC+H07o3yxI36XE= ARC-Authentication-Results: i=1; imf19.hostedemail.com; dkim=pass header.d=toxicpanda-com.20230601.gappssmtp.com header.s=20230601 header.b=E6z8Zmv6; spf=none (imf19.hostedemail.com: domain of josef@toxicpanda.com has no SPF policy when checking 209.85.167.172) smtp.mailfrom=josef@toxicpanda.com; dmarc=none Received: by mail-oi1-f172.google.com with SMTP id 5614622812f47-3df0d9c0fbfso3773039b6e.2 for ; Wed, 04 Sep 2024 13:29:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20230601.gappssmtp.com; s=20230601; t=1725481759; x=1726086559; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=jN13mVwJhuqjX4PmJ7GJ6BtR6lc23krv9oFHMk0R8ZY=; b=E6z8Zmv6XIE8WPpO829qX6ZOQ6nKdbeTof2Ic69rEEH74NgSFXHYZ+0Z1FtNttQBs7 ZQMb3K9x7PioPALNozBaIKjy7/gd9Fk431SZVzVmRUg8wV5esic6oFMgqzUgP6gEA/yf jtyV+HIPsziKgx+oZWSP1hMGjYBB3rF/6OglmJfLyL95qqSPfcuy0tPsjyK9bwCTxmEh ycI8E9ZxUCihM+IszVMbbxWB6Ywrt+BsyK77y8k/tdGFA02ilEJrXoZo2iJ92b01s2V2 SRBxJIgbR1vaKGyit9vXcftEZDQa8s+n4PbcW+p0JQ8Bxb9idltO8V/ssa9cGNWB7XZ0 fW+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1725481759; x=1726086559; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=jN13mVwJhuqjX4PmJ7GJ6BtR6lc23krv9oFHMk0R8ZY=; b=Xb3haUGQaOnYnmQ0RNu0eEsDttRKXzxHFfInTTzhFNWFWi3DZRyvc3G8xVR5EtkHuU +K/nMzrBPtBBDRWXRIwJIsGaXt92tRUk5V+uqVj/p+VDu+HWiNdZ7ui1QR+hDKkCV18W JuN2MQV02MeyRFwe8TMFYJwlSuhEKwD7aJuojtP+WKi9aoEWOBPt5aiiUgPgNLGFmvUF HwnH8alaZy/gWErkWbtOyqlT4shMRK8Vh8fIT4hl1tV43yW/yYgJbKQEqveZXt28Fe3+ zLenVETwn0zD2OE17L4b1ZB8JE5tdkFwKDZSZAqBA0rX0hLokIKPDKhJ81A0FCiaTPKP d86g== X-Forwarded-Encrypted: i=1; AJvYcCWx5ETrmq/HmKBa1KqthPBEtFRGyLsN6T/24pHU0ZNUDjJP01Jd+OgqG4/7mwiOVGHBUyjYMJKSiw==@kvack.org X-Gm-Message-State: AOJu0YzxNqvSnDy4mQvH3sd2L7kHZwBA7BeSYNDyyJ67vAD0M+8GSxaB 5OmlEjfu4R9ZuRxJardH5qVb9257pDMeSWH6fPwW48RyMyHAOvaNPl4mJVcnHRU= X-Google-Smtp-Source: AGHT+IG+yDupiC0Kppt9fCxGX8WKPY89paC515rZx6+FiPwoVSHDWV3mC1QVmv+EWb3aMkbVDFXGwg== X-Received: by 2002:a05:6808:3c46:b0:3e0:70a:3abb with SMTP id 5614622812f47-3e0070a4179mr12332118b6e.11.1725481759225; Wed, 04 Sep 2024 13:29:19 -0700 (PDT) Received: from localhost (syn-076-182-020-124.res.spectrum.com. [76.182.20.124]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-45801b3277esm1506081cf.31.2024.09.04.13.29.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 04 Sep 2024 13:29:18 -0700 (PDT) From: Josef Bacik To: kernel-team@fb.com, linux-fsdevel@vger.kernel.org, jack@suse.cz, amir73il@gmail.com, brauner@kernel.org, linux-xfs@vger.kernel.org, linux-bcachefs@vger.kernel.org, linux-btrfs@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH v5 03/18] fsnotify: generate pre-content permission event on open Date: Wed, 4 Sep 2024 16:27:53 -0400 Message-ID: <4b235bf62c99f1f1196edc9da4258167314dc3c3.1725481503.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: MIME-Version: 1.0 X-Rspamd-Queue-Id: 245A61A0014 X-Stat-Signature: ygob6bbc9jf7pi7idygrs59d3bdsebko X-Rspamd-Server: rspam09 X-Rspam-User: X-HE-Tag: 1725481759-198695 X-HE-Meta: U2FsdGVkX1/sfjTz47GN5X6PnOpgXw5mYQrgjueI/ejed0ZKL4gxxSxvcYmqD7JYfZNVAlNxrF9ZcO8VFd7wGY118i1nO25FYQmQjKqttBua1gsRPouEz7uCCD+U3rnb+7gOW6w+gfqZaiT9z0R1tOwsHjPRulR9WxBiTaSuw4qDbxYWKumkhj1ZjMdNDCG4AQCleW4RYP1tInQvYNui/GtoHRHUO46b2fsa9jc6qPC1FWue3ABrn6yKeAhegEJkKxu4CbthuJkVcxBxJ+QeIHHNNEJGJnr257TbOsm0Bb62E6SX1xg1Vkh5vVn9w7hUNEgKXxr2xL/LHodEZ8ZN41Mb+0QA6vs5fkecJchV3hxwgXLonOdamSyDS8E+ShwTeTdPuPUWVWXiJJPWPydNVQnAwdVb9Bucfx2FoxxFuGla22sl7y/9LDEIl2JNHkJqiHMyMZwvyG6nE+7FdiAb+ZoSqMtY7qKDEJYuEsfu9DGvNwJ2QokmtB/L3UjR5rLb/YBX0N2G6X6cEde00SW7rW+yA2xQkqZBZpWSreV731cxGN68zpQAWolBKFMB0UgXXyjfeuykEuTZIC+NtTPSnyZxBgGfsQzrBDuw1L0ZdGH4GVwuBBEOoWGp9yv4ngCCSQMBC1bbl23RTG6ISLrgFR408JVUvXd32PiorzTq8s9TmiKj5VvjF1m3CpZRIG5y0XVp3wtmz16MVAqUafAFUaA883GnutyPkJly34PmflAHOVdCYx+SOcEFdJouMqB+ywwMYcq+ne9QiDhHQdLvYEIiTH6VWcF5dVXaE15/FKoygSa+IjBfib4fgR9/L4xy4ozfIzG6BXP3TyEYY/xtCIN6MaLfLPJ9PUX+glZ/ETePh3eTTIy10d7xO58o3s54aoQ5eHD9fo7bIPF5XsMUgEYuKcT55IiJrjy0ucn8FzzRYT8cp1PHGBYwop6cmwzjpV59zCJ4g4XF/3p7mp0 N5PimFlX NIeW/0hRB5gkI4sGCMHc0id96Nr+r5W83HPtWea1KPiu6WhbxmY0IE469I0Jw+QuYBQWek4harmOENeVn5/6JfH8x+3XdTdfRzy1QAlKULQMknpb7ThMXSUK2JQtRAMDMi9jibctpBGHjY8U885MHtbyV7shlkZV2lffMjgvtVTzqmuPc3p9qg1H2kQzoL6rQTIw8EbAuinMLOr0sKdfh2hi9IvlGVKqGYnjSETVzFEHSvCach5izEP5sBsVyidlWpWfNoEvNVKBy5TauKkZIZ1FU4e7u4OhKizlJd6hzVby/5D6e7Fs9xzdpH74ae/hV/hZPgP0CUjTCd22CCcQOLOI8dCMB0Et5lHuA7piXWenz0oTpDIXXH7BPHw== X-Bogosity: Ham, tests=bogofilter, spamicity=0.059638, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: From: Amir Goldstein FS_PRE_ACCESS or FS_PRE_MODIFY will be generated on open depending on file open mode. The pre-content event will be generated in addition to FS_OPEN_PERM, but without sb_writers held and after file was truncated in case file was opened with O_CREAT and/or O_TRUNC. The event will have a range info of (0..0) to provide an opportunity to fill entire file content on open. Signed-off-by: Amir Goldstein Reviewed-by: Christian Brauner --- fs/namei.c | 9 +++++++++ include/linux/fsnotify.h | 10 +++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/fs/namei.c b/fs/namei.c index 3a4c40e12f78..c16487e3742d 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -3735,6 +3735,15 @@ static int do_open(struct nameidata *nd, } if (do_truncate) mnt_drop_write(nd->path.mnt); + + /* + * This permission hook is different than fsnotify_open_perm() hook. + * This is a pre-content hook that is called without sb_writers held + * and after the file was truncated. + */ + if (!error) + error = fsnotify_file_perm(file, MAY_OPEN); + return error; } diff --git a/include/linux/fsnotify.h b/include/linux/fsnotify.h index 7600a0c045ba..fb3837b8de4c 100644 --- a/include/linux/fsnotify.h +++ b/include/linux/fsnotify.h @@ -168,6 +168,10 @@ static inline int fsnotify_file_area_perm(struct file *file, int perm_mask, fsnotify_mask = FS_PRE_MODIFY; else if (perm_mask & (MAY_READ | MAY_ACCESS)) fsnotify_mask = FS_PRE_ACCESS; + else if (perm_mask & MAY_OPEN && file->f_mode & FMODE_WRITER) + fsnotify_mask = FS_PRE_MODIFY; + else if (perm_mask & MAY_OPEN) + fsnotify_mask = FS_PRE_ACCESS; else return 0; @@ -176,10 +180,14 @@ static inline int fsnotify_file_area_perm(struct file *file, int perm_mask, /* * fsnotify_file_perm - permission hook before file access + * + * Called from read()/write() with perm_mask MAY_READ/MAY_WRITE. + * Called from open() with MAY_OPEN without sb_writers held and after the file + * was truncated. Note that this is a different event from fsnotify_open_perm(). */ static inline int fsnotify_file_perm(struct file *file, int perm_mask) { - return fsnotify_file_area_perm(file, perm_mask, NULL, 0); + return fsnotify_file_area_perm(file, perm_mask, &file->f_pos, 0); } /*