From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5E938311950; Tue, 16 Dec 2025 03:54:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857297; cv=none; b=jibkMb66OhnVQ/pRexshHMsROZFabCmqlltGWvcDNiPyDpp5uTfQqDy2Kuti2xyNCvAfNjcmkfUXO3T9rj1C5v3wqjhOnzM81bNsQ82xJqVBO5M3pgOMdkI50HDO6ADjTovWXwCq2QLfQfXUqf1bs15K/NYeeY0cX4gpHpNDSZ0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857297; c=relaxed/simple; bh=aacmgBkIekWcKT1nYvHuUWkKevrQq3dWCTP/f16lQvY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=QlHPFeJWdHGSjUtpRhHBm9M5wqeOS8b0r/TmzSx102jAzcMD0K5XOjnrYbSzgtfCKAfyTweFUO6qYAZbXmRm4gAZZjwKtN3u9Ev47F11frk/WhzUa1q4614raXuXrAAqBWOg0T0upYtyV+in2A0gNfMKBteEov/G9X44yq6zbF8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=DVJaQdtl; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="DVJaQdtl" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=F3fmLDfzzCSFX0fX01qQzZyvJwhOF7I5P+jzcyU8rOk=; b=DVJaQdtli/wYnfwrZoSZrxP90S OG38WcF+hThzXIjy//xAzteO2n79CqkD0B+YZRPnB5ZyjnFBxO26Q5IA80CA9c5L8dDwa54hhu9hN vSEQal6aG6Ne+Bf0MIwhpjwMLI0VBDorC4wj0rerBa/61A8k9c85v+3dSYXVlVtLdq1kgcjXw+AIJ mIiuh8Gz41uJMmSa4sTPltjbB368X8NvIpZkeIo+N3GpsolBs6JXmh1hfLdC1ZlmYHQLugvm7Usam ow5/82d1zmOVSfM6u6kMC/B0oc2YXVeEvsVutk640+J/7O8gGpk5DY6D0YxzxP9tLlmrf6b75bU0Z 3NugIP/A==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9e-0000000GwIa-2ljp; Tue, 16 Dec 2025 03:55:18 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 01/59] do_faccessat(): import pathname only once Date: Tue, 16 Dec 2025 03:54:20 +0000 Message-ID: <20251216035518.4037331-2-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" Convert the user_path_at() call inside a retry loop into getname_flags() + filename_lookup() + putname() and leave only filename_lookup() inside the loop. Since we have the default logics for use of LOOKUP_EMPTY (passed iff AT_EMPTY_PATH is present in flags), just use getname_uflags() and don't bother with setting LOOKUP_EMPTY in lookup_flags - getname_uflags() will pass the right thing to getname_flags() and filename_lookup() doesn't care about LOOKUP_EMPTY at all. The things could be further simplified by use of cleanup.h stuff, but let's not clutter the patch with that. Signed-off-by: Al Viro --- fs/open.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/fs/open.c b/fs/open.c index f328622061c5..f3bacc583ef0 100644 --- a/fs/open.c +++ b/fs/open.c @@ -468,6 +468,7 @@ static int do_faccessat(int dfd, const char __user *fil= ename, int mode, int flag int res; unsigned int lookup_flags =3D LOOKUP_FOLLOW; const struct cred *old_cred =3D NULL; + struct filename *name; =20 if (mode & ~S_IRWXO) /* where's F_OK, X_OK, W_OK, R_OK? */ return -EINVAL; @@ -477,8 +478,6 @@ static int do_faccessat(int dfd, const char __user *fil= ename, int mode, int flag =20 if (flags & AT_SYMLINK_NOFOLLOW) lookup_flags &=3D ~LOOKUP_FOLLOW; - if (flags & AT_EMPTY_PATH) - lookup_flags |=3D LOOKUP_EMPTY; =20 if (access_need_override_creds(flags)) { old_cred =3D access_override_creds(); @@ -486,8 +485,9 @@ static int do_faccessat(int dfd, const char __user *fil= ename, int mode, int flag return -ENOMEM; } =20 + name =3D getname_uflags(filename, flags); retry: - res =3D user_path_at(dfd, filename, lookup_flags, &path); + res =3D filename_lookup(dfd, name, lookup_flags, &path, NULL); if (res) goto out; =20 @@ -527,6 +527,7 @@ static int do_faccessat(int dfd, const char __user *fil= ename, int mode, int flag goto retry; } out: + putname(name); if (old_cred) put_cred(revert_creds(old_cred)); =20 --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 53574311592; Tue, 16 Dec 2025 03:54:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857294; cv=none; b=nQ5+HfvqeWJwmMhywb6Hg2GwV7tnDRDmPahZFJECLbKVaH9RfnXLWgzjm+Sw8V+JccNZHixHF8Vlt9nEXlY0BKa4rkZAOyyhIKkMBoiyNR5E/X3p0cDd6NUvfEalZgdWFwuGTjY/R0dvxOCPZZiiSARlHJsfvx5z6GkwO/kj4zM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857294; c=relaxed/simple; bh=l5FHgW47f+Yj1iy0m1MGYj33Um71tv4luVBFCT40jnU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=lq7Ul0XUXfQBG33ljoJ6d3q7WpPyurXFSqLSuoyjelxLv6YZGvjDo7H7w7xx5PJ8Q0tavkrX3A7EoPybh2edffdVyU8ioEYPV647O+MREhtMS8mlsVO4tll9uw1V1JwTfNC7sJWwDsIL0nXK2qsfAPtz8or4WNfH7tOqUM1IIHc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=hKJ/Kt9g; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="hKJ/Kt9g" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=ZTmwRYazdVffyBhN86itvLOlmBSFDHLQsgXip1U1wEw=; b=hKJ/Kt9gmJPoxmZGdQlBlB7d2j tywDv/KGXWzhDrSBDE+TNB0zEIUgBZVHSIDsGqr8TzY+wXflpXt/pIcMdA2D9Wfj3zKe8YwmrQ9mU UPtZ37v345lvdBQP56hAPxJEvIAcqdHMpPNZIN9UcDR/LNfV0IPYkmYutxn2d1nW7VtxOssqBVK6C d2Ud4tNhbbcYDNUhpRfAca39CQpkpN0hXxujCCNbULOOCNurSxCBxZaZRw5NaRSZpL6jHSD9k2LP8 mFaSRY1ll23sNbAXFSbri9eqMwFh/qJMO2i1Pku7crqh3Rc3rP15mXaCNpfgjObqNCowq+tpEmzcl 8k0kYtgg==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9e-0000000GwIe-3CjU; Tue, 16 Dec 2025 03:55:18 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 02/59] do_fchmodat(): import pathname only once Date: Tue, 16 Dec 2025 03:54:21 +0000 Message-ID: <20251216035518.4037331-3-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" Convert the user_path_at() call inside a retry loop into getname_flags() + filename_lookup() + putname() and leave only filename_lookup() inside the loop. Since we have the default logics for use of LOOKUP_EMPTY (passed iff AT_EMPTY_PATH is present in flags), just use getname_uflags() and don't bother with setting LOOKUP_EMPTY in lookup_flags - getname_uflags() will pass the right thing to getname_flags() and filename_lookup() doesn't care about LOOKUP_EMPTY at all. The things could be further simplified by use of cleanup.h stuff, but let's not clutter the patch with that. Signed-off-by: Al Viro --- fs/open.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/fs/open.c b/fs/open.c index f3bacc583ef0..82bfa06dbfa5 100644 --- a/fs/open.c +++ b/fs/open.c @@ -679,6 +679,7 @@ static int do_fchmodat(int dfd, const char __user *file= name, umode_t mode, unsigned int flags) { struct path path; + struct filename *name; int error; unsigned int lookup_flags; =20 @@ -686,11 +687,9 @@ static int do_fchmodat(int dfd, const char __user *fil= ename, umode_t mode, return -EINVAL; =20 lookup_flags =3D (flags & AT_SYMLINK_NOFOLLOW) ? 0 : LOOKUP_FOLLOW; - if (flags & AT_EMPTY_PATH) - lookup_flags |=3D LOOKUP_EMPTY; - + name =3D getname_uflags(filename, flags); retry: - error =3D user_path_at(dfd, filename, lookup_flags, &path); + error =3D filename_lookup(dfd, name, lookup_flags, &path, NULL); if (!error) { error =3D chmod_common(&path, mode); path_put(&path); @@ -699,6 +698,7 @@ static int do_fchmodat(int dfd, const char __user *file= name, umode_t mode, goto retry; } } + putname(name); return error; } =20 --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5EB15311C0C; Tue, 16 Dec 2025 03:54:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857297; cv=none; b=QQJbzgJy46DQu1xMtRGxq/8bH0oSfjWxzlnl5Q2ZYvJYtAe7HzwK88zHhkV7FMKnNsW+BN3FEh6vyI2v9Z81U3eaRuRNyaJLFlcac3fjCsa1mpzWUID/IKRRblaXoOWLDWfP1krZcI1vx5qFEdr4TWPcp+du6Unnm/wUDVnRg7c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857297; c=relaxed/simple; bh=VJR7OANqAnNeKsJcpMXd5sA1W1qzF/DrbRQlYMiYeY8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=M/a7w5WozzMQtT0Dzqx/rzbYHqjzO0vFJcyphvj3i8u0qnIninMFrFye7vwD7HWDQi+VEqJ3evV4a5c0jKXq6uyLnuRg2xJZ+k2cyhpc6oS9dmSnZ2rPkKdaoTl9Ij4sccgDGE/C74BYWtefjeN4ywKLBmbhIMmcu4J2GEe/Dkg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=JxN75zzx; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="JxN75zzx" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=nND/UTx2fHPWcfLy6K3U1k4zO8irk7L/OKSvicadqNs=; b=JxN75zzxsjkrCuGpmVZFPU11hv LWmmatYFiZSsKOZUBQE9iC4ljQyp5ZacKLKTOJBV3ZJNlgbrynAyCE+roj0wrnVpHa56u6GkVR2e+ jn6j1nWHcpJvhlZY8LG5wprlsxutseIxVzs7vndvhg8hb20TjsNQNONgkDUYv37gnZ6WF+Dv1QbU5 jsc6jIzlZBdoiU33NyRCwTL/SyhYre5ieQFxfopEBEySm1StDOiTUhCy5mQOkK21QpQBr5uP+ctEK 9PYtpfBfmGHl/3bLWNLvxuzl14/ZX/F0Da5vS0AiaaaMKT3go/dMlwqUcbzkydbneS/JOexguX7VK 8ElOdavA==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9e-0000000GwIj-3xdO; Tue, 16 Dec 2025 03:55:19 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 03/59] do_fchownat(): import pathname only once Date: Tue, 16 Dec 2025 03:54:22 +0000 Message-ID: <20251216035518.4037331-4-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" Convert the user_path_at() call inside a retry loop into getname_flags() + filename_lookup() + putname() and leave only filename_lookup() inside the loop. Since we have the default logics for use of LOOKUP_EMPTY (passed iff AT_EMPTY_PATH is present in flags), just use getname_uflags() and don't bother with setting LOOKUP_EMPTY in lookup_flags - getname_uflags() will pass the right thing to getname_flags() and filename_lookup() doesn't care about LOOKUP_EMPTY at all. The things could be further simplified by use of cleanup.h stuff, but let's not clutter the patch with that. Signed-off-by: Al Viro --- fs/open.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/fs/open.c b/fs/open.c index 82bfa06dbfa5..a2d775bec8c1 100644 --- a/fs/open.c +++ b/fs/open.c @@ -801,17 +801,17 @@ int do_fchownat(int dfd, const char __user *filename,= uid_t user, gid_t group, int flag) { struct path path; - int error =3D -EINVAL; + int error; int lookup_flags; + struct filename *name; =20 if ((flag & ~(AT_SYMLINK_NOFOLLOW | AT_EMPTY_PATH)) !=3D 0) - goto out; + return -EINVAL; =20 lookup_flags =3D (flag & AT_SYMLINK_NOFOLLOW) ? 0 : LOOKUP_FOLLOW; - if (flag & AT_EMPTY_PATH) - lookup_flags |=3D LOOKUP_EMPTY; + name =3D getname_uflags(filename, flag); retry: - error =3D user_path_at(dfd, filename, lookup_flags, &path); + error =3D filename_lookup(dfd, name, lookup_flags, &path, NULL); if (error) goto out; error =3D mnt_want_write(path.mnt); @@ -826,6 +826,7 @@ int do_fchownat(int dfd, const char __user *filename, u= id_t user, gid_t group, goto retry; } out: + putname(name); return error; } =20 --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5E8B63115AF; Tue, 16 Dec 2025 03:54:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857291; cv=none; b=lYnbkOAJKTDqMNLi8yt6qQML6qAYaYSvdZ3A8XJWTbyM3tq9A6MzfMCKdIpPG9ryYOnoSlZceoARjToX3t358sI2fT6RRdTlScF3YTtKLE8qGDCODysTPvMyEambzHDeFcug6hb9an9gG+EjX1fmkw3LQ8GmXC+MNCEn1Q7wQJ0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857291; c=relaxed/simple; bh=z/VLR9eMxqpn2kvuklpoYwJtnuXwpuC7asBssPdV4t8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Yp7MPB0jMr7Zz4IoJoLdpMMMyO+PxWrExP3CqA2sEplt+EFEqc5Icaoow2DJXzgq9ubWpmIbuJfqZrJivuAMzwb5e9eM7EIxGNCoakcOBLOEuU/u5/u+rLbirQmsTJ5LHNAJEaURzn6NxNB4UBaVYxDxROPa1BSfyip/hzFZw/s= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=pcjUgE3B; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="pcjUgE3B" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=psyse3tF8YfUqMHWKKqTPMQFoI6DnJDYxVm2oFFXrG8=; b=pcjUgE3BcltxGsi7YIigOtnx8e 2Tn3cqRa5VpD6SeDPKQFO54G8ZceH1j3LO+OQgjrfTx8FLBoBUpyNwB6oJgEJ39YmOMsIRpWcO+W6 harvNUgfA3QWuPGUUbN6Ea4YPi/NwY/kQX9KheuIBv07i1FLJXWLdbf2awTeh0meqQO8SZBM4YhKu PQ4oER17eIQ9pd18qC6w7ZBlTQuR5zvCPGGuIFRUfken19mJfkvGzTgXXNhDead5Ep8RMFyfgIedP vEo2VdBlAPl6CeDpLVneTh5CPfWNFg9RqmbujPWBFiiCsZJWkSqyjewqeP+BpuDPxOKy3oaVamlH7 7/QqMgVw==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9f-0000000GwIp-0Gs1; Tue, 16 Dec 2025 03:55:19 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 04/59] do_utimes_path(): import pathname only once Date: Tue, 16 Dec 2025 03:54:23 +0000 Message-ID: <20251216035518.4037331-5-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" Convert the user_path_at() call inside a retry loop into getname_flags() + filename_lookup() + putname() and leave only filename_lookup() inside the loop. Since we have the default logics for use of LOOKUP_EMPTY (passed iff AT_EMPTY_PATH is present in flags), just use getname_uflags() and don't bother with setting LOOKUP_EMPTY in lookup_flags - getname_uflags() will pass the right thing to getname_flags() and filename_lookup() doesn't care about LOOKUP_EMPTY at all. The things could be further simplified by use of cleanup.h stuff, but let's not clutter the patch with that. Signed-off-by: Al Viro --- fs/utimes.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/fs/utimes.c b/fs/utimes.c index 86f8ce8cd6b1..84889ea1780e 100644 --- a/fs/utimes.c +++ b/fs/utimes.c @@ -8,6 +8,7 @@ #include #include #include +#include "internal.h" =20 static bool nsec_valid(long nsec) { @@ -83,27 +84,27 @@ static int do_utimes_path(int dfd, const char __user *f= ilename, { struct path path; int lookup_flags =3D 0, error; + struct filename *name; =20 if (flags & ~(AT_SYMLINK_NOFOLLOW | AT_EMPTY_PATH)) return -EINVAL; =20 if (!(flags & AT_SYMLINK_NOFOLLOW)) lookup_flags |=3D LOOKUP_FOLLOW; - if (flags & AT_EMPTY_PATH) - lookup_flags |=3D LOOKUP_EMPTY; + name =3D getname_uflags(filename, flags); =20 retry: - error =3D user_path_at(dfd, filename, lookup_flags, &path); + error =3D filename_lookup(dfd, name, lookup_flags, &path, NULL); if (error) - return error; - + goto out; error =3D vfs_utimes(&path, times); path_put(&path); if (retry_estale(error, lookup_flags)) { lookup_flags |=3D LOOKUP_REVAL; goto retry; } - +out: + putname(name); return error; } =20 --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5ED15311C19; Tue, 16 Dec 2025 03:54:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857292; cv=none; b=BiVFWRARlPrG1gukInQ25dBGUSVQxj8DjxZR3lEH9BoZmk2XYBnP7SaHBJ9n7bUfrmgZZXS0YXTf0gAQJVjOU7UWHc+67FyYRvarDee86Ef4hOCKmIw5oSjzVlwDYh19MfjcIcgIj4K6AVNI1E9LpukAjWzsVWd+UuLX2P+CVKQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857292; c=relaxed/simple; bh=4oxuQFLk8YkIq/5mYSLl2XCxIvuC91NG8EaCN9dotBs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dfoJN6vTQIeMlCS+EobK2y4VwkZ65o+tkOOpBeeA8/TQN4FwQ76szCzVnL7hcKq9elgmQOkR8gfowzAqdeGLWTNCjR0jK6f6etYJS+O/CUZn92LbPcHTiZCE5PgA4MpzzBP6YSuBwsbNSAbbveN2HHKegRoiCUhXL2TfhkDaxyE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=Lbnc+pq+; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="Lbnc+pq+" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=12NAM8k9D9tYz7pZJw55n8bdiFp2kiCbLsvUoQCJquE=; b=Lbnc+pq+S9fGV0nw14zpAbhCTK nJfi9fUZDCgDpQOnqlB/PQ8yEW5pllRCfhEYjuASm0yQi97LiAa6V29Wl7uMtXqdzbIxHLiZsJEN4 iBoN+6nZOlKKCB4lGbn28g/lhzJYrF2sfxdOPW9yBXxqzqeJ8h+mEmc+VjR4sN1gZgeSavPOTUfZz hjcmoGZvj1Vzw8BRqoSyRcY2crz2H4Y/V8iPcTMQGrY6QtP2gwNakTFcyy7Vrc+FvwPb2Y+pWz+ZF 1sIDKJuBSRmTAquHsMFpkKD/goSqOMInM0y7fpslDvKmLsURvUGiAAsrm81e4VQt56nRfNf8xPD+E obkz9fsw==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9f-0000000GwIt-0cyA; Tue, 16 Dec 2025 03:55:19 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 05/59] chdir(2): import pathname only once Date: Tue, 16 Dec 2025 03:54:24 +0000 Message-ID: <20251216035518.4037331-6-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" Convert the user_path_at() call inside a retry loop into getname_flags() + filename_lookup() + putname() and leave only filename_lookup() inside the loop. In this case we never pass LOOKUP_EMPTY, so getname_flags() is equivalent to plain getname(). The things could be further simplified by use of cleanup.h stuff, but let's not clutter the patch with that. Signed-off-by: Al Viro --- fs/open.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/fs/open.c b/fs/open.c index a2d775bec8c1..67c114bdeac5 100644 --- a/fs/open.c +++ b/fs/open.c @@ -555,8 +555,9 @@ SYSCALL_DEFINE1(chdir, const char __user *, filename) struct path path; int error; unsigned int lookup_flags =3D LOOKUP_FOLLOW | LOOKUP_DIRECTORY; + struct filename *name =3D getname(filename); retry: - error =3D user_path_at(AT_FDCWD, filename, lookup_flags, &path); + error =3D filename_lookup(AT_FDCWD, name, lookup_flags, &path, NULL); if (error) goto out; =20 @@ -573,6 +574,7 @@ SYSCALL_DEFINE1(chdir, const char __user *, filename) goto retry; } out: + putname(name); return error; } =20 --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 534753112D0; Tue, 16 Dec 2025 03:54:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857293; cv=none; b=a+76I2TyIeVX2a827UQ7klrms0VqgRCBHi0CsuP2eHHaJo/yeEegIhJrDvCkdAlJTFLVcx2shUCMCBJBwDm7uo0b84XHXQeWKer/65af2Sa7aRXPCErCSuNioZgpkSbpMkqGns2rpge0WK6XAZzcBBHduNLcM6NRzKBRrbAJjSM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857293; c=relaxed/simple; bh=HNPcrjOGPdK+rUjKiP0RktSumxuu6OLS32qJgPhWCP4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=iHOEaGHCJIlGz6Q0wI4oap+cUVBctNKTVB6BnyDjCMVzFwbejUb4NXgk0LAogWk20SZhoiestwuCtGIyNy5H61HFP3hXSsyRL36tpo4RSljM2WNs02D8s3zXsc46DNORSGoxc1Z/VuzyH2dDB6B64wkODuLyPOm/5BEQn7Hq4wI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=Z7i2uaao; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="Z7i2uaao" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=Inog8S2asLcYt8rxshEj7Ck1jbPHw2VzSX4bDPUW0B0=; b=Z7i2uaaoWgMeJXqqNZVpVdHmR+ IFgoxFwnM04IqJ1V6l/5+FPlN1KfAhpWM42okwxlYcmoN6ILP38A1QC8kOWYAz7bR5TI5ME0aLe2a Ksq0zmto22pfU60GXrV/4qOubg2nfm1tLDiR+yfA0FK6+UU+AYqYhxt3x3eU9Lzf/W2LgGN9N8dxv PlzIhNq9c1LYUe+MMcPWH7gafiWlTEvINYu2kQ1xZ0XLE+pJqxr1Y6n3gxhLE6OE0IHDTkmkIaIvP VieW/AvQPKBZHpKCfi5yotV/4RQMG2mMKDwx7qq60GjR8GlhZSTwoDK5iQh8zbnEF7AhPU6Gv5Af2 G/nK2Ouw==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9f-0000000GwIz-0uFF; Tue, 16 Dec 2025 03:55:19 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 06/59] chroot(2): import pathname only once Date: Tue, 16 Dec 2025 03:54:25 +0000 Message-ID: <20251216035518.4037331-7-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" Convert the user_path_at() call inside a retry loop into getname_flags() + filename_lookup() + putname() and leave only filename_lookup() inside the loop. In this case we never pass LOOKUP_EMPTY, so getname_flags() is equivalent to plain getname(). The things could be further simplified by use of cleanup.h stuff, but let's not clutter the patch with that. Signed-off-by: Al Viro --- fs/open.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/fs/open.c b/fs/open.c index 67c114bdeac5..6f48fa9c756a 100644 --- a/fs/open.c +++ b/fs/open.c @@ -600,8 +600,9 @@ SYSCALL_DEFINE1(chroot, const char __user *, filename) struct path path; int error; unsigned int lookup_flags =3D LOOKUP_FOLLOW | LOOKUP_DIRECTORY; + struct filename *name =3D getname(filename); retry: - error =3D user_path_at(AT_FDCWD, filename, lookup_flags, &path); + error =3D filename_lookup(AT_FDCWD, name, lookup_flags, &path, NULL); if (error) goto out; =20 @@ -625,6 +626,7 @@ SYSCALL_DEFINE1(chroot, const char __user *, filename) goto retry; } out: + putname(name); return error; } =20 --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 533C63112C2; Tue, 16 Dec 2025 03:54:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857292; cv=none; b=WqGWaNq01iGOu8T1e5YtS4C7ZlQfeFwrGIpamq/NUx0c3wKRqC6zpbajHAfpIdUCT6QELow2GC9ct2q8XauzzW8EztIZGedlpGXI4QWa21CeXtW8tW9nsvjIcxCjgIVRDOTXXL0wVrZz9JqIGwUUlcdHw+aZRPVHU5f2SC2tDds= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857292; c=relaxed/simple; bh=5MEqgjhpmzI29H1uV/1SQLwXuo398WOo5iQ8G4kZTTs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Qo3cJz/0QdXdtRSiO2DVOOQXfa0C1TcPxmacoA2XDjSVBg9fwiRhzP/Cl8V4nmmluWWbgV96Qv3pENXZ+HOXmo3JsVP4JYVQl74LtTnx4zDd803gpOITgjW9bBBOkb7tZhpmZHpbdKn2imH3yfcLLo6Vh0VrDqemIS03fNFQ9mY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=eb5g0Wxa; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="eb5g0Wxa" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=H3lRaX9hzJYaGyPHgtEsqC7lsKDUGMd09oess7PslzA=; b=eb5g0Wxazt+Ak80G5ERSgW1fD+ 0+lIuT/W0nNu0zsE8QO2dhchOeKq8AJyorJixpuB/zoGrbDaGjJoqiV30O8uD5n+Cqxhvt7YMkgBt NSjAdjqdik5mFHWESNO/+q2cqYDcbxz7DMhbHQ/OUuvWomhbs+pH4n2kl1ioiNuhfhGf7kfRNAC3o BRPvVmSiMNXn5fEEEPsWUBzqKTDYu3Cn2MHQJxM3UFgyh6+m7F/LmZ0AhEejO8YZ+tuw1lfBf65Hb XYlcj8QLNx54t2kwoZUZcvFRxKXWQjWcFdHFj8nStPPgk28k5vem9ZJD3oSDu2O9z0UjlWdXfwekM 3Xn4LFTA==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9f-0000000GwJ2-1AHS; Tue, 16 Dec 2025 03:55:19 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 07/59] user_statfs(): import pathname only once Date: Tue, 16 Dec 2025 03:54:26 +0000 Message-ID: <20251216035518.4037331-8-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" Convert the user_path_at() call inside a retry loop into getname_flags() + filename_lookup() + putname() and leave only filename_lookup() inside the loop. In this case we never pass LOOKUP_EMPTY, so getname_flags() is equivalent to plain getname(). The things could be further simplified by use of cleanup.h stuff, but let's not clutter the patch with that. Signed-off-by: Al Viro --- fs/statfs.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/fs/statfs.c b/fs/statfs.c index a45ac85e6048..a5671bf6c7f0 100644 --- a/fs/statfs.c +++ b/fs/statfs.c @@ -99,8 +99,9 @@ int user_statfs(const char __user *pathname, struct kstat= fs *st) struct path path; int error; unsigned int lookup_flags =3D LOOKUP_FOLLOW|LOOKUP_AUTOMOUNT; + struct filename *name =3D getname(pathname); retry: - error =3D user_path_at(AT_FDCWD, pathname, lookup_flags, &path); + error =3D filename_lookup(AT_FDCWD, name, lookup_flags, &path, NULL); if (!error) { error =3D vfs_statfs(&path, st); path_put(&path); @@ -109,6 +110,7 @@ int user_statfs(const char __user *pathname, struct kst= atfs *st) goto retry; } } + putname(name); return error; } =20 --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 535F2311599; Tue, 16 Dec 2025 03:54:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857292; cv=none; b=ChGXsIiVsJfj7ZRDnByY2tBuq0yhv12I6n3z7o3I+7iJLi8Fe6c2J2ZFx9mxd2OP94MiLl3Y3ok+kX2/47RgVWdpRaRle/DtUME2MigqWIO6iZQaqnjrKsm0SFG4q63I37lhgVozcMGeJMdMGx08J+Xi6se8wxY0QDzSkZvQ0jI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857292; c=relaxed/simple; bh=zFlDLU2alFVD/MwuTFbdq6QS587tb9atKC26F68cFjo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=nHML1Fnw6Y7LsUanaGv6rhR+HFbASn9PPD35aLAfdbRY9bPlqVtBwVwgI6JEAicJXsOBSs8c/ORbOXQt1vOZ1i9GxxKuTVMaHfnaWFvEGQ88TTt0sg/gnrh/JLesQwWqz9HF0K4aJf0Fy3pmrvh/UfXBPkbNKPOiGt59QsGwvB4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=ELkT/aZj; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="ELkT/aZj" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=KE0bqgoAYg4WN/vY/qas7LhrImQSJi8EcGd+/Tk2T7o=; b=ELkT/aZjoe+4w38oxhHjW32mj7 KlhZpqFckSRazJNv9Vyl52gIdsJc8fNwgow/ftKfDCjm6jOPaS2AjDOjEACW5K+SLsbGqqBT1CXop f+7UuST5NmWGBAIXSypgGqrERYasxIJnZ707j5m/L0EjvNUo9cq5RCk01+r7O/vEkjpTOGAbeP2uX RA9hDe+7m2ce9CDSLcgr8cZTw5y3Qe7omiSLjsuuY9sPPy1TZw8NW+xtXcC7XurvhSksHDKc6ZxW9 CetKnJxTLEHSkLKgAX2VY2OuCHa/AHBWJmRz/Q7vtmMeEAFwzkL1TLZieFnpBSA++EBkeod+iaSIz u1wNZT+A==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9f-0000000GwJ7-1esV; Tue, 16 Dec 2025 03:55:19 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 08/59] do_sys_truncate(): import pathname only once Date: Tue, 16 Dec 2025 03:54:27 +0000 Message-ID: <20251216035518.4037331-9-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" Convert the user_path_at() call inside a retry loop into getname_flags() + filename_lookup() + putname() and leave only filename_lookup() inside the loop. In this case we never pass LOOKUP_EMPTY, so getname_flags() is equivalent to plain getname(). The things could be further simplified by use of cleanup.h stuff, but let's not clutter the patch with that. Signed-off-by: Al Viro --- fs/open.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/fs/open.c b/fs/open.c index 6f48fa9c756a..2fea68991d42 100644 --- a/fs/open.c +++ b/fs/open.c @@ -129,14 +129,16 @@ EXPORT_SYMBOL_GPL(vfs_truncate); int do_sys_truncate(const char __user *pathname, loff_t length) { unsigned int lookup_flags =3D LOOKUP_FOLLOW; + struct filename *name; struct path path; int error; =20 if (length < 0) /* sorry, but loff_t says... */ return -EINVAL; =20 + name =3D getname(pathname); retry: - error =3D user_path_at(AT_FDCWD, pathname, lookup_flags, &path); + error =3D filename_lookup(AT_FDCWD, name, lookup_flags, &path, NULL); if (!error) { error =3D vfs_truncate(&path, length); path_put(&path); @@ -145,6 +147,7 @@ int do_sys_truncate(const char __user *pathname, loff_t= length) lookup_flags |=3D LOOKUP_REVAL; goto retry; } + putname(name); return error; } =20 --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5EB94311C15; Tue, 16 Dec 2025 03:54:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857292; cv=none; b=iuiaGFpDPiwKs0XJG2qq+Mvhst2csITyaoI+Jx7EQ4J0N8C0L7BtCT9th7dDE9ONsOH4iPSntPmBbAHiZFRFkpsj9vqCcv4oZBdRzyWvGwThQR20arrsqhlFuQQ5+78dazZno3f2eO0e2tKeWhiMKZuXK/gzifLCiP8TVXCK+8w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857292; c=relaxed/simple; bh=ejixYtbS5/J13hPkZAA0xbfFwhUsT8keMfQ9xW+VTHo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=demtMCJ1BUEvNkgR5E+SkpXvohxW7xf7rDxTl3LpYreYECNkTRzVWE75eU+FILZKktcT7YwSVEpx3+XopxnvGqhj2MiahTmayMn/nSx10fHZs28wwhSkwRWphMaxEgA+HAMD1W9Jmz/7GKKzYQB6j4HIeTWqNnuSTWkaNgdRphg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=be72XFVB; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="be72XFVB" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=dtcntkzvfcdf8HXOy2/XIfUxX4DMLOCsDkWNa4rKvpM=; b=be72XFVB7ZOfD0uyAW3SN0AJ3K 6XOuPn5PSVCmrK/RQPq3AgmZolOzeiGdPslZt9es/OEC74utg2Xa5cV2xSSXmGN4X0R7xsOi6wj6u 9elxarioWCQgoQbPlw6DJu5rtOtNX++UbWete+BufWyDcZ/QaOS2g8wj949zSRtlAK41rsxZvZC8U wCyfzJ9a4ssBmaTyq3iaswkAB8FRb0al1atA3VnOJVUS7jNmvIXSxW8emPJnGfkTLg0kTssrPh3E9 rK8FRFzUgrl0cqxT+V2EK4VUxqBMp0VzukoE0ViUrBFqwWh2b7tsNlM4USXaekCbU2Kjlo3d4knno o+vAsqLg==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9f-0000000GwJB-27tn; Tue, 16 Dec 2025 03:55:19 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 09/59] do_readlinkat(): import pathname only once Date: Tue, 16 Dec 2025 03:54:28 +0000 Message-ID: <20251216035518.4037331-10-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" Take getname_flags() and putname() outside of retry loop. Since getname_flags() is the only thing that cares about LOOKUP_EMPTY, don't bother with setting LOOKUP_EMPTY in lookup_flags - just pass it to getname_flags() and be done with that. The things could be further simplified by use of cleanup.h stuff, but let's not clutter the patch with that. Signed-off-by: Al Viro --- fs/stat.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fs/stat.c b/fs/stat.c index 6c79661e1b96..ee9ae2c3273a 100644 --- a/fs/stat.c +++ b/fs/stat.c @@ -566,13 +566,13 @@ static int do_readlinkat(int dfd, const char __user *= pathname, struct path path; struct filename *name; int error; - unsigned int lookup_flags =3D LOOKUP_EMPTY; + unsigned int lookup_flags =3D 0; =20 if (bufsiz <=3D 0) return -EINVAL; =20 + name =3D getname_flags(pathname, LOOKUP_EMPTY); retry: - name =3D getname_flags(pathname, lookup_flags); error =3D filename_lookup(dfd, name, lookup_flags, &path, NULL); if (unlikely(error)) { putname(name); @@ -593,11 +593,11 @@ static int do_readlinkat(int dfd, const char __user *= pathname, error =3D (name->name[0] =3D=3D '\0') ? -ENOENT : -EINVAL; } path_put(&path); - putname(name); if (retry_estale(error, lookup_flags)) { lookup_flags |=3D LOOKUP_REVAL; goto retry; } + putname(name); return error; } =20 --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7C5613126B7; Tue, 16 Dec 2025 03:54:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857294; cv=none; b=MRzrJ9TX20K/M8K7rBA71U9JSd2wDNr8OTRTtEztQuCeGvuxbNwF+cSitmypURleHZ5KYAo5ZURwATNH+l1zfdpsmWvPrzBgPOp0zuutvF6blLHiUPtbq5GogeEJv9Jfa91YIdAF4uQpOiOGnKtMy10x67mHpw8ufv9CFbtbGys= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857294; c=relaxed/simple; bh=lb3EMFbRy3iVLlvVw9o4yx1rPM2sOeo72ZaKhXUdqnQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=VLWV/LWI99PYNt9daEaaPeHfEKBNKcyfhYusvLWk+i37OGTg9vMMUVlHQ+RMyj48dGHYjhJHlQtvgixCl2CZNLouGLJ1bR3H8XfxWJ1nxQT8/bZLf8Tw7xpsbG+bcI876VDX+jvm3wczxq5WqHyUtat8vP8W2ZcbD0s8/P1k3Uo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=dJH1yn0D; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="dJH1yn0D" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=Ic83T1sM/0u+QfRr2ZI5E2CaCzuB+vN5phJagbLYJJ4=; b=dJH1yn0DGgL8jEFzsjaRKtCtiq z/TfhzQNnKzUf4ykoh5y9+taGtDFItPlLnd2+ebgfGumxifZJwkzBGnww9GAmpWEZ3sg3ekDYXsbV hHoAlJRZZ+BHCZ+DNorThJFTnwVXyBvkWdw8mjdqGGq6IvEDkdWwh23UVA56SMPo6k/iP2Th61+mA 5krC8dfDkrvbC7L2uziCaYJHlQ8Jjb1raq6yleWF646ew2Q2sjLx3YG3cc2c57ZSS3ROfoPm7jS1r dJa+1pZfHItwC4ygJCUFaHwVzAKdgz9OIJ77fyxLfVkuJBDQdP9A5ae6aXNpMJT3LF6bwLvAYw92n 3goXg8GQ==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9f-0000000GwJH-2ZMy; Tue, 16 Dec 2025 03:55:19 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 10/59] get rid of audit_reusename() Date: Tue, 16 Dec 2025 03:54:29 +0000 Message-ID: <20251216035518.4037331-11-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" Originally we tried to avoid multiple insertions into audit names array during retry loop by a cute hack - memorize the userland pointer and if there already is a match, just grab an extra reference to it. Cute as it had been, it had problems - two identical pointers had audit aux entries merged, two identical strings did not. Having different behaviour for syscalls that differ only by addresses of otherwise identical string arguments is obviously wrong - if nothing else, compiler can decide to merge identical string literals. Besides, this hack does nothing for non-audited processes - they get a fresh copy for retry. It's not time-critical, but having behaviour subtly differ that way is bogus. These days we have very few places that import filename more than once (9 functions total) and it's easy to massage them so we get rid of all re-imports. With that done, we don't need audit_reusename() anymore. There's no need to memorize userland pointer either. Acked-by: Paul Moore Signed-off-by: Al Viro --- fs/namei.c | 11 +++-------- include/linux/audit.h | 11 ----------- include/linux/fs.h | 1 - kernel/auditsc.c | 23 ----------------------- 4 files changed, 3 insertions(+), 43 deletions(-) diff --git a/fs/namei.c b/fs/namei.c index bf0f66f0e9b9..f22cfdff72ab 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -125,9 +125,8 @@ =20 #define EMBEDDED_NAME_MAX (PATH_MAX - offsetof(struct filename, iname)) =20 -static inline void initname(struct filename *name, const char __user *uptr) +static inline void initname(struct filename *name) { - name->uptr =3D uptr; name->aname =3D NULL; atomic_set(&name->refcnt, 1); } @@ -139,10 +138,6 @@ getname_flags(const char __user *filename, int flags) char *kname; int len; =20 - result =3D audit_reusename(filename); - if (result) - return result; - result =3D __getname(); if (unlikely(!result)) return ERR_PTR(-ENOMEM); @@ -210,7 +205,7 @@ getname_flags(const char __user *filename, int flags) return ERR_PTR(-ENAMETOOLONG); } } - initname(result, filename); + initname(result); audit_getname(result); return result; } @@ -268,7 +263,7 @@ struct filename *getname_kernel(const char * filename) return ERR_PTR(-ENAMETOOLONG); } memcpy((char *)result->name, filename, len); - initname(result, NULL); + initname(result); audit_getname(result); return result; } diff --git a/include/linux/audit.h b/include/linux/audit.h index 536f8ee8da81..d936a604d056 100644 --- a/include/linux/audit.h +++ b/include/linux/audit.h @@ -316,7 +316,6 @@ extern void __audit_uring_exit(int success, long code); extern void __audit_syscall_entry(int major, unsigned long a0, unsigned lo= ng a1, unsigned long a2, unsigned long a3); extern void __audit_syscall_exit(int ret_success, long ret_value); -extern struct filename *__audit_reusename(const __user char *uptr); extern void __audit_getname(struct filename *name); extern void __audit_inode(struct filename *name, const struct dentry *dent= ry, unsigned int flags); @@ -380,12 +379,6 @@ static inline void audit_syscall_exit(void *pt_regs) __audit_syscall_exit(success, return_code); } } -static inline struct filename *audit_reusename(const __user char *name) -{ - if (unlikely(!audit_dummy_context())) - return __audit_reusename(name); - return NULL; -} static inline void audit_getname(struct filename *name) { if (unlikely(!audit_dummy_context())) @@ -624,10 +617,6 @@ static inline struct audit_context *audit_context(void) { return NULL; } -static inline struct filename *audit_reusename(const __user char *name) -{ - return NULL; -} static inline void audit_getname(struct filename *name) { } static inline void audit_inode(struct filename *name, diff --git a/include/linux/fs.h b/include/linux/fs.h index 04ceeca12a0d..f48149f3c086 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -2411,7 +2411,6 @@ extern struct kobject *fs_kobj; struct audit_names; struct filename { const char *name; /* pointer to actual string */ - const __user char *uptr; /* original userland pointer */ atomic_t refcnt; struct audit_names *aname; const char iname[]; diff --git a/kernel/auditsc.c b/kernel/auditsc.c index dd0563a8e0be..67d8da927381 100644 --- a/kernel/auditsc.c +++ b/kernel/auditsc.c @@ -2169,29 +2169,6 @@ static struct audit_names *audit_alloc_name(struct a= udit_context *context, return aname; } =20 -/** - * __audit_reusename - fill out filename with info from existing entry - * @uptr: userland ptr to pathname - * - * Search the audit_names list for the current audit context. If there is = an - * existing entry with a matching "uptr" then return the filename - * associated with that audit_name. If not, return NULL. - */ -struct filename * -__audit_reusename(const __user char *uptr) -{ - struct audit_context *context =3D audit_context(); - struct audit_names *n; - - list_for_each_entry(n, &context->names_list, list) { - if (!n->name) - continue; - if (n->name->uptr =3D=3D uptr) - return refname(n->name); - } - return NULL; -} - /** * __audit_getname - add a name to the list * @name: name to add --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E09973126C6; Tue, 16 Dec 2025 03:54:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857294; cv=none; b=nR6hdfh6qfqOGj26uKf9JfnctLq31ZCoYSHTj92mnJ7V+fWOc4LRgNfHwQfGN4OaQBhMRQ4ywyEQBeCXSSP6XshoZXuTxao2j8VTIUSXypvfe/eDKqmYbhlxK43xdubKZ5eTS/KLnOfcVFzXGvdGuQnnlZcuqcQ9O1oENx7DkTQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857294; c=relaxed/simple; bh=N3bzYYzl+DBfYeHkTGMzoMGD1GYwgZNy3esxqIDMXYk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=DcbF4gB5nt4Xf6HkbFU3E6iQAdsoY/qaheL6kgfKnp5HpDt38a3Y4lQZSuwfdbFWz2WWvGqvP9f0yWpWkGdfLTRBDtlaXSkPjxepSXSEJnbVYkfpLIrNlqii3nFfaf84ocpLAY8vC5T9jovfL3hVDkSVTXmurQK0hGGhCAns5QI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=osp0X3iv; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="osp0X3iv" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=0Xl+6SQ0XJFfIjqeDQOUsPFDKShZykoLbc70TV/ebzA=; b=osp0X3iv77x7+NcilYlVZZgMRK DjoxyxQfQBfoxYYZI6taeJ2HwtS4Qr6eSogG3DNu7Jy2aw0vW8R57AGnfw1hv5mjDTceLxt+mSOjg 4DYV1o5L23v1Y5I+kV/6g1JgquLWNxQ16MqUUNFSkTe6t4xqrxxlKM0Rz7/7qUd+aKFcSMlmbaDFV XN1SEGK7Uay8+mwc/vbMVrN5Fs+/ynQCWySScwYvMSAZHznEc23gpHnlWe0lE76StWg0jWtIbeXTP eZRP2yi9swJuuH7Cm+UuhJLw7hXdvmZB7WQZD+r+xODzXv3OhSOGdkz972HBQWINWE2eqq6M0+O5v M9LSkBBg==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9f-0000000GwJN-30sx; Tue, 16 Dec 2025 03:55:19 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 11/59] ntfs: ->d_compare() must not block Date: Tue, 16 Dec 2025 03:54:30 +0000 Message-ID: <20251216035518.4037331-12-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" ... so don't use __getname() there. Switch it (and ntfs_d_hash(), while we are at it) to kmalloc(PATH_MAX, GFP_NOWAIT). Yes, ntfs_d_hash() almost certainly can do with smaller allocations, but let ntfs folks deal with that - keep the allocation size as-is for now. Stop abusing names_cachep in ntfs, period - various uses of that thing in there have nothing to do with pathnames; just use k[mz]alloc() and be done with that. For now let's keep sizes as-in, but AFAICS none of the users actually want PATH_MAX. Signed-off-by: Al Viro --- fs/ntfs3/inode.c | 6 +++--- fs/ntfs3/namei.c | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/fs/ntfs3/inode.c b/fs/ntfs3/inode.c index 0a9ac5efeb67..d9782bdf8681 100644 --- a/fs/ntfs3/inode.c +++ b/fs/ntfs3/inode.c @@ -1281,7 +1281,7 @@ int ntfs_create_inode(struct mnt_idmap *idmap, struct= inode *dir, fa |=3D FILE_ATTRIBUTE_READONLY; =20 /* Allocate PATH_MAX bytes. */ - new_de =3D kmem_cache_zalloc(names_cachep, GFP_KERNEL); + new_de =3D kzalloc(PATH_MAX, GFP_KERNEL); if (!new_de) { err =3D -ENOMEM; goto out1; @@ -1723,7 +1723,7 @@ int ntfs_link_inode(struct inode *inode, struct dentr= y *dentry) struct NTFS_DE *de; =20 /* Allocate PATH_MAX bytes. */ - de =3D kmem_cache_zalloc(names_cachep, GFP_KERNEL); + de =3D kzalloc(PATH_MAX, GFP_KERNEL); if (!de) return -ENOMEM; =20 @@ -1761,7 +1761,7 @@ int ntfs_unlink_inode(struct inode *dir, const struct= dentry *dentry) return -EINVAL; =20 /* Allocate PATH_MAX bytes. */ - de =3D kmem_cache_zalloc(names_cachep, GFP_KERNEL); + de =3D kzalloc(PATH_MAX, GFP_KERNEL); if (!de) return -ENOMEM; =20 diff --git a/fs/ntfs3/namei.c b/fs/ntfs3/namei.c index 3b24ca02de61..cc1a701a4c72 100644 --- a/fs/ntfs3/namei.c +++ b/fs/ntfs3/namei.c @@ -407,7 +407,7 @@ static int ntfs_d_hash(const struct dentry *dentry, str= uct qstr *name) /* * Try slow way with current upcase table */ - uni =3D kmem_cache_alloc(names_cachep, GFP_NOWAIT); + uni =3D kmalloc(PATH_MAX, GFP_NOWAIT); if (!uni) return -ENOMEM; =20 @@ -429,7 +429,7 @@ static int ntfs_d_hash(const struct dentry *dentry, str= uct qstr *name) err =3D 0; =20 out: - kmem_cache_free(names_cachep, uni); + kfree(uni); return err; } =20 @@ -468,7 +468,7 @@ static int ntfs_d_compare(const struct dentry *dentry, = unsigned int len1, * Try slow way with current upcase table */ sbi =3D dentry->d_sb->s_fs_info; - uni1 =3D __getname(); + uni1 =3D kmalloc(PATH_MAX, GFP_NOWAIT); if (!uni1) return -ENOMEM; =20 @@ -498,7 +498,7 @@ static int ntfs_d_compare(const struct dentry *dentry, = unsigned int len1, ret =3D !ntfs_cmp_names_cpu(uni1, uni2, sbi->upcase, false) ? 0 : 1; =20 out: - __putname(uni1); + kfree(uni1); return ret; } =20 --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0CFE2312803; Tue, 16 Dec 2025 03:54:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857299; cv=none; b=fTciQZtwIq5VLxi4Ts9160OPI/lgIGPNLh2iiaQhsOls7S9SFnKuoVK44uJykkWTuknhXJ/Zxwga72ZLRXc/4DU5IzHSX7pesHIjd0I6kqniiXbe+IC6OpOpljnR359ObQCHBs2eapd4ArQK1f5fE2BcAzaKfCC32daxeJCnSIg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857299; c=relaxed/simple; bh=S4VYrqztxn3qx2+ce8nOumRfGqsXr/vKT8X35BxAw9s=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=BSGyKBtjFl7IIFH7EZ04z4RbltFWKW05AV/z5LN7AJAbtWUnlLRba2I13qmnpn3kG+4jSR+y2/25aoAlQR4kK1qAad+80psvKgFA0nK4v1XYZPWcwEOiRIHJU73WvkwhTYc5HlzNsulJo3eCSJJJGGf9PoBbTbjwew1fJpWdh34= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=r8nkNad4; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="r8nkNad4" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=mxa3cbqR5z2NPq9lAeRLIRLOjiQkAso1d9Wu9XUX5zE=; b=r8nkNad4hXV+URJB4qQ2yAxOPW jWM9X95xX6dQQ6b5CKbIUlHuTpNc0qmad3R+Pha8udiMiaO1qAn7AToy2TIst95vUZL74Gax01TGO GgbCVMgmQUNHjmSGqkosWiYt0XC/M6VRbROmRYUPfQP0/lFxS+gW5HnaJ/ivyF7Z70P3MHrhib4dK xTAyITjioWWzn6eiGspOGDYKtfg3SYwt3P5tjA90AQIFTssv0OWZWFxCGq6T9dPF+wsgc+6IJkN4r 9LlB4PMzQanufN/SSwWXBIr2wp6Q0/gikd/iXi//6wMB13SJgEk0MNgh9alfathqY3rvXfY1z0pe3 pWQt9IFA==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9f-0000000GwJR-3Tso; Tue, 16 Dec 2025 03:55:19 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 12/59] getname_flags() massage, part 1 Date: Tue, 16 Dec 2025 03:54:31 +0000 Message-ID: <20251216035518.4037331-13-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" In case of long name don't reread what we'd already copied. memmove() it instead. That avoids the possibility of ending up with empty name there and the need to look at the flags on the slow path. Signed-off-by: Al Viro --- fs/namei.c | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/fs/namei.c b/fs/namei.c index f22cfdff72ab..ea7efbddc7f4 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -174,36 +174,35 @@ getname_flags(const char __user *filename, int flags) */ if (unlikely(len =3D=3D EMBEDDED_NAME_MAX)) { const size_t size =3D offsetof(struct filename, iname[1]); - kname =3D (char *)result; + struct filename *p; =20 /* * size is chosen that way we to guarantee that * result->iname[0] is within the same object and that * kname can't be equal to result->iname, no matter what. */ - result =3D kzalloc(size, GFP_KERNEL); - if (unlikely(!result)) { - __putname(kname); + p =3D kzalloc(size, GFP_KERNEL); + if (unlikely(!p)) { + __putname(result); return ERR_PTR(-ENOMEM); } - result->name =3D kname; - len =3D strncpy_from_user(kname, filename, PATH_MAX); + memmove(result, &result->iname, EMBEDDED_NAME_MAX); + kname =3D (char *)result; + p->name =3D kname; + len =3D strncpy_from_user(kname + EMBEDDED_NAME_MAX, + filename + EMBEDDED_NAME_MAX, + PATH_MAX - EMBEDDED_NAME_MAX); if (unlikely(len < 0)) { - __putname(kname); - kfree(result); + kfree(p); + __putname(result); return ERR_PTR(len); } - /* The empty path is special. */ - if (unlikely(!len) && !(flags & LOOKUP_EMPTY)) { - __putname(kname); - kfree(result); - return ERR_PTR(-ENOENT); - } - if (unlikely(len =3D=3D PATH_MAX)) { - __putname(kname); - kfree(result); + if (unlikely(len =3D=3D PATH_MAX - EMBEDDED_NAME_MAX)) { + kfree(p); + __putname(result); return ERR_PTR(-ENAMETOOLONG); } + result =3D p; } initname(result); audit_getname(result); --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B5CF531281B; Tue, 16 Dec 2025 03:54:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857294; cv=none; b=YKdGMKue/DoMYV0cZC5AO4OR/dcah9X691/d8kGJ2gy7CtK5aa/YkezuISWNpP8NKj/DkyDdmNgOEzRGqEj/qU+jUywTMcIfUqlpsF6xN6IKLxAE1N0SJ6bejo0wsg80AZeBW5rkKVi1A5oFcXWMDlp45//cJCSqqtR8O6hu8K0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857294; c=relaxed/simple; bh=QmdvDh6ZC+vTUW7I+/3NR1ZSyfxcvYqlL1sBR3JZVe0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=TY+Cj6AKp8oiDByHErhdOCxe76RUQuP2bnLOXc41+gW0j0Kv6ZJVDjHPy9OT+/Kwiz/ta0CPL3fLdv/0ZlmOpiNXukZBMZNyKgQCPJ7rLIv4omTOBlqs4OpHALPhLlQDYUKbzQ9lAUbCDr7a7KwZsJhp4HOqprJfYA6SJ32fDwQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=Tqjj+jQB; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="Tqjj+jQB" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=Y/tgOGIFg+4nJnG3/oUX+72381wYKpaNlwOXFe6p+iM=; b=Tqjj+jQBZ2/AGLQsUCf8zgnkJe 0ZVogFd9ocw24etLMgthihgYPL671liFhTyNxO95cuhM0WWHhqH/RX78BP3M0ITj5ZGe+toVa1Ogp EkMV0RhRLgNylj7ZQEcZ6kJcNyOgsAhKCucynOphRZt0G3ks/qqd7KnR3tY6jUkdQxq6Psj+GyhxQ iOBzXi5r9lM6a3CaqxpvXnLxv7AjArKeo2uSk4FAoxLCjda8bf7s0mDaVv2g19N28HbHhc55A3Sac 6ve7WYlEVNBYvh0lmffmcKrVi2EqI/My7uTCnzrC7S4DbMhHferO/RR2pmvIa/5Ntq3LBscIckxlw +JoqQ0OQ==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9f-0000000GwJU-3vG1; Tue, 16 Dec 2025 03:55:19 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 13/59] getname_flags() massage, part 2 Date: Tue, 16 Dec 2025 03:54:32 +0000 Message-ID: <20251216035518.4037331-14-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" Take the "long name" case into a helper (getname_long()). In case of failure have the caller deal with freeing the original struct filename. Signed-off-by: Al Viro --- fs/namei.c | 56 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 29 insertions(+), 27 deletions(-) diff --git a/fs/namei.c b/fs/namei.c index ea7efbddc7f4..471e4db2dbdb 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -131,6 +131,32 @@ static inline void initname(struct filename *name) atomic_set(&name->refcnt, 1); } =20 +static struct filename *getname_long(struct filename *old, + const char __user *filename) +{ + int len; + /* + * size is chosen that way we to guarantee that + * p->iname[0] is within the same object and that + * p->name can't be equal to p->iname, no matter what. + */ + const size_t size =3D offsetof(struct filename, iname[1]); + struct filename *p __free(kfree) =3D kzalloc(size, GFP_KERNEL); + if (unlikely(!p)) + return ERR_PTR(-ENOMEM); + + memmove(old, &old->iname, EMBEDDED_NAME_MAX); + p->name =3D (char *)old; + len =3D strncpy_from_user((char *)old + EMBEDDED_NAME_MAX, + filename + EMBEDDED_NAME_MAX, + PATH_MAX - EMBEDDED_NAME_MAX); + if (unlikely(len < 0)) + return ERR_PTR(len); + if (unlikely(len =3D=3D PATH_MAX - EMBEDDED_NAME_MAX)) + return ERR_PTR(-ENAMETOOLONG); + return no_free_ptr(p); +} + struct filename * getname_flags(const char __user *filename, int flags) { @@ -173,34 +199,10 @@ getname_flags(const char __user *filename, int flags) * userland. */ if (unlikely(len =3D=3D EMBEDDED_NAME_MAX)) { - const size_t size =3D offsetof(struct filename, iname[1]); - struct filename *p; - - /* - * size is chosen that way we to guarantee that - * result->iname[0] is within the same object and that - * kname can't be equal to result->iname, no matter what. - */ - p =3D kzalloc(size, GFP_KERNEL); - if (unlikely(!p)) { - __putname(result); - return ERR_PTR(-ENOMEM); - } - memmove(result, &result->iname, EMBEDDED_NAME_MAX); - kname =3D (char *)result; - p->name =3D kname; - len =3D strncpy_from_user(kname + EMBEDDED_NAME_MAX, - filename + EMBEDDED_NAME_MAX, - PATH_MAX - EMBEDDED_NAME_MAX); - if (unlikely(len < 0)) { - kfree(p); - __putname(result); - return ERR_PTR(len); - } - if (unlikely(len =3D=3D PATH_MAX - EMBEDDED_NAME_MAX)) { - kfree(p); + struct filename *p =3D getname_long(result, filename); + if (IS_ERR(p)) { __putname(result); - return ERR_PTR(-ENAMETOOLONG); + return p; } result =3D p; } --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7550131280C; Tue, 16 Dec 2025 03:54:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857296; cv=none; b=Ha17TZcR93PjcuN2AfL10WucbcL5oC+snqpYTxVsHV7OkO2UccBJdEH3PJqeUbviprS1BGlOFrVrv2PtQAYuvLBrLBiZnO3dMxfoNM2AVsHb/e7qGRRxM0iXiFwi0Px3Do9W0++yaZdBx0tMuXwmEIt5HM70jiE4WvuDkuApODo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857296; c=relaxed/simple; bh=6qpyFK2govkWOfmk2uMNwh+jtWB+MRRvQWNt/yKPv3E=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dcD3F2EjWLITK+DpDsSq7aNJOEVDOc4L+b4IJrQBqi2nxDJNOEcTtxHvVLvrtRiWIwtk/eOODAjm5TnMg0+v5vrlgAYFcoC4t6BsuDen/S7IfSM6eLKoJVxCim9yInETKzGYKCNEDpOvRSSUqrn1I0qCuZQOKz7MizADni2eGKw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=I4oZEuRa; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="I4oZEuRa" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=oBPWH03KZC7C+i5s+hKkc6dG7iGxlWmunfoRedkQcCU=; b=I4oZEuRaHcvs9knQhEoLjvRTXx zY/g3DMi8+fRxVvE1muzjMG3Iapr0nBKU+fTzLHRPDnbkq6WH+We8AjNr/UJ0/8CS7hrndbcjVMNm T1lZEQr8XWqWzqlZCXOd9HgiGKjSXwCSKynIFIssC9IRYOAoa8LTesxWc2hHkRN2Ad52GPQyNNMHU gpDQs9o2rkpIoxYbu72g7OaLMi5yTpDqGeJeN4yyA+2K8kaCDfln53B00ZWa5o8EiLnT0pN0p+aFR mXRYJ9ioe/5khGpSp36OFEDsuD41N9AjQEwkttQJENDtFX0dOE7cSb2gPkd3Wo8s+6lb8L2yAclFc c4gyr/0g==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9g-0000000GwJY-02CU; Tue, 16 Dec 2025 03:55:20 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 14/59] struct filename: use names_cachep only for getname() and friends Date: Tue, 16 Dec 2025 03:54:33 +0000 Message-ID: <20251216035518.4037331-15-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" Instances of struct filename come from names_cachep (via __getname()). That is done by getname_flags() and getname_kernel() and these two are the main callers of __getname(). However, there are other callers that simply want to allocate PATH_MAX bytes for uses that have nothing to do with struct filename. We want saner allocation rules for long pathnames, so that struct filename would *always* come from names_cachep, with the out-of-line pathname getting kmalloc'ed. For that we need to be able to change the size of objects allocated by getname_flags()/getname_kernel(). That requires the rest of __getname() users to stop using names_cachep; we could explicitly switch all of those to kmalloc(), but that would cause quite a bit of noise. So the plan is to switch getname_...() to new helpers and turn __getname() into a wrapper for kmalloc(). Remaining __getname() users could be converted to explicit kmalloc() at leisure, hopefully along with figuring out what size do they really want - PATH_MAX is an overkill for some of them, used out of laziness ("we have a convenient helper that does 4K allocations and that's large enough, let's use it"). As a side benefit, names_cachep is no longer used outside of fs/namei.c, so we can move it there and be done with that. Signed-off-by: Al Viro --- fs/dcache.c | 8 +------- fs/internal.h | 2 ++ fs/namei.c | 37 ++++++++++++++++++++++++++++--------- include/linux/fs.h | 6 ++---- 4 files changed, 33 insertions(+), 20 deletions(-) diff --git a/fs/dcache.c b/fs/dcache.c index dc2fff4811d1..cf865c12cdf9 100644 --- a/fs/dcache.c +++ b/fs/dcache.c @@ -3290,10 +3290,6 @@ static void __init dcache_init(void) runtime_const_init(ptr, dentry_hashtable); } =20 -/* SLAB cache for __getname() consumers */ -struct kmem_cache *names_cachep __ro_after_init; -EXPORT_SYMBOL(names_cachep); - void __init vfs_caches_init_early(void) { int i; @@ -3307,9 +3303,7 @@ void __init vfs_caches_init_early(void) =20 void __init vfs_caches_init(void) { - names_cachep =3D kmem_cache_create_usercopy("names_cache", PATH_MAX, 0, - SLAB_HWCACHE_ALIGN|SLAB_PANIC, 0, PATH_MAX, NULL); - + filename_init(); dcache_init(); inode_init(); files_init(); diff --git a/fs/internal.h b/fs/internal.h index ab638d41ab81..e44146117a42 100644 --- a/fs/internal.h +++ b/fs/internal.h @@ -71,6 +71,8 @@ struct dentry *start_dirop(struct dentry *parent, struct = qstr *name, unsigned int lookup_flags); int lookup_noperm_common(struct qstr *qname, struct dentry *base); =20 +void __init filename_init(void); + /* * namespace.c */ diff --git a/fs/namei.c b/fs/namei.c index 471e4db2dbdb..468e3db62f53 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -125,6 +125,25 @@ =20 #define EMBEDDED_NAME_MAX (PATH_MAX - offsetof(struct filename, iname)) =20 +/* SLAB cache for struct filename instances */ +static struct kmem_cache *names_cachep __ro_after_init; + +void __init filename_init(void) +{ + names_cachep =3D kmem_cache_create_usercopy("names_cache", PATH_MAX, 0, + SLAB_HWCACHE_ALIGN|SLAB_PANIC, 0, PATH_MAX, NULL); +} + +static inline struct filename *alloc_filename(void) +{ + return kmem_cache_alloc(names_cachep, GFP_KERNEL); +} + +static inline void free_filename(struct filename *p) +{ + kmem_cache_free(names_cachep, p); +} + static inline void initname(struct filename *name) { name->aname =3D NULL; @@ -164,7 +183,7 @@ getname_flags(const char __user *filename, int flags) char *kname; int len; =20 - result =3D __getname(); + result =3D alloc_filename(); if (unlikely(!result)) return ERR_PTR(-ENOMEM); =20 @@ -181,13 +200,13 @@ getname_flags(const char __user *filename, int flags) */ if (unlikely(len <=3D 0)) { if (unlikely(len < 0)) { - __putname(result); + free_filename(result); return ERR_PTR(len); } =20 /* The empty path is special. */ if (!(flags & LOOKUP_EMPTY)) { - __putname(result); + free_filename(result); return ERR_PTR(-ENOENT); } } @@ -201,7 +220,7 @@ getname_flags(const char __user *filename, int flags) if (unlikely(len =3D=3D EMBEDDED_NAME_MAX)) { struct filename *p =3D getname_long(result, filename); if (IS_ERR(p)) { - __putname(result); + free_filename(result); return p; } result =3D p; @@ -242,7 +261,7 @@ struct filename *getname_kernel(const char * filename) struct filename *result; int len =3D strlen(filename) + 1; =20 - result =3D __getname(); + result =3D alloc_filename(); if (unlikely(!result)) return ERR_PTR(-ENOMEM); =20 @@ -254,13 +273,13 @@ struct filename *getname_kernel(const char * filename) =20 tmp =3D kmalloc(size, GFP_KERNEL); if (unlikely(!tmp)) { - __putname(result); + free_filename(result); return ERR_PTR(-ENOMEM); } tmp->name =3D (char *)result; result =3D tmp; } else { - __putname(result); + free_filename(result); return ERR_PTR(-ENAMETOOLONG); } memcpy((char *)result->name, filename, len); @@ -287,10 +306,10 @@ void putname(struct filename *name) } =20 if (unlikely(name->name !=3D name->iname)) { - __putname(name->name); + free_filename((struct filename *)name->name); kfree(name); } else - __putname(name); + free_filename(name); } EXPORT_SYMBOL(putname); =20 diff --git a/include/linux/fs.h b/include/linux/fs.h index f48149f3c086..c2ce1dc388cb 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -2533,10 +2533,8 @@ static inline int finish_open_simple(struct file *fi= le, int error) extern void __init vfs_caches_init_early(void); extern void __init vfs_caches_init(void); =20 -extern struct kmem_cache *names_cachep; - -#define __getname() kmem_cache_alloc(names_cachep, GFP_KERNEL) -#define __putname(name) kmem_cache_free(names_cachep, (void *)(name)) +#define __getname() kmalloc(PATH_MAX, GFP_KERNEL) +#define __putname(name) kfree(name) =20 void emergency_thaw_all(void); extern int sync_filesystem(struct super_block *); --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B978E31281D; Tue, 16 Dec 2025 03:54:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857294; cv=none; b=KmFLdNKfCijk9gGbimGJ3LjK8E37mDYpX9Krg0en/JPAEYbqy3HbM3OJcV5qLDqqc4HkilhI7igGNOblUf1zjuw20259CNNVsLWBK5ONMXvNU2riE289wBKxlRClKaKzXNK5ztJFVRv3o2S+TX5ymWQrNWHMrS+rVTSD+OJY6s8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857294; c=relaxed/simple; bh=mxpOVpwna4laCEALlAjcVt47j9l7HXrqqkvGhRoZUYM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Pd8jJhlpXGK275pzZy5o9SbZgVEYe/BzncbjgfBqZUj3m1w/iiZk6En4BS669KqJddZAVNLgemkyLnC9X6w+PzwA9lAQrQYo8qCGOZLhhjFmGCIpLtzFAutVhYvD2ht3uzlwRKUfJUIYNbTkhskN1zi8yRyuoE13uK4EatQmZfs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=jAM4+4Km; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="jAM4+4Km" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=4H9KNJu4GpkI3xIuAoppPxkfbbSgmKBL+tc3ZNQQlqw=; b=jAM4+4KmsE4fZpSiQCG8yHV2O1 VpgzVggGcRy8+DfKu1lxqGOPIiprgexS4dVv9VLfn1U+IRwZtMbzyCam24t2tZ59uDd7gWJYAZ2S+ pt/c2+jzIYohDsYa68QDiZwItShte/xa75c/8Gt9ffrH6CGH85hef1Htz/BD0yEYh62sC5aZfe6do bAB/+M49aeoocvcp36emdAO3tQJmE5WClU/HyVaoiRGqS2nSHZXQ5hlKR1IhEtlFXgvi+1n/COqw6 Hz5Kken18m43VG4ODnqgmM7JTw58s9br/+u4BhGjkHJPJp6My1fyqVyfnU5/H+2V4Anqe08pN+Cdw W+NJV97g==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9g-0000000GwJb-0K47; Tue, 16 Dec 2025 03:55:20 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 15/59] struct filename: saner handling of long names Date: Tue, 16 Dec 2025 03:54:34 +0000 Message-ID: <20251216035518.4037331-16-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" Always allocate struct filename from names_cachep, long name or short; short names would be embedded into struct filename. Longer ones do not cannibalize the original struct filename - put them into PATH_MAX-sized kmalloc'ed buffers. Cutoff length for short names is chosen so that struct filename would be 192 bytes long - that's both a multiple of 64 and large enough to cover the majority of real-world uses. Simplifies logics in getname()/putname() and friends. Signed-off-by: Al Viro --- fs/namei.c | 87 ++++++++++++++++++---------------------------- include/linux/fs.h | 10 ++++-- 2 files changed, 41 insertions(+), 56 deletions(-) diff --git a/fs/namei.c b/fs/namei.c index 468e3db62f53..9053aeee05d5 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -123,15 +123,14 @@ * PATH_MAX includes the nul terminator --RR. */ =20 -#define EMBEDDED_NAME_MAX (PATH_MAX - offsetof(struct filename, iname)) - /* SLAB cache for struct filename instances */ static struct kmem_cache *names_cachep __ro_after_init; =20 void __init filename_init(void) { - names_cachep =3D kmem_cache_create_usercopy("names_cache", PATH_MAX, 0, - SLAB_HWCACHE_ALIGN|SLAB_PANIC, 0, PATH_MAX, NULL); + names_cachep =3D kmem_cache_create_usercopy("names_cache", sizeof(struct = filename), 0, + SLAB_HWCACHE_ALIGN|SLAB_PANIC, offsetof(struct filename, iname), + EMBEDDED_NAME_MAX, NULL); } =20 static inline struct filename *alloc_filename(void) @@ -150,30 +149,23 @@ static inline void initname(struct filename *name) atomic_set(&name->refcnt, 1); } =20 -static struct filename *getname_long(struct filename *old, - const char __user *filename) +static int getname_long(struct filename *name, const char __user *filename) { int len; - /* - * size is chosen that way we to guarantee that - * p->iname[0] is within the same object and that - * p->name can't be equal to p->iname, no matter what. - */ - const size_t size =3D offsetof(struct filename, iname[1]); - struct filename *p __free(kfree) =3D kzalloc(size, GFP_KERNEL); + char *p __free(kfree) =3D kmalloc(PATH_MAX, GFP_KERNEL); if (unlikely(!p)) - return ERR_PTR(-ENOMEM); + return -ENOMEM; =20 - memmove(old, &old->iname, EMBEDDED_NAME_MAX); - p->name =3D (char *)old; - len =3D strncpy_from_user((char *)old + EMBEDDED_NAME_MAX, + memcpy(p, &name->iname, EMBEDDED_NAME_MAX); + len =3D strncpy_from_user(p + EMBEDDED_NAME_MAX, filename + EMBEDDED_NAME_MAX, PATH_MAX - EMBEDDED_NAME_MAX); if (unlikely(len < 0)) - return ERR_PTR(len); + return len; if (unlikely(len =3D=3D PATH_MAX - EMBEDDED_NAME_MAX)) - return ERR_PTR(-ENAMETOOLONG); - return no_free_ptr(p); + return -ENAMETOOLONG; + name->name =3D no_free_ptr(p); + return 0; } =20 struct filename * @@ -199,16 +191,9 @@ getname_flags(const char __user *filename, int flags) * Handle both empty path and copy failure in one go. */ if (unlikely(len <=3D 0)) { - if (unlikely(len < 0)) { - free_filename(result); - return ERR_PTR(len); - } - /* The empty path is special. */ - if (!(flags & LOOKUP_EMPTY)) { - free_filename(result); - return ERR_PTR(-ENOENT); - } + if (!len && !(flags & LOOKUP_EMPTY)) + len =3D -ENOENT; } =20 /* @@ -217,14 +202,13 @@ getname_flags(const char __user *filename, int flags) * names_cache allocation for the pathname, and re-do the copy from * userland. */ - if (unlikely(len =3D=3D EMBEDDED_NAME_MAX)) { - struct filename *p =3D getname_long(result, filename); - if (IS_ERR(p)) { - free_filename(result); - return p; - } - result =3D p; + if (unlikely(len =3D=3D EMBEDDED_NAME_MAX)) + len =3D getname_long(result, filename); + if (unlikely(len < 0)) { + free_filename(result); + return ERR_PTR(len); } + initname(result); audit_getname(result); return result; @@ -260,29 +244,26 @@ struct filename *getname_kernel(const char * filename) { struct filename *result; int len =3D strlen(filename) + 1; + char *p; + + if (unlikely(len > PATH_MAX)) + return ERR_PTR(-ENAMETOOLONG); =20 result =3D alloc_filename(); if (unlikely(!result)) return ERR_PTR(-ENOMEM); =20 if (len <=3D EMBEDDED_NAME_MAX) { - result->name =3D (char *)result->iname; - } else if (len <=3D PATH_MAX) { - const size_t size =3D offsetof(struct filename, iname[1]); - struct filename *tmp; - - tmp =3D kmalloc(size, GFP_KERNEL); - if (unlikely(!tmp)) { + p =3D (char *)result->iname; + memcpy(p, filename, len); + } else { + p =3D kmemdup(filename, len, GFP_KERNEL); + if (unlikely(!p)) { free_filename(result); return ERR_PTR(-ENOMEM); } - tmp->name =3D (char *)result; - result =3D tmp; - } else { - free_filename(result); - return ERR_PTR(-ENAMETOOLONG); } - memcpy((char *)result->name, filename, len); + result->name =3D p; initname(result); audit_getname(result); return result; @@ -305,11 +286,9 @@ void putname(struct filename *name) return; } =20 - if (unlikely(name->name !=3D name->iname)) { - free_filename((struct filename *)name->name); - kfree(name); - } else - free_filename(name); + if (unlikely(name->name !=3D name->iname)) + kfree(name->name); + free_filename(name); } EXPORT_SYMBOL(putname); =20 diff --git a/include/linux/fs.h b/include/linux/fs.h index c2ce1dc388cb..42f175a4700a 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -2409,13 +2409,19 @@ extern struct kobject *fs_kobj; =20 /* fs/open.c */ struct audit_names; -struct filename { + +struct __filename_head { const char *name; /* pointer to actual string */ atomic_t refcnt; struct audit_names *aname; - const char iname[]; +}; +#define EMBEDDED_NAME_MAX 192 - sizeof(struct __filename_head) +struct filename { + struct __filename_head; + const char iname[EMBEDDED_NAME_MAX]; }; static_assert(offsetof(struct filename, iname) % sizeof(long) =3D=3D 0); +static_assert(sizeof(struct filename) % 64 =3D=3D 0); =20 static inline struct mnt_idmap *file_mnt_idmap(const struct file *file) { --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BAF3031281F; Tue, 16 Dec 2025 03:54:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857294; cv=none; b=rL6yQ2wtUMsUYSkNb30D59kV4cCFtct05x35RDZ1HUerkeooHilv4O1NSlBat44pMnOIx0FQE5O3fcN/yd9rgENIk7ue99QZ53sjgFGiiFU+jJThJJowMYWs0OWZbj/iwqylGSyTDJgd5xcxphFZVHY6QlIJeR+iVt4GW2j8J4M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857294; c=relaxed/simple; bh=qpbEh74C7X6CMdyErt/mFhuRxl7OR107Lve/D1Fg8nk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=oMV3w0ZFZUfbc4rTEHGRa8oqlS/MHTiX+ovhjyoRY2WWlymHc3aSpxdSe3IzemrdfZ4BWeHE3Q6kEfpub48gUWLc1ANGnwyv13SzDoc9678SZor3mpx1Q0UDp1NPvwtUOqI+3OMkU/ihlUKfh6PTgdRY6BIT1DLvrp40rYtA9+k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=bUewawCT; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="bUewawCT" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=ZRNw5T+EPwnN4beWbwOL70l+2wFKlInh6bFNrece6Q0=; b=bUewawCT2hGKQaGJ4ID6jfHt18 mh+7jzFiDHiBdTGtAiM/xTQzxBBt5n2W6b1O0/Q2kFP0fGY/84XK2rBpWkNFMnE3+CZeb2fZNUgYg Lxb1WW/ly8JWYvI26n223hPuJHQw98t9/ZfRqPHEV3f6kQlfEtlrJD2ZzavnfzuEBbI3Yjzazof1A 5sXHYiLfeOResDZdCZyxHZkx/elBLxTT+cBCTHEj8e7a2hWw2xWLCpquXmUOrlu2C8gjTCnOMYYuy inFUXHnKSS3PueYgnmZyJYNorKkrNs+asqBopAeFhvPz1b40SjWZ2ceRWoJbzV4D5q1se/m04WCL5 TlKohmBA==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9g-0000000GwJe-0Uls; Tue, 16 Dec 2025 03:55:20 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 16/59] fs: hide names_cache behind runtime const machinery Date: Tue, 16 Dec 2025 03:54:35 +0000 Message-ID: <20251216035518.4037331-17-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" From: Mateusz Guzik s/names_cachep/names_cache/ for consistency with dentry cache. Signed-off-by: Mateusz Guzik Signed-off-by: Al Viro --- fs/namei.c | 16 ++++++++++------ include/asm-generic/vmlinux.lds.h | 3 ++- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/fs/namei.c b/fs/namei.c index 9053aeee05d5..15e14802cabb 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -41,6 +41,8 @@ #include #include =20 +#include + #include "internal.h" #include "mount.h" =20 @@ -124,23 +126,25 @@ */ =20 /* SLAB cache for struct filename instances */ -static struct kmem_cache *names_cachep __ro_after_init; +static struct kmem_cache *__names_cache __ro_after_init; +#define names_cache runtime_const_ptr(__names_cache) =20 void __init filename_init(void) { - names_cachep =3D kmem_cache_create_usercopy("names_cache", sizeof(struct = filename), 0, - SLAB_HWCACHE_ALIGN|SLAB_PANIC, offsetof(struct filename, iname), - EMBEDDED_NAME_MAX, NULL); + __names_cache =3D kmem_cache_create_usercopy("names_cache", sizeof(struct= filename), 0, + SLAB_HWCACHE_ALIGN|SLAB_PANIC, offsetof(struct filename, iname), + EMBEDDED_NAME_MAX, NULL); + runtime_const_init(ptr, __names_cache); } =20 static inline struct filename *alloc_filename(void) { - return kmem_cache_alloc(names_cachep, GFP_KERNEL); + return kmem_cache_alloc(names_cache, GFP_KERNEL); } =20 static inline void free_filename(struct filename *p) { - kmem_cache_free(names_cachep, p); + kmem_cache_free(names_cache, p); } =20 static inline void initname(struct filename *name) diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinu= x.lds.h index 8ca130af301f..eeb070f330bd 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h @@ -972,7 +972,8 @@ #define RUNTIME_CONST_VARIABLES \ RUNTIME_CONST(shift, d_hash_shift) \ RUNTIME_CONST(ptr, dentry_hashtable) \ - RUNTIME_CONST(ptr, __dentry_cache) + RUNTIME_CONST(ptr, __dentry_cache) \ + RUNTIME_CONST(ptr, __names_cache) =20 /* Alignment must be consistent with (kunit_suite *) in include/kunit/test= .h */ #define KUNIT_TABLE() \ --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B776831281C; Tue, 16 Dec 2025 03:54:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857297; cv=none; b=Pf6ITd33pBUV10gojBZCd/N0D27WvUuBC7/nG+K750o7M7S9gj8wUn2igmr5Tdq3dIYSd385lc146wCYG/9yzCyXWs96KH3Wdm1RNrDEFI0B+QZ8Jj/0vWb7yC+xERsqzLWEe7IDqmwlxDvdFPZRIi/kpVgXzs+qwQ+/oFUFKMA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857297; c=relaxed/simple; bh=LMB+kpfoAahtZb9PaRIAZTzfrsnFZX6v2CVi65I6cro=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=SHsHkfdvNJiUppGEJOTXYRRjw8yb3m0tAtCD5358D65ThOTaGdIqYsL1SMGz4ZkIvFbxtEWFB8BVrJDaIHZjcwAeF9YE/ID4MftF/KxPE4a2FnC9FdgYTAAEoU0/0qD/XNRRbiNc5G/pK+1Fw9CnUubmIc6KyBDQoOeVH1pVwCg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=M5LeaD1k; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="M5LeaD1k" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=LlwGcNp9ieUjaMuMd7VjId4VO/XWgcwNK2F+O7EQW7I=; b=M5LeaD1k4YH0DLoL9keuwcZO+W XrLjwH+zzkN3dfXwDvqy1tOiJkeuPCTysF+GzRhDQwkOii54hfjfTqIwRgVqKwF+i88Ao83RwkWs0 k4QJG7vox4zrSW31ZhsvMvxmhDfTPB0qAt2D6Ch54lgRcMatMss83QLgxSUruP0lsP8T4El5BH+7O T3/D3QwB/PRw1ZO9z5vP6AxREnjCppJzkQhNDa33v6k3bp+yVsw7inavomUavY3fH8ISeiDrWuXqX hE9yAcH3YARlDQU1hhWL8gpZ+aZUQeEPkzk8MtcIGKSWth4OQv5dXj0vlr/Espm2kD0wyTO/dVrKV 26ywt0bg==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9g-0000000GwJi-0hXy; Tue, 16 Dec 2025 03:55:20 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 17/59] allow incomplete imports of filenames Date: Tue, 16 Dec 2025 03:54:36 +0000 Message-ID: <20251216035518.4037331-18-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" There are two filename-related problems in io_uring and its interplay with audit. Filenames are imported when request is submitted and used when it is processed. Unfortunately, the latter may very well happen in a different thread. In that case the reference to filename is put into the wrong audit_context - that of submitting thread, not the processing one. Audit logics is called by the latter, and it really wants to be able to find the names in audit_context current (=3D=3D processing) thread. Another related problem is the headache with refcounts - normally all references to given struct filename are visible only to one thread (the one that uses that struct filename). io_uring violates that - an extra reference is stashed in audit_context of submitter. It gets dropped when submitter returns to userland, which can happen simultaneously with processing thread deciding to drop the reference it got. We paper over that by making refcount atomic, but that means pointless headache for everyone. Solution: the notion of partially imported filenames. Namely, already copied from userland, but *not* exposed to audit yet. io_uring can create that in submitter thread, and complete the import (obtaining the usual reference to struct filename) in processing thread. Object: struct delayed_filename. Primitives for working with it: delayed_getname(&delayed_filename, user_string) - copies the name from userland, returning 0 and stashing the address of (still incomplete) struct filename in delayed_filename on success and returning -E... on error. delayed_getname_uflags(&delayed_filename, user_string, atflags) - similar, in the same relation to delayed_getname() as getname_uflags() is to getname= () complete_getname(&delayed_filename) - completes the import of filename stas= hed in delayed_getname and returns struct filename to caller, emptying delayed_= getname. dismiss_delayed_filename(&delayed_filename) - destructor; drops whatever might be stashed in delayed_getname, emptying it. putname_to_delayed(&delayed_filename, name) - if name is shared, stashes its copy into delayed_filename and drops the reference to name, otherwise stashes the name itself in there. Signed-off-by: Al Viro --- fs/namei.c | 67 +++++++++++++++++++++++++--- include/linux/fs.h | 11 +++++ io_uring/fs.c | 101 +++++++++++++++++++++++-------------------- io_uring/openclose.c | 26 +++++------ io_uring/statx.c | 17 +++----- io_uring/xattr.c | 30 +++++-------- 6 files changed, 157 insertions(+), 95 deletions(-) diff --git a/fs/namei.c b/fs/namei.c index 15e14802cabb..4faaae0239ad 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -172,8 +172,8 @@ static int getname_long(struct filename *name, const ch= ar __user *filename) return 0; } =20 -struct filename * -getname_flags(const char __user *filename, int flags) +static struct filename * +do_getname(const char __user *filename, int flags, bool incomplete) { struct filename *result; char *kname; @@ -214,10 +214,17 @@ getname_flags(const char __user *filename, int flags) } =20 initname(result); - audit_getname(result); + if (likely(!incomplete)) + audit_getname(result); return result; } =20 +struct filename * +getname_flags(const char __user *filename, int flags) +{ + return do_getname(filename, flags, false); +} + struct filename *getname_uflags(const char __user *filename, int uflags) { int flags =3D (uflags & AT_EMPTY_PATH) ? LOOKUP_EMPTY : 0; @@ -244,7 +251,7 @@ struct filename *__getname_maybe_null(const char __user= *pathname) return name; } =20 -struct filename *getname_kernel(const char * filename) +static struct filename *do_getname_kernel(const char *filename, bool incom= plete) { struct filename *result; int len =3D strlen(filename) + 1; @@ -269,9 +276,15 @@ struct filename *getname_kernel(const char * filename) } result->name =3D p; initname(result); - audit_getname(result); + if (likely(!incomplete)) + audit_getname(result); return result; } + +struct filename *getname_kernel(const char *filename) +{ + return do_getname_kernel(filename, false); +} EXPORT_SYMBOL(getname_kernel); =20 void putname(struct filename *name) @@ -296,6 +309,50 @@ void putname(struct filename *name) } EXPORT_SYMBOL(putname); =20 +static inline int __delayed_getname(struct delayed_filename *v, + const char __user *string, int flags) +{ + v->__incomplete_filename =3D do_getname(string, flags, true); + return PTR_ERR_OR_ZERO(v->__incomplete_filename); +} + +int delayed_getname(struct delayed_filename *v, const char __user *string) +{ + return __delayed_getname(v, string, 0); +} + +int delayed_getname_uflags(struct delayed_filename *v, const char __user *= string, + int uflags) +{ + int flags =3D (uflags & AT_EMPTY_PATH) ? LOOKUP_EMPTY : 0; + return __delayed_getname(v, string, flags); +} + +int putname_to_delayed(struct delayed_filename *v, struct filename *__name) +{ + struct filename *name __free(putname) =3D no_free_ptr(__name); + + if (likely(atomic_read(&name->refcnt) =3D=3D 1)) { + v->__incomplete_filename =3D no_free_ptr(name); + return 0; + } + v->__incomplete_filename =3D do_getname_kernel(name->name, true); + return PTR_ERR_OR_ZERO(v->__incomplete_filename); +} + +void dismiss_delayed_filename(struct delayed_filename *v) +{ + putname(no_free_ptr(v->__incomplete_filename)); +} + +struct filename *complete_getname(struct delayed_filename *v) +{ + struct filename *res =3D no_free_ptr(v->__incomplete_filename); + if (!IS_ERR(res)) + audit_getname(res); + return res; +} + /** * check_acl - perform ACL permission checking * @idmap: idmap of the mount the inode was found from diff --git a/include/linux/fs.h b/include/linux/fs.h index 42f175a4700a..e446cb8c1e37 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -2516,6 +2516,17 @@ static inline struct filename *getname_maybe_null(co= nst char __user *name, int f extern void putname(struct filename *name); DEFINE_FREE(putname, struct filename *, if (!IS_ERR_OR_NULL(_T)) putname(_= T)) =20 +struct delayed_filename { + struct filename *__incomplete_filename; // don't touch +}; +#define INIT_DELAYED_FILENAME(ptr) \ + ((void)(*(ptr) =3D (struct delayed_filename){})) +int delayed_getname(struct delayed_filename *, const char __user *); +int delayed_getname_uflags(struct delayed_filename *v, const char __user *= , int); +void dismiss_delayed_filename(struct delayed_filename *); +int putname_to_delayed(struct delayed_filename *, struct filename *); +struct filename *complete_getname(struct delayed_filename *); + static inline struct filename *refname(struct filename *name) { atomic_inc(&name->refcnt); diff --git a/io_uring/fs.c b/io_uring/fs.c index 37079a414eab..c04c6282210a 100644 --- a/io_uring/fs.c +++ b/io_uring/fs.c @@ -19,8 +19,8 @@ struct io_rename { struct file *file; int old_dfd; int new_dfd; - struct filename *oldpath; - struct filename *newpath; + struct delayed_filename oldpath; + struct delayed_filename newpath; int flags; }; =20 @@ -28,22 +28,22 @@ struct io_unlink { struct file *file; int dfd; int flags; - struct filename *filename; + struct delayed_filename filename; }; =20 struct io_mkdir { struct file *file; int dfd; umode_t mode; - struct filename *filename; + struct delayed_filename filename; }; =20 struct io_link { struct file *file; int old_dfd; int new_dfd; - struct filename *oldpath; - struct filename *newpath; + struct delayed_filename oldpath; + struct delayed_filename newpath; int flags; }; =20 @@ -51,6 +51,7 @@ int io_renameat_prep(struct io_kiocb *req, const struct i= o_uring_sqe *sqe) { struct io_rename *ren =3D io_kiocb_to_cmd(req, struct io_rename); const char __user *oldf, *newf; + int err; =20 if (sqe->buf_index || sqe->splice_fd_in) return -EINVAL; @@ -63,14 +64,14 @@ int io_renameat_prep(struct io_kiocb *req, const struct= io_uring_sqe *sqe) ren->new_dfd =3D READ_ONCE(sqe->len); ren->flags =3D READ_ONCE(sqe->rename_flags); =20 - ren->oldpath =3D getname(oldf); - if (IS_ERR(ren->oldpath)) - return PTR_ERR(ren->oldpath); + err =3D delayed_getname(&ren->oldpath, oldf); + if (unlikely(err)) + return err; =20 - ren->newpath =3D getname(newf); - if (IS_ERR(ren->newpath)) { - putname(ren->oldpath); - return PTR_ERR(ren->newpath); + err =3D delayed_getname(&ren->newpath, newf); + if (unlikely(err)) { + dismiss_delayed_filename(&ren->oldpath); + return err; } =20 req->flags |=3D REQ_F_NEED_CLEANUP; @@ -85,8 +86,9 @@ int io_renameat(struct io_kiocb *req, unsigned int issue_= flags) =20 WARN_ON_ONCE(issue_flags & IO_URING_F_NONBLOCK); =20 - ret =3D do_renameat2(ren->old_dfd, ren->oldpath, ren->new_dfd, - ren->newpath, ren->flags); + ret =3D do_renameat2(ren->old_dfd, complete_getname(&ren->oldpath), + ren->new_dfd, complete_getname(&ren->newpath), + ren->flags); =20 req->flags &=3D ~REQ_F_NEED_CLEANUP; io_req_set_res(req, ret, 0); @@ -97,14 +99,15 @@ void io_renameat_cleanup(struct io_kiocb *req) { struct io_rename *ren =3D io_kiocb_to_cmd(req, struct io_rename); =20 - putname(ren->oldpath); - putname(ren->newpath); + dismiss_delayed_filename(&ren->oldpath); + dismiss_delayed_filename(&ren->newpath); } =20 int io_unlinkat_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe) { struct io_unlink *un =3D io_kiocb_to_cmd(req, struct io_unlink); const char __user *fname; + int err; =20 if (sqe->off || sqe->len || sqe->buf_index || sqe->splice_fd_in) return -EINVAL; @@ -118,9 +121,9 @@ int io_unlinkat_prep(struct io_kiocb *req, const struct= io_uring_sqe *sqe) return -EINVAL; =20 fname =3D u64_to_user_ptr(READ_ONCE(sqe->addr)); - un->filename =3D getname(fname); - if (IS_ERR(un->filename)) - return PTR_ERR(un->filename); + err =3D delayed_getname(&un->filename, fname); + if (unlikely(err)) + return err; =20 req->flags |=3D REQ_F_NEED_CLEANUP; req->flags |=3D REQ_F_FORCE_ASYNC; @@ -135,9 +138,9 @@ int io_unlinkat(struct io_kiocb *req, unsigned int issu= e_flags) WARN_ON_ONCE(issue_flags & IO_URING_F_NONBLOCK); =20 if (un->flags & AT_REMOVEDIR) - ret =3D do_rmdir(un->dfd, un->filename); + ret =3D do_rmdir(un->dfd, complete_getname(&un->filename)); else - ret =3D do_unlinkat(un->dfd, un->filename); + ret =3D do_unlinkat(un->dfd, complete_getname(&un->filename)); =20 req->flags &=3D ~REQ_F_NEED_CLEANUP; io_req_set_res(req, ret, 0); @@ -148,13 +151,14 @@ void io_unlinkat_cleanup(struct io_kiocb *req) { struct io_unlink *ul =3D io_kiocb_to_cmd(req, struct io_unlink); =20 - putname(ul->filename); + dismiss_delayed_filename(&ul->filename); } =20 int io_mkdirat_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe) { struct io_mkdir *mkd =3D io_kiocb_to_cmd(req, struct io_mkdir); const char __user *fname; + int err; =20 if (sqe->off || sqe->rw_flags || sqe->buf_index || sqe->splice_fd_in) return -EINVAL; @@ -165,9 +169,9 @@ int io_mkdirat_prep(struct io_kiocb *req, const struct = io_uring_sqe *sqe) mkd->mode =3D READ_ONCE(sqe->len); =20 fname =3D u64_to_user_ptr(READ_ONCE(sqe->addr)); - mkd->filename =3D getname(fname); - if (IS_ERR(mkd->filename)) - return PTR_ERR(mkd->filename); + err =3D delayed_getname(&mkd->filename, fname); + if (unlikely(err)) + return err; =20 req->flags |=3D REQ_F_NEED_CLEANUP; req->flags |=3D REQ_F_FORCE_ASYNC; @@ -181,7 +185,7 @@ int io_mkdirat(struct io_kiocb *req, unsigned int issue= _flags) =20 WARN_ON_ONCE(issue_flags & IO_URING_F_NONBLOCK); =20 - ret =3D do_mkdirat(mkd->dfd, mkd->filename, mkd->mode); + ret =3D do_mkdirat(mkd->dfd, complete_getname(&mkd->filename), mkd->mode); =20 req->flags &=3D ~REQ_F_NEED_CLEANUP; io_req_set_res(req, ret, 0); @@ -192,13 +196,14 @@ void io_mkdirat_cleanup(struct io_kiocb *req) { struct io_mkdir *md =3D io_kiocb_to_cmd(req, struct io_mkdir); =20 - putname(md->filename); + dismiss_delayed_filename(&md->filename); } =20 int io_symlinkat_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe) { struct io_link *sl =3D io_kiocb_to_cmd(req, struct io_link); const char __user *oldpath, *newpath; + int err; =20 if (sqe->len || sqe->rw_flags || sqe->buf_index || sqe->splice_fd_in) return -EINVAL; @@ -209,14 +214,14 @@ int io_symlinkat_prep(struct io_kiocb *req, const str= uct io_uring_sqe *sqe) oldpath =3D u64_to_user_ptr(READ_ONCE(sqe->addr)); newpath =3D u64_to_user_ptr(READ_ONCE(sqe->addr2)); =20 - sl->oldpath =3D getname(oldpath); - if (IS_ERR(sl->oldpath)) - return PTR_ERR(sl->oldpath); + err =3D delayed_getname(&sl->oldpath, oldpath); + if (unlikely(err)) + return err; =20 - sl->newpath =3D getname(newpath); - if (IS_ERR(sl->newpath)) { - putname(sl->oldpath); - return PTR_ERR(sl->newpath); + err =3D delayed_getname(&sl->newpath, newpath); + if (unlikely(err)) { + dismiss_delayed_filename(&sl->oldpath); + return err; } =20 req->flags |=3D REQ_F_NEED_CLEANUP; @@ -231,7 +236,8 @@ int io_symlinkat(struct io_kiocb *req, unsigned int iss= ue_flags) =20 WARN_ON_ONCE(issue_flags & IO_URING_F_NONBLOCK); =20 - ret =3D do_symlinkat(sl->oldpath, sl->new_dfd, sl->newpath); + ret =3D do_symlinkat(complete_getname(&sl->oldpath), sl->new_dfd, + complete_getname(&sl->newpath)); =20 req->flags &=3D ~REQ_F_NEED_CLEANUP; io_req_set_res(req, ret, 0); @@ -242,6 +248,7 @@ int io_linkat_prep(struct io_kiocb *req, const struct i= o_uring_sqe *sqe) { struct io_link *lnk =3D io_kiocb_to_cmd(req, struct io_link); const char __user *oldf, *newf; + int err; =20 if (sqe->buf_index || sqe->splice_fd_in) return -EINVAL; @@ -254,14 +261,14 @@ int io_linkat_prep(struct io_kiocb *req, const struct= io_uring_sqe *sqe) newf =3D u64_to_user_ptr(READ_ONCE(sqe->addr2)); lnk->flags =3D READ_ONCE(sqe->hardlink_flags); =20 - lnk->oldpath =3D getname_uflags(oldf, lnk->flags); - if (IS_ERR(lnk->oldpath)) - return PTR_ERR(lnk->oldpath); + err =3D delayed_getname_uflags(&lnk->oldpath, oldf, lnk->flags); + if (unlikely(err)) + return err; =20 - lnk->newpath =3D getname(newf); - if (IS_ERR(lnk->newpath)) { - putname(lnk->oldpath); - return PTR_ERR(lnk->newpath); + err =3D delayed_getname(&lnk->newpath, newf); + if (unlikely(err)) { + dismiss_delayed_filename(&lnk->oldpath); + return err; } =20 req->flags |=3D REQ_F_NEED_CLEANUP; @@ -276,8 +283,8 @@ int io_linkat(struct io_kiocb *req, unsigned int issue_= flags) =20 WARN_ON_ONCE(issue_flags & IO_URING_F_NONBLOCK); =20 - ret =3D do_linkat(lnk->old_dfd, lnk->oldpath, lnk->new_dfd, - lnk->newpath, lnk->flags); + ret =3D do_linkat(lnk->old_dfd, complete_getname(&lnk->oldpath), + lnk->new_dfd, complete_getname(&lnk->newpath), lnk->flags); =20 req->flags &=3D ~REQ_F_NEED_CLEANUP; io_req_set_res(req, ret, 0); @@ -288,6 +295,6 @@ void io_link_cleanup(struct io_kiocb *req) { struct io_link *sl =3D io_kiocb_to_cmd(req, struct io_link); =20 - putname(sl->oldpath); - putname(sl->newpath); + dismiss_delayed_filename(&sl->oldpath); + dismiss_delayed_filename(&sl->newpath); } diff --git a/io_uring/openclose.c b/io_uring/openclose.c index bfeb91b31bba..95ba8c5b5fc8 100644 --- a/io_uring/openclose.c +++ b/io_uring/openclose.c @@ -23,7 +23,7 @@ struct io_open { struct file *file; int dfd; u32 file_slot; - struct filename *filename; + struct delayed_filename filename; struct open_how how; unsigned long nofile; }; @@ -67,12 +67,9 @@ static int __io_openat_prep(struct io_kiocb *req, const = struct io_uring_sqe *sqe =20 open->dfd =3D READ_ONCE(sqe->fd); fname =3D u64_to_user_ptr(READ_ONCE(sqe->addr)); - open->filename =3D getname(fname); - if (IS_ERR(open->filename)) { - ret =3D PTR_ERR(open->filename); - open->filename =3D NULL; + ret =3D delayed_getname(&open->filename, fname); + if (unlikely(ret)) return ret; - } =20 open->file_slot =3D READ_ONCE(sqe->file_index); if (open->file_slot && (open->how.flags & O_CLOEXEC)) @@ -121,6 +118,7 @@ int io_openat2(struct io_kiocb *req, unsigned int issue= _flags) struct file *file; bool resolve_nonblock, nonblock_set; bool fixed =3D !!open->file_slot; + struct filename *name __free(putname) =3D complete_getname(&open->filenam= e); int ret; =20 ret =3D build_open_flags(&open->how, &op); @@ -140,7 +138,7 @@ int io_openat2(struct io_kiocb *req, unsigned int issue= _flags) goto err; } =20 - file =3D do_filp_open(open->dfd, open->filename, &op); + file =3D do_filp_open(open->dfd, name, &op); if (IS_ERR(file)) { /* * We could hang on to this 'fd' on retrying, but seems like @@ -152,9 +150,13 @@ int io_openat2(struct io_kiocb *req, unsigned int issu= e_flags) =20 ret =3D PTR_ERR(file); /* only retry if RESOLVE_CACHED wasn't already set by application */ - if (ret =3D=3D -EAGAIN && - (!resolve_nonblock && (issue_flags & IO_URING_F_NONBLOCK))) - return -EAGAIN; + if (ret =3D=3D -EAGAIN && !resolve_nonblock && + (issue_flags & IO_URING_F_NONBLOCK)) { + ret =3D putname_to_delayed(&open->filename, + no_free_ptr(name)); + if (likely(!ret)) + return -EAGAIN; + } goto err; } =20 @@ -167,7 +169,6 @@ int io_openat2(struct io_kiocb *req, unsigned int issue= _flags) ret =3D io_fixed_fd_install(req, issue_flags, file, open->file_slot); err: - putname(open->filename); req->flags &=3D ~REQ_F_NEED_CLEANUP; if (ret < 0) req_set_fail(req); @@ -184,8 +185,7 @@ void io_open_cleanup(struct io_kiocb *req) { struct io_open *open =3D io_kiocb_to_cmd(req, struct io_open); =20 - if (open->filename) - putname(open->filename); + dismiss_delayed_filename(&open->filename); } =20 int __io_close_fixed(struct io_ring_ctx *ctx, unsigned int issue_flags, diff --git a/io_uring/statx.c b/io_uring/statx.c index 5111e9befbfe..dc10b48bcde6 100644 --- a/io_uring/statx.c +++ b/io_uring/statx.c @@ -16,7 +16,7 @@ struct io_statx { int dfd; unsigned int mask; unsigned int flags; - struct filename *filename; + struct delayed_filename filename; struct statx __user *buffer; }; =20 @@ -24,6 +24,7 @@ int io_statx_prep(struct io_kiocb *req, const struct io_u= ring_sqe *sqe) { struct io_statx *sx =3D io_kiocb_to_cmd(req, struct io_statx); const char __user *path; + int ret; =20 if (sqe->buf_index || sqe->splice_fd_in) return -EINVAL; @@ -36,14 +37,10 @@ int io_statx_prep(struct io_kiocb *req, const struct io= _uring_sqe *sqe) sx->buffer =3D u64_to_user_ptr(READ_ONCE(sqe->addr2)); sx->flags =3D READ_ONCE(sqe->statx_flags); =20 - sx->filename =3D getname_uflags(path, sx->flags); - - if (IS_ERR(sx->filename)) { - int ret =3D PTR_ERR(sx->filename); + ret =3D delayed_getname_uflags(&sx->filename, path, sx->flags); =20 - sx->filename =3D NULL; + if (unlikely(ret)) return ret; - } =20 req->flags |=3D REQ_F_NEED_CLEANUP; req->flags |=3D REQ_F_FORCE_ASYNC; @@ -53,11 +50,12 @@ int io_statx_prep(struct io_kiocb *req, const struct io= _uring_sqe *sqe) int io_statx(struct io_kiocb *req, unsigned int issue_flags) { struct io_statx *sx =3D io_kiocb_to_cmd(req, struct io_statx); + struct filename *name __free(putname) =3D complete_getname(&sx->filename); int ret; =20 WARN_ON_ONCE(issue_flags & IO_URING_F_NONBLOCK); =20 - ret =3D do_statx(sx->dfd, sx->filename, sx->flags, sx->mask, sx->buffer); + ret =3D do_statx(sx->dfd, name, sx->flags, sx->mask, sx->buffer); io_req_set_res(req, ret, 0); return IOU_COMPLETE; } @@ -66,6 +64,5 @@ void io_statx_cleanup(struct io_kiocb *req) { struct io_statx *sx =3D io_kiocb_to_cmd(req, struct io_statx); =20 - if (sx->filename) - putname(sx->filename); + dismiss_delayed_filename(&sx->filename); } diff --git a/io_uring/xattr.c b/io_uring/xattr.c index 322b94ff9e4b..0fb4e5303500 100644 --- a/io_uring/xattr.c +++ b/io_uring/xattr.c @@ -19,16 +19,14 @@ struct io_xattr { struct file *file; struct kernel_xattr_ctx ctx; - struct filename *filename; + struct delayed_filename filename; }; =20 void io_xattr_cleanup(struct io_kiocb *req) { struct io_xattr *ix =3D io_kiocb_to_cmd(req, struct io_xattr); =20 - if (ix->filename) - putname(ix->filename); - + dismiss_delayed_filename(&ix->filename); kfree(ix->ctx.kname); kvfree(ix->ctx.kvalue); } @@ -48,7 +46,7 @@ static int __io_getxattr_prep(struct io_kiocb *req, const char __user *name; int ret; =20 - ix->filename =3D NULL; + INIT_DELAYED_FILENAME(&ix->filename); ix->ctx.kvalue =3D NULL; name =3D u64_to_user_ptr(READ_ONCE(sqe->addr)); ix->ctx.value =3D u64_to_user_ptr(READ_ONCE(sqe->addr2)); @@ -93,11 +91,7 @@ int io_getxattr_prep(struct io_kiocb *req, const struct = io_uring_sqe *sqe) =20 path =3D u64_to_user_ptr(READ_ONCE(sqe->addr3)); =20 - ix->filename =3D getname(path); - if (IS_ERR(ix->filename)) - return PTR_ERR(ix->filename); - - return 0; + return delayed_getname(&ix->filename, path); } =20 int io_fgetxattr(struct io_kiocb *req, unsigned int issue_flags) @@ -119,8 +113,8 @@ int io_getxattr(struct io_kiocb *req, unsigned int issu= e_flags) =20 WARN_ON_ONCE(issue_flags & IO_URING_F_NONBLOCK); =20 - ret =3D filename_getxattr(AT_FDCWD, ix->filename, LOOKUP_FOLLOW, &ix->ctx= ); - ix->filename =3D NULL; + ret =3D filename_getxattr(AT_FDCWD, complete_getname(&ix->filename), + LOOKUP_FOLLOW, &ix->ctx); io_xattr_finish(req, ret); return IOU_COMPLETE; } @@ -132,7 +126,7 @@ static int __io_setxattr_prep(struct io_kiocb *req, const char __user *name; int ret; =20 - ix->filename =3D NULL; + INIT_DELAYED_FILENAME(&ix->filename); name =3D u64_to_user_ptr(READ_ONCE(sqe->addr)); ix->ctx.cvalue =3D u64_to_user_ptr(READ_ONCE(sqe->addr2)); ix->ctx.kvalue =3D NULL; @@ -169,11 +163,7 @@ int io_setxattr_prep(struct io_kiocb *req, const struc= t io_uring_sqe *sqe) =20 path =3D u64_to_user_ptr(READ_ONCE(sqe->addr3)); =20 - ix->filename =3D getname(path); - if (IS_ERR(ix->filename)) - return PTR_ERR(ix->filename); - - return 0; + return delayed_getname(&ix->filename, path); } =20 int io_fsetxattr_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe) @@ -200,8 +190,8 @@ int io_setxattr(struct io_kiocb *req, unsigned int issu= e_flags) =20 WARN_ON_ONCE(issue_flags & IO_URING_F_NONBLOCK); =20 - ret =3D filename_setxattr(AT_FDCWD, ix->filename, LOOKUP_FOLLOW, &ix->ctx= ); - ix->filename =3D NULL; + ret =3D filename_setxattr(AT_FDCWD, complete_getname(&ix->filename), + LOOKUP_FOLLOW, &ix->ctx); io_xattr_finish(req, ret); return IOU_COMPLETE; } --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7557F31280E; Tue, 16 Dec 2025 03:54:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857296; cv=none; b=Q4PgcG1dFImC88RZyBJLdjawU89IsFTlK0WDotwSxzJSkCZJGbqCWp+/pdJMHu6CZdD3zPiwfMOlXFoSF1j/gf3X7mbVdYI8tXLsdhr4aKfx+V6ojk0ivf4iqFoAftPK1c1V+UK7s2V9BBZM6EDwx2A2YTJ7oizhqjMSOTWfHhg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857296; c=relaxed/simple; bh=2CHW41/M3UBBr9SffnNIEEiMvQ5CCktWZE0nn4bF3bQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=fH8wGSoMlKN1VvwMX55WYapObg7Zrq2Agf93lyWORJHavKhRZpxdCHTFE+6oxfKjS18pJ+3d6l+ZBstVKYCx5xpDPmJM1yd095ofx4NB/jcol7KdtaMyhCaOPi45ebuPEXvMJ58UEj9ueJ1VNNqgkm3bYIj0v+GX5oU45VxninE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=ZwilCr+E; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="ZwilCr+E" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=ZDabGQhCWYKB8pau0wUjnJ++S20uh9OJmrx26ZM+e4M=; b=ZwilCr+EKEdAQl4w7kPdgftiAB C2NyzY67VvlaGfqXmSwIqA8dtWZzOChG3bh8Vt/fAmmLssQzri2ai4ndHGDVVriO5mQe2I9gI0g3y IOyyXT4vi37YYpVN/zCOGSErJEwAKFN/OQsE4fux+Kq0Pj7Ou6CHIgnvitP1tN71jxPxX+kTb6Mso 5wcTffYmCelodFzJg/DLPS0jlUMiqxMAocrqDkqQ+cu3jWBaPRqWt+3SVRBTgpsM8FGQnL32Wj8rU /Svy0+SOVpdV+8FKv/S5q9ms/Fy1riSyMidTROgbUkO0PZxTOiUN5xALLQEOCr6pB4gWljY59yYKb C8Ld/jGg==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9g-0000000GwJp-1SUK; Tue, 16 Dec 2025 03:55:20 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 18/59] struct filename ->refcnt doesn't need to be atomic Date: Tue, 16 Dec 2025 03:54:37 +0000 Message-ID: <20251216035518.4037331-19-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" ... or visible outside of audit, really. Note that references held in delayed_filename always have refcount 1, and from the moment of complete_getname() or equivalent point in getname...() there won't be any references to struct filename instance left in places visible to other threads. Acked-by: Paul Moore Signed-off-by: Al Viro --- fs/namei.c | 10 +++++----- include/linux/fs.h | 8 +------- kernel/auditsc.c | 6 ++++++ 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/fs/namei.c b/fs/namei.c index 4faaae0239ad..192d31acb4ff 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -150,7 +150,7 @@ static inline void free_filename(struct filename *p) static inline void initname(struct filename *name) { name->aname =3D NULL; - atomic_set(&name->refcnt, 1); + name->refcnt =3D 1; } =20 static int getname_long(struct filename *name, const char __user *filename) @@ -294,13 +294,13 @@ void putname(struct filename *name) if (IS_ERR_OR_NULL(name)) return; =20 - refcnt =3D atomic_read(&name->refcnt); + refcnt =3D name->refcnt; if (unlikely(refcnt !=3D 1)) { if (WARN_ON_ONCE(!refcnt)) return; =20 - if (!atomic_dec_and_test(&name->refcnt)) - return; + name->refcnt--; + return; } =20 if (unlikely(name->name !=3D name->iname)) @@ -332,7 +332,7 @@ int putname_to_delayed(struct delayed_filename *v, stru= ct filename *__name) { struct filename *name __free(putname) =3D no_free_ptr(__name); =20 - if (likely(atomic_read(&name->refcnt) =3D=3D 1)) { + if (likely(name->refcnt =3D=3D 1)) { v->__incomplete_filename =3D no_free_ptr(name); return 0; } diff --git a/include/linux/fs.h b/include/linux/fs.h index e446cb8c1e37..b711f46ba8f5 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -2412,7 +2412,7 @@ struct audit_names; =20 struct __filename_head { const char *name; /* pointer to actual string */ - atomic_t refcnt; + int refcnt; struct audit_names *aname; }; #define EMBEDDED_NAME_MAX 192 - sizeof(struct __filename_head) @@ -2527,12 +2527,6 @@ void dismiss_delayed_filename(struct delayed_filenam= e *); int putname_to_delayed(struct delayed_filename *, struct filename *); struct filename *complete_getname(struct delayed_filename *); =20 -static inline struct filename *refname(struct filename *name) -{ - atomic_inc(&name->refcnt); - return name; -} - extern int finish_open(struct file *file, struct dentry *dentry, int (*open)(struct inode *, struct file *)); extern int finish_no_open(struct file *file, struct dentry *dentry); diff --git a/kernel/auditsc.c b/kernel/auditsc.c index 67d8da927381..b1dc9284550a 100644 --- a/kernel/auditsc.c +++ b/kernel/auditsc.c @@ -2169,6 +2169,12 @@ static struct audit_names *audit_alloc_name(struct a= udit_context *context, return aname; } =20 +static inline struct filename *refname(struct filename *name) +{ + name->refcnt++; + return name; +} + /** * __audit_getname - add a name to the list * @name: name to add --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 75644312811; Tue, 16 Dec 2025 03:54:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857294; cv=none; b=i0X6mPu/FoDq6Zt/hfFcGvrGeD+B+8GLf7Qta2LsZMKKyxYHYT6F+VQUqTPkPg/iGw3y9stcbOEAesOzuinSkCPdm82/ijv5ZPq3O2ybs0fNIEzOXwrCMCxDe5mT8jCKUPf/M5GkXqhK6HwI25iDCMYQKi4E/Lhb7XVSTZ5jzDk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857294; c=relaxed/simple; bh=+1i0jwxyk8DGf0W2+2Zfb4jLSGnyQvm9v3lj6zBMWXQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=jRBAgruQ1SqcTJYWS4zNl6oSeDXBzCRvl9Yo+qEGeLdcsPksknpUyPP5YoGa9bCMK7frhOzI+L+V12xxySQSZaZ07iEOF7rYxeMlFRqdNOtcKQZx6kloOILAgjCJyNVtQ8uB4c0skNiwQ686yqDLOoLQU1Hm5Jx4V1hPZKNw0Jw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=oQPE9ZHD; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="oQPE9ZHD" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=6lhUcDw8YnPMZe9i+imJJtFRGzopLM7v6pMBLQdGXEA=; b=oQPE9ZHDJ9AauIKsUujkam7XOM ZazGGoN1eb3i62McV4GfVzaQAATceE+XQdEfgZLtnqKj8RYi+/t63UBWi9qEq6Jo/HWvB74KMdYFq OVipuyxhDYmZoPoUR+bvEVy67e2H/pyMlPbsfeVzmeiDO6Yr7X+cI/96k24BBQGATrn/EA4OqfQuU QfqArefXcSj9jAo17eU6Lq+9vCm/YdrGZZSTd1JQtj0VoFwDB8eWEkIUumgD3d76PWIS/2c3BkufV Ern4BYs6gV4/Paz5H1sRO/QRu/+ql0986ZDUZfinR/JWFGSHXdxtyKh9PCR1ohX/KEUC4u0rfW6YD HhBthSKQ==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9g-0000000GwJu-1jyS; Tue, 16 Dec 2025 03:55:20 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 19/59] allow to use CLASS() for struct filename * Date: Tue, 16 Dec 2025 03:54:38 +0000 Message-ID: <20251216035518.4037331-20-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" Not all users match that model, but quite a few do. No mindless mass conversions, please... Added: CLASS(filename, name)(user_path) =3D> getname(user_path) CLASS(filename_kernel, name)(string) =3D> getname_kernel(string) CLASS(filename_flags, name)(user_path, flags) =3D> getname_flags(user_path, flags) CLASS(filename_uflags, name)(user_path, flags) =3D> getname_uflags(user_path, flags) CLASS(filename_maybe_null, name)(user_path, flags) =3D> getname_maybe_null(user_path, flags) CLASS(filename_complete_delayed, name)(delayed) =3D> complete_getname(delayed) CLASS(filename_consume, name)(filename) =3D> no_free_ptr(filename) all with putname() as destructor. "flags" in filename_flags() is in LOOKUP_... space, only LOOKUP_EMPTY matte= rs. "flags" in filename_uflags() and filename_maybe_null() is in AT_...... spac= e, and only AT_EMPTY_PATH matters. These conventions might be worth reconsidering... Signed-off-by: Al Viro --- include/linux/fs.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/include/linux/fs.h b/include/linux/fs.h index b711f46ba8f5..db0d89dd1229 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -2527,6 +2527,14 @@ void dismiss_delayed_filename(struct delayed_filenam= e *); int putname_to_delayed(struct delayed_filename *, struct filename *); struct filename *complete_getname(struct delayed_filename *); =20 +DEFINE_CLASS(filename, struct filename *, putname(_T), getname(p), const c= har __user *p) +EXTEND_CLASS(filename, _kernel, getname_kernel(p), const char *p) +EXTEND_CLASS(filename, _flags, getname_flags(p, f), const char __user *p, = unsigned int f) +EXTEND_CLASS(filename, _uflags, getname_uflags(p, f), const char __user *p= , unsigned int f) +EXTEND_CLASS(filename, _maybe_null, getname_maybe_null(p, f), const char _= _user *p, unsigned int f) +EXTEND_CLASS(filename, _consume, no_free_ptr(p), struct filename *p) +EXTEND_CLASS(filename, _complete_delayed, complete_getname(p), struct dela= yed_filename *p) + extern int finish_open(struct file *file, struct dentry *dentry, int (*open)(struct inode *, struct file *)); extern int finish_no_open(struct file *file, struct dentry *dentry); --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6EBED312826; Tue, 16 Dec 2025 03:54:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857296; cv=none; b=Fd/MTWGmgeVkjlJUDe7B8LxfLUSJ95UCt76XDY2R8AAksBB/c8RZ7OVvMRRCH7LDQPyhwzLwX4VRLqo5r+XVuAUseSOUt4jqx02cW5Yofo0tQrpoAUOhYfR++cF8XOFGRVN1nqCw2ejocQqskAeI4Fd0EyzHFkFqglUze/+Vdh4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857296; c=relaxed/simple; bh=Kv/ka8ztlHo4QWU+GzA5OuAWaTlbQ5jTKrvVj9cUrkk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=mDG/DH+BSGJq6PSgYki2CtbnQaLHbtkqiA7uEH6fuvbYGfx7zFcV7o34QzUe0Qt6iujT8IWrWUHdQOMUq0V4uR0eHgHBO1vICuzRIFsa89s+P0RQ1EVfAnVwo+Li7NPtm3yVL0IW10C/Ry8JxiTh7eFX8k1L2hZr9kcthKWW2vQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=MPl+U43w; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="MPl+U43w" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=cPLZK8daWl7rtOGf8eSVSW0i863W5e2w+3ptgBoMjus=; b=MPl+U43wMStTUme9+KV/nOav49 Ud+ungrcc8GCKx2ezu0pa7T/o+jkw8oVn7c1Kr7fkgDggf5mnA6fwISPWuygWwLdEHQNllQvaz+NK Bz0yDRj/cdd68a3Riiy3b956hMNqrdk353+Jphdv5dlCNR1J8dIgvmGxv5Y1RXP7AuDsw5j6sqROB 3WVQvJVqr2avEL6qT+Yh+5Dmn6YdGFqpb7xkCimR/02QYMjrhJx8CwNKSv6xz/NQ8kjlEDOCQODZr VTqV9CZUhggz5sNQrc8QcBLrqW8YEjSo0rKSjxzgC/KcjYsJuHEWJAiNhxtpE2mtP0VM0Osp1yhFe ccFu+w8Q==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9g-0000000GwJx-244n; Tue, 16 Dec 2025 03:55:20 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 20/59] file_getattr(): filename_lookup() accepts ERR_PTR() as filename Date: Tue, 16 Dec 2025 03:54:39 +0000 Message-ID: <20251216035518.4037331-21-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" no need to check it in the caller Signed-off-by: Al Viro --- fs/file_attr.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/fs/file_attr.c b/fs/file_attr.c index 4c4916632f11..f9e4d4014afc 100644 --- a/fs/file_attr.c +++ b/fs/file_attr.c @@ -394,9 +394,6 @@ SYSCALL_DEFINE5(file_getattr, int, dfd, const char __us= er *, filename, return -EINVAL; =20 name =3D getname_maybe_null(filename, at_flags); - if (IS_ERR(name)) - return PTR_ERR(name); - if (!name && dfd >=3D 0) { CLASS(fd, f)(dfd); if (fd_empty(f)) --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 16562312824; Tue, 16 Dec 2025 03:54:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857294; cv=none; b=T2KshaqMSE8jL8SIJvXcynG7z3FPw6P5/++XBfBsw5ZwyRvewtFHLyaUzu9PmJV81LLWFPnwSBj2Rk8ugmAadob+A2CC9jAJktXHrfGlSwigq79DtB0+tDnx5ltdrVWXS635WNaVMySO/rRwDaeiABOiBmNOP1/z7VP/J5eZ3Ew= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857294; c=relaxed/simple; bh=wKWJZZdbUbSwMoIn246Vmp9XLWPXndgTlWmmQPMekrQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=lEbRKADZdXsqsC+7Nzi876GrQLmN9nAFQObY7ppatNNGIsexsEntl8Xs9AZa6bwpHe4dy8QdP/qZ9J4UjpA5R35HkoxCihheMQg5xdDvJXGz6gt6FDLhZLg5dv9RTDHSexySo357Nk0R7C2HdW0A75Q03UVM7MEnSIn9eOLldQY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=b8JvIdo9; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="b8JvIdo9" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=h5xnIpG93qiqQd/wnfuUtnAxrf53oJ7yelGXYhNBaps=; b=b8JvIdo9+H4c6uWkX4Co1P3uXl NIAyGRvhM1f/Ezj07jqUsdMGMr+didEMNUwMIrDY+BUhEbOKSUh3z0h6mLRhOfhYz+XigKKXNWn4j i/eLNpN8TeL6n6EGWxcjbKdwd2um84H78PoKkZBEOQEB8wMjcKaErHZ4rvpk3vL8e8s9p5chTlVvF WBysysscWHXYm0KW1/MBcMhswp6GZO2gjI+pLMjKCQbGoMhc33t1ZYnm4ntk/wh/G0jg9KTNQ91lp rlaEQFV81slYhXz+lrX7cQ8YFl89ZqVURhAwA/S7DAY+ajDWDK+c18hmtsFrE7MGem22dvwXgoFll f+Z+lv4A==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9g-0000000GwK4-2Rrn; Tue, 16 Dec 2025 03:55:20 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 21/59] file_setattr(): filename_lookup() accepts ERR_PTR() as filename Date: Tue, 16 Dec 2025 03:54:40 +0000 Message-ID: <20251216035518.4037331-22-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" no need to check it in the caller Signed-off-by: Al Viro --- fs/file_attr.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/fs/file_attr.c b/fs/file_attr.c index f9e4d4014afc..915e9a40cd42 100644 --- a/fs/file_attr.c +++ b/fs/file_attr.c @@ -457,9 +457,6 @@ SYSCALL_DEFINE5(file_setattr, int, dfd, const char __us= er *, filename, return error; =20 name =3D getname_maybe_null(filename, at_flags); - if (IS_ERR(name)) - return PTR_ERR(name); - if (!name && dfd >=3D 0) { CLASS(fd, f)(dfd); if (fd_empty(f)) --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 70412312827; Tue, 16 Dec 2025 03:54:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857295; cv=none; b=DZB8D69c18AFOPc8ZqjsszMrh5zZwuvIFxH57mzt+AFFI6Hcvu5mmmoFLWJJW0decRP/Ui/8O0khOfh/70GikEqRqNpmHNuOumHNg45FnkSoaHrdsuMCbtoFI0jpzq6dcKdKOYOcjo0+mkspni/U5hPrMSWteCVZpVFMmdHggFk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857295; c=relaxed/simple; bh=C+2EcojQwnwv5U/vpMob42+W8dy1bNTjOKNG9HnaK5w=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=anIwXnaMK40GoScXdsC68z+41OIc3kVomkFwZRJNAUiM4fikMUkaAN0Hr1sd8Qu8ypBx3bg3kX69zeR5fssf4q6h9dreHdBhvl+Om0eUHHT13Yg370VxEowPoV311UTo3NO/1bpcEZ/ET/3az/D2T0JgFLYA/WfWCjxKilhP4rE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=C/Yn+Nno; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="C/Yn+Nno" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=nX+MJLbNwZ93pbRcj4nhRonYJnvqZZukCpm52ExmhG4=; b=C/Yn+Nno+TxYAgVSwm9Efs58sc I6q2yZEv/68PcwWcfMSUyDl1x8hk0mSfhwWosX0n2cCpNtyS65+6G9rvcFzx4OPMI8iZhwB8z8XZR b5OdNU/vd1n2OZpYSIVDPRvIFMJ/A+gBLxJcmQChY2txmc22DFLt4irXdxjn3b/RxZy8bPgsrH2q4 ojmpFqhxPb/Y+ASXu5XCJItie+b2g6ABJ9Pgrih7mCtJxiPNKDSOOQyJsODvJPLD8iSiJ7gqddG80 IM5NqEp+bfk+0TioiNpLkQj1nMV+SnjN3vREOl30ojjnfuyVLg2Di3j//GTi8jzZPkZkQQHQ0crDj +eaRVpIA==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9g-0000000GwKF-3GHF; Tue, 16 Dec 2025 03:55:20 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 22/59] move_mount(): filename_lookup() accepts ERR_PTR() as filename Date: Tue, 16 Dec 2025 03:54:41 +0000 Message-ID: <20251216035518.4037331-23-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" no need to check it in the caller Signed-off-by: Al Viro --- fs/namespace.c | 6 ------ 1 file changed, 6 deletions(-) diff --git a/fs/namespace.c b/fs/namespace.c index c58674a20cad..9d0d8ed16264 100644 --- a/fs/namespace.c +++ b/fs/namespace.c @@ -4427,9 +4427,6 @@ SYSCALL_DEFINE5(move_mount, uflags =3D AT_EMPTY_PATH; =20 to_name =3D getname_maybe_null(to_pathname, uflags); - if (IS_ERR(to_name)) - return PTR_ERR(to_name); - if (!to_name && to_dfd >=3D 0) { CLASS(fd_raw, f_to)(to_dfd); if (fd_empty(f_to)) @@ -4453,9 +4450,6 @@ SYSCALL_DEFINE5(move_mount, uflags =3D AT_EMPTY_PATH; =20 from_name =3D getname_maybe_null(from_pathname, uflags); - if (IS_ERR(from_name)) - return PTR_ERR(from_name); - if (!from_name && from_dfd >=3D 0) { CLASS(fd_raw, f_from)(from_dfd); if (fd_empty(f_from)) --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2D3EE312825; Tue, 16 Dec 2025 03:54:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857294; cv=none; b=W3eDQfcSjcpBJijLT0jE+NxbBMh/NYhp1vntcR5iXK9xxXD/21cUMpiibm0hElyQ4lRabH71FZ/lrv/RLE2x8g5OWz6YKi06Ol04GwhyD1Awa9xjilLha1qjJEG6PUIP+H0tEn47yThR5lF2yCGdTv8E3wXB/YBbLwxx0M78sZM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857294; c=relaxed/simple; bh=5FlUUS1jD/qO4GjkFoeGP/pqV3ffAtfSXhOlZdx96OI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=EZeDnCuJRBhMt1QD8wDVLUxCwNSv3ouWkPoTq0m5ZLrm4MUYQhefneTI5l+blgFTlInERS2Z0AsKAcalBLlp12wExw+Hpg8iqWkBwanwQ2LC3j9RChod7IXpKS02RS3rwN6V4+V13KKlmaaMGIFXmwYK6hlxREBo6Vp7OLWhZCw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=eDL6unSj; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="eDL6unSj" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=RyR3DA8HjjdPyUD9sKhD9cSoJBBdR+vnig5rZSsrQgk=; b=eDL6unSj2eovkNAwj5r1sgNkWS 1dNluo8dUTAc7/Zv48Op3LcU8hQb5+K4Q3ev88GQ8i13OO2olnlAjwJzYdJx0LwzN1LPzv+25ABmY 5An1arm6tbCGTG0VTJQ70z01JImrTsZG3tcLInXFJOCwfucKKKowZVoAPEUm4yF3ym3A5UMUvX3jv xbo0VM+6Ggz1R2XfXI/4/Vg+ahC6hrMH4JbMtLcrVz+Dd4B/PjsTb/jk7l3ae9nmsdMtBlArZxwrG G+VVv1sixaRyjpVZOh/6b7CCPwHwB2vKBHIhD+OhXG9iV86qhOLTyho7Qc0tEH+OspIAp8Vro/RqR QipadUvg==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9g-0000000GwKL-3fQB; Tue, 16 Dec 2025 03:55:20 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 23/59] ksmbd_vfs_path_lookup(): vfs_path_parent_lookup() accepts ERR_PTR() as name Date: Tue, 16 Dec 2025 03:54:42 +0000 Message-ID: <20251216035518.4037331-24-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" no need to check in the caller Signed-off-by: Al Viro --- fs/smb/server/vfs.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/fs/smb/server/vfs.c b/fs/smb/server/vfs.c index 98b0eb966d91..e874b27666a1 100644 --- a/fs/smb/server/vfs.c +++ b/fs/smb/server/vfs.c @@ -67,9 +67,6 @@ static int ksmbd_vfs_path_lookup(struct ksmbd_share_confi= g *share_conf, } =20 filename =3D getname_kernel(pathname); - if (IS_ERR(filename)) - return PTR_ERR(filename); - err =3D vfs_path_parent_lookup(filename, flags, path, &last, &type, root_share_path); --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A3CC8312838; Tue, 16 Dec 2025 03:54:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857297; cv=none; b=K8Tsj6MMMwsrRAQF5bAYWpvm/qi4hzylFJM4RvyXXaubSC1cRrYpyyFoUsJBjqYStMZ3vVqyzBQUwKE9chsbD/N1Nwa/gCa9/wPzoqs3omsj9/uzaxTgnlaWqeOl7mlm6nwxM6icbX3HG0rZZRoT/mYlCofMNmqOYdMBz+sC74k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857297; c=relaxed/simple; bh=jdzYbS+XFnEHgYaBnGvA1HE7+1/v+uYUnrU+3o8mAwI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=tkk/+Q6Xn1+GwV7RVZfPxZ1byu9WB0A3uUvl425JLGT3pBYW+LvSshcNMMeid1jRb9XcMOkPO7zWRkj042U689Zg0ZG73yRKYN8GSPUGdFwXzq1SsZ3zcrWHbHGF9OW9zviUMmvTCjellq8joyVKdRFu73AKrY2Ko+US5TEw1z0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=g4oJ0eBX; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="g4oJ0eBX" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=HnM8yEWuhhQLT940Vc2y+rRmTPsMSEE4Li0pZlObJ28=; b=g4oJ0eBXi/h7FV7cOSvH83WHs5 NeIUTpKCUrp3gtq18pBL8yuwkGRBP5RibWRgqx/MnPeX3SVux2ntu+qo/DOAHDxZm5CQuPEZHDPYV WgxZtlgUj0Of/s+xf76AsCI12V2Mjb258XWsUQcs7tRkrPTHC5nC5DWX6PnO2xiXOTr4c18TBuhmz pWcZ3sBvB0iukUKee1zoBXFVh/2Ip/g7sccfxSwAF3aXPyL+wk0OvR1cmnmlqXnJRw3YOUpc7PSTu ZfJh7zTOLs3YORcpL0yNjCmKXyVIMvOp1WXV5hhKexAKqUy+RKlNEUlhpuLq/LOa3Suet8D0YM7em uXT7+JLQ==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9h-0000000GwKS-01Sq; Tue, 16 Dec 2025 03:55:21 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 24/59] ksmbd_vfs_rename(): vfs_path_parent_lookup() accepts ERR_PTR() as name Date: Tue, 16 Dec 2025 03:54:43 +0000 Message-ID: <20251216035518.4037331-25-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" no need to check in the caller Signed-off-by: Al Viro --- fs/smb/server/vfs.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/fs/smb/server/vfs.c b/fs/smb/server/vfs.c index e874b27666a1..abfaebcf8cde 100644 --- a/fs/smb/server/vfs.c +++ b/fs/smb/server/vfs.c @@ -674,10 +674,6 @@ int ksmbd_vfs_rename(struct ksmbd_work *work, const st= ruct path *old_path, return -ENOMEM; =20 to =3D getname_kernel(newname); - if (IS_ERR(to)) { - err =3D PTR_ERR(to); - goto revert_fsids; - } =20 retry: err =3D vfs_path_parent_lookup(to, lookup_flags | LOOKUP_BENEATH, @@ -737,7 +733,6 @@ int ksmbd_vfs_rename(struct ksmbd_work *work, const str= uct path *old_path, } out1: putname(to); -revert_fsids: ksmbd_revert_fsids(work); return err; } --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B575531283A; Tue, 16 Dec 2025 03:54:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857295; cv=none; b=Vfi/bReFqrS+u3T2YvPXBhplTjwq3JkNOInnSHz1L+cmAw8Ax4HJAwLVaDlBSxy/kvpgrs94aRoSDaHWgqIJKZ8Hu6smwYquR3D2clMV1WSZ1YaACuGhbwrITYgekzA39br05AVgrmUQ9/v30bHQcUwBpnulrC6WMCfgu6HOnNw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857295; c=relaxed/simple; bh=IX9w7fPMNXPKv9Q0A7fH9oFpc94P7btxSOr2pZJLITM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=hkFDyjc7yqR/OK9hwfZ6tmeAL7vXbkkBgJ2e/Gkwl8Itm9csYvHkTTfkfYM2qd840PUD4ktPDADtXOgFENVpS1nOYa6Zlb35m4PHEuDkbRnrtMmX0eGpSeY0SZ8CB/rVFV1Qnzgpp5Y5tfPdoerGd3kj9gKoSF/Sw/tzshrBjj0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=A66y6vHd; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="A66y6vHd" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=CVl8K5qCw4DMEXt5OfjSK+oeyIn0fDQavSQJ4SK/2cU=; b=A66y6vHdLvdW7oY/9E46riGsRD +LUFf8zyrfoxXTIzQRAHM0jdICeKJ7fFK/Ixn040vV6KzVqQs3U/r80r/vB/e5BQh4cBTS7Ku6IZH MHj5ltG1v8Ra5Khp2Eh5L4o9lEBtxpmnFC9A0j2FStiPsX3OqyAyXgY2mkZHDRlkRV7TiYJy39g0s RRmeLaWibaYsuFTlXdmtUH2rvGimEbVGlFWHDWaddiFEF9Jm9kEeiNwlxcn7MCpOSN2xf8mGy2gux SEWwX9PSsQFkXrBHs8s7LhE61mONn67/+4tRi030qVeV3bzRIdTi4xc/MMVFrUTX8Cv0aGaO5MJOv hNuC3MRg==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9h-0000000GwKc-0dcx; Tue, 16 Dec 2025 03:55:21 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 25/59] do_filp_open(): DTRT when getting ERR_PTR() as pathname Date: Tue, 16 Dec 2025 03:54:44 +0000 Message-ID: <20251216035518.4037331-26-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" The rest of the set_nameidata() callers treat IS_ERR(pathname) as "bail out immediately with PTR_ERR(pathname) as error". Makes life simpler for callers; do_filp_open() is the only exception and its callers would also benefit from such calling conventions change. Signed-off-by: Al Viro --- fs/namei.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/fs/namei.c b/fs/namei.c index 192d31acb4ff..af7fd253a712 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -4865,6 +4865,8 @@ struct file *do_filp_open(int dfd, struct filename *p= athname, int flags =3D op->lookup_flags; struct file *filp; =20 + if (IS_ERR(pathname)) + return ERR_CAST(pathname); set_nameidata(&nd, dfd, pathname, NULL); filp =3D path_openat(&nd, op, flags | LOOKUP_RCU); if (unlikely(filp =3D=3D ERR_PTR(-ECHILD))) --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A203331282E; Tue, 16 Dec 2025 03:54:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857295; cv=none; b=A6BPVBNRqMIUhSrq5EtI+D16DYae5UHpiiEyB5scutwcJJ7H3T0AsGYM09ict+RM5I58kAp6i2EBwYARYbOzoq2Gu/sjITVFeiLBZxswL1agTwK8dAVniy9C0DfqnBm/BhGBVaU8G+QW1eUEez2dgbQw9DQXda3iJvCos7gnVR0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857295; c=relaxed/simple; bh=vjvo+k64W7ElGUEZkimf09BlPWP0vtIGNHy4LOBhMWw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=p79jGvlW/XUX0lLRVVqgZQb6+9Pd1BmwuBzwSp0oe4YEyBTeQ5y73GL8wrAminPEw8Z9An9X3vleI7XuDidHTbcs6nsWIdpv787ac/fkvy4MTc2Gwyh91x2hf3L4gDpfLWMqIq+4pJcNj1+qhDNb4vH+fWxercn682b3q1go/6k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=wiFae3i2; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="wiFae3i2" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=z8Xh2rzqJWEtazMX5hjsiMAeLADvZxxnPoSk2BC2U/8=; b=wiFae3i20xsupWHVSApsixREGR 4VZmxawpsSpUu5bHa8E7OZniHPVOsnNroZmkqa+EgHcUv4o+1TFzRZjlmPwT+vdFZ2eaF8uge3Ksj YJydiAFBqTey+0yinySFLfNQSINc1Z72qtZr+6pB7Jzpa+DGAHPYaKCEgRnhRPkKDvhaWjgB/p+Ak JNGRfAbMt1AgB3676g+17AWZHWmULEd5YcRc+ISZOqHCFXyeBicCJ9nN5eEX/9IlQlB4I/PgaA2zb FDne30LtuIHd4XEZOb+FSexJwzEOZRqJp8DR9ylXvGfN4vQr/3LQVN/lJb6hqe87NT3rGzI5qhkBp XlX9D1rg==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9h-0000000GwKh-18YG; Tue, 16 Dec 2025 03:55:21 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 26/59] rename do_filp_open() to do_file_open() Date: Tue, 16 Dec 2025 03:54:45 +0000 Message-ID: <20251216035518.4037331-27-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" "filp" thing never made sense; seeing that there are exactly 4 callers in the entire tree (and it's neither exported nor even declared in linux/*/*.h), there's no point keeping that ugliness. FWIW, the 'filp' thing did originate in OSD&I; for some reason Tanenbaum decided to call the object representing an opened file 'struct filp', the last letter standing for 'position'. In all Unices, Linux included, the corresponding object had always been 'struct file'... Signed-off-by: Al Viro --- fs/exec.c | 2 +- fs/internal.h | 2 +- fs/namei.c | 2 +- fs/open.c | 4 ++-- io_uring/openclose.c | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/fs/exec.c b/fs/exec.c index 9d5ebc9d15b0..b7d8081d12ea 100644 --- a/fs/exec.c +++ b/fs/exec.c @@ -780,7 +780,7 @@ static struct file *do_open_execat(int fd, struct filen= ame *name, int flags) if (flags & AT_EMPTY_PATH) open_exec_flags.lookup_flags |=3D LOOKUP_EMPTY; =20 - file =3D do_filp_open(fd, name, &open_exec_flags); + file =3D do_file_open(fd, name, &open_exec_flags); if (IS_ERR(file)) return file; =20 diff --git a/fs/internal.h b/fs/internal.h index e44146117a42..5c3e4eac34f2 100644 --- a/fs/internal.h +++ b/fs/internal.h @@ -189,7 +189,7 @@ struct open_flags { int intent; int lookup_flags; }; -extern struct file *do_filp_open(int dfd, struct filename *pathname, +extern struct file *do_file_open(int dfd, struct filename *pathname, const struct open_flags *op); extern struct file *do_file_open_root(const struct path *, const char *, const struct open_flags *); diff --git a/fs/namei.c b/fs/namei.c index af7fd253a712..f6b5d6a657da 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -4858,7 +4858,7 @@ static struct file *path_openat(struct nameidata *nd, return ERR_PTR(error); } =20 -struct file *do_filp_open(int dfd, struct filename *pathname, +struct file *do_file_open(int dfd, struct filename *pathname, const struct open_flags *op) { struct nameidata nd; diff --git a/fs/open.c b/fs/open.c index 2fea68991d42..3d2e2a2554c5 100644 --- a/fs/open.c +++ b/fs/open.c @@ -1382,7 +1382,7 @@ struct file *file_open_name(struct filename *name, in= t flags, umode_t mode) int err =3D build_open_flags(&how, &op); if (err) return ERR_PTR(err); - return do_filp_open(AT_FDCWD, name, &op); + return do_file_open(AT_FDCWD, name, &op); } =20 /** @@ -1436,7 +1436,7 @@ static int do_sys_openat2(int dfd, const char __user = *filename, if (IS_ERR(tmp)) return PTR_ERR(tmp); =20 - return FD_ADD(how->flags, do_filp_open(dfd, tmp, &op)); + return FD_ADD(how->flags, do_file_open(dfd, tmp, &op)); } =20 int do_sys_open(int dfd, const char __user *filename, int flags, umode_t m= ode) diff --git a/io_uring/openclose.c b/io_uring/openclose.c index 95ba8c5b5fc8..95fcb612ad9c 100644 --- a/io_uring/openclose.c +++ b/io_uring/openclose.c @@ -138,7 +138,7 @@ int io_openat2(struct io_kiocb *req, unsigned int issue= _flags) goto err; } =20 - file =3D do_filp_open(open->dfd, name, &op); + file =3D do_file_open(open->dfd, name, &op); if (IS_ERR(file)) { /* * We could hang on to this 'fd' on retrying, but seems like --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A05D1312829; Tue, 16 Dec 2025 03:54:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857295; cv=none; b=MsxvGVrA6asHN4LJjgU1dxWerKKSF1R5rd2mWfRz0/0aydgnVBCFiplRUfiuKTqAeEIS7oN0OMCPnnUnXQtR5dm0A4PDfRFh0NbDh6vSfReUamtcIMi5cKOXr8xAWXDGkDUxInuTdjLDGTwTyBhJIhz5mmRvrkIJd111Go7GVwo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857295; c=relaxed/simple; bh=va0PaN4mBusaBKHrjOmL/1eI/ypIV3NEfozekyfEnDw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=hama1K05p7tDCxC5fKZbTz9ZGBwUaVtQgKxJXb8fjt/vBUwAj6NPmrSEzYDVQU6VXCqUG4HGmHCPC5qqqI01yy2Gfnz77SKgqXLb5UjVfUksqzSctOOfkd5UF2GFwFJV5DqeWr2bDOk5GQlfS3p/nXSI2oxr/VRlDGFtVHqOF9s= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=uUDl1K9h; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="uUDl1K9h" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=/5nL/BGU6SfQpPxyPgJp6vCw4GwTODv96udxuJvjpUM=; b=uUDl1K9hWn/qUy0RQMCq7DCh9N LYP3DerorUie34HZlDd4ii63mQD3ro37TTaac6p2wcDAUgyJXMthKE03cGj5+alwFb/KkdASTf0TM NFN1cWsWQe42Qpt0N6vxplNjOBRl/aUEjh6Vx4thKFRQ2W7DTTPkQXbvaMVc2m5IiUm/J9WRV6A4X pktNaRC/kFuMaoYTq83sO/gITQe+4YGP3HtfwzGnwmNAXAlpEElN2E7E6fzeCqnmjd4FiROJ9UfUE TOohXASYwVp67gLVIabr1k0yEL6Q/p/S8hba9hgbWJjJEzWnuNdPOnB9+zPnAR5UDMWW4244ucMam 8vsSoMWA==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9h-0000000GwKn-1cm4; Tue, 16 Dec 2025 03:55:21 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 27/59] do_sys_openat2(): get rid of useless check, switch to CLASS(filename) Date: Tue, 16 Dec 2025 03:54:46 +0000 Message-ID: <20251216035518.4037331-28-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" do_file_open() will do the right thing is given ERR_PTR() for name... Signed-off-by: Al Viro --- fs/open.c | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/fs/open.c b/fs/open.c index 3d2e2a2554c5..ac8dedea8daf 100644 --- a/fs/open.c +++ b/fs/open.c @@ -1425,18 +1425,12 @@ static int do_sys_openat2(int dfd, const char __use= r *filename, struct open_how *how) { struct open_flags op; - struct filename *tmp __free(putname) =3D NULL; - int err; - - err =3D build_open_flags(how, &op); + int err =3D build_open_flags(how, &op); if (unlikely(err)) return err; =20 - tmp =3D getname(filename); - if (IS_ERR(tmp)) - return PTR_ERR(tmp); - - return FD_ADD(how->flags, do_file_open(dfd, tmp, &op)); + CLASS(filename, name)(filename); + return FD_ADD(how->flags, do_file_open(dfd, name, &op)); } =20 int do_sys_open(int dfd, const char __user *filename, int flags, umode_t m= ode) --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C74C43128A1; Tue, 16 Dec 2025 03:54:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857296; cv=none; b=Q4dmAVcXY6dx5oHmx642avVYRMg2kAruJPziphiqInnxTrowA/NXwX32fS8u8F1fLMBZbDFDPe0c0YsUXX3LydvzoQpsCba18YfrEDBTajL9c1aGCFVETS+8QLnS1mshIGPdy+SiGaobi8XXSY5G9izD3zTyuymlQmbFvr+lcWg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857296; c=relaxed/simple; bh=eXKVmukn3ymqplJ5Nf+zMmgxI0ovB5ZcpB+UI18vaPQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=qAyJFkek7EFBPguR132lLFxqeH3uISL03+Ouv8xw1rFxQpz7tAlAlYaMpVz0aCqZefyBu3lP5TG4iLNC2CR8OOO6LOSa/AJG8pT2JmCPPamWpPXe6rOuJ2wyPDLFMDMHgDSxP7wVu3pdtjzGNoqCMbctzpcIBd3CoTZpujPUTpE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=AIrjIx8v; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="AIrjIx8v" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=fmXZq62g6UELg+AE+ZD10sFlI/M451x/DE+rYFKzrjo=; b=AIrjIx8vy/aUZq77YqoSQjqiNE rjgQTGFxc9+GUNnJ7pPnH7RgITOZAGPlZcHeTCLkJ8Euxts9wCjhTn/Dq73OifsA7ZtNHIoqdjljk FQvQq5pAP+6/1Kv0Ch5NyxlFvmr56MReJ1ub3HlWwmCGzOWg91F7wILzaZXG70c67FFr+uDo42Whr XXEyWCdpIXFIJPIiBS5hRicw46SCChf/O7Ku2ygalcEKFsQkwZg02V0dOYOZQDD2ye/mTy9B09Drl ntLKWT3vYaISB7oNe0Rii1NS/ir6tZoW5r2Y9OwIXvX1nsP26zS2MVV6QJKDBSKesA44T7Z5q87k1 cuJxY/8w==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9h-0000000GwKq-1sjh; Tue, 16 Dec 2025 03:55:21 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 28/59] simplify the callers of file_open_name() Date: Tue, 16 Dec 2025 03:54:47 +0000 Message-ID: <20251216035518.4037331-29-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" It accepts ERR_PTR() for name and does the right thing in that case. That allows to simplify the logics in callers, making them trivial to switch to CLASS(filename). Signed-off-by: Al Viro --- fs/open.c | 10 ++-------- kernel/acct.c | 4 +--- mm/huge_memory.c | 15 +++------------ mm/swapfile.c | 21 +++------------------ 4 files changed, 9 insertions(+), 41 deletions(-) diff --git a/fs/open.c b/fs/open.c index ac8dedea8daf..7254eda9f4a5 100644 --- a/fs/open.c +++ b/fs/open.c @@ -1398,14 +1398,8 @@ struct file *file_open_name(struct filename *name, i= nt flags, umode_t mode) */ struct file *filp_open(const char *filename, int flags, umode_t mode) { - struct filename *name =3D getname_kernel(filename); - struct file *file =3D ERR_CAST(name); - - if (!IS_ERR(name)) { - file =3D file_open_name(name, flags, mode); - putname(name); - } - return file; + CLASS(filename_kernel, name)(filename); + return file_open_name(name, flags, mode); } EXPORT_SYMBOL(filp_open); =20 diff --git a/kernel/acct.c b/kernel/acct.c index 2a2b3c874acd..812808e5b1b8 100644 --- a/kernel/acct.c +++ b/kernel/acct.c @@ -218,7 +218,6 @@ static int acct_on(const char __user *name) /* Difference from BSD - they don't do O_APPEND */ const int open_flags =3D O_WRONLY|O_APPEND|O_LARGEFILE; struct pid_namespace *ns =3D task_active_pid_ns(current); - struct filename *pathname __free(putname) =3D getname(name); struct file *original_file __free(fput) =3D NULL; // in that order struct path internal __free(path_put) =3D {}; // in that order struct file *file __free(fput_sync) =3D NULL; // in that order @@ -226,8 +225,7 @@ static int acct_on(const char __user *name) struct vfsmount *mnt; struct fs_pin *old; =20 - if (IS_ERR(pathname)) - return PTR_ERR(pathname); + CLASS(filename, pathname)(name); original_file =3D file_open_name(pathname, open_flags, 0); if (IS_ERR(original_file)) return PTR_ERR(original_file); diff --git a/mm/huge_memory.c b/mm/huge_memory.c index 40cf59301c21..a6d37902b73d 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -4692,23 +4692,18 @@ static int split_huge_pages_in_file(const char *fil= e_path, pgoff_t off_start, pgoff_t off_end, unsigned int new_order, long in_folio_offset) { - struct filename *file; struct file *candidate; struct address_space *mapping; - int ret =3D -EINVAL; pgoff_t index; int nr_pages =3D 1; unsigned long total =3D 0, split =3D 0; unsigned int min_order; unsigned int target_order; =20 - file =3D getname_kernel(file_path); - if (IS_ERR(file)) - return ret; - + CLASS(filename_kernel, file)(file_path); candidate =3D file_open_name(file, O_RDONLY, 0); if (IS_ERR(candidate)) - goto out; + return -EINVAL; =20 pr_debug("split file-backed THPs in file: %s, page offset: [0x%lx - 0x%lx= ], new_order: %u, in_folio_offset: %ld\n", file_path, off_start, off_end, new_order, in_folio_offset); @@ -4757,12 +4752,8 @@ static int split_huge_pages_in_file(const char *file= _path, pgoff_t off_start, } =20 filp_close(candidate, NULL); - ret =3D 0; - pr_debug("%lu of %lu file-backed THP split\n", split, total); -out: - putname(file); - return ret; + return 0; } =20 #define MAX_INPUT_BUF_SZ 255 diff --git a/mm/swapfile.c b/mm/swapfile.c index 46d2008e4b99..25120cf7c480 100644 --- a/mm/swapfile.c +++ b/mm/swapfile.c @@ -2831,7 +2831,6 @@ SYSCALL_DEFINE1(swapoff, const char __user *, special= file) struct file *swap_file, *victim; struct address_space *mapping; struct inode *inode; - struct filename *pathname; unsigned int maxpages; int err, found =3D 0; =20 @@ -2840,14 +2839,10 @@ SYSCALL_DEFINE1(swapoff, const char __user *, speci= alfile) =20 BUG_ON(!current->mm); =20 - pathname =3D getname(specialfile); - if (IS_ERR(pathname)) - return PTR_ERR(pathname); - + CLASS(filename, pathname)(specialfile); victim =3D file_open_name(pathname, O_RDWR|O_LARGEFILE, 0); - err =3D PTR_ERR(victim); if (IS_ERR(victim)) - goto out; + return PTR_ERR(victim); =20 mapping =3D victim->f_mapping; spin_lock(&swap_lock); @@ -2964,8 +2959,6 @@ SYSCALL_DEFINE1(swapoff, const char __user *, special= file) =20 out_dput: filp_close(victim, NULL); -out: - putname(pathname); return err; } =20 @@ -3392,7 +3385,6 @@ static struct swap_cluster_info *setup_clusters(struc= t swap_info_struct *si, SYSCALL_DEFINE2(swapon, const char __user *, specialfile, int, swap_flags) { struct swap_info_struct *si; - struct filename *name; struct file *swap_file =3D NULL; struct address_space *mapping; struct dentry *dentry; @@ -3422,12 +3414,7 @@ SYSCALL_DEFINE2(swapon, const char __user *, special= file, int, swap_flags) INIT_WORK(&si->discard_work, swap_discard_work); INIT_WORK(&si->reclaim_work, swap_reclaim_work); =20 - name =3D getname(specialfile); - if (IS_ERR(name)) { - error =3D PTR_ERR(name); - name =3D NULL; - goto bad_swap; - } + CLASS(filename, name)(specialfile); swap_file =3D file_open_name(name, O_RDWR | O_LARGEFILE | O_EXCL, 0); if (IS_ERR(swap_file)) { error =3D PTR_ERR(swap_file); @@ -3635,8 +3622,6 @@ SYSCALL_DEFINE2(swapon, const char __user *, specialf= ile, int, swap_flags) out: if (!IS_ERR_OR_NULL(folio)) folio_release_kmap(folio, swap_header); - if (name) - putname(name); if (inode) inode_unlock(inode); return error; --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5954831329D; Tue, 16 Dec 2025 03:54:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857297; cv=none; b=XblCxCJwpY5hPT2Vi8EpVNWZeQgo1UXcKkM9GGBQZkmfjfbu9ffMqWPB60GZsG8LMV81nvI+SApKiV7nW67Zzd8Q5VUbWmUwnhRbwTqgZ0GxxgQxKGC29SW113rc/TrJAee+t5A99xx5zVt8ePCcWGM66it57TZ4Ww7A2gLr/F4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857297; c=relaxed/simple; bh=dKazOTpP98uEsD5tvT0eCFSPEKi73Z7M/OFRDrSl8h4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Hfr106AgqG+yEPUFwOAQ5gRS/NSZZkONxu/58A8zyhCPlCZKKgybCwnkJTWuainX22+/2WaxZ6JERyppW18h6QnRueP+E79JlooOrgnLrxX062Dj3b9y+lLjZtrbzjoEKPhcAiiwndXwDa4+KVDS8NabW88Xq0Y+yWN/l7tB3kI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=UvPnDkL0; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="UvPnDkL0" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=/taDnA0SgX1kjdBTGSIJQ+UnMnEm3NgXYjqO+SzjTkM=; b=UvPnDkL0IhCR+6D1UuILbfY7OM amMR7Scg1UkyevFJ4ioE42G2hh6unZm++Tbf96fnqarlSLcq5Au5E7yivgAzS9o1aCp57TTQvA1Xu cUxU/FmtwiobvAs3lOuRoOyebwPSnyu8ECPVeWoPVkTJ8g/5yLLMAPJ3smAMJZlOSaOIJBpHtqAMz qmPVygLbQHxqlSCMqWM4SocT39ITH2VrHB3GIBEKS3AGiE79+0rhCGQOT4g+8Sq3hDuwSA+tJY9b9 I1WBIYRd/VDPSZz+NdEjpP7f1AzEMH2VJE+DWTLQ0mBLOXBO3APtOjXZCqKxO0NWH7UDXnbWmp5Ya 8mYQRv/A==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9h-0000000GwKu-2FHa; Tue, 16 Dec 2025 03:55:21 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 29/59] simplify the callers of do_open_execat() Date: Tue, 16 Dec 2025 03:54:48 +0000 Message-ID: <20251216035518.4037331-30-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" Signed-off-by: Al Viro --- fs/exec.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/fs/exec.c b/fs/exec.c index b7d8081d12ea..5b4110c7522e 100644 --- a/fs/exec.c +++ b/fs/exec.c @@ -815,14 +815,8 @@ static struct file *do_open_execat(int fd, struct file= name *name, int flags) */ struct file *open_exec(const char *name) { - struct filename *filename =3D getname_kernel(name); - struct file *f =3D ERR_CAST(filename); - - if (!IS_ERR(filename)) { - f =3D do_open_execat(AT_FDCWD, filename, 0); - putname(filename); - } - return f; + CLASS(filename_kernel, filename)(name); + return do_open_execat(AT_FDCWD, filename, 0); } EXPORT_SYMBOL(open_exec); =20 --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 12DA53128A2; Tue, 16 Dec 2025 03:54:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857297; cv=none; b=Y7/W06tyBnZ6dIouqnEgo9xPAAa+Qb5Q3EzxAvubVzFDqkuu1S+U2ESeMv5w6TVWWG74vGfa66z/ykr24wTg9Er2sJuH9V3etv7TSdCMywjBDiK1y5Zf0tXHdnz+DSXWx+6yphj96soM78kzpDeaiXdEx2SjfBZwPWWyDZdnysM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857297; c=relaxed/simple; bh=SyiCZ+BkgTbuNj29/vmF2KqVFwMK6f6m3rzqyVzJ4sQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=e5qXejBD5rOO60VFfDG2aPCVMQWuSoc53US0TU3ugGqqUVFr6NoGO9Egf+S8MEYC/H7aaPzMh/Pjq1kdEQ7Bhmi+Oye0RpQt2ICRAfNNUU9gtrICRDGOKG5vfcOvWv76Ppup4coTQH8eI2oF4YqmMnuhHe5lWNOGRImeM26Oezk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=JgXu22ez; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="JgXu22ez" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=JUE8hPERD0FXyjZgOFJkpifcmj2y7nW76IgVSlDIJnk=; b=JgXu22ezCrA1eArKElhGet6Gdb hbvjL7xiwSuV3T587D1vpw4IwHUf6KJt56gmKL2IYWbFpt1axWKz/mFSqhLimfn38I1cT1JwiZ0dR MCeFnaDkIvfqkQXBBjrbiybYZ+OBBjKz9pSBiF0SJynclpBUvYM/YDpbfY7JDtR50KUWDFPe8wdSc BpV7Fm1tGDuyqXQyRRopBsjrRZL9/gTENklkaru+qBUdnpTwOvya2SzejAGh1fcdAajzVizGDNUkD SeUnFhFsnOjIq/+otR05+TTbjbkTkI5HAkL5We8Xx2QDN34/nEe2acpTEnal57rwWCuYHojkMtMrc Y2qKnuAg==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9h-0000000GwKy-2ZIC; Tue, 16 Dec 2025 03:55:21 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 30/59] simplify the callers of alloc_bprm() Date: Tue, 16 Dec 2025 03:54:49 +0000 Message-ID: <20251216035518.4037331-31-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" alloc_bprm() starts with do_open_execat() and it will do the right thing if given ERR_PTR() for name. Allows to drop such checks in its callers... Signed-off-by: Al Viro --- fs/exec.c | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/fs/exec.c b/fs/exec.c index 5b4110c7522e..1473e8c06a8c 100644 --- a/fs/exec.c +++ b/fs/exec.c @@ -1782,9 +1782,6 @@ static int do_execveat_common(int fd, struct filename= *filename, struct linux_binprm *bprm; int retval; =20 - if (IS_ERR(filename)) - return PTR_ERR(filename); - /* * We move the actual failure in case of RLIMIT_NPROC excess from * set*uid() to execve() because too many poorly written programs @@ -1862,7 +1859,6 @@ static int do_execveat_common(int fd, struct filename= *filename, int kernel_execve(const char *kernel_filename, const char *const *argv, const char *const *envp) { - struct filename *filename; struct linux_binprm *bprm; int fd =3D AT_FDCWD; int retval; @@ -1871,15 +1867,10 @@ int kernel_execve(const char *kernel_filename, if (WARN_ON_ONCE(current->flags & PF_KTHREAD)) return -EINVAL; =20 - filename =3D getname_kernel(kernel_filename); - if (IS_ERR(filename)) - return PTR_ERR(filename); - + CLASS(filename_kernel, filename)(kernel_filename); bprm =3D alloc_bprm(fd, filename, 0); - if (IS_ERR(bprm)) { - retval =3D PTR_ERR(bprm); - goto out_ret; - } + if (IS_ERR(bprm)) + return PTR_ERR(bprm); =20 retval =3D count_strings_kernel(argv); if (WARN_ON_ONCE(retval =3D=3D 0)) @@ -1913,8 +1904,6 @@ int kernel_execve(const char *kernel_filename, retval =3D bprm_execve(bprm); out_free: free_bprm(bprm); -out_ret: - putname(filename); return retval; } =20 --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C5D7A3128A0; Tue, 16 Dec 2025 03:54:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857296; cv=none; b=fCdQa6k1K+FRY7GP1OlfvQKBtrJ7wRjNIiYXt93p7zsI8eIJ6R7E8hFcY0YpULDeZJzELf4SqHHLtLfwmKxsybTMvd3ZHajIeH/31iZFJw0gCzXre9VbrovPmamFCnZsEy/e3yugt5HDaY4uAlWtkyQVGnbSndv4XCGmomvM6Vo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857296; c=relaxed/simple; bh=cxQv9hkw8QvbbztEqUBdFUa0fr0GoUOWAGNW8N8F0vs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=oxKSHORVNsVBxHuqv96glWnAS+bFHVu8atJ4S2JbGGAvZdJVlOO7WcE2hvA+spHWkCZqxx8Mx2kXPVI5bn4m8vMDxO9HvEeEhs3fcobIyZlC6QxowCTMF3xOWRv9kg4dtqPmUq3or1etpPWDJ/KMk3XIw0NqG8U2IRhfvSf2oZI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=sQhnbPnU; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="sQhnbPnU" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=WNzQneQlsedcwVuOQMGa7ReO8KdF8AB19IKu4tOS5i4=; b=sQhnbPnUJad/J8QJTzSOnQW6Y6 DKL5AaNxzJ8acDiFwgDX/4tXDppJUatZzTsFkLh+r1uuwgWCE9MjCmI/qqEE60Gj65zuzbk/YWCVt OnVYUsVlI4fM6Pb3jA8/mAtHezwQz76lce67hkv2+ZiTcASvrNyHZTUkjkDLhVoFis0hm6mbeUATd 6xNTLoUCeSIuLbxQQ6cV+LReVocwEIy1Sma6Ut0E772dsH2CQWnujCsSmyHkvvSYpDH74MNx7ASS1 +3ij1meXN5IkhkXqjQ2TBfAGDEnzk4RuuGsUz6h15Y7/NJ4niO6fwDYiJkiS7yodjg2826wm2xCvX EDPla1VQ==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9h-0000000GwL2-2ss5; Tue, 16 Dec 2025 03:55:21 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 31/59] switch {alloc,free}_bprm() to CLASS() Date: Tue, 16 Dec 2025 03:54:50 +0000 Message-ID: <20251216035518.4037331-32-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" All linux_binprm instances come from alloc_bprm() and are unconditionally destroyed by free_bprm() in the end of the same scope. IOW, CLASS() machinery is a decent fit for those. Signed-off-by: Al Viro --- fs/exec.c | 68 +++++++++++++++++++++++-------------------------------- 1 file changed, 28 insertions(+), 40 deletions(-) diff --git a/fs/exec.c b/fs/exec.c index 1473e8c06a8c..68986dca9b9d 100644 --- a/fs/exec.c +++ b/fs/exec.c @@ -1465,6 +1465,9 @@ static struct linux_binprm *alloc_bprm(int fd, struct= filename *filename, int fl return ERR_PTR(retval); } =20 +DEFINE_CLASS(bprm, struct linux_binprm *, if (!IS_ERR(_T)) free_bprm(_T), + alloc_bprm(fd, name, flags), int fd, struct filename *name, int flags) + int bprm_change_interp(const char *interp, struct linux_binprm *bprm) { /* If a binfmt changed the interp, free it first. */ @@ -1774,12 +1777,12 @@ static int bprm_execve(struct linux_binprm *bprm) return retval; } =20 -static int do_execveat_common(int fd, struct filename *filename, +static int do_execveat_common(int fd, struct filename *__filename, struct user_arg_ptr argv, struct user_arg_ptr envp, int flags) { - struct linux_binprm *bprm; + CLASS(filename_consume, filename)(__filename); int retval; =20 /* @@ -1788,48 +1791,44 @@ static int do_execveat_common(int fd, struct filena= me *filename, * don't check setuid() return code. Here we additionally recheck * whether NPROC limit is still exceeded. */ - if ((current->flags & PF_NPROC_EXCEEDED) && - is_rlimit_overlimit(current_ucounts(), UCOUNT_RLIMIT_NPROC, rlimit(RL= IMIT_NPROC))) { - retval =3D -EAGAIN; - goto out_ret; - } + if (unlikely(current->flags & PF_NPROC_EXCEEDED) && + is_rlimit_overlimit(current_ucounts(), UCOUNT_RLIMIT_NPROC, rlimit(RL= IMIT_NPROC))) + return -EAGAIN; =20 /* We're below the limit (still or again), so we don't want to make * further execve() calls fail. */ current->flags &=3D ~PF_NPROC_EXCEEDED; =20 - bprm =3D alloc_bprm(fd, filename, flags); - if (IS_ERR(bprm)) { - retval =3D PTR_ERR(bprm); - goto out_ret; - } + CLASS(bprm, bprm)(fd, filename, flags); + if (IS_ERR(bprm)) + return PTR_ERR(bprm); =20 retval =3D count(argv, MAX_ARG_STRINGS); if (retval < 0) - goto out_free; + return retval; bprm->argc =3D retval; =20 retval =3D count(envp, MAX_ARG_STRINGS); if (retval < 0) - goto out_free; + return retval; bprm->envc =3D retval; =20 retval =3D bprm_stack_limits(bprm); if (retval < 0) - goto out_free; + return retval; =20 retval =3D copy_string_kernel(bprm->filename, bprm); if (retval < 0) - goto out_free; + return retval; bprm->exec =3D bprm->p; =20 retval =3D copy_strings(bprm->envc, envp, bprm); if (retval < 0) - goto out_free; + return retval; =20 retval =3D copy_strings(bprm->argc, argv, bprm); if (retval < 0) - goto out_free; + return retval; =20 /* * When argv is empty, add an empty string ("") as argv[0] to @@ -1840,27 +1839,19 @@ static int do_execveat_common(int fd, struct filena= me *filename, if (bprm->argc =3D=3D 0) { retval =3D copy_string_kernel("", bprm); if (retval < 0) - goto out_free; + return retval; bprm->argc =3D 1; =20 pr_warn_once("process '%s' launched '%s' with NULL argv: empty string ad= ded\n", current->comm, bprm->filename); } =20 - retval =3D bprm_execve(bprm); -out_free: - free_bprm(bprm); - -out_ret: - putname(filename); - return retval; + return bprm_execve(bprm); } =20 int kernel_execve(const char *kernel_filename, const char *const *argv, const char *const *envp) { - struct linux_binprm *bprm; - int fd =3D AT_FDCWD; int retval; =20 /* It is non-sense for kernel threads to call execve */ @@ -1868,43 +1859,40 @@ int kernel_execve(const char *kernel_filename, return -EINVAL; =20 CLASS(filename_kernel, filename)(kernel_filename); - bprm =3D alloc_bprm(fd, filename, 0); + CLASS(bprm, bprm)(AT_FDCWD, filename, 0); if (IS_ERR(bprm)) return PTR_ERR(bprm); =20 retval =3D count_strings_kernel(argv); if (WARN_ON_ONCE(retval =3D=3D 0)) - retval =3D -EINVAL; + return -EINVAL; if (retval < 0) - goto out_free; + return retval; bprm->argc =3D retval; =20 retval =3D count_strings_kernel(envp); if (retval < 0) - goto out_free; + return retval; bprm->envc =3D retval; =20 retval =3D bprm_stack_limits(bprm); if (retval < 0) - goto out_free; + return retval; =20 retval =3D copy_string_kernel(bprm->filename, bprm); if (retval < 0) - goto out_free; + return retval; bprm->exec =3D bprm->p; =20 retval =3D copy_strings_kernel(bprm->envc, envp, bprm); if (retval < 0) - goto out_free; + return retval; =20 retval =3D copy_strings_kernel(bprm->argc, argv, bprm); if (retval < 0) - goto out_free; + return retval; =20 - retval =3D bprm_execve(bprm); -out_free: - free_bprm(bprm); - return retval; + return bprm_execve(bprm); } =20 static int do_execve(struct filename *filename, --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C45AE31283F; Tue, 16 Dec 2025 03:54:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857298; cv=none; b=Y9lVc9pVkfHGmWLUKorwZWSAyODP44rWyy/NTk6Sdoz7G4WKkKXEbTxVn4LfNCF1xu1NUqTgMRiXi3w7SMal4gEyb6Wvr+niNzb50GnczJpjCXon7Rrat+4QcOjze+pnEQw5ibvl/eKqOiBo86etNM6gJnzMHuBlui43weWP0s4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857298; c=relaxed/simple; bh=lUNdt9aHq9kzNNWp8Kylraqjc+Cf9GYejJrl9RAZwDw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=sBGDhAcD6gxihxRQuuRTVMATeHc6Hcq95DIyCwFfE9LA5UpbD+bMgqsBnJvbwUoz59uFnlTtfRLt7/2foGnecAAJe91xhycIUpMD+x+r6mdBhwFjjJSlPhM/v12sI3Y+hrYV4qUjoqejtyF2ll9XMwYD7Al6OGu0qq6w1WRebFE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=kg9UCy+h; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="kg9UCy+h" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=ZIlG9KS8Rwh0aHQ/9boEXA29Zfm9oooDLZyOQ0XaJCE=; b=kg9UCy+hJmC9TF5h75L+KC/uQf vA3ZCL/9NpnGCFUBOQEIpSTihFSVQjFN5DzZLTuFnkqnRS+PKzw8LXP9GwlGkUGccDjTULZOB+k1X dBXkM623iRAaZH17GyDzzEFaCp7qlI1/qiV/udpEzwz8RNg/1spoh/xF5khUfMK5jNK4C/GbNEtXP y47bkcEyOcfeEhCFvv4GJjsK+YQjIOqlZaoNQS4qb/X9HuLaJMlB0X1/TEpNGHOR3t+TRcv96Dr97 hvusTQeqWCyq9M8fk4T688oKUVRBqlf/DA2aXlfZwEvkgK3smwJ7/0MI+DZPJAupnW/4lg9g/rtEu ArO56LKQ==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9h-0000000GwL7-3C1Z; Tue, 16 Dec 2025 03:55:21 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 32/59] file_[gs]etattr(2): switch to CLASS(filename_maybe_null) Date: Tue, 16 Dec 2025 03:54:51 +0000 Message-ID: <20251216035518.4037331-33-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" Signed-off-by: Al Viro --- fs/file_attr.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/fs/file_attr.c b/fs/file_attr.c index 915e9a40cd42..b547161be742 100644 --- a/fs/file_attr.c +++ b/fs/file_attr.c @@ -372,7 +372,6 @@ SYSCALL_DEFINE5(file_getattr, int, dfd, const char __us= er *, filename, unsigned int, at_flags) { struct path filepath __free(path_put) =3D {}; - struct filename *name __free(putname) =3D NULL; unsigned int lookup_flags =3D 0; struct file_attr fattr; struct file_kattr fa; @@ -393,7 +392,7 @@ SYSCALL_DEFINE5(file_getattr, int, dfd, const char __us= er *, filename, if (usize < FILE_ATTR_SIZE_VER0) return -EINVAL; =20 - name =3D getname_maybe_null(filename, at_flags); + CLASS(filename_maybe_null, name)(filename, at_flags); if (!name && dfd >=3D 0) { CLASS(fd, f)(dfd); if (fd_empty(f)) @@ -426,7 +425,6 @@ SYSCALL_DEFINE5(file_setattr, int, dfd, const char __us= er *, filename, unsigned int, at_flags) { struct path filepath __free(path_put) =3D {}; - struct filename *name __free(putname) =3D NULL; unsigned int lookup_flags =3D 0; struct file_attr fattr; struct file_kattr fa; @@ -456,7 +454,7 @@ SYSCALL_DEFINE5(file_setattr, int, dfd, const char __us= er *, filename, if (error) return error; =20 - name =3D getname_maybe_null(filename, at_flags); + CLASS(filename_maybe_null, name)(filename, at_flags); if (!name && dfd >=3D 0) { CLASS(fd, f)(dfd); if (fd_empty(f)) --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2E6D63128A3; Tue, 16 Dec 2025 03:54:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857296; cv=none; b=U4CKtTYsDGOfBxQR2Mmy9ZlJf+HZrFk3Iqa6ll+5TvbWjPe5J1tI23xg1tzDzdnghelBYpPQh8QcwdCPhpSIKXlFRcNEbr6uXCLs/8iESQGR2LMsg+EF8Sc8EhHe7ZIK6mio+5svTSPBPHAE8gfZ1LkGsC6AFK7/kOj0w3JWziM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857296; c=relaxed/simple; bh=ltTrYl7GN0DzsMvuK83DN/Ol0bNTuyKzVNTK64WoEE0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=MHr4gMMPO//N6dPr5sEy06dGhu71vCTsKGuC4HNxoLN3oEcD7vFvoMsQD1NWranjV5c5uft3g747i0DSi50yVIfVTLG1rDq2I/4uWgGePWmmMLmy5pK9I8zU565GyW4M0P9eL5xTwgNrVNFONb757lntPtAPeNQ3dS+GtJL7gJk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=n6qxSoWI; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="n6qxSoWI" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=qwJAhJsvJ2SJYlVcArGg+7WWNzPWS5syBQcg8iMXPSQ=; b=n6qxSoWItZefHBpqcxEMN1PCyO nSgD7OtiSg/FcQm9gKwYSA3n6Mxg8ywl+958p5JlQKppgkJg6igdhfYYJTc/caiKLAe/Fetz4UqoC vMbSicyLUdkBSZHErmh4S3La7mYEqvySWjCyDHOmcpKL9YdtbIxClxDNf2/HN4ulxX134zNjFnN9V bgZkKRHOU/rHnu2zJpxFKgyN+lxSSsc0gF4CkLdeJl7FngFhXKESfbaNers+ojr4k/gUamuXcFW8f OtzZeDp+01+9VXOBCPH+Edb7ACW+aB2COIvAZ9bZOqnq+G8m0DwLKC2apoS6X0o0PgU4CHy7/touu s1lf6Xng==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9h-0000000GwL9-3Zqa; Tue, 16 Dec 2025 03:55:21 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 33/59] mount_setattr(2): don't mess with LOOKUP_EMPTY Date: Tue, 16 Dec 2025 03:54:52 +0000 Message-ID: <20251216035518.4037331-34-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" just use CLASS(filename_uflags) + filename_lookup() Signed-off-by: Al Viro --- fs/namespace.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/fs/namespace.c b/fs/namespace.c index 9d0d8ed16264..d632180f9b1a 100644 --- a/fs/namespace.c +++ b/fs/namespace.c @@ -4978,8 +4978,6 @@ SYSCALL_DEFINE5(mount_setattr, int, dfd, const char _= _user *, path, lookup_flags &=3D ~LOOKUP_AUTOMOUNT; if (flags & AT_SYMLINK_NOFOLLOW) lookup_flags &=3D ~LOOKUP_FOLLOW; - if (flags & AT_EMPTY_PATH) - lookup_flags |=3D LOOKUP_EMPTY; =20 kattr =3D (struct mount_kattr) { .lookup_flags =3D lookup_flags, @@ -4992,7 +4990,8 @@ SYSCALL_DEFINE5(mount_setattr, int, dfd, const char _= _user *, path, if (err <=3D 0) return err; =20 - err =3D user_path_at(dfd, path, kattr.lookup_flags, &target); + CLASS(filename_uflags, name)(path, flags); + err =3D filename_lookup(dfd, name, kattr.lookup_flags, &target, NULL); if (!err) { err =3D do_mount_setattr(&target, &kattr); path_put(&target); --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3B54A3128A9; Tue, 16 Dec 2025 03:54:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857296; cv=none; b=Z+slaSouv1VpgLkmuGRpfEnj8xiiBFmPmgEEOvmhngYqQr3H/UZQ1r2E0hNhMtZkO01cHnsZC4gyGmlYJO4Lyy49KbEzdoBw5baoto3iG5/FW6xTbB03OkhzNt8y3OJJkgQwbcL8iKX09AIdd2aO1y6mRaIPwukQNIzLEbHY99U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857296; c=relaxed/simple; bh=qFWWBZSWrxy2KDGSAaHiqUKXKRDjGyqp+DsZAn7I6ik=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=HPDPaErojWVlgAVsiFlxa7ZhkTC82LVoZSuOELsJzFYH1hYIzB6oExByMG6XxEydQclRBawzvg7hIKskNQfZASX94Gy1qRrLlz9OIPZzIb2VHQtM/Q2+pOuEeHMBsfwP8ZRVJT9KyIOPtufAhNYiNY3CEpxlDHtAazCZh8taINQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=LHOHzXvl; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="LHOHzXvl" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=r9VUUYclQG2D+jKHTMll9hIsQ83a+DJ6bNwpaQUG0Fw=; b=LHOHzXvl4S23w1QVB7e0CLft+N cTJCb7ldoYckfskxmvZSXl5ruQoN8gTMHGxUZDIlEtKCOkFfzOEsuaSjDeiMFXJA+PnQFmqHe61A0 4Or1oBwJv3rt2Razw0putSOEo1e0CZTt8cKXT88il+L7AA6imq8md56ngb6uo4dQq07ND9imv0NWk fj7K7wP7EeFiRcxXw167QoqJMlIEOB3NKK8Kw1+IGfBIM1+MPhHBLv9SJF7mOc4BGVD7b1fLP0euF FjaVgdXlOsmho1rGgJIV3s44rdvzjff/a0HdRugDgoZyGYRXhUTnkgfH2H5RVwfsWPYMpVW+4+Z/B FWIoeM1w==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9h-0000000GwLH-47Kq; Tue, 16 Dec 2025 03:55:22 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 34/59] do_open_execat(): don't care about LOOKUP_EMPTY Date: Tue, 16 Dec 2025 03:54:53 +0000 Message-ID: <20251216035518.4037331-35-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" do_file_open() doesn't. Signed-off-by: Al Viro --- fs/exec.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/fs/exec.c b/fs/exec.c index 68986dca9b9d..902561a878ff 100644 --- a/fs/exec.c +++ b/fs/exec.c @@ -777,8 +777,6 @@ static struct file *do_open_execat(int fd, struct filen= ame *name, int flags) return ERR_PTR(-EINVAL); if (flags & AT_SYMLINK_NOFOLLOW) open_exec_flags.lookup_flags &=3D ~LOOKUP_FOLLOW; - if (flags & AT_EMPTY_PATH) - open_exec_flags.lookup_flags |=3D LOOKUP_EMPTY; =20 file =3D do_file_open(fd, name, &open_exec_flags); if (IS_ERR(file)) --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6219C31354C; Tue, 16 Dec 2025 03:54:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857298; cv=none; b=c+nYaygGn22cQW8tsTR7ePEP81hGLUXPeAzOjcvRjmGNS0tO3UfZUvDkiJUjGKvnT19+l3QTVrC7OKjeyBEOf0OSfGNVl6dkzzKA0PR3IMfk07EgEoew3ugG90zGP2bGiRPo4qTu6sZBVz/RNmSirhjb9fK/RZrD0spWThaOhNw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857298; c=relaxed/simple; bh=JGIE1Xn73bLwFlYFa1TfmbrgYmGn/Qjf/OmTPOTQAHk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=hurM+OzPG9tWjxZjBwRdvLg/aClIEn/aCXQStZvhefFBgo1ZhW8LBUohjF0Mhc9SHzIfMEC77CVZzMRoSOcuU8egq6OQhR8z2MsTIm2o6GQ09BXLfnPonjaTywotkBolxYUNaSSB9+qrdZv1Nae7PAAKfgwTh5V10kiNhtCgOs4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=Kuh/2CfU; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="Kuh/2CfU" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=w+ofnS0NH5sbZoyF6cXcsB14QEggir0J8dBphBaxor8=; b=Kuh/2CfUwoiUu284tGUZuBhPHY Ad/LVfw6vcK+z1M1Ng8iW4RPsgKhzLRWEJYZYu50Bk6dfrQxpG/FKINy+KlTES9yw5OdelpMagMK2 RKXQyld8czi6+OwAAMFMBclxo6z6Mq19q5rWyQmjBspEb4u5qfCB8xRSJp845yVpc3ZOkN7yD06X4 xY3oMYpvSEOI9C0GV3YTd2KVBMubd+e7hy+nCFFPA8DjtGiq7CXYu5vpFQEUu2BfWNs3xZzfIrj4H rnvTm9qr6JfWmwXAJslVZ39sz3oOUZzTzTgDVZsYcAmiqwSm9ZpyHIoft5Mg5uSxX1VjBgwwxinQT na75Aizw==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9i-0000000GwLR-0FPd; Tue, 16 Dec 2025 03:55:22 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 35/59] vfs_open_tree(): use CLASS(filename_uflags) Date: Tue, 16 Dec 2025 03:54:54 +0000 Message-ID: <20251216035518.4037331-36-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" Signed-off-by: Al Viro --- fs/namespace.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/fs/namespace.c b/fs/namespace.c index d632180f9b1a..888df8ee43bc 100644 --- a/fs/namespace.c +++ b/fs/namespace.c @@ -3082,13 +3082,12 @@ static struct file *vfs_open_tree(int dfd, const ch= ar __user *filename, unsigned lookup_flags &=3D ~LOOKUP_AUTOMOUNT; if (flags & AT_SYMLINK_NOFOLLOW) lookup_flags &=3D ~LOOKUP_FOLLOW; - if (flags & AT_EMPTY_PATH) - lookup_flags |=3D LOOKUP_EMPTY; =20 if (detached && !may_mount()) return ERR_PTR(-EPERM); =20 - ret =3D user_path_at(dfd, filename, lookup_flags, &path); + CLASS(filename_uflags, name)(filename, flags); + ret =3D filename_lookup(dfd, name, lookup_flags, &path, NULL); if (unlikely(ret)) return ERR_PTR(ret); =20 --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 51EEE313263; Tue, 16 Dec 2025 03:54:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857297; cv=none; b=RD46AhGXnPs2ZwvM4qjtRp30tqrjXu0NFRpDKCGlM4j0avaFVGHAsKp6sOnTV9+1CFN2szYCAeJj92BmG4Xco3OlUEDfCzbXawxm3JHvVANzMrIq2GGts8i6W3Gw6/DUplMFwvZf0x8LZyBfI8gSvazhFbAEssWA1Ft/DMRWo0U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857297; c=relaxed/simple; bh=ntStfDefI1LSk8YKGruB1ETOnK4upEIT64zjyBPt37E=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=c31eisq15SiBd/9WwJA9cox8WMJsQv/HMwyRaNdlqQrqB4uMqNTiabijSGug0MMPKCuIjGdeHD//oU5ObtduKsrHUeQ4t0/0u1yxKwgjaeXRXdQEYR8QoTEw5U4kGbYarn9JKNLpILXOrKRHulZRHYd3MHASfB99yKvaVSo/+0E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=c///9+Jd; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="c///9+Jd" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=qCNNGL7/AcB8NbftVI2+HUXdppTuzbETXECNk4eIw2k=; b=c///9+JdCXo834Tw7RNBqex6ET swOd5Fkyfl659SyC7qwm5a8toFXpQs5TrKcEOB2nERKjNAGExYcGUOoDdbGg0yTwbC+8RBa6kYDyi TfNlIybGV88m41Tn5tGE+he5EkVzrLYFimuL3iT3pU2jpHyVgK5vaVHrVStSc4WFPWbBHlwQFriPi /dmK3iZQ8PPgxB46rQgzsRVjyrcW7oWD/ZhaudUIoFDdZ5JX+TpWeqyODDg//NOb3mP0N7UnDbwff FgXJTjEWFPwayuNx3ApIBYold6irt5gpHxAyHbBZY6iknDcJRdzAWVQUnx3xHvChdfbpnAqbFgs0L YsB7EI6g==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9i-0000000GwLZ-0ogv; Tue, 16 Dec 2025 03:55:22 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 36/59] name_to_handle_at(): use CLASS(filename_uflags) Date: Tue, 16 Dec 2025 03:54:55 +0000 Message-ID: <20251216035518.4037331-37-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" Signed-off-by: Al Viro --- fs/fhandle.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/fs/fhandle.c b/fs/fhandle.c index 3de1547ec9d4..e15bcf4b0b23 100644 --- a/fs/fhandle.c +++ b/fs/fhandle.c @@ -157,9 +157,8 @@ SYSCALL_DEFINE5(name_to_handle_at, int, dfd, const char= __user *, name, fh_flags |=3D EXPORT_FH_CONNECTABLE; =20 lookup_flags =3D (flag & AT_SYMLINK_FOLLOW) ? LOOKUP_FOLLOW : 0; - if (flag & AT_EMPTY_PATH) - lookup_flags |=3D LOOKUP_EMPTY; - err =3D user_path_at(dfd, name, lookup_flags, &path); + CLASS(filename_uflags, filename)(name, flag); + err =3D filename_lookup(dfd, filename, lookup_flags, &path, NULL); if (!err) { err =3D do_sys_name_to_handle(&path, handle, mnt_id, flag & AT_HANDLE_MNT_ID_UNIQUE, --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 685DD313556; Tue, 16 Dec 2025 03:54:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857297; cv=none; b=Jmg+QsDw3xWEtsH8zLE+cjF4eZeniU+AhKY10JpQmnUyPOdFQ7yVwxcsVemF8BqtGU1C06/lwbHxi4D0Z9v3HrBgp2jCps9YbV2sPG6HRjnWTTa6gA26oOstToUcjMHWIt0+K/HAPkL/xgaF3vV09zgaqGCPZjz+53rg0mCnouw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857297; c=relaxed/simple; bh=Lw6fkolzG2z+rslNz1/IkWVTRMaQxHK9deworNvUlPI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=XWDhRJfIhXaMravltVgfltBmz9olUmi0YX4SGN9edBW/gQpIrUUVW0xwUvB+pcMkbo3RH4TfgkUVWadVA5E5XfggNkJN/M22cOl3qR8NLUW3MHyYDA1BBptTqKpk0INRncoDcljqs1r03nMiB9Gux/7XuzJLSO7rVXxvLSU2o1A= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=elUMOXQx; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="elUMOXQx" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=XXA+defR+SzZCm3KczoEbpd9A4VhKcPk/m8STTG/ds8=; b=elUMOXQx9qHhJ9VofCpbq3/oq3 TI088ET0JWDJuEiDjh4pEqtL7AjNVVKUzNIBFObVdf9JEacu7z3Wup7j6GZuFZLN7o1nLzetZhLoT VC5BLh41b1mj9Om2FDxO2PQU7KkrzwQUgJ1PQwXem7I9NsM/qmvRt/euUENF0z48QRh5yVgxmcEx9 4MAcmA3l9e+3cqkypaqOO63Ijk9Vu04u0+93zzH62oTHvexX7mptPjIg7/OJbeMekDIyqOdgaFsJj 4KYX/rbFjdzAYOqn2/0bJEry/U3GKht2GEaGRuDGPQFZ+xVhUIflQcmLyqguNugyCpqpmlrDW7EKN 20kvDj1w==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9i-0000000GwLd-15SL; Tue, 16 Dec 2025 03:55:22 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 37/59] fspick(2): use CLASS(filename_flags) Date: Tue, 16 Dec 2025 03:54:56 +0000 Message-ID: <20251216035518.4037331-38-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" That kills the last place where we mix LOOKUP_EMPTY with lookup flags proper. Signed-off-by: Al Viro --- fs/fsopen.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fs/fsopen.c b/fs/fsopen.c index f645c99204eb..70f4ab183c9e 100644 --- a/fs/fsopen.c +++ b/fs/fsopen.c @@ -181,9 +181,9 @@ SYSCALL_DEFINE3(fspick, int, dfd, const char __user *, = path, unsigned int, flags lookup_flags &=3D ~LOOKUP_FOLLOW; if (flags & FSPICK_NO_AUTOMOUNT) lookup_flags &=3D ~LOOKUP_AUTOMOUNT; - if (flags & FSPICK_EMPTY_PATH) - lookup_flags |=3D LOOKUP_EMPTY; - ret =3D user_path_at(dfd, path, lookup_flags, &target); + CLASS(filename_flags, filename)(path, + (flags & FSPICK_EMPTY_PATH) ? LOOKUP_EMPTY : 0); + ret =3D filename_lookup(dfd, filename, lookup_flags, &target, NULL); if (ret < 0) goto err; =20 --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 686E9313E1B; Tue, 16 Dec 2025 03:54:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857298; cv=none; b=Guz6fq/ys6UBuZQgX6dRKldr5L8nuMw6hgmMOo40cNQuoXJCEZy9OgN19lJ6NdfmbeZouL8masq/jWEnySlZunVuPubEDvYTwqwoXQ16bB6SX+PLmYylG0pcQp2jfnw1lhkhv0n8coqinXAbw4c9jkBWB3OZfraiFIMlDSPTgNE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857298; c=relaxed/simple; bh=9rjy/O7zk9NHa0zEpN/u8HwvuzoJz5ExAtWTchA9beE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=lbDXGezFFZVAlNZjmVteqvDMkEyYVphwt5C5bKtYaQRu13qtE8dSQQNh/lDz3fI6Nm93QsWsUYtfzaWBDaIzF1c51dbJqkYDayZmxWBVMcGyb1GuvPbbZ+HxKrIMQq8a2ZiGtN8HR0d4FKIWHDVytzfdEO6d3OppeZvbz0q/5Dw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=KDN1vu5l; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="KDN1vu5l" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=W1bsT0yqh7PPRDzd1LW2lGzYKFRbDxQSk7TwwEivM5Q=; b=KDN1vu5lpjzztXS72hBTNdUZJ4 dv7mcaW+qw/CpE8zvt4jI0SO0Ad73jIFlJjAbaORTrLaE8R0roMRvgbnr7CL43byzhmAZxYTbv8cY Q/Nfw2lO8atJbfi9RdzrM5i3v2itRq/uyRtadIGTHgVsHg57APPZkTyUDYbdImuDdHWR8CcGnsP6V ISLm/ZtGnSmzPRu3cQGQmLnACzEojXYoxeMzIfprQjU2Kpaf6fvlR4nB4RGr37XXQnuBdwly2en4h 73IrYqCP7PrmqmBKEFqFEUUrI2IaUJ7fCeuA8vpcfVFc9JK2j0W3JHgVbVFO6aozK/htQfiIzsp9M KG8yHLNA==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9i-0000000GwLq-2EUa; Tue, 16 Dec 2025 03:55:22 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 38/59] do_fchownat(): unspaghettify a bit... Date: Tue, 16 Dec 2025 03:54:57 +0000 Message-ID: <20251216035518.4037331-39-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" Signed-off-by: Al Viro --- fs/open.c | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/fs/open.c b/fs/open.c index 7254eda9f4a5..425c09d83d7f 100644 --- a/fs/open.c +++ b/fs/open.c @@ -810,30 +810,26 @@ int do_fchownat(int dfd, const char __user *filename,= uid_t user, gid_t group, struct path path; int error; int lookup_flags; - struct filename *name; =20 if ((flag & ~(AT_SYMLINK_NOFOLLOW | AT_EMPTY_PATH)) !=3D 0) return -EINVAL; =20 lookup_flags =3D (flag & AT_SYMLINK_NOFOLLOW) ? 0 : LOOKUP_FOLLOW; - name =3D getname_uflags(filename, flag); + CLASS(filename_uflags, name)(filename, flag); retry: error =3D filename_lookup(dfd, name, lookup_flags, &path, NULL); - if (error) - goto out; - error =3D mnt_want_write(path.mnt); - if (error) - goto out_release; - error =3D chown_common(&path, user, group); - mnt_drop_write(path.mnt); -out_release: - path_put(&path); - if (retry_estale(error, lookup_flags)) { - lookup_flags |=3D LOOKUP_REVAL; - goto retry; + if (!error) { + error =3D mnt_want_write(path.mnt); + if (!error) { + error =3D chown_common(&path, user, group); + mnt_drop_write(path.mnt); + } + path_put(&path); + if (retry_estale(error, lookup_flags)) { + lookup_flags |=3D LOOKUP_REVAL; + goto retry; + } } -out: - putname(name); return error; } =20 --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5DC1531329B; Tue, 16 Dec 2025 03:54:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857296; cv=none; b=TRhtrjcxsqIIpb++7pKvnGehsd3Ye8z+2i8HBBg8/Kddu1PBgKd8c/1S2Yd/Rxb1uxaZdLDQai1UUkVLyignNNuWpaVtjOoK/b/D3OgUds2JAyOc/8H1gtr3CiGfuYuX6YLvBCXkccVZqUibzetx/pKExlXl+z0LR15zLkdH9o0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857296; c=relaxed/simple; bh=urAa3ZS6X7nMsa9ZRz2Pqn/hpkIvLTL3N56s9umZyt4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=JfiogYp3MnVUoFJqAdmBtySDeMBMUwkzwcjn1cwE2SzCxwF42VYv/jrdK/lL7tAfplEtzsm52t3XL3Et7X2YnXrm6/fDx+x+mAyfoNlF41rmnd7Grd/rcOflFypNL7Egdh0xHZKMy3EXfGB50nRhvor6xII63fQKT7Uo6U27Y9s= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=F/5yebOA; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="F/5yebOA" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=5+CNfJBBa99USZB4Xzhgo+c1jKCiUr7CLOmJPPMy31A=; b=F/5yebOABSkdX4KaD+TVbsIiAG 18JF+8x4EoKXEBAw1px0hlGElp5+FKZfp861l+jWemj+zjero4wlIwviLoB70EKhlC9IiNri4ubhI eZss75gfgRkkQM+WJIa2uvf59eo9iDFknWdBIT/DwMs4L1rLqz5p61frYUNdn6788gU3tEnotWIZ9 +XIiFU7wSJxKxoInaz4CX6lAB0W9Cxt27SJQcv6Y1fC5+TKdJ+4eW6nqwosESsqwSnEpav6IWI4Gg jQ1RWI80kamrDgG/IdoujKak4R9a/Z4mJhEE4OKa3jGqlFRW+YfPNzaDOX4e902Dq7CEClGLWWI8U 8daa4Dpw==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9i-0000000GwLw-2oLY; Tue, 16 Dec 2025 03:55:22 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 39/59] chdir(2): unspaghettify a bit... Date: Tue, 16 Dec 2025 03:54:58 +0000 Message-ID: <20251216035518.4037331-40-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" Signed-off-by: Al Viro --- fs/open.c | 27 ++++++++++----------------- 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/fs/open.c b/fs/open.c index 425c09d83d7f..bcaaf884e436 100644 --- a/fs/open.c +++ b/fs/open.c @@ -558,26 +558,19 @@ SYSCALL_DEFINE1(chdir, const char __user *, filename) struct path path; int error; unsigned int lookup_flags =3D LOOKUP_FOLLOW | LOOKUP_DIRECTORY; - struct filename *name =3D getname(filename); + CLASS(filename, name)(filename); retry: error =3D filename_lookup(AT_FDCWD, name, lookup_flags, &path, NULL); - if (error) - goto out; - - error =3D path_permission(&path, MAY_EXEC | MAY_CHDIR); - if (error) - goto dput_and_out; - - set_fs_pwd(current->fs, &path); - -dput_and_out: - path_put(&path); - if (retry_estale(error, lookup_flags)) { - lookup_flags |=3D LOOKUP_REVAL; - goto retry; + if (!error) { + error =3D path_permission(&path, MAY_EXEC | MAY_CHDIR); + if (!error) + set_fs_pwd(current->fs, &path); + path_put(&path); + if (retry_estale(error, lookup_flags)) { + lookup_flags |=3D LOOKUP_REVAL; + goto retry; + } } -out: - putname(name); return error; } =20 --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 48ED73128AD; Tue, 16 Dec 2025 03:54:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857296; cv=none; b=NcbqCD/OHqZ72Hzll5CXdHKmh4B4RKisag474y99nwufipX8hWU7SWlb+4GYYe1B/kl42pEiIzGFH2DksHG4o0D5KUAPYNtrWF+10bAMHDovnd8MT1fF8WLQ6nxbSgPB6CLXlAdjD03cjRe1/14H17iSNATKq2JSicagy0A3l7M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857296; c=relaxed/simple; bh=Ln2QhD1+LiE6hrU8DCpZyq1Aafnjm0E3+Q2zcNTr2ow=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=I8I7YBwCNTet2Eeg90w/FDqBeVOOfTcYGUCLbzhhT7DOMcpbxhiRKx+NZrz9ndnjqd+XBGAW52Fnaiq5/Hn8r+dVj8shUZPghuLFLVqqSNIeqAqXYK/zINwIR6oNtH384JhOi2TXAJPlPZsyXe0ewqW4n/XuzNCtrOK9FQuVeCA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=VBTEZYo1; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="VBTEZYo1" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=3DYt1b8jTHOd45/ui01BMEhPrHOrIWRFTqLRN9vGwUo=; b=VBTEZYo1NH+mUmxfk5oRfZxlnm gaeS3e2pqv6gMSQ+7eJuDRPklCcMlD/nXx4HEdv679P6lnTzXqk5tIblypDV0ypV5t6dCfQeVYVZt QNy3UCtipYJXx6FRT2ocL1gUhJJc5K4YlotahegkXvUXr+cvHvv/tZX++TE0tkWdRG+0PVpFyDtI9 Z/IgqooeK2jJvC0ArUoGjyQcYng4U26sWlRT53IThYCt3bmDGtNISYLGhu/0n0Um8pYUalKO2dWu+ 68IaBORL+F/cOqvKyf0NUSiRmtpAx+hIGXAnZQS8lcDyLiLAGundEqVv2ZzqIL7TaZgKr4c5cq5Ba zou+mlng==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9i-0000000GwM2-3FOl; Tue, 16 Dec 2025 03:55:22 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 40/59] do_utimes_path(): switch to CLASS(filename_uflags) Date: Tue, 16 Dec 2025 03:54:59 +0000 Message-ID: <20251216035518.4037331-41-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" Signed-off-by: Al Viro --- fs/utimes.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/fs/utimes.c b/fs/utimes.c index 84889ea1780e..e22664e4115f 100644 --- a/fs/utimes.c +++ b/fs/utimes.c @@ -84,27 +84,24 @@ static int do_utimes_path(int dfd, const char __user *f= ilename, { struct path path; int lookup_flags =3D 0, error; - struct filename *name; =20 if (flags & ~(AT_SYMLINK_NOFOLLOW | AT_EMPTY_PATH)) return -EINVAL; =20 if (!(flags & AT_SYMLINK_NOFOLLOW)) lookup_flags |=3D LOOKUP_FOLLOW; - name =3D getname_uflags(filename, flags); =20 + CLASS(filename_uflags, name)(filename, flags); retry: error =3D filename_lookup(dfd, name, lookup_flags, &path, NULL); if (error) - goto out; + return error; error =3D vfs_utimes(&path, times); path_put(&path); if (retry_estale(error, lookup_flags)) { lookup_flags |=3D LOOKUP_REVAL; goto retry; } -out: - putname(name); return error; } =20 --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4CBC433ADB9; Tue, 16 Dec 2025 04:12:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765858379; cv=none; b=IstnnhZ4ehK4VH++W81D0c0vCGdv5wfLJ5VOFBaYZjywzJ4ndmUatlj9Q0PpakETgHGxC2rWnz2PzHEORUnzfg/914wf4YwTuRtFMg15AFhUw9TnnotGoZwo6g421iVWV7S5WeCWLVN37FWm7vOV2Kut7iGp9NqRnuPdw8fgGoY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765858379; c=relaxed/simple; bh=oyKBfs/wj+3AFANKikryvf2/aOkh/ktfJ9g7Txd0zkM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=qCOVgdxiJatkQwpdNOwxVt6l3wXi82nyIXUqzVEztZgiVhSQjO82AlncKqDOvQWpnLdUj+0wfzEONNgfC7F1HjOdh+Turg4Bu5Wv9O83gFsS0a4X/KEeaa4cMgSvH2ao0vQbXBgF4N2JBKTxERYKxmAzW1tJHJ0qK6pCx4+juos= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=nQQyieJa; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="nQQyieJa" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=MIN8O3p6p0pbv2G0caQzyJS0UvmyEXVx3gIFuoTDNSc=; b=nQQyieJaFx0lqaigNsTb2H461V y5mIqrtFTehZO0RP67qE5SUy4zIXHn8LxmlMGI/+1TN8sSSXdvI1yLzyhRl3qSSQHXVYwaPYufU1F IVzoYw4Y0xeLZgeiq9G0rvbxr1ELU/rhIMxXlNjmsGb6wpoc6o1VgpWLrMyd9dF8Ecfw3CRcPM5ih 3/DetEESmFvTf6nmqInqlwt0q3cHB+r37NtmLcS+L4tjJD+0HouX+Yg/ttZpnRjvNDEkpZQWW4Xeq THyTdUnZ5buq6K5MlMnOoh+EOyoYPU5KXgt8WVi7wpUo/gAYiK7Sa5HPmIXTNTXHZBaPbo32TO8Ez deaw4MMg==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9i-0000000GwM7-3bEa; Tue, 16 Dec 2025 03:55:22 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 41/59] do_sys_truncate(): switch to CLASS(filename) Date: Tue, 16 Dec 2025 03:55:00 +0000 Message-ID: <20251216035518.4037331-42-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" Note that failures from filename_lookup() are final - ESTALE returned by it means that retry had been done by filename_lookup() and it failed there. Signed-off-by: Al Viro --- fs/open.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/fs/open.c b/fs/open.c index bcaaf884e436..34d9b1ecc141 100644 --- a/fs/open.c +++ b/fs/open.c @@ -129,25 +129,23 @@ EXPORT_SYMBOL_GPL(vfs_truncate); int do_sys_truncate(const char __user *pathname, loff_t length) { unsigned int lookup_flags =3D LOOKUP_FOLLOW; - struct filename *name; struct path path; int error; =20 if (length < 0) /* sorry, but loff_t says... */ return -EINVAL; =20 - name =3D getname(pathname); + CLASS(filename, name)(pathname); retry: error =3D filename_lookup(AT_FDCWD, name, lookup_flags, &path, NULL); if (!error) { error =3D vfs_truncate(&path, length); path_put(&path); + if (retry_estale(error, lookup_flags)) { + lookup_flags |=3D LOOKUP_REVAL; + goto retry; + } } - if (retry_estale(error, lookup_flags)) { - lookup_flags |=3D LOOKUP_REVAL; - goto retry; - } - putname(name); return error; } =20 --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7B23931A7EE; Tue, 16 Dec 2025 04:12:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765858360; cv=none; b=RzK2gujQkxB8DQ+7i3urnk62GWJGInAyxSkgS+icQ05T72hp9w2W9CtYJe3+T1RNjlSEqkHKzlSI/3pa4b9YJRA2cSSF4F4rvY4v54ihqIF8cY17akgseqIt3VIZYbL+bAR5woMgDmNJSpiTnAb+E0KE/utYXFd+cLYC68UL7Uc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765858360; c=relaxed/simple; bh=ZQKnnJ+DT/olw6Lm8LfztDzd27NRaCqPT+q4vUOkjL0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Xm4IuW2uxmAZTpRZb1SJl0LACvS33N4n10q0GdTTuD5HCXkbhSbWLHzHT2h1rjsHutcvNNHu8tbEic0Ir4PnhaOlmG6oXRBCjQgKuMpMYUtZQnPA1uh3FzAnwAFDkS6ou6QA2s9W3WH1bwyi1YvRITeoqUD0R7Ud1wR6veRq97I= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=h1USBK4/; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="h1USBK4/" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=6hUHHzqGq4rboHjLsjdGtX8PCDDP5BU01+h08kclRhg=; b=h1USBK4/J/2BPfuVa9VqsyW5eG EF9ysDZT3LaosEx2IxsgDzlzsDVthW0qoCprMBdvT/9zxfeNRQPljWGc0utzwEl3NZljtUivzezeZ AOCCjre6hDHcccAcK0aVDYN0fqO9fVRkKlXmQPHvZPPx3mPpktdYhwjtF28U6E/PXdOhnN2QsctCT pGtsgQk4QfgF9VFbrvZVVz7opPLR5lXK4vehLGXrg8ECZ0MSkdVfN8T3wsERl/M8TBjrpErzHmHtK WCcUBAP0EXshdHGHAOkHWAOp7Ud3im47DDBFKMbzHd/N0NWJaSRE4xfFYEyNvojrYGif+S8YlzSY2 /90/5Zxw==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9j-0000000GwMC-0C6S; Tue, 16 Dec 2025 03:55:23 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 42/59] do_readlinkat(): switch to CLASS(filename_flags) Date: Tue, 16 Dec 2025 03:55:01 +0000 Message-ID: <20251216035518.4037331-43-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" Signed-off-by: Al Viro --- fs/stat.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/fs/stat.c b/fs/stat.c index ee9ae2c3273a..d18577f3688c 100644 --- a/fs/stat.c +++ b/fs/stat.c @@ -564,20 +564,17 @@ static int do_readlinkat(int dfd, const char __user *= pathname, char __user *buf, int bufsiz) { struct path path; - struct filename *name; int error; unsigned int lookup_flags =3D 0; =20 if (bufsiz <=3D 0) return -EINVAL; =20 - name =3D getname_flags(pathname, LOOKUP_EMPTY); + CLASS(filename_flags, name)(pathname, LOOKUP_EMPTY); retry: error =3D filename_lookup(dfd, name, lookup_flags, &path, NULL); - if (unlikely(error)) { - putname(name); + if (unlikely(error)) return error; - } =20 /* * AFS mountpoints allow readlink(2) but are not symlinks @@ -597,7 +594,6 @@ static int do_readlinkat(int dfd, const char __user *pa= thname, lookup_flags |=3D LOOKUP_REVAL; goto retry; } - putname(name); return error; } =20 --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0A248318132; Tue, 16 Dec 2025 04:11:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765858313; cv=none; b=bBT3udeoq//ZgHt9qIFIU3cdqXVO9xZky+jHQmqKGJ2rkg4VyMpApI13+xF2vG65+XTrhf7ynX0GRMEKe33JEhkwzq8vNQHZnEfiH++i+GwFX8oiq1Ge1sSg80cS2oj6uHMZmJ6mEqXzzjFsT/DGd5OM9Gtl0d22Wv/+ygZkLkg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765858313; c=relaxed/simple; bh=flPREUjz226vbhFUNOUM/b2whXof1cRdtkFUivOyMAU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=mRWCF8gQMTDSYU0kw96JN57ZbHa7DIaXCQ6kpDf2/DZSGweZ0fkM2+/OSCcWcB/hmXa9y73/Br09/sWEcWbl4rAtrT559TtSSiwPDo3I9cLywK/x3/H1LxUajoG2AprjJRyRceUDGhnFzk4dzAk21KHnrf+ozoaZ1SDRgDoth8k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=J7xXFw34; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="J7xXFw34" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=uZ4IKI6AXMjVP+nAvbUk5ps0UL7ywHeADF5WufBC7LU=; b=J7xXFw34TkAELI0/C1uvFceVBX wDMSw2INCQbhqCHQYNgsKVXogc3AA4MzN/aZZhhCpROTkeBk2bvPBq3bjq8ro/qHmmFsRGxImmZPY FRuK5XeOIaps+ZYC5zi4rydlaIKfDBXlYuhY9OBNYmMLzkAyz2O7RWRsphXI2rmlKnNtiNarbb1Or hZJlCh0iAx6xXvWtbEcieDDHfRthBCJga9vChabp1BJibR0A5GBpDsN9cp6Am3X/s3J7a4L+OPMBb /+h9iw/FEKObpkL35yzj25I+FzQcjYYOrnjTTlRE8SKSejoz0qV1tUS+zfTnfwEn5sins7EdWTETf I7J/c5Hg==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9j-0000000GwMJ-0kUH; Tue, 16 Dec 2025 03:55:23 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 43/59] do_f{chmod,chown,access}at(): use CLASS(filename_uflags) Date: Tue, 16 Dec 2025 03:55:02 +0000 Message-ID: <20251216035518.4037331-44-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" Signed-off-by: Al Viro --- fs/open.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/fs/open.c b/fs/open.c index 34d9b1ecc141..3c7081694326 100644 --- a/fs/open.c +++ b/fs/open.c @@ -469,7 +469,6 @@ static int do_faccessat(int dfd, const char __user *fil= ename, int mode, int flag int res; unsigned int lookup_flags =3D LOOKUP_FOLLOW; const struct cred *old_cred =3D NULL; - struct filename *name; =20 if (mode & ~S_IRWXO) /* where's F_OK, X_OK, W_OK, R_OK? */ return -EINVAL; @@ -486,7 +485,7 @@ static int do_faccessat(int dfd, const char __user *fil= ename, int mode, int flag return -ENOMEM; } =20 - name =3D getname_uflags(filename, flags); + CLASS(filename_uflags, name)(filename, flags); retry: res =3D filename_lookup(dfd, name, lookup_flags, &path, NULL); if (res) @@ -528,7 +527,6 @@ static int do_faccessat(int dfd, const char __user *fil= ename, int mode, int flag goto retry; } out: - putname(name); if (old_cred) put_cred(revert_creds(old_cred)); =20 @@ -677,7 +675,6 @@ static int do_fchmodat(int dfd, const char __user *file= name, umode_t mode, unsigned int flags) { struct path path; - struct filename *name; int error; unsigned int lookup_flags; =20 @@ -685,7 +682,7 @@ static int do_fchmodat(int dfd, const char __user *file= name, umode_t mode, return -EINVAL; =20 lookup_flags =3D (flags & AT_SYMLINK_NOFOLLOW) ? 0 : LOOKUP_FOLLOW; - name =3D getname_uflags(filename, flags); + CLASS(filename_uflags, name)(filename, flags); retry: error =3D filename_lookup(dfd, name, lookup_flags, &path, NULL); if (!error) { @@ -696,7 +693,6 @@ static int do_fchmodat(int dfd, const char __user *file= name, umode_t mode, goto retry; } } - putname(name); return error; } =20 --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B33F532D7D7; Tue, 16 Dec 2025 04:11:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765858330; cv=none; b=KP9QJWnEIajYLUb95GVR80ALswy73/PyP/bRyEh4TG4VLypVdPl7auQrF2wyoj45ZfgqRnY95squKiPauFI0KsIGBcbwk46kk3vs6iCtE6eqBrXSK+D6aR5gP7YP5CJRBiN/25Rzi/vhwsv8O7FEXlVXJMPT/CnUT59wp/lND7o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765858330; c=relaxed/simple; bh=RbQB65NBhv+d/ko3uINWOA3g4XqktN9jP7J9TdhO/mM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=sbD9A0zt9kigSLmkONbrREM0blzgXFc/eO5l4uuShptaOIeGCv61c3LwWuVBgAJLjrOTRSdcHp9WYepFrspxAJ28Ur9P9MnLnOLPlowJYCH00Iv5XWR72VOZlZNTPVETH8kVlklxvwOd3BeVFNa+YpcgrFPGuu0hM5jSTof9gxU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=hTy7562O; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="hTy7562O" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=TYi40CUq0sVjg5FAyHsioxpwVkA0ao080tcS4BIudOE=; b=hTy7562OFb5/W2nnBFhhjTWSWo FTFyasVVX2t0SvyWI3c33aE/9qqdV3zfZRB3AwpDiyN0vZSCGVAInhYefzpoXgSpuPeueuSkxnF5+ u0xS93xVczivfhVXwOHCVGmHQcsqIYOE3B6fEjQTsGGj50SSe+QNzHMh9XauaQrxdfCPrQegDSo5C pg/EISBDl+Fcz8JXaNDt1Bn7L9g/LfNRb4VUmp7+doBHc/LpRtw16sRgpYVw2q5jP/4G4H3eKDXor RyN7cO+OZSh2TvZcTC7hkzmni5QOYuhkrKwnGwWW2JwZvPOmM0/1l0Nu/jp9k9MTYStiCy0pf/qDt s3bwplqQ==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9j-0000000GwMR-1GOJ; Tue, 16 Dec 2025 03:55:23 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 44/59] io_openat2(): use CLASS(filename_complete_delayed) Date: Tue, 16 Dec 2025 03:55:03 +0000 Message-ID: <20251216035518.4037331-45-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" Signed-off-by: Al Viro --- io_uring/openclose.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/io_uring/openclose.c b/io_uring/openclose.c index 95fcb612ad9c..15da7f3aa37b 100644 --- a/io_uring/openclose.c +++ b/io_uring/openclose.c @@ -118,7 +118,7 @@ int io_openat2(struct io_kiocb *req, unsigned int issue= _flags) struct file *file; bool resolve_nonblock, nonblock_set; bool fixed =3D !!open->file_slot; - struct filename *name __free(putname) =3D complete_getname(&open->filenam= e); + CLASS(filename_complete_delayed, name)(&open->filename); int ret; =20 ret =3D build_open_flags(&open->how, &op); --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E0569331A59; Tue, 16 Dec 2025 04:12:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765858343; cv=none; b=DOXF7DEyYZDZi6vjAbwJEJ/NWajQqGlOjJnrL+ejj+Ywcy9HL4JnC9lMRpH3swNI3SKppk+vV3S5H8kh9adGhWboOXN0gNrOg/in3CN3d/cS97zF4tcomsFeB8AkrV4wNvF3RunRRysG84/dnUJ8H9knLE+2wQBZlC+K/TUELbc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765858343; c=relaxed/simple; bh=IEwc4LjzYb3QaEH4FRO9+PlvIEgn68jsUGPc4pkloaU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=tk2h+SJRLxmMJHqQqHNXYirRIG28+U+mQ/pcZITs1oGwUMEESn7hPcINUaXXzacVEKNSxcJMVbCKzzTFD4OfPKXn+Z48ici/nqyGuI8AcXEZ7usGF21GYjPSOIEa3mc2XIJ0b2LfsPpLsjub0oHpxDV2S6a1stNevuMQHr/5oSk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=hs6qjpr1; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="hs6qjpr1" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=0td7W8k2a0CvduT5vXbhzDJRTHjkjLYphit+shYJ9X8=; b=hs6qjpr1VEhMlQfG7kqhYbI77s ShjHFsHPKxWG7QGwlXia7q4EXa7j8blypkR5aZYgeNbvUUl4+0/RJYQby7NW8P2w6LsIEsy3ZniEK Xz0RQSYht/H3XWhqAKI8N+NLTdhzfsy6JhurmHlItbtiNnjJRM18IvEVUcfVCaLdq3G0NBoaivJmB OcZuUpEq1CCqpkyL4nhryA3M6x4tgxNVt7UW7NSD+YPJrbNk1I8H7EMms6bGhOcHdufTKB3aEUUr1 8b4AGhqjpujCnJFOf+Zc4++aR36Xg4lsRiXw7O3IBZE1Ep3LDMFQqIbhgl+a/7rNO1xV2PcyRv4Zh vXKQJ5Zw==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9j-0000000GwMc-33pr; Tue, 16 Dec 2025 03:55:23 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 45/59] io_statx(): use CLASS(filename_complete_delayed) Date: Tue, 16 Dec 2025 03:55:04 +0000 Message-ID: <20251216035518.4037331-46-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" Signed-off-by: Al Viro --- io_uring/statx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/io_uring/statx.c b/io_uring/statx.c index dc10b48bcde6..7bcae4a6c4a3 100644 --- a/io_uring/statx.c +++ b/io_uring/statx.c @@ -50,7 +50,7 @@ int io_statx_prep(struct io_kiocb *req, const struct io_u= ring_sqe *sqe) int io_statx(struct io_kiocb *req, unsigned int issue_flags) { struct io_statx *sx =3D io_kiocb_to_cmd(req, struct io_statx); - struct filename *name __free(putname) =3D complete_getname(&sx->filename); + CLASS(filename_complete_delayed, name)(&sx->filename); int ret; =20 WARN_ON_ONCE(issue_flags & IO_URING_F_NONBLOCK); --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2460523E23C; Tue, 16 Dec 2025 04:11:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765858302; cv=none; b=tbM2d4OJyOPdUNUh4oL1qWLnCjuV8fCsdmuAweCzXU/dHE3m9eDvG4rrXIA70x2AKLJ6F5flS2/fKFX5kt5uXdubS+Cn5YVLkJiTosUk8HGTwgjEVut55BnXjeza3E2pnpOUZygZ/l9Z0HrxVQmTAwWeQvPtaAo30suINwOiCrQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765858302; c=relaxed/simple; bh=JxoPlOpcg0oGQLN4QWlbwGiY52Bl6rhu0sCkqkWlB0c=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Je/VfU8EoXbdet6nO9NOt/5C3n6CyJwcko611/MNhlXnpTnK3DwPihAaJ0fKcyNSn+Nr/HJXsuRwioR0WxC7AvZPp68yUp+8GYmdBKeBopuWehpqwbxqsioXmJ3Bt42j7qFxAFCuoWTCKzaE1IIyNhGGHPmeW94ojTEhGXktBAc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=MvgofVRh; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="MvgofVRh" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=QCkosoRHWsc38Yz0KlJpf83zLfaWiyfCSfICrDx8I1g=; b=MvgofVRhlJOLHbTNrRUKadVjs+ IFUC9oa6eAuf8WKwU6X1TsZlRbTJzxONFuPVZHp8srfIYBiIW/D9SnOzM1ygY8TX4vp0ZRgNiBVzD 27pyu/G2LlE6mCjXZtZQcCu8o8BzB3oND3DgHR+x7A3fMKKYCp2NH5S3opdOTv9yrQF1EpvVqNBw+ 96W3qXFEXg1W+HOsF37CxqDspCcjZ8iQAeZ9IXQSVZRCEa+XNzsxE6FA2CkFMBpVtkst3OrzSzFzY c4PM4lJFS7wmWVQX1PSRkprpjZrjPJkO+v2aTgCWgdwTbdqDNoMRyo5pJIan/edP+2RWZzTAXuC38 jnX10G7g==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9j-0000000GwMj-3g1J; Tue, 16 Dec 2025 03:55:23 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 46/59] do_{renameat2,linkat,symlinkat}(): use CLASS(filename_consume) Date: Tue, 16 Dec 2025 03:55:05 +0000 Message-ID: <20251216035518.4037331-47-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" more explicit in what we do, lower odds of ending up with a leak, fewer gotos... ... and if at some point in the future we decide to make some of those non-consuming, it would be less noisy. Signed-off-by: Al Viro --- fs/namei.c | 51 +++++++++++++++++++++------------------------------ 1 file changed, 21 insertions(+), 30 deletions(-) diff --git a/fs/namei.c b/fs/namei.c index f6b5d6a657da..fbf306fe8414 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -5575,23 +5575,22 @@ int vfs_symlink(struct mnt_idmap *idmap, struct ino= de *dir, } EXPORT_SYMBOL(vfs_symlink); =20 -int do_symlinkat(struct filename *from, int newdfd, struct filename *to) +int do_symlinkat(struct filename *__from, int newdfd, struct filename *__t= o) { + CLASS(filename_consume, from)(__from); + CLASS(filename_consume, to)(__to); int error; struct dentry *dentry; struct path path; unsigned int lookup_flags =3D 0; struct delegated_inode delegated_inode =3D { }; =20 - if (IS_ERR(from)) { - error =3D PTR_ERR(from); - goto out_putnames; - } + if (IS_ERR(from)) + return PTR_ERR(from); retry: dentry =3D filename_create(newdfd, to, &path, lookup_flags); - error =3D PTR_ERR(dentry); if (IS_ERR(dentry)) - goto out_putnames; + return PTR_ERR(dentry); =20 error =3D security_path_symlink(&path, dentry, from->name); if (!error) @@ -5607,9 +5606,6 @@ int do_symlinkat(struct filename *from, int newdfd, s= truct filename *to) lookup_flags |=3D LOOKUP_REVAL; goto retry; } -out_putnames: - putname(to); - putname(from); return error; } =20 @@ -5724,9 +5720,11 @@ EXPORT_SYMBOL(vfs_link); * with linux 2.0, and to avoid hard-linking to directories * and other special files. --ADM */ -int do_linkat(int olddfd, struct filename *old, int newdfd, - struct filename *new, int flags) +int do_linkat(int olddfd, struct filename *__old, int newdfd, + struct filename *__new, int flags) { + CLASS(filename_consume, old)(__old); + CLASS(filename_consume, new)(__new); struct mnt_idmap *idmap; struct dentry *new_dentry; struct path old_path, new_path; @@ -5734,10 +5732,8 @@ int do_linkat(int olddfd, struct filename *old, int = newdfd, int how =3D 0; int error; =20 - if ((flags & ~(AT_SYMLINK_FOLLOW | AT_EMPTY_PATH)) !=3D 0) { - error =3D -EINVAL; - goto out_putnames; - } + if ((flags & ~(AT_SYMLINK_FOLLOW | AT_EMPTY_PATH)) !=3D 0) + return -EINVAL; /* * To use null names we require CAP_DAC_READ_SEARCH or * that the open-time creds of the dfd matches current. @@ -5752,7 +5748,7 @@ int do_linkat(int olddfd, struct filename *old, int n= ewdfd, retry: error =3D filename_lookup(olddfd, old, how, &old_path, NULL); if (error) - goto out_putnames; + return error; =20 new_dentry =3D filename_create(newdfd, new, &new_path, (how & LOOKUP_REVAL)); @@ -5788,10 +5784,6 @@ int do_linkat(int olddfd, struct filename *old, int = newdfd, } out_putpath: path_put(&old_path); -out_putnames: - putname(old); - putname(new); - return error; } =20 @@ -6022,9 +6014,11 @@ int vfs_rename(struct renamedata *rd) } EXPORT_SYMBOL(vfs_rename); =20 -int do_renameat2(int olddfd, struct filename *from, int newdfd, - struct filename *to, unsigned int flags) +int do_renameat2(int olddfd, struct filename *__from, int newdfd, + struct filename *__to, unsigned int flags) { + CLASS(filename_consume, from)(__from); + CLASS(filename_consume, to)(__to); struct renamedata rd; struct path old_path, new_path; struct qstr old_last, new_last; @@ -6032,20 +6026,20 @@ int do_renameat2(int olddfd, struct filename *from,= int newdfd, struct delegated_inode delegated_inode =3D { }; unsigned int lookup_flags =3D 0; bool should_retry =3D false; - int error =3D -EINVAL; + int error; =20 if (flags & ~(RENAME_NOREPLACE | RENAME_EXCHANGE | RENAME_WHITEOUT)) - goto put_names; + return -EINVAL; =20 if ((flags & (RENAME_NOREPLACE | RENAME_WHITEOUT)) && (flags & RENAME_EXCHANGE)) - goto put_names; + return -EINVAL; =20 retry: error =3D filename_parentat(olddfd, from, lookup_flags, &old_path, &old_last, &old_type); if (error) - goto put_names; + return error; =20 error =3D filename_parentat(newdfd, to, lookup_flags, &new_path, &new_las= t, &new_type); @@ -6122,9 +6116,6 @@ int do_renameat2(int olddfd, struct filename *from, i= nt newdfd, lookup_flags |=3D LOOKUP_REVAL; goto retry; } -put_names: - putname(from); - putname(to); return error; } =20 --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 22370314B9A; Tue, 16 Dec 2025 03:54:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857297; cv=none; b=cLWz2HG+m0dCa9JkgGu/dGExd4mvs3LGCoW4xGHxYFsGntLG7sIID6iEiHBFmjVmAleRx1MvyEhPZhmKOWOGgKwAXRsclwhI8pAfWqg066xDCvky5Ms4FDBQrE/xZi28hYQbOD4yJO5Bu+R5ro6U8NHeJhXtcbB/sNIpP9cRRt4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857297; c=relaxed/simple; bh=HisoNpAgR+mgX4tncuHrZuEfPnuvtKjkXidy3TwVLYU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YGBZmX1Jb/Zxj5vsXhfGfVasz67T+Nkdo5rnN3CvuCq4urMffNJg79SwbwGDAKmUOfN+ZLhOapSuU8+Nj3U9FR+S1g1BpfKkkK+1lNhsgCyc2VssF59CFo+KV9LQsaANq3MXdImLcYv1w6WvLqCOIkO6zHanJFQRJ7HxBoCPn/o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=aHqMpdwS; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="aHqMpdwS" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=bysgWp1OpU1Iwtu8tKSXbcwgOdD87YviUwK4e/yZWeQ=; b=aHqMpdwSkhulGH/LsWAsFXsDyZ HP0EnzIPj3TPoxwrtIKfzmY484aMVpEsLNB+/kN24nHscysJ4IPw2hLmYXkL950Y5u6QuJuBcqCve blmwcAngkvOWbATjNJWPweIPlbv+c/RK/uXomJkP1XtUIRs/qMyffbHzKqjQiXp5vdM5MJOgNX0Sk QpIfJ4hkvSaIbhfVbNiQUm5aPDbJ1LOArvMtf/R8XbvIJCoqiqz2s4yKFwH1RZoSU2PZDoRvoEFOj efRuqbMx5bbnSiuGkMFApCnJLU6kl5qAkB+EKQHkzw3/PrOJM7sXKGIj0kCb8K/plKZ5J5Tpc9S2k WG2kqkiQ==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9j-0000000GwMo-3zsL; Tue, 16 Dec 2025 03:55:23 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 47/59] do_{mknodat,mkdirat,unlinkat,rmdir}(): use CLASS(filename_consume) Date: Tue, 16 Dec 2025 03:55:06 +0000 Message-ID: <20251216035518.4037331-48-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" same rationale as for previous commit Signed-off-by: Al Viro --- fs/namei.c | 32 +++++++++++++------------------- 1 file changed, 13 insertions(+), 19 deletions(-) diff --git a/fs/namei.c b/fs/namei.c index fbf306fe8414..0221cdb92297 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -5066,9 +5066,10 @@ static int may_mknod(umode_t mode) } } =20 -static int do_mknodat(int dfd, struct filename *name, umode_t mode, +static int do_mknodat(int dfd, struct filename *__name, umode_t mode, unsigned int dev) { + CLASS(filename_consume, name)(__name); struct delegated_inode di =3D { }; struct mnt_idmap *idmap; struct dentry *dentry; @@ -5078,12 +5079,11 @@ static int do_mknodat(int dfd, struct filename *nam= e, umode_t mode, =20 error =3D may_mknod(mode); if (error) - goto out1; + return error; retry: dentry =3D filename_create(dfd, name, &path, lookup_flags); - error =3D PTR_ERR(dentry); if (IS_ERR(dentry)) - goto out1; + return PTR_ERR(dentry); =20 error =3D security_path_mknod(&path, dentry, mode_strip_umask(path.dentry->d_inode, mode), dev); @@ -5117,8 +5117,6 @@ static int do_mknodat(int dfd, struct filename *name,= umode_t mode, lookup_flags |=3D LOOKUP_REVAL; goto retry; } -out1: - putname(name); return error; } =20 @@ -5201,8 +5199,9 @@ struct dentry *vfs_mkdir(struct mnt_idmap *idmap, str= uct inode *dir, } EXPORT_SYMBOL(vfs_mkdir); =20 -int do_mkdirat(int dfd, struct filename *name, umode_t mode) +int do_mkdirat(int dfd, struct filename *__name, umode_t mode) { + CLASS(filename_consume, name)(__name); struct dentry *dentry; struct path path; int error; @@ -5211,9 +5210,8 @@ int do_mkdirat(int dfd, struct filename *name, umode_= t mode) =20 retry: dentry =3D filename_create(dfd, name, &path, lookup_flags); - error =3D PTR_ERR(dentry); if (IS_ERR(dentry)) - goto out_putname; + return PTR_ERR(dentry); =20 error =3D security_path_mkdir(&path, dentry, mode_strip_umask(path.dentry->d_inode, mode)); @@ -5233,8 +5231,6 @@ int do_mkdirat(int dfd, struct filename *name, umode_= t mode) lookup_flags |=3D LOOKUP_REVAL; goto retry; } -out_putname: - putname(name); return error; } =20 @@ -5308,8 +5304,9 @@ int vfs_rmdir(struct mnt_idmap *idmap, struct inode *= dir, } EXPORT_SYMBOL(vfs_rmdir); =20 -int do_rmdir(int dfd, struct filename *name) +int do_rmdir(int dfd, struct filename *__name) { + CLASS(filename_consume, name)(__name); int error; struct dentry *dentry; struct path path; @@ -5320,7 +5317,7 @@ int do_rmdir(int dfd, struct filename *name) retry: error =3D filename_parentat(dfd, name, lookup_flags, &path, &last, &type); if (error) - goto exit1; + return error; =20 switch (type) { case LAST_DOTDOT: @@ -5362,8 +5359,6 @@ int do_rmdir(int dfd, struct filename *name) lookup_flags |=3D LOOKUP_REVAL; goto retry; } -exit1: - putname(name); return error; } =20 @@ -5451,8 +5446,9 @@ EXPORT_SYMBOL(vfs_unlink); * writeout happening, and we don't want to prevent access to the directory * while waiting on the I/O. */ -int do_unlinkat(int dfd, struct filename *name) +int do_unlinkat(int dfd, struct filename *__name) { + CLASS(filename_consume, name)(__name); int error; struct dentry *dentry; struct path path; @@ -5464,7 +5460,7 @@ int do_unlinkat(int dfd, struct filename *name) retry: error =3D filename_parentat(dfd, name, lookup_flags, &path, &last, &type); if (error) - goto exit_putname; + return error; =20 error =3D -EISDIR; if (type !=3D LAST_NORM) @@ -5511,8 +5507,6 @@ int do_unlinkat(int dfd, struct filename *name) lookup_flags |=3D LOOKUP_REVAL; goto retry; } -exit_putname: - putname(name); return error; } =20 --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 65C85341AB1; Tue, 16 Dec 2025 04:10:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765858260; cv=none; b=gs7bLG4I4sytURVX/gRO2+TKLUtprXt6Eu5rmh8uGJHNF73sF2Hr0oWHEGpwoiJ/PCnaQ1YgRaj71oRoRu+maTBESQJs+qGI730sdUerx4ifSFmT9323zamuqVyRqM1XUIT7GzpYt2oFNSijb/B0clRcii7iziXMlVoOxIHUqiE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765858260; c=relaxed/simple; bh=BvvZDQO63zqCjWl4pWRuppkkNIKt2GO9ndvqxLd0JdM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=LLGL9SovOMWX1yOldfv7L5BCfZ/mK2K47xXRwKsI4Fz9uflvsuGoEKkkU+7C4XGteVBNeTB6rEtwjuy8qXhEVwUOyIqMkQDRivOYzya+RrFIsvHAKm5+vAEcY270/wGxHTsna/QrEzIhiKRLPu4HcNhufkxepBkAoISDYc90A64= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=S75BdoE1; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="S75BdoE1" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=bEYM/fep+gGEfkOyqQHHsVq2A/G1M+lIwbK9CkjneDA=; b=S75BdoE14QsrVzM8nbRQGfOzhR 4lRTZa2HW++dWzpYce3LxLBwfVsmkKMzG9FiLmizQnZUHWoizHj1M+IKTTFQ3V0SSFtxaiJE7GXtB oXyBNP9Jkl+0AY6FIJ9X9BlKxIHvYDY9wya71qCo8JFCfN8ySBH4BEfBuMVHkFITGhxeNEEHZ3hck q+N9+dVSX1tZNQ2lJlqrzaHBMUbDU+BQwMBHtQEMfBajMbEitU1MRhZsj+hviPk0h9gynwlmoe9g0 W4u/krGaox/VhfKSKjjixx4stiUhLlVLysGSEXnhNI0m9HWgrdB++A3zl5q91twlviiEY3qIGTC/m VCPgGlRQ==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9k-0000000GwMq-01eZ; Tue, 16 Dec 2025 03:55:24 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 48/59] namei.c: convert getname_kernel() callers to CLASS(filename_kernel) Date: Tue, 16 Dec 2025 03:55:07 +0000 Message-ID: <20251216035518.4037331-49-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" Signed-off-by: Al Viro --- fs/namei.c | 36 ++++++++++-------------------------- 1 file changed, 10 insertions(+), 26 deletions(-) diff --git a/fs/namei.c b/fs/namei.c index 0221cdb92297..e0c8d3832861 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -2996,7 +2996,7 @@ static struct dentry *__start_removing_path(int dfd, = struct filename *name, struct dentry *kern_path_parent(const char *name, struct path *path) { struct path parent_path __free(path_put) =3D {}; - struct filename *filename __free(putname) =3D getname_kernel(name); + CLASS(filename_kernel, filename)(name); struct dentry *d; struct qstr last; int type, error; @@ -3017,11 +3017,8 @@ struct dentry *kern_path_parent(const char *name, st= ruct path *path) =20 struct dentry *start_removing_path(const char *name, struct path *path) { - struct filename *filename =3D getname_kernel(name); - struct dentry *res =3D __start_removing_path(AT_FDCWD, filename, path); - - putname(filename); - return res; + CLASS(filename_kernel, filename)(name); + return __start_removing_path(AT_FDCWD, filename, path); } =20 struct dentry *start_removing_user_path_at(int dfd, @@ -3038,12 +3035,8 @@ EXPORT_SYMBOL(start_removing_user_path_at); =20 int kern_path(const char *name, unsigned int flags, struct path *path) { - struct filename *filename =3D getname_kernel(name); - int ret =3D filename_lookup(AT_FDCWD, filename, flags, path, NULL); - - putname(filename); - return ret; - + CLASS(filename_kernel, filename)(name); + return filename_lookup(AT_FDCWD, filename, flags, path, NULL); } EXPORT_SYMBOL(kern_path); =20 @@ -3077,15 +3070,11 @@ int vfs_path_lookup(struct dentry *dentry, struct v= fsmount *mnt, const char *name, unsigned int flags, struct path *path) { - struct filename *filename; + CLASS(filename_kernel, filename)(name); struct path root =3D {.mnt =3D mnt, .dentry =3D dentry}; - int ret; =20 - filename =3D getname_kernel(name); /* the first argument of filename_lookup() is ignored with root */ - ret =3D filename_lookup(AT_FDCWD, filename, flags, path, &root); - putname(filename); - return ret; + return filename_lookup(AT_FDCWD, filename, flags, path, &root); } EXPORT_SYMBOL(vfs_path_lookup); =20 @@ -4882,13 +4871,12 @@ struct file *do_file_open_root(const struct path *r= oot, { struct nameidata nd; struct file *file; - struct filename *filename; int flags =3D op->lookup_flags; =20 if (d_is_symlink(root->dentry) && op->intent & LOOKUP_OPEN) return ERR_PTR(-ELOOP); =20 - filename =3D getname_kernel(name); + CLASS(filename_kernel, filename)(name); if (IS_ERR(filename)) return ERR_CAST(filename); =20 @@ -4899,7 +4887,6 @@ struct file *do_file_open_root(const struct path *roo= t, if (unlikely(file =3D=3D ERR_PTR(-ESTALE))) file =3D path_openat(&nd, op, flags | LOOKUP_REVAL); restore_nameidata(); - putname(filename); return file; } =20 @@ -4955,11 +4942,8 @@ static struct dentry *filename_create(int dfd, struc= t filename *name, struct dentry *start_creating_path(int dfd, const char *pathname, struct path *path, unsigned int lookup_flags) { - struct filename *filename =3D getname_kernel(pathname); - struct dentry *res =3D filename_create(dfd, filename, path, lookup_flags); - - putname(filename); - return res; + CLASS(filename_kernel, filename)(pathname); + return filename_create(dfd, filename, path, lookup_flags); } EXPORT_SYMBOL(start_creating_path); =20 --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E97E032D7E0; Tue, 16 Dec 2025 04:11:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765858282; cv=none; b=vCIg6hU/9hL/TCk/imkSSzPDJqMA95o6C9yubbuMDBYijdLv+bl1It6jiBaukkPBi3Eb6kFNlEbcqCIfRs1ntc9+oe9KmFvZvZK5up0/Lqv2x5xH1BTj7/nwYOMWxdh+0dzNPm3kfBmSv5NZ8QKf6z2o0bSDqnR3TQsoHcNbStY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765858282; c=relaxed/simple; bh=ioXf5hyYI0arJkYoZAz9bLmowVwquWhysnemwDA53BY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=uXMaoeMLIZs617D7m0rrEQw+U9gxO8kGsTb1RzU3PBmBYKg9JvYpt286FGEXO93A1laPBqt109SIcAoNPtkEtARJhOAgbgyM1bed2OGLyeWGins7DsvNuw/o7iuW6mgg+xjhcoqxsvuBESekP6qjd9mV4PB17D0NodZaQ1bg9l0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=E/wgEtdK; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="E/wgEtdK" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=7IQfpKmysnQB0XEm2JYvCsb/kBeyJZl4dDIhHs/pXAA=; b=E/wgEtdKhUD4jo8Pm3X2cVNAPs A/vnJUZ+31piizzr1C91Q5rhgs+pXEEjiBfFYpSokarQh4N9pxyC5NQI5Vx63co3IYGmlCq2E8w0s TQjf9V5ymagkrIbl1krqrDMxgk0lXZ9F93/OGkQw25QlSa+8wXq4Avkz5PkHoSILNVInxuPhyu0LS 5DQa49xJ9+iVWE4MFCWgo4kh4bCmPSjfYrTKfqUvtWDrMtiacDiL1n3R+4qka/jBkDybKVFk/sJiF G2PO5kMq8248uqMBOojJQhmVE1B5TnmwtUxkteJsjl9yRkLg0mtVW0QEroM92kURIeG+tjO9wodBW g/AkC7TA==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9k-0000000GwMu-0IeC; Tue, 16 Dec 2025 03:55:24 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 49/59] namei.c: switch user pathname imports to CLASS(filename{,_flags}) Date: Tue, 16 Dec 2025 03:55:08 +0000 Message-ID: <20251216035518.4037331-50-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" filename_flags is used by user_path_at(). I suspect that mixing LOOKUP_EMPTY with real lookup flags had been a mistake all along; the former belongs to pathname import, the latter - to pathwalk. Right now none of the remaining in-tree callers of user_path_at() are getting LOOKUP_EMPTY in flags, so user_path_at() could probably be switched to CLASS(filename)... Signed-off-by: Al Viro --- fs/namei.c | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/fs/namei.c b/fs/namei.c index e0c8d3832861..a564ca4f7ffd 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -3025,11 +3025,8 @@ struct dentry *start_removing_user_path_at(int dfd, const char __user *name, struct path *path) { - struct filename *filename =3D getname(name); - struct dentry *res =3D __start_removing_path(dfd, filename, path); - - putname(filename); - return res; + CLASS(filename, filename)(name); + return __start_removing_path(dfd, filename, path); } EXPORT_SYMBOL(start_removing_user_path_at); =20 @@ -3607,11 +3604,8 @@ int path_pts(struct path *path) int user_path_at(int dfd, const char __user *name, unsigned flags, struct path *path) { - struct filename *filename =3D getname_flags(name, flags); - int ret =3D filename_lookup(dfd, filename, flags, path, NULL); - - putname(filename); - return ret; + CLASS(filename_flags, filename)(name, flags); + return filename_lookup(dfd, filename, flags, path, NULL); } EXPORT_SYMBOL(user_path_at); =20 @@ -4970,11 +4964,8 @@ inline struct dentry *start_creating_user_path( int dfd, const char __user *pathname, struct path *path, unsigned int lookup_flags) { - struct filename *filename =3D getname(pathname); - struct dentry *res =3D filename_create(dfd, filename, path, lookup_flags); - - putname(filename); - return res; + CLASS(filename, filename)(pathname); + return filename_create(dfd, filename, path, lookup_flags); } EXPORT_SYMBOL(start_creating_user_path); =20 --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B7633341678; Tue, 16 Dec 2025 04:10:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765858243; cv=none; b=LMA0g04c1Zk1lkGMwiADozNpQ6vswGuvnVvyC8sENEKU6XABBEmtlFi6OQett5C4KbKPedklsg8Bl7Y7VN8ybd81zO45ozSBEdUDrWfnfH6ijgtPLiYg5sSTr8zNJlzxDx8kYF58IfC44sOQHL3A3p8a4Fsjz2boYNVhTuOo7YA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765858243; c=relaxed/simple; bh=XEXjfy6VIDObTBv09OYWsTKJyw4xhl6Gt/Rc8d8rX18=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Vf6uUdoVD1cnyx28z60lWYzzg0L9cNvN21BC0psXodaYEPZVf9qXTDwLv8BOGRooJOWi9+OiYdVNR78Afq3BQlcyZO0WiGh8Llhvmqu/2nP+a7rK5smW4JVhryYbJEE9b2fi+3kilrhZAHYgcLEdruRQap/OA2Dhga1s9Ogljk4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=l42RX1dG; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="l42RX1dG" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=tvKSPzQno1NrhNJ2sm6h+65XME8D8yvpinTQF+W8yKw=; b=l42RX1dGpPQqpo0Bbnx25KKYXz pKRcQ6mYJSam6C1994j3R7ZnRLWZw7qOvAmzX6MhcMujDm86cwGH9DVo9q/Lxc7/bPuM45il5yUOx 5y2FOVYbivq/ML/S+F4wqEMPaV9p1JHpeZS9IPjEYy59aeUgL/CG3ri8jpbOA+td//BrUj5J1NOp8 b2ihhEQypBdksQFUsRkjhafV7KjT2JQ7pr8d3yy9Ogbfibcez4IrmOXPDmtrLeUjIo9arrJGBKcXY lyW8LEBZILOfJRpnWojNxcy+M8NmTU53j21rRoPE1OAUm07lFHpsJqoCZp+nErzYSwaXI4dPWzVtM nTAHHEWg==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9k-0000000GwMw-0W7E; Tue, 16 Dec 2025 03:55:24 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 50/59] filename_...xattr(): don't consume filename reference Date: Tue, 16 Dec 2025 03:55:09 +0000 Message-ID: <20251216035518.4037331-51-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" Callers switched to CLASS(filename_maybe_null) (in fs/xattr.c) and CLASS(filename_complete_delayed) (in io_uring/xattr.c). Experimental calling conventions change; with the existing infrastructure it does not inconvenience the callers, at least for these ones... Might be worth doing the same to do_renameat2() and friends. Signed-off-by: Al Viro --- fs/xattr.c | 33 ++++++++------------------------- io_uring/xattr.c | 8 ++++---- 2 files changed, 12 insertions(+), 29 deletions(-) diff --git a/fs/xattr.c b/fs/xattr.c index 32d445fb60aa..3e49e612e1ba 100644 --- a/fs/xattr.c +++ b/fs/xattr.c @@ -649,7 +649,6 @@ int file_setxattr(struct file *f, struct kernel_xattr_c= tx *ctx) return error; } =20 -/* unconditionally consumes filename */ int filename_setxattr(int dfd, struct filename *filename, unsigned int lookup_flags, struct kernel_xattr_ctx *ctx) { @@ -659,7 +658,7 @@ int filename_setxattr(int dfd, struct filename *filenam= e, retry: error =3D filename_lookup(dfd, filename, lookup_flags, &path, NULL); if (error) - goto out; + return error; error =3D mnt_want_write(path.mnt); if (!error) { error =3D do_setxattr(mnt_idmap(path.mnt), path.dentry, ctx); @@ -670,9 +669,6 @@ int filename_setxattr(int dfd, struct filename *filenam= e, lookup_flags |=3D LOOKUP_REVAL; goto retry; } - -out: - putname(filename); return error; } =20 @@ -688,7 +684,6 @@ static int path_setxattrat(int dfd, const char __user *= pathname, .kname =3D &kname, .flags =3D flags, }; - struct filename *filename; unsigned int lookup_flags =3D 0; int error; =20 @@ -702,7 +697,7 @@ static int path_setxattrat(int dfd, const char __user *= pathname, if (error) return error; =20 - filename =3D getname_maybe_null(pathname, at_flags); + CLASS(filename_maybe_null, filename)(pathname, at_flags); if (!filename && dfd >=3D 0) { CLASS(fd, f)(dfd); if (fd_empty(f)) @@ -804,7 +799,6 @@ ssize_t file_getxattr(struct file *f, struct kernel_xat= tr_ctx *ctx) return do_getxattr(file_mnt_idmap(f), f->f_path.dentry, ctx); } =20 -/* unconditionally consumes filename */ ssize_t filename_getxattr(int dfd, struct filename *filename, unsigned int lookup_flags, struct kernel_xattr_ctx *ctx) { @@ -813,15 +807,13 @@ ssize_t filename_getxattr(int dfd, struct filename *f= ilename, retry: error =3D filename_lookup(dfd, filename, lookup_flags, &path, NULL); if (error) - goto out; + return error; error =3D do_getxattr(mnt_idmap(path.mnt), path.dentry, ctx); path_put(&path); if (retry_estale(error, lookup_flags)) { lookup_flags |=3D LOOKUP_REVAL; goto retry; } -out: - putname(filename); return error; } =20 @@ -836,7 +828,6 @@ static ssize_t path_getxattrat(int dfd, const char __us= er *pathname, .kname =3D &kname, .flags =3D 0, }; - struct filename *filename; ssize_t error; =20 if ((at_flags & ~(AT_SYMLINK_NOFOLLOW | AT_EMPTY_PATH)) !=3D 0) @@ -846,7 +837,7 @@ static ssize_t path_getxattrat(int dfd, const char __us= er *pathname, if (error) return error; =20 - filename =3D getname_maybe_null(pathname, at_flags); + CLASS(filename_maybe_null, filename)(pathname, at_flags); if (!filename && dfd >=3D 0) { CLASS(fd, f)(dfd); if (fd_empty(f)) @@ -943,7 +934,6 @@ ssize_t file_listxattr(struct file *f, char __user *lis= t, size_t size) return listxattr(f->f_path.dentry, list, size); } =20 -/* unconditionally consumes filename */ static ssize_t filename_listxattr(int dfd, struct filename *filename, unsigned int lookup_flags, @@ -954,15 +944,13 @@ ssize_t filename_listxattr(int dfd, struct filename *= filename, retry: error =3D filename_lookup(dfd, filename, lookup_flags, &path, NULL); if (error) - goto out; + return error; error =3D listxattr(path.dentry, list, size); path_put(&path); if (retry_estale(error, lookup_flags)) { lookup_flags |=3D LOOKUP_REVAL; goto retry; } -out: - putname(filename); return error; } =20 @@ -970,13 +958,12 @@ static ssize_t path_listxattrat(int dfd, const char _= _user *pathname, unsigned int at_flags, char __user *list, size_t size) { - struct filename *filename; int lookup_flags; =20 if ((at_flags & ~(AT_SYMLINK_NOFOLLOW | AT_EMPTY_PATH)) !=3D 0) return -EINVAL; =20 - filename =3D getname_maybe_null(pathname, at_flags); + CLASS(filename_maybe_null, filename)(pathname, at_flags); if (!filename) { CLASS(fd, f)(dfd); if (fd_empty(f)) @@ -1036,7 +1023,6 @@ static int file_removexattr(struct file *f, struct xa= ttr_name *kname) return error; } =20 -/* unconditionally consumes filename */ static int filename_removexattr(int dfd, struct filename *filename, unsigned int lookup_flags, struct xattr_name *kname) { @@ -1046,7 +1032,7 @@ static int filename_removexattr(int dfd, struct filen= ame *filename, retry: error =3D filename_lookup(dfd, filename, lookup_flags, &path, NULL); if (error) - goto out; + return error; error =3D mnt_want_write(path.mnt); if (!error) { error =3D removexattr(mnt_idmap(path.mnt), path.dentry, kname->name); @@ -1057,8 +1043,6 @@ static int filename_removexattr(int dfd, struct filen= ame *filename, lookup_flags |=3D LOOKUP_REVAL; goto retry; } -out: - putname(filename); return error; } =20 @@ -1066,7 +1050,6 @@ static int path_removexattrat(int dfd, const char __u= ser *pathname, unsigned int at_flags, const char __user *name) { struct xattr_name kname; - struct filename *filename; unsigned int lookup_flags; int error; =20 @@ -1077,7 +1060,7 @@ static int path_removexattrat(int dfd, const char __u= ser *pathname, if (error) return error; =20 - filename =3D getname_maybe_null(pathname, at_flags); + CLASS(filename_maybe_null, filename)(pathname, at_flags); if (!filename) { CLASS(fd, f)(dfd); if (fd_empty(f)) diff --git a/io_uring/xattr.c b/io_uring/xattr.c index 0fb4e5303500..ba2b98cf13f9 100644 --- a/io_uring/xattr.c +++ b/io_uring/xattr.c @@ -109,12 +109,12 @@ int io_fgetxattr(struct io_kiocb *req, unsigned int i= ssue_flags) int io_getxattr(struct io_kiocb *req, unsigned int issue_flags) { struct io_xattr *ix =3D io_kiocb_to_cmd(req, struct io_xattr); + CLASS(filename_complete_delayed, name)(&ix->filename); int ret; =20 WARN_ON_ONCE(issue_flags & IO_URING_F_NONBLOCK); =20 - ret =3D filename_getxattr(AT_FDCWD, complete_getname(&ix->filename), - LOOKUP_FOLLOW, &ix->ctx); + ret =3D filename_getxattr(AT_FDCWD, name, LOOKUP_FOLLOW, &ix->ctx); io_xattr_finish(req, ret); return IOU_COMPLETE; } @@ -186,12 +186,12 @@ int io_fsetxattr(struct io_kiocb *req, unsigned int i= ssue_flags) int io_setxattr(struct io_kiocb *req, unsigned int issue_flags) { struct io_xattr *ix =3D io_kiocb_to_cmd(req, struct io_xattr); + CLASS(filename_complete_delayed, name)(&ix->filename); int ret; =20 WARN_ON_ONCE(issue_flags & IO_URING_F_NONBLOCK); =20 - ret =3D filename_setxattr(AT_FDCWD, complete_getname(&ix->filename), - LOOKUP_FOLLOW, &ix->ctx); + ret =3D filename_setxattr(AT_FDCWD, name, LOOKUP_FOLLOW, &ix->ctx); io_xattr_finish(req, ret); return IOU_COMPLETE; } --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5EC69311C16; Tue, 16 Dec 2025 03:54:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857295; cv=none; b=fgR5xVkSv/i4FCHKlsrzppBTKoFVzJOjePUEK5eAGRI1Kx8X0yTQBswDHvqXxACmdnq09hYYQ7pEPOVeurFQO0F7VJrZ/P7asp31zbnbDXzk9omryuORGlWOgnZ90Ll4eISnOova4vIs+IB50XOElVRBvU8zK1cie2HnuJgO7/s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857295; c=relaxed/simple; bh=nTHKXw8UwcLMJ53XI29POh8UPZpmRIfzCZ6jAwlP48s=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=iup+E23RsDKNeteoPyRRgC7ZxPvnT4loKhDJiD1RfMaiKONRqaAkJRSSRcrNLkN17utMQZ6nKvXa29rm8kbOWuiFGmBCF7uVIundzj5hlub9R0NFTB3TBqqp/aHSePNd5OHAR1EYlil8V404ChHUIwuHl/Ft6GM1FRCUBePcF/Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=O2v3psPZ; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="O2v3psPZ" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=FD17jUCcWuTCEQI03eM0GnSRloJ9zIEZc4eT9v4ubz4=; b=O2v3psPZo0G07tMTjss+1fCOSD exDzuUUagV6b2tu/ODP3mdnd3Xcvxn0MLzK6cL95GUx+JYZRJXNbbZr5pjISyz+JeY1teEZisv36A RZhAJdNMqjxk2z55ycPcbE//54iL/f8eiMgy90gkHDGd4IAEi9sa3kF8ZoNJIOhC+vrxzy6ft3R9Y Ei4I85bqw3R+OC2B/8qfg02WAMhxYMhbKjmcrtIKxMLBinONTNqk+8pe3+dTtcD154VS1ZdqaLuXZ KbM568By4EOxNdriy7xtRUnKocOmUqVMwwBfSS3fH0rilha7BCx8RqyobnI3qrvNh23NFHGGGaftC AGXohAqg==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9k-0000000GwN0-0rbQ; Tue, 16 Dec 2025 03:55:24 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 51/59] move_mount(2): switch to CLASS(filename_maybe_null) Date: Tue, 16 Dec 2025 03:55:10 +0000 Message-ID: <20251216035518.4037331-52-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" Signed-off-by: Al Viro --- fs/namespace.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/fs/namespace.c b/fs/namespace.c index 888df8ee43bc..612757bd166a 100644 --- a/fs/namespace.c +++ b/fs/namespace.c @@ -4402,8 +4402,6 @@ SYSCALL_DEFINE5(move_mount, { struct path to_path __free(path_put) =3D {}; struct path from_path __free(path_put) =3D {}; - struct filename *to_name __free(putname) =3D NULL; - struct filename *from_name __free(putname) =3D NULL; unsigned int lflags, uflags; enum mnt_tree_flags_t mflags =3D 0; int ret =3D 0; @@ -4425,7 +4423,7 @@ SYSCALL_DEFINE5(move_mount, if (flags & MOVE_MOUNT_T_EMPTY_PATH) uflags =3D AT_EMPTY_PATH; =20 - to_name =3D getname_maybe_null(to_pathname, uflags); + CLASS(filename_maybe_null,to_name)(to_pathname, uflags); if (!to_name && to_dfd >=3D 0) { CLASS(fd_raw, f_to)(to_dfd); if (fd_empty(f_to)) @@ -4448,7 +4446,7 @@ SYSCALL_DEFINE5(move_mount, if (flags & MOVE_MOUNT_F_EMPTY_PATH) uflags =3D AT_EMPTY_PATH; =20 - from_name =3D getname_maybe_null(from_pathname, uflags); + CLASS(filename_maybe_null,from_name)(from_pathname, uflags); if (!from_name && from_dfd >=3D 0) { CLASS(fd_raw, f_from)(from_dfd); if (fd_empty(f_from)) --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5EDE6311C24; Tue, 16 Dec 2025 03:54:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857292; cv=none; b=ApdVpBE+JwtmxJYxMUVW7TLWHOSS6B/KLIWOcLOWpxmOPDp3nGekes1Xm04nUJD3Vv8DdqTr7DuzF35dDEE3W7vzTxud2hTL4BVU4Hvbdz3XXkVNhCsTUsqzbb8uZuiDX8zFS/OODAHkpBNisNueiZ6hmr8vCy2udY0bxLt3vFY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857292; c=relaxed/simple; bh=K04pMr7mpMxH0hiOJ7GtPBaHUbq5OaTNv0GMZ/FTQJk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Ar1X/lxBrw8WCTaMOPrligLPw6rhFm2CX8BSQ/oGklupDXMcvbZerHyeg4Pexy3yCFfNBhZxmsNVjuFLsHx8ecsd6Es2+UNOiQ6fEZ2bpMLTyVawAIiCZGEqzZeohvGM+ZM/Ph6YIjgRnN312A70chUUXCvjR4nqGtU398SYICI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=dLA5ZYtn; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="dLA5ZYtn" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=tD6MOGL3HuIaHYd3IIjMnJPzHw93K5UTdELNOyBshkM=; b=dLA5ZYtngaE/hBPbD9YmszAgi7 haJvRgAlA/PoJlhrhsrWsLVgvCmL9CoAbOvrmnt/2jkSxPmB8FUD16UwrYHS2d1q1KfLtMCesZDP3 xatqod2InJ8qOlkL8tk8uw1CoaNmeyR/ov2dRLac6/kZOiRmCsorlfxB1abzz7egF2GcbHsdcSHk8 Ud5eLLHpdRR1YDaLdLeoE3wdFmjUo/X4YQoV/umGG+imNhAGrhlDp2dJV+6UEovPCJaw8KAA+A9Lj zAZbMmGggggSrRWePEXK1XG03FRuFHZgmjRaTBaosFN0pNvFvtDjj0okFQAfaw+xqZPdxTDX6P+fW nR+6ekgg==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9k-0000000GwN6-1PRa; Tue, 16 Dec 2025 03:55:24 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 52/59] chroot(2): switch to CLASS(filename) Date: Tue, 16 Dec 2025 03:55:11 +0000 Message-ID: <20251216035518.4037331-53-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" Signed-off-by: Al Viro --- fs/open.c | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/fs/open.c b/fs/open.c index 3c7081694326..4adfd7e1975a 100644 --- a/fs/open.c +++ b/fs/open.c @@ -592,11 +592,11 @@ SYSCALL_DEFINE1(chroot, const char __user *, filename) struct path path; int error; unsigned int lookup_flags =3D LOOKUP_FOLLOW | LOOKUP_DIRECTORY; - struct filename *name =3D getname(filename); + CLASS(filename, name)(filename); retry: error =3D filename_lookup(AT_FDCWD, name, lookup_flags, &path, NULL); if (error) - goto out; + return error; =20 error =3D path_permission(&path, MAY_EXEC | MAY_CHDIR); if (error) @@ -606,19 +606,14 @@ SYSCALL_DEFINE1(chroot, const char __user *, filename) if (!ns_capable(current_user_ns(), CAP_SYS_CHROOT)) goto dput_and_out; error =3D security_path_chroot(&path); - if (error) - goto dput_and_out; - - set_fs_root(current->fs, &path); - error =3D 0; + if (!error) + set_fs_root(current->fs, &path); dput_and_out: path_put(&path); if (retry_estale(error, lookup_flags)) { lookup_flags |=3D LOOKUP_REVAL; goto retry; } -out: - putname(name); return error; } =20 --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 534E33112D2; Tue, 16 Dec 2025 03:54:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857295; cv=none; b=D1uWZ5PqMCvsJ2K+kSDVXJqMWBGUbD20jdQ/9QYJNcg0axQ/zV/DuRjShTiYUUxnvl3av8fUMD5GGjRs5JwLzhyiMvQkNpVYDWXuLguMsjD8b+YgJ2Mq5OBGia+tV9xARLljWuNA+VVM02p0mI5IhhH/s7+XYgGVBXtFJSC6O9k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857295; c=relaxed/simple; bh=AIif+faRQeRaAqpK3WJa8jVZgeyvF8kX2QVOTCmr1Rc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=LXR9R5Bxp2Ret3K+qpIRpWcSI4g2rjjZpqxS72mxNUMvKqkM+aIQTcS16GKrI7ak3cE1WPl233UpfxiUQivx8sR8HJfo87DmfRMkOAP2weZmXs2XcBGbpK/E6s6OmzcLFCw3zE1EIGTxax+YQ9aTk/hV5lnr0/h/VkEkNLwsvBg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=FOFP/FjA; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="FOFP/FjA" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=ZdeAiGVCfTu+ZLXJbm8zIQ/4MuEQJKR0dkiqqtUv5W8=; b=FOFP/FjAM2HF6mrhcSpCZNHymO c7TgDXtNry8POz3mw4K5+tHUE3G1J2+gwMYt2TJWsqziRTqJvD4UHfnuNdQtdGRqiPXFo5w7uNZ9v q2mxaQ0+kwEVMplIucftV0d/O7vlF0yDV+h8cRhtbJI2X6fWbHw3yqfzjIYt1Qkwc37b9QGNjXA5S iCBpokUPBchydGbDC6lqSRpmW2GhJIqYC28mhkmIUkWQVOvu8BpUUDnetUULh0so6BQ1HqD65XP6A fF7kmSkfrnpsnWNoTTk/09HaYlC8GQDJ23EHLgyFCKfxuK+JnS9Lt5DfcYvyxKzXF3voi32ZncuaN LjsU0LsA==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9k-0000000GwNB-1nyv; Tue, 16 Dec 2025 03:55:24 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 53/59] quotactl_block(): switch to CLASS(filename) Date: Tue, 16 Dec 2025 03:55:12 +0000 Message-ID: <20251216035518.4037331-54-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" Signed-off-by: Al Viro --- fs/quota/quota.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/fs/quota/quota.c b/fs/quota/quota.c index 7c2b75a44485..ed906725e183 100644 --- a/fs/quota/quota.c +++ b/fs/quota/quota.c @@ -867,7 +867,7 @@ static struct super_block *quotactl_block(const char __= user *special, int cmd) { #ifdef CONFIG_BLOCK struct super_block *sb; - struct filename *tmp =3D getname(special); + CLASS(filename, tmp)(special); bool excl =3D false, thawed =3D false; int error; dev_t dev; @@ -875,7 +875,6 @@ static struct super_block *quotactl_block(const char __= user *special, int cmd) if (IS_ERR(tmp)) return ERR_CAST(tmp); error =3D lookup_bdev(tmp->name, &dev); - putname(tmp); if (error) return ERR_PTR(error); =20 --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5EEA1311C38; Tue, 16 Dec 2025 03:54:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857294; cv=none; b=aPtljl1KJtusWfKfD3nVs/88mCKrzZQ/E+07RI0RicgkwocnVlkcncR/kDDut8DdnZq2wQMseFgXxXEPFpu0LIi22id7gqPozgSFoqTkej5IpH5Tm09enC6qdCnMXFK9+TokQDBh2a3J70wHsjfLFYEqQLRwNLC3B2VHlfLTLIs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857294; c=relaxed/simple; bh=ChpWIeg+38MgGLjdG9lHbGmsXI4DwNrcC5qNS+HG7IM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=sIGTCEQ2JtjAQ4ZJa5yFevW/FUdjq2eT/M9TqwcYalspt9WHKyo++Was4PMbA81vIHsSNqwL+Jl4OidZuiTIKuLWQQt1RdkuNLnJ15XoDQjp5z+LgHcEgBEPgCEWTar4gDC5O8CXx0KQBiuydRApBMwXRJFsqd6ONu9pDALrCDE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=RRO+yPrB; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="RRO+yPrB" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=7a2XMJ0nbM/r82AQZ5Xoc360TFgnxmE4ZD+qqJbM6eU=; b=RRO+yPrBA0OLZGzjUl7zd1tczc dLLuOlkeDF0YI+BUOjq1jUkFvkXSd90KBhtHfKdd//PSBliS158ZS57Nz2fO64eBxlnlQaFi5LFIM QN5H5MTWR+Y7Rk1RONfV0CmDIk06rQ7cz3LagYD+wfsd1LFbvgEdFnNiFsuSIUKwkFLnLomGqXObJ sTX5kS/yIvp9fh8TmlL9SiLL95jW7b64xjY9WRHIaP81ieM3aVxESPifGjV+LKIcLIWFllVaNA7rx JkbOvC6SAGheYTGYtwUPCBOOQt1hCFbL9yy8cBZZ3SeWVcOU5hIy3/i1Idb4+vxYh692OIb+y8Dka P6My6AHQ==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9k-0000000GwNx-24q8; Tue, 16 Dec 2025 03:55:24 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 54/59] statx: switch to CLASS(filename_maybe_null) Date: Tue, 16 Dec 2025 03:55:13 +0000 Message-ID: <20251216035518.4037331-55-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" Signed-off-by: Al Viro --- fs/stat.c | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/fs/stat.c b/fs/stat.c index d18577f3688c..89909746bed1 100644 --- a/fs/stat.c +++ b/fs/stat.c @@ -365,17 +365,13 @@ static int vfs_statx(int dfd, struct filename *filena= me, int flags, int vfs_fstatat(int dfd, const char __user *filename, struct kstat *stat, int flags) { - int ret; - int statx_flags =3D flags | AT_NO_AUTOMOUNT; - struct filename *name =3D getname_maybe_null(filename, flags); + CLASS(filename_maybe_null, name)(filename, flags); =20 if (!name && dfd >=3D 0) return vfs_fstat(dfd, stat); =20 - ret =3D vfs_statx(dfd, name, statx_flags, stat, STATX_BASIC_STATS); - putname(name); - - return ret; + return vfs_statx(dfd, name, flags | AT_NO_AUTOMOUNT, + stat, STATX_BASIC_STATS); } =20 #ifdef __ARCH_WANT_OLD_STAT @@ -810,16 +806,12 @@ SYSCALL_DEFINE5(statx, unsigned int, mask, struct statx __user *, buffer) { - int ret; - struct filename *name =3D getname_maybe_null(filename, flags); + CLASS(filename_maybe_null, name)(filename, flags); =20 if (!name && dfd >=3D 0) return do_statx_fd(dfd, flags & ~AT_NO_AUTOMOUNT, mask, buffer); =20 - ret =3D do_statx(dfd, name, flags, mask, buffer); - putname(name); - - return ret; + return do_statx(dfd, name, flags, mask, buffer); } =20 #if defined(CONFIG_COMPAT) && defined(__ARCH_WANT_COMPAT_STAT) --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 73F673126AC; Tue, 16 Dec 2025 03:54:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857292; cv=none; b=bCst9SOL19rI+8zDgBN6/rhI78wqG//HdxVTt6WrOHA2oSsYWn9FZOKtaNG56YO+xJayoa672oN2OntCJ/XULVww5x/T8VnSyK1GuaADlyXP48vKieqO3tH5L2QOlZdRytFSOyPzS4SiCYFa1e+MDDlSXkIs5j/B/4bWJL9lOm0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857292; c=relaxed/simple; bh=ml4RNN/VCnYi1f5kE1GxmfC7TyVm/T5H+RGWeGZ6lPE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=q3qxddwBYxicGE3JZ/qS4finDVl1iWVQs0usjX3CnemOPkAJZYUAN/mSaM377PACrmMFwEghEqrvNKt9pLNyc7cHcpkhU4IIA50k+iO4nkXVocxRMmu//jevvi53lB26WsX0OnNYabKMz+qXKkiWDPHu78KhWbM4vE7ED8WSCy0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=UfOk6tag; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="UfOk6tag" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=8u3Dw0scZ1Xzc2uavtsf6xcpNT1HTgSA1P3hF8Kuknw=; b=UfOk6tagInO7YYNbNiepmAeijx ZNvZcwI9OM7WMSUSAVVUZX6tO/3+xHMKnVkXbM/4q7Y2+rs5ykR0OC7JRMtgXxW0XlRrIU/ZXeacg 3aRMd0qp+MPZ5R2h7IFTTC7M8Y2MOw4gYJ2LifRBL+KyxkUTEpQMCdRc+ZnUCJIVvPUTpNizGar+J 71GTQZvfNp9BiCpH/RLIBDyhEvxakXkm/YFy6G65jsUQHMrOk0zdB+dIhnkAPtUl5y8ksugxiBu/E gSxggMLmrDXJ/vMQ/djxB951wpXzLv2yQgRV4Mil8cLPXn9BVh+IloSFkao7oncuehGSQIvq0ozMr TWcm9x6A==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9k-0000000GwO8-2LS9; Tue, 16 Dec 2025 03:55:24 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 55/59] user_statfs(): switch to CLASS(filename) Date: Tue, 16 Dec 2025 03:55:14 +0000 Message-ID: <20251216035518.4037331-56-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" Signed-off-by: Al Viro --- fs/statfs.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/fs/statfs.c b/fs/statfs.c index a5671bf6c7f0..377bcef7a561 100644 --- a/fs/statfs.c +++ b/fs/statfs.c @@ -99,7 +99,7 @@ int user_statfs(const char __user *pathname, struct kstat= fs *st) struct path path; int error; unsigned int lookup_flags =3D LOOKUP_FOLLOW|LOOKUP_AUTOMOUNT; - struct filename *name =3D getname(pathname); + CLASS(filename, name)(pathname); retry: error =3D filename_lookup(AT_FDCWD, name, lookup_flags, &path, NULL); if (!error) { @@ -110,7 +110,6 @@ int user_statfs(const char __user *pathname, struct kst= atfs *st) goto retry; } } - putname(name); return error; } =20 --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 73FE03126AF; Tue, 16 Dec 2025 03:54:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857294; cv=none; b=ffQ+LO5jyZWaj5J2SWIMuE/8p+v8uPVgWoJ5SzgXJQc6jg3hzQPWDf1XpTqqGMrUcRVp9GIP9yZrEvEqWHFyXMRpcfsmHExHHzLH/eLFQ4N5bML1K9gLHbSmrAq0azubNWqYEud129mjkfxAqpr2TrahRspJ7j2dD770NHg1+r0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857294; c=relaxed/simple; bh=JqqD6xeqUDj3nRwRtlOX37SQyfwoFYklo2JzhGSCFzA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=e4HtL0+xSQ5t9hM7hc9dlKieprnoCpp2RdMir5nAas8C6HWzkb0+fts3ln9YfX9ZnZAtAyeowNz1g9repiUsfk/5QCSF8J4pK65kFwtjp/yLcHpuF4XHslGR5nRjzfdqgTNXOvnL82Lp9tZ+4lihOXCabQg94bkhw1b8wutP43k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=ClIMu526; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="ClIMu526" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=KvYo9U9Xs4PTrMtECgI7ahcosY5DMnE4tqcTdGN6Z+w=; b=ClIMu526cgeJ2lo2thXM1gLmhF 0BgTHgDSvpndVxX/TrP+rQtSIVbv23Vxw3uFLh8xqw71l+ZDqwkbPL5GDxKm8+Mk0Yb0xyD7ksl4v m0aNnslX6dGtWzWj9AeKdPj+mBJDH4urD7ksufRwW3wcwVEKzWKETFNE24zOgz55toDmpQmiqHl1Z 9+2P/1yitl1K1olAPk37vs6djPBo5yHDXSDxwy+utj5h3J2dK91HLT7wwwgYumhK8g9sM1eDHbTRJ ebBNNl1O4yaSNCvgowHi5BDa0vlC1oKSkAB57PNnhz/ixWLOZdbxky1gRQ20JOHT501luTEZxmgA+ 71t4XHog==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9k-0000000GwOG-2akA; Tue, 16 Dec 2025 03:55:24 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 56/59] mqueue: switch to CLASS(filename) Date: Tue, 16 Dec 2025 03:55:15 +0000 Message-ID: <20251216035518.4037331-57-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" Signed-off-by: Al Viro --- ipc/mqueue.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/ipc/mqueue.c b/ipc/mqueue.c index c4f6d65596cf..53a58f9ba01f 100644 --- a/ipc/mqueue.c +++ b/ipc/mqueue.c @@ -912,13 +912,12 @@ static struct file *mqueue_file_open(struct filename = *name, static int do_mq_open(const char __user *u_name, int oflag, umode_t mode, struct mq_attr *attr) { - struct filename *name __free(putname) =3D NULL;; struct vfsmount *mnt =3D current->nsproxy->ipc_ns->mq_mnt; int fd, ro; =20 audit_mq_open(oflag, mode, attr); =20 - name =3D getname(u_name); + CLASS(filename, name)(u_name); if (IS_ERR(name)) return PTR_ERR(name); =20 @@ -942,20 +941,19 @@ SYSCALL_DEFINE4(mq_open, const char __user *, u_name,= int, oflag, umode_t, mode, SYSCALL_DEFINE1(mq_unlink, const char __user *, u_name) { int err; - struct filename *name; struct dentry *dentry; struct inode *inode; struct ipc_namespace *ipc_ns =3D current->nsproxy->ipc_ns; struct vfsmount *mnt =3D ipc_ns->mq_mnt; + CLASS(filename, name)(u_name); =20 - name =3D getname(u_name); if (IS_ERR(name)) return PTR_ERR(name); =20 audit_inode_parent_hidden(name, mnt->mnt_root); err =3D mnt_want_write(mnt); if (err) - goto out_name; + return err; dentry =3D start_removing_noperm(mnt->mnt_root, &QSTR(name->name)); if (IS_ERR(dentry)) { err =3D PTR_ERR(dentry); @@ -971,9 +969,6 @@ SYSCALL_DEFINE1(mq_unlink, const char __user *, u_name) =20 out_drop_write: mnt_drop_write(mnt); -out_name: - putname(name); - return err; } =20 --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7C4E73126B6; Tue, 16 Dec 2025 03:54:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857296; cv=none; b=N/2Rlp9SSinuyW5w04wia5E4uPxnjlXhkgIqAHScjxCTmzKnfUAVOPzUDQ4LzmbrJhD0zWhaQDDP9NO3rMrOJ10+lRvBw5L7F9YEdkPwk/5HPoZCIU0IUO/n49QcsDl5tqSesujBmaQ5LW8uaYB6p8384+pvjMDiWxTfuPWluPM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857296; c=relaxed/simple; bh=j/fZI9gOy5aAZK2Biqi4W4BSmjrAvJoDy10xpzp9eQI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=IJLKPVrJywa20kUj7F1JldL5UmQslN72bppj4t3JNGbU8AmuaWfwK1SrfQ4MXgclOELU0/SZFWdr5uDiJWkrhrlxqzVEwlMV/GGkUxMbLMDNvxIitX6mJQP47wYDjLHvMlaaxnz98wEso/LixGhxdRs52j4R8rl8C+y9kyGnrio= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=jcf3OCkS; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="jcf3OCkS" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=+ujKCUHwkeCitxlUD/zuRqlmA0R6LL0GJMO0Py7Npfc=; b=jcf3OCkSgbHNl8Xo7cbwcv5kHp YUEkyKhnmPDYcni+CQVTfabzmz5kaLKiDQTT209koTxqBKHDN+l9H9GhO3zrxS3nOrX/dUDGCewxm Ira0Ra2l1FlgYhz1MbmBwRC9fKs8/yhHFlhTMf0CYzz2MNbmaVCIFjmYKzw41TWIvJsj0vY53rPMX Zi7hOwwv+4BJCReQBfH6JhCJaKZzyyDPJC7CYqQsJwyiGnY3xi+6Kmxxcqapz4pFk4WRTY2AOlMg9 OK8fiYBy7/qrSkoKohjP1y9uxryuu1/BU2pQDMOBLAKzbM1ydnxPJ/BWtoF5+LtcBP2yc7Es2Muz8 8ooMsLtQ==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9k-0000000GwOJ-2mov; Tue, 16 Dec 2025 03:55:24 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 57/59] ksmbd: use CLASS(filename_kernel) Date: Tue, 16 Dec 2025 03:55:16 +0000 Message-ID: <20251216035518.4037331-58-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" Signed-off-by: Al Viro --- fs/smb/server/vfs.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/fs/smb/server/vfs.c b/fs/smb/server/vfs.c index abfaebcf8cde..0fcf4898035e 100644 --- a/fs/smb/server/vfs.c +++ b/fs/smb/server/vfs.c @@ -54,7 +54,6 @@ static int ksmbd_vfs_path_lookup(struct ksmbd_share_confi= g *share_conf, struct path *path, bool for_remove) { struct qstr last; - struct filename *filename __free(putname) =3D NULL; const struct path *root_share_path =3D &share_conf->vfs_path; int err, type; struct dentry *d; @@ -66,7 +65,7 @@ static int ksmbd_vfs_path_lookup(struct ksmbd_share_confi= g *share_conf, flags |=3D LOOKUP_BENEATH; } =20 - filename =3D getname_kernel(pathname); + CLASS(filename_kernel, filename)(pathname); err =3D vfs_path_parent_lookup(filename, flags, path, &last, &type, root_share_path); @@ -664,7 +663,6 @@ int ksmbd_vfs_rename(struct ksmbd_work *work, const str= uct path *old_path, struct path new_path; struct qstr new_last; struct renamedata rd; - struct filename *to; struct ksmbd_share_config *share_conf =3D work->tcon->share_conf; struct ksmbd_file *parent_fp; int new_type; @@ -673,7 +671,7 @@ int ksmbd_vfs_rename(struct ksmbd_work *work, const str= uct path *old_path, if (ksmbd_override_fsids(work)) return -ENOMEM; =20 - to =3D getname_kernel(newname); + CLASS(filename_kernel, to)(newname); =20 retry: err =3D vfs_path_parent_lookup(to, lookup_flags | LOOKUP_BENEATH, @@ -732,7 +730,6 @@ int ksmbd_vfs_rename(struct ksmbd_work *work, const str= uct path *old_path, goto retry; } out1: - putname(to); ksmbd_revert_fsids(work); return err; } --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E0CE2312800; Tue, 16 Dec 2025 03:54:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857293; cv=none; b=CQwCt8EboDlRl0BjpOs45C3zWUpEsAbWVyHwiGWnShzw2Om/g4YZKWZDk+ysftsRyp+aasR1CxRLUgDd3yCFa1AEBqUEo2i4Iun/ZB+N+2D292fAZBj4U/+OSuyL4rARO4LpCRjvn8WHZ29Sjt2YLgqdLASUvi5bMJ7yw2wvvR8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857293; c=relaxed/simple; bh=RZMRszjUY/fIM2JLm9jks2g6cg0EVOixOwmn11+9ZsU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=skZ8MWwa4Q0doBbDhFIttjetIUErSEgkK+uBCBBVtd2sNaRUXhQhCkISlUKGIg3EaHIstkBnBUcmoqtkdgtqWL9+oRJGbwC2xU0mew81PS424nM3fIKwe1BbBNBKoR5w64geUPbhQcUbqKbyNcqmf/hEJr/u15A1FuenmB0WDXM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=RBYsS4H1; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="RBYsS4H1" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=2HkCXtuYG81yDH2ptlOKycPDQQLzNXbW/SGw7cqaL7M=; b=RBYsS4H11aDEviOHeGZjIRWra6 2WxaO9gH1DJ6RX8zcVoH4gdJw7bnVKg5D4gddF5fCkno9/HYPFoBkkxy/0WsyItzIEpjLHGen+fMa GHTtYogR1om174Ma5pqEOZaQSHe4UUOuoqKLI0FjtRg/EbOj/m2YOgWN6pyunbeNdiJzHgX9ADNWD TMz/I3zF4nOyl41z5fHotclLYcodbYCjkx5HncfcktQLKZD5hfPK02teCms5md5n/rQFNB5zkNlPy t64AiGnynf1j1575i1y9e3UChmsAHspuxTeZq1bOR391Kqlj2IqpTlYJ13iWgFIMZRjgPGN6WIOa6 BmIXVlRQ==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9k-0000000GwOP-302h; Tue, 16 Dec 2025 03:55:24 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 58/59] alpha: switch osf_mount() to strndup_user() Date: Tue, 16 Dec 2025 03:55:17 +0000 Message-ID: <20251216035518.4037331-59-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" ... same as native mount(2) is doing for devname argument. While we are at it, fix misspelling ufs_args as cdfs_args in osf_ufs_mount() - layouts are identical, so it doesn't change anything, but the current variant is confusing for no reason. Signed-off-by: Al Viro --- arch/alpha/kernel/osf_sys.c | 34 +++++++++++----------------------- 1 file changed, 11 insertions(+), 23 deletions(-) diff --git a/arch/alpha/kernel/osf_sys.c b/arch/alpha/kernel/osf_sys.c index a08e8edef1a4..7b6543d2cca3 100644 --- a/arch/alpha/kernel/osf_sys.c +++ b/arch/alpha/kernel/osf_sys.c @@ -454,42 +454,30 @@ static int osf_ufs_mount(const char __user *dirname, struct ufs_args __user *args, int flags) { - int retval; - struct cdfs_args tmp; - struct filename *devname; + struct ufs_args tmp; + char *devname __free(kfree) =3D NULL; =20 - retval =3D -EFAULT; if (copy_from_user(&tmp, args, sizeof(tmp))) - goto out; - devname =3D getname(tmp.devname); - retval =3D PTR_ERR(devname); + return -EFAULT; + devname =3D strndup_user(tmp.devname, PATH_MAX); if (IS_ERR(devname)) - goto out; - retval =3D do_mount(devname->name, dirname, "ext2", flags, NULL); - putname(devname); - out: - return retval; + return PTR_ERR(devname); + return do_mount(devname, dirname, "ext2", flags, NULL); } =20 static int osf_cdfs_mount(const char __user *dirname, struct cdfs_args __user *args, int flags) { - int retval; struct cdfs_args tmp; - struct filename *devname; + char *devname __free(kfree) =3D NULL; =20 - retval =3D -EFAULT; if (copy_from_user(&tmp, args, sizeof(tmp))) - goto out; - devname =3D getname(tmp.devname); - retval =3D PTR_ERR(devname); + return -EFAULT; + devname =3D strndup_user(tmp.devname, PATH_MAX); if (IS_ERR(devname)) - goto out; - retval =3D do_mount(devname->name, dirname, "iso9660", flags, NULL); - putname(devname); - out: - return retval; + return PTR_ERR(devname); + return do_mount(devname, dirname, "iso9660", flags, NULL); } =20 static int --=20 2.47.3 From nobody Sun Feb 8 06:21:53 2026 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7535231280B; Tue, 16 Dec 2025 03:54:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.89.141.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857294; cv=none; b=CJaNtXUAw9uLTm+DLbVQgGxmaXRCebQU1kYGTGToax0a6fpv1mHdW1HmhI0pOukVWC9jn7pQ7ksYICU5zYPAdRcsZA2mYYNbnsjTdOC2cHWZxJOTranvjvI5lwCVYXAoo6IZmdQTse6RsqzEo0OhUYmbHju9UjgoBaUwBLD/mSo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765857294; c=relaxed/simple; bh=ed4inkFbKg5gXwGxXVyNFfqCJTe0MbLbW/j1/GoDH1w=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dhE4MhY5J+sAeP7TkI/Z1FcgshSLBWqhcerdPaHznxL7YmiTv5RzrdtirzVp/Z0Kp93i2bqEFaXakqIqj5J4bLBmpfVmLC1/E3bcPw/Ee2aw02ARfHNKlqLEe58UxDFcadZJq8buZcauJDryJmI0Wj+a7jTBfyHDN0OcH0V/mXQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk; spf=none smtp.mailfrom=ftp.linux.org.uk; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b=m70MiiA7; arc=none smtp.client-ip=62.89.141.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zeniv.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ftp.linux.org.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linux.org.uk header.i=@linux.org.uk header.b="m70MiiA7" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=sz/9K14xSZCaQltDnYlKvdLrLATpRcUYc8VoMWgUXMw=; b=m70MiiA7LhOiREd71u5WzvtE2J J9VUrqeM6uUzdw5oj9CCS5fvay4nz+GOplKjWEJWewZ13vDjxbtrUHZIzylEHrDZZJLjQYn9sGszr nvoEYCqbkMXoHM3nOP4zbI0nAtt7vXbg6WjX9+ldA97O63BaceZPZ27I5C6DEWL5KgqiT7S7DuRYU Lj6czZrwl2YhaZC5c+xj0IwuE+pqTFpT0Rw8m5bCwatU969Kart+m8uDFX92+zukHYghBU0O+R7Fl sZSzE0PLP5wIEHQnele7I3yGtW9UndDas6wRestliai1o4OVPg0smtRKcCGaoql53djQpy7o7SSjQ fCpmMC2g==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vVM9k-0000000GwOg-3FtF; Tue, 16 Dec 2025 03:55:24 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: torvalds@linux-foundation.org, brauner@kernel.org, jack@suse.cz, mjguzik@gmail.com, paul@paul-moore.com, axboe@kernel.dk, audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v3 59/59] sysfs(2): fs_index() argument is _not_ a pathname Date: Tue, 16 Dec 2025 03:55:18 +0000 Message-ID: <20251216035518.4037331-60-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> References: <20251216035518.4037331-1-viro@zeniv.linux.org.uk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Al Viro Content-Type: text/plain; charset="utf-8" ... it's a filesystem type name. Signed-off-by: Al Viro --- fs/filesystems.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/fs/filesystems.c b/fs/filesystems.c index 95e5256821a5..0c7d2b7ac26c 100644 --- a/fs/filesystems.c +++ b/fs/filesystems.c @@ -132,24 +132,21 @@ EXPORT_SYMBOL(unregister_filesystem); static int fs_index(const char __user * __name) { struct file_system_type * tmp; - struct filename *name; + char *name __free(kfree) =3D strndup_user(__name, PATH_MAX); int err, index; =20 - name =3D getname(__name); - err =3D PTR_ERR(name); if (IS_ERR(name)) - return err; + return PTR_ERR(name); =20 err =3D -EINVAL; read_lock(&file_systems_lock); for (tmp=3Dfile_systems, index=3D0 ; tmp ; tmp=3Dtmp->next, index++) { - if (strcmp(tmp->name, name->name) =3D=3D 0) { + if (strcmp(tmp->name, name) =3D=3D 0) { err =3D index; break; } } read_unlock(&file_systems_lock); - putname(name); return err; } =20 --=20 2.47.3