From nobody Sun Feb 8 05:28:56 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 8276D3009EA; Thu, 8 Jan 2026 07:36: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=1767857812; cv=none; b=oiULkc8lz+tAVY4tseethdDZOWQUpzXaC0apLkSrRQx6LNJTxCzRxCtPzNWQwblooBAsTT5/PxiVQ+gox91tHZLPNHuEjwyXquFdw/XSIPWutJgV41JRJDaEuL2vtY2VxsQzCG/YsPYopFSgwXJCE20LBvsqPYZZs7ojVQouogQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857812; c=relaxed/simple; bh=aacmgBkIekWcKT1nYvHuUWkKevrQq3dWCTP/f16lQvY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=X0l+AcLMy84W9iET18n/D9ZTeRL/rWBoY7Ax9RPrxdGkXlLlVY3D9gtIfMYtdG+7TDluKMOkepUPuGboWKnreHvJA8xrH+7wUtItDTr/McvMzHUMGFEuGaBjuwmGBXlHH8Q/Cl7jP8oHJ0HXR621S+/NtH57rH2ybxFwRJBLg4w= 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=eVbC3rfh; 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="eVbC3rfh" 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=eVbC3rfhhSMSp5hiAGmtYMW32W /CwPQeXZxT48jFZL0oA1H36B3324pzmjp7u+ngUvtNl4XXDHvoMgGMtU2BAeUI0wqHBg872E21Y5n zUSn2o5Wm+LSIgQgBFV2oRATIC9UMX2ceuakIGztdvOL30GS/GGjOR+2dseFwfO9LjETGDss+tSMZ I/f4HZ7A0qE46hp0LX6rfc3e3i8PhwnuaS6TNLiDqMaa7E7VYvqbBcKHv2jR10aYAWNAGdXNFfoZA DVZZpwMrICAzPRZ2Q+vfruxqEWXBpowZ54VlkP77SEyBgE0AYtMgfrKncyyAEXArkdyaVilj+Dw1d cECwoEfg==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkap-00000001mem-3PmX; Thu, 08 Jan 2026 07:38:03 +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: [PATCH v4 01/59] do_faccessat(): import pathname only once Date: Thu, 8 Jan 2026 07:37:05 +0000 Message-ID: <20260108073803.425343-2-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 05:28:56 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 8CF72314A89; Thu, 8 Jan 2026 07:36: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=1767857812; cv=none; b=UQ7tBO5g7KGCz8DnDS6AOMHuOrjlgIsoAJDLPqOn8c1FisSzU3mmwQV0Fl27kgUIzVK6ptQmW6tdtFKeDdE4WlgfhNKWfOQl4+N3aOz1fFZxIFLD6eclw4ZIlQDQi7HGcHAdgRbBA9K52c2cJpwh5k0OOob20PAFZZv7vzCJK6w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857812; c=relaxed/simple; bh=l5FHgW47f+Yj1iy0m1MGYj33Um71tv4luVBFCT40jnU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=PBsiNcwKWKKIO+aAA9G/1QrIsKqN0DRPHcvBsmjiKcXjzGeulSR9O7pUmzAZxJfmFf1bFwW9kTN86qoR8TN9veNV3wZTtOQFcA7Uqp8PSgnZD3HDDpgCK4Pn4LCkxRDKDsNyvkXRWUFYCuQMbeBfam1MCnYrckvvITGlkj8Y18A= 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=tsKY1M0m; 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="tsKY1M0m" 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=tsKY1M0mWl2OS8wXje9XTJYY8n j42bm41WLSLziOFstztGA4n7iqt0bOKUGKkTF73JaNKyP3N+2k8XLY/w5iHL26RYDiF7cpF3RFh8v agVeggLb5DUcCU2t/43eZZgyjWneewvXVgnIM1kSQRqJRoZ6+b1OWt//uYuKhq3xj0OcSB6Uhy53K THIKBCq87SCyd69DoS9K4x1upTjkvkwSwbhkdUJmbE1HEObOWzGQci3lb1Gb54qTos184F1hQUVnN WuCyC5ilefi/+d0GGyKdMoK15pFvLsgpjTCuqjaX9qNCFV4BT4k6u5H+hzrzlvfB5/5Qsonl84VzJ o4yFhVHA==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkap-00000001mer-3mAb; Thu, 08 Jan 2026 07:38:03 +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: [PATCH v4 02/59] do_fchmodat(): import pathname only once Date: Thu, 8 Jan 2026 07:37:06 +0000 Message-ID: <20260108073803.425343-3-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 05:28:56 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 8CA1030B536; Thu, 8 Jan 2026 07:36: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=1767857812; cv=none; b=RakFHz7IVLOY8XVgffbSmT+8pWx2CpMCHF5jWk9Z5t4C3CzCAlocEK0XjovgjWwcTcsfYPY5NNYKfnErCjs7tL+NpHIcQOseo7f25nJBjtqnKWfNswXdMxYbOAsDiKD9zMV0D8vQK0e22clzzIWsFe+dNZiB7elkEHiYVpiAyMw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857812; c=relaxed/simple; bh=VJR7OANqAnNeKsJcpMXd5sA1W1qzF/DrbRQlYMiYeY8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=rtqDJvm09wAo1LxH1fpe8YHXr1rKVOoK7XghOS735ICRC6Gw7iN2TCPr7PaS9BfefLfoDuPdXYZFWozvQTXHl7wD5TcQZ8wLFocB36xFiI2zBKOObXSYNiDFvrU92i1u1Mb6PVYhFECKTEQDwlZHk9yFA20b/dTbBBjX/l4s9LQ= 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=fHW1fzwc; 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="fHW1fzwc" 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=fHW1fzwcMG6P7inaFp/YFw4DXG rF83IKcjKwWWX55wXjqZDZnZEc0Pygeqow8+4Z3OZUJurC225qrnyuPKzMBayjzhMlrmqj58c0gaH t52v8S95+U2FSBySsWfHlQnlvQExx0kOFtehHQWYKUEYEkBZp5ucCRmfRyNDYPQdhKW+mkp5G5eB9 xbm7h97gM7v5aD0+NySI2+APlYh68d0hQr2Q8toFH8lvx/i0MB4KOcrbI1McWi4m8T819G0UFvFmy dNWcXkoCnbqegzX+H60NINnF0erQTNb9vO2CHkiIWNMSRcODELQstxO2ueJPIcQ2c0QPvaaGjRE8m sEovErBA==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkaq-00000001mez-08VD; Thu, 08 Jan 2026 07:38:04 +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: [PATCH v4 03/59] do_fchownat(): import pathname only once Date: Thu, 8 Jan 2026 07:37:07 +0000 Message-ID: <20260108073803.425343-4-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 05:28:56 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 8C8F430ACF0; Thu, 8 Jan 2026 07:36: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=1767857812; cv=none; b=CXsUFPwVmFKmkTdZvj3otMpsBDdM9bfxMmw4Kr/l5a9xCXheomu5LkxXSwfzm42sbehTuZxakRcSdilBahNQk80Vtns2QfAaeSKV6NFYXNZ4S86lA2CKWhFlGKo9X+EuWvpEF4Na3alD/wwQjviTpkWhaQ4l5+mvMc3m6HeV9nU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857812; c=relaxed/simple; bh=z/VLR9eMxqpn2kvuklpoYwJtnuXwpuC7asBssPdV4t8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=TYFZfEslo8uyqjXmtRSP1AMpZp8iFYNOp/QK7YNR4fPF2+EdyjBMV6JmZRmA67kL8eUXvGcedmrgB6UkpfoW2jmdcBQqIORrFpyximtpKwrw/5mJ1wukKbdqImjkpz0Y1eon0mQN7kwYr7ELPTo9aADZGV7SY2bHGTBNowziKPY= 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=bBg2jmsG; 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="bBg2jmsG" 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=bBg2jmsGl/EHffla1svFKk7pDE nD7y6KPXxGlBfcJMoNGTf46UVHh1e6iLtzXOnBc3XpaYWi7HMKXLN4H6KrpLrH2oSrWAXPocSvLID AJqFELqL7SOhtC/LCPuyJG80KRMAp/dSFVVd6+7S3v7NBVIcMJW2CrNguDTqvui6Hyr7Yzw/1OZIu tfMMAsfJBcav1Kt7iAXUSppEOR5n97rbbDni552bkH0QtetCbpjaeB3TUFTP5FBQVcmx+UQo0otOR Ax1OEX2/lnCYXD98CSZZxQqK6RsnXwXUiz5WbvKv5EqhkmZfvR/UzY4wv1tXXn1GGuL7yEpR+A8i/ YsAx7yOQ==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkaq-00000001mf4-0eJf; Thu, 08 Jan 2026 07:38:04 +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: [PATCH v4 04/59] do_utimes_path(): import pathname only once Date: Thu, 8 Jan 2026 07:37:08 +0000 Message-ID: <20260108073803.425343-5-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 05:28:56 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 8C97F30AD15; Thu, 8 Jan 2026 07:36: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=1767857812; cv=none; b=rahsxF4sQQJ7n9wXsvBMe1m9Zy3P0BXPTFhoV+9WDCvawIp07Ehr0j56jhOsX05GbObnzQH/Jdz9D7Eyy2DFbxggARZHpo7FH3JDfH9V8ZRgonnuB+2KM6o0+D+ptD+WoaX2d7tCroc/EGO3Izwp0ZkiMgq50kZqegBYN261Mj0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857812; c=relaxed/simple; bh=4oxuQFLk8YkIq/5mYSLl2XCxIvuC91NG8EaCN9dotBs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=SSvFY6aPq5XMNw+KKGYXQ+9Wibx/y1g2X/isBfzhfqKbCfzWgfA1WJxzNEl1pyZWwXmi0bigY7GVvzGLdVsyZyoER+Cb9CWjoH8ClYkTCS9onPlg8fUP4lBjmCAppAsn3KPS7psWjI2mp+1NfeR5t5H/hXcLRPUcWcg83zUUy1o= 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=oV6MBTgi; 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="oV6MBTgi" 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=oV6MBTgi4wQfX66d7QfiUJeoy+ dD1jr+JyR++m1somxxmFwHKAHWuEzckiluOByD8KgCeV6iEdrZzJg4/20ZXr3JdMAJMU8zu02xKh9 QnY1FUSt8YGh/eJo9De8UU8PCxQQY2DZBOAeXAAJF0QS4V2yATReCtCdg3fJ9RJNGbTlO+EiP6c5r DbZq97JM0xkxwfL18z2P8IEi2sP40/qBXQAiFOPbisNTXdna5wd8q6MeCBOpoPLl9p9J0HB1MzzEe OnBLZp5f1U1Ux1l4B+p8oj3UndmdLfID3PTzTr/OnfAQz581v6n3qCyOBu/a8+SefyeS8y7Jy+qYe rvqyu/rA==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkaq-00000001mfB-16vu; Thu, 08 Jan 2026 07:38:04 +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: [PATCH v4 05/59] chdir(2): import pathname only once Date: Thu, 8 Jan 2026 07:37:09 +0000 Message-ID: <20260108073803.425343-6-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 05:28:56 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 827D230103F; Thu, 8 Jan 2026 07:36: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=1767857812; cv=none; b=Q7yus1o3tuYFTTnT0o7LwZuGMliNXqUK2uuu8G2TwHEcyFxgtvkWfbJdW7GjrjqtUy6yF9+wsjZOm2g5dnKFTt37NrWzuhj3SRgtB//bZAT8iK67S6zVuiNVoz8P6Mc6bhQqO5lFJvKraJNeSAqo8hU2RlDUhiN3l9b6EhSf1kE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857812; c=relaxed/simple; bh=HNPcrjOGPdK+rUjKiP0RktSumxuu6OLS32qJgPhWCP4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bei2bchIkos06kKgkO4ubc4fiHM762J981qZ/rOL2C89in2kiwvhdIMR55OjBovB1Fa+W0Pyfn/tWlnSw81TpzV6co0RHTCHwcc7gLG/ZHjUSVY/5NUyO4I1btpOC0cTdg/QT+JZ5R2Y7NqI+EAJS9oWRFgV9LxJqklo5DeQocs= 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=NikCwtMM; 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="NikCwtMM" 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=NikCwtMM4rVzePgqTV6Yt32t0+ wM7ANV0KnBg7f2v49t0nWM8poqHMCK652fQ9hfbs1QTVo11XZ3MWpA64XLqXnfRTUZ2hbKOze+ZbZ jaQcKa22dkCIcn0qcM/9nc6ymVuf2Ev5zd97u2F8vdjNv2/2HVTqRDSZtG3SWoz5O/pCa/o07Xyc/ p1WqCRfmh/8YrXJAWmM26WlqMMoUGoAnf0kZ4Yb0iODh5DFpnNFf7V2KnyKERa/HN5h0OSUxyYxIv hmhpfwvkMS67RIjoqYUNHHWr1HpbdRNXmvCZqQBBo9lnUf4T9HO0KpLtJQpYphHk9TR8zNBRV22Zr gBIiHUDg==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkaq-00000001mfM-1ubp; Thu, 08 Jan 2026 07:38:04 +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: [PATCH v4 06/59] chroot(2): import pathname only once Date: Thu, 8 Jan 2026 07:37:10 +0000 Message-ID: <20260108073803.425343-7-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 05:28:56 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 970383168F5; Thu, 8 Jan 2026 07:36: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=1767857812; cv=none; b=BuHIUyGd3v2lZyOqIIAwhW9ZZcPoZKxiNJr0mfpXKokhCcn9Z/nndX1+Ioyk3Z+faY2qGPmEoi9PvkR138Tb09G4d8WpJFy/XMTROGID7EiWRpEB6jG521Yj4AFjMOr1u6/hj4Nw5LPjPRBEUN393O1N791+R0oNuUNqbk6m0wg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857812; c=relaxed/simple; bh=5MEqgjhpmzI29H1uV/1SQLwXuo398WOo5iQ8G4kZTTs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=h21TMwcplIdBMewBYFDQ17zccdOq4PEPZxdhf4WJfxJKqZWg6lmibQEkbklQkrr8/eKvrrVO7Li6EVV/dSxNkR/b3sWYAUic35I8RqsdIABxam2jHhWHWdJFFiXnBS3EtZOCgECvpWosKspxxZH0V8ILKRuhZvr6ZhiEl5X85LQ= 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=BP1KNZbV; 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="BP1KNZbV" 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=BP1KNZbVJBfcMJ2579H6NvJZOn qIP6AfjpBe7QSewla55kqIyP/MiB1trAATjjfU7+XcV90mkEH8yaw7Mxony2ORYfclbH9bB3sUCvW K5qrbfbs/tXmtUzk3FxlV/vmOpEIS2N2PFnMRvSNlsfLCQur9KLaL30KNa57Pp41cUb0IK7bhw3Ln Z41xwLj9UCRgHzcirWyPtbf13Zs+9cGjtDsBMNj6MX+OyYlMJOm39Y0Gwpejb0dIEx7HhNAiaQpQW g2dEFDi4mb7LtO8pqMA2M8svMeiw7MHlZiSPa/FoJJw0Q7JbrwXAMM63Ll+exKMWT2Tu23rl4rF9H SXdCgX6w==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkaq-00000001mfT-2J53; Thu, 08 Jan 2026 07:38:04 +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: [PATCH v4 07/59] user_statfs(): import pathname only once Date: Thu, 8 Jan 2026 07:37:11 +0000 Message-ID: <20260108073803.425343-8-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 05:28:56 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 13039318B85; Thu, 8 Jan 2026 07:36: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=1767857812; cv=none; b=a+cPMPVj25XUUcTRTuVpORjtdcdJ0phJjiufu092wJ/kXHVAGIw+DGQVCYoUEIQxkQxPGVowcOcTlxJq+oHZ5BibgijIR4UJSwDj1Bb0Wa/OyMcJ02A00PCzYGH48WsaiSC7/riRn05B8DqHgmHiLFfjSuZI9GWzWyyi1BQuA0c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857812; c=relaxed/simple; bh=zFlDLU2alFVD/MwuTFbdq6QS587tb9atKC26F68cFjo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=iintklJTLu9h7yvvaGW0zcz5+Bcrt0YKuFXKWyZFDerzvHwYbTKdq5x4TncHCnEahDSrxU12OjmrOYhpPdaxKTY8QlXlCHI1LT4uyqo1bP1JmtIAdwApm37vssHStvMO2agwz3CZD3QVLUv2yR/EYAqTwEBo6ImoKGdz2WYzW7Q= 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=wB3/enK5; 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="wB3/enK5" 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=wB3/enK5RgfmAhp5YUwMjO87c9 CqPv7z4TAKkutVZV5/JzhBVXetAuoXRpTQfvwAxdCr8bhcWmPz2q3OtyzBb/f5L2F10YpzKAu/3KQ wX3tPDZnsBjLdo6bfGB7rcTlPIb64dLPf6n+ewrod835Gxa4+FcBqNY+81+oTfP8rpTXnGkltHpMj 498EGM6YgluWM/dxu8RlbFvXhIcvDOiTx6iIq4CqVb+3Z4Im/lgydJ/4rGpiCPJhMYfeNwt1BiUo1 Wikq9LvPPH65O0jDPAfb3loYIQcYIVOXpCrn0y4hSnyjYd+X6TrC7rd9H0SBAtOHE8d2o6WfEwSLG eVN92xtA==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkaq-00000001mg4-2oUl; Thu, 08 Jan 2026 07:38:04 +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: [PATCH v4 08/59] do_sys_truncate(): import pathname only once Date: Thu, 8 Jan 2026 07:37:12 +0000 Message-ID: <20260108073803.425343-9-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 05:28:56 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 12EF9279DCA; Thu, 8 Jan 2026 07:36: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=1767857812; cv=none; b=lx+XPX1CE9oq0bPs7KBQ5WgcVWBBdd1twUyt6FLZnciCSpEj3s9Ejdzu03FD3bwV+2ftV2I6r60NC4Na3pb4kQ00YJcIsLwXZnXOxq20p8ljH43wxqIWCCwZW94415YW22KNnzbgtllRbk674zM+yVSFdRTYYtSzPtcQjkhMbQs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857812; c=relaxed/simple; bh=ejixYtbS5/J13hPkZAA0xbfFwhUsT8keMfQ9xW+VTHo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=BhxHVAdJOx8PYEdFDBbD4iyQWOWmAOMouxyDTzqKLg27bPNRGfc77VOtm9kJxtdYeT9DR9hQNC5Aiw+IT5K400ajNMMEAfW1Cb7q0HbbRdLPKTty73ABJDlWJRcyosZaKuPstuuveqAwjUFKl69LThmkoc/43PPBDhH8sqzUTAw= 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=FPtryimB; 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="FPtryimB" 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=FPtryimBaf6ySEDTxOFGy86kmg 1h38DhzSwKQ+WfieGiYP39gOPmG8S/XiE10y/FRWWXlRdT5bMr19iNHBIgwztW5FtHU90VaRHhPYc DS0qWEHOOILNyorCBfrSBp6ODa5JYUt3GNvpwdWwoGpGvgd/X/tDy5XZkDizIOFW4GzH0DRi0jO5S vgrZjtGi4vw3bWGqK8kQYKUz57JrGeuQcdr2Rx2JPNHknKqD92j/JW+6qPS3Ugx0H9536I3VuZDOa r1KMJxmr9zAuFAvWC+0nb02OiaPlfldb/6aqNuaQRCK8E36SXQJoTtpe3ilBPL4jLx7/TKncG/zwl J0gGwyzA==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkaq-00000001mgF-3aRf; Thu, 08 Jan 2026 07:38:04 +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: [PATCH v4 09/59] do_readlinkat(): import pathname only once Date: Thu, 8 Jan 2026 07:37:13 +0000 Message-ID: <20260108073803.425343-10-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 05:28:56 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 471A9318B9B; Thu, 8 Jan 2026 07:36: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=1767857813; cv=none; b=Ig8L7vJn3a0YXYUnexmor66F1cKJRZv3dGB2ymBpaM2ba2hlSGowjHxond8JEd26kzJFRfo5vXWSHQ4Vd0RXw+t3uPILzqPbyP5w2ErbZkH4ZFccZa+Kd65SPMukrB05v2HK9eeyTGGwIKJsVnuBbi/W/z8DyEU7dMPxUE+kRQ0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857813; c=relaxed/simple; bh=TP4bXazyeAFWsY9bPJQfnwJ5eTqrvE4ywPovrdBMTTY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=UDQfFJo97R+3GDlb/0XuJOC0o4dQAfp8KIS6dew5YbtUklhOx+lgaEuHDPGkZ6M/T5QNrdDkH6vT7tWN3Ijj7+c7RHBbQgUU/l7rDcsq2KYgbVJSdV7PJF2QvxnCM8JO4mwVrx9yfG2X+zladOishLMqyI+QorO4HGbKdBlhRtc= 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=wPOxKUNs; 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="wPOxKUNs" 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=hhgbpYrJGOmEX7WzIV0zHzETCPqUVX3gsZjmkgHxe7s=; b=wPOxKUNsg/Iv9GX7Fv53XRvBS7 QazPfuJUyhVmLDv/Ig9pi9yezQq/WNfTL1O5xYUg8tTZxHXpjMtUaRvO9pijIEWmZVOgmp/IW7akD DcApm5U/GTodxlKxs4HJ69+CNRaD6IYD0fY7Hzf/6JvGQquMNanWtA4DD3MiLdqD0T+KBBqAD8dEZ pe9K2IZ0ZToWuyCqyTHTiB4fGuatIIfIVLfiscKmROVhQncT2tgR7CSViwywpCcXhgrD6oRiFBuAg Zh4d0y7Xx7nE8W+T3HdNVUUTTpo7vlS72W7HxolHYa9LtlAO4Ke4dCpViSTsDGecgKSkoGHT1ot83 GiTWAhwg==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkaq-00000001mgT-44EP; Thu, 08 Jan 2026 07:38:04 +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: [PATCH v4 10/59] get rid of audit_reusename() Date: Thu, 8 Jan 2026 07:37:14 +0000 Message-ID: <20260108073803.425343-11-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 f5c9cf28c4dc..2244c54d3bfa 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 05:28:56 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 5E5DE318BAB; Thu, 8 Jan 2026 07:36: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=1767857811; cv=none; b=FWF398sMjoKukhCdcXCyVhax6fk88sbZwbw2/FoXe846DRegwmxk+QQXpZL4R4EJfHEjs41zj4BQ/yyksGRWKZTgtNhrPyYjBEhvlmIWVM+d6p9ucy3yCGKqjEPWXh9vd7kz58M48BlPC1Zy7yh7IpQPTzNo75EOoWF3lP8kY2Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857811; c=relaxed/simple; bh=IzrgXOT9z6vkgtrPDIdf13q7qyMmn+4ybA/ta0J+TBo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=hDoJoaS4BjVcQzS2IOE5JF2RYHo5aoqAhgtBsTGuciRNUysqh0Rj9O0thbNeIdZN3LA+9e/DAfbYOBkGeq6ahC9/ZLHeiNDCKqSSmqeFQTAGRUn5C0oRPvm8P9lZz0LDbAVdpxkdLCky4PFl0CXInmh2YA41sIhECf0ur1SuTh0= 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=A+BMRwqt; 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="A+BMRwqt" 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=qlZnLmrphR+14Jm/ap5jKQC7QyDfASXXE6J1NbaMqlo=; b=A+BMRwqtnlJ73cmnN9eNs7RJ0o AysIJ6pu/KcP3Hwl2pIUrHE4OaAdIoky/uO5JFZks18Zlgt9uXmEMyXNPwQp0167nKjF80z6g2SvD XwLeaYoAQkUXpjZhpEZ3n4ECsG66QHqzq2ePwQ2ogJtzvDz+tj/rs3vTa91EBT6zm1HAuSxqzE1zi 31WRWJAcPqkFKqfXDzYRKM1QC+dFKjmzILgv1MxYhlN6xKC2ICv4pABUgMJzwy4UaOiSXA8ckIgb9 0XBwDVImyYdH60TqIrJLnmuh9ReqJGuNaXGNHRbzsWQVsQ+TTeAadpOdFZFKy6DmgUIJpk219jIuj aeUm+mTA==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkar-00000001mgf-0JAP; Thu, 08 Jan 2026 07:38:05 +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: [PATCH v4 11/59] ntfs: ->d_compare() must not block Date: Thu, 8 Jan 2026 07:37:15 +0000 Message-ID: <20260108073803.425343-12-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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/dir.c | 5 ++--- fs/ntfs3/fsntfs.c | 4 ++-- fs/ntfs3/inode.c | 13 ++++++------- fs/ntfs3/namei.c | 17 ++++++++--------- fs/ntfs3/xattr.c | 5 ++--- 5 files changed, 20 insertions(+), 24 deletions(-) diff --git a/fs/ntfs3/dir.c b/fs/ntfs3/dir.c index b98e95d6b4d9..cf038d713f50 100644 --- a/fs/ntfs3/dir.c +++ b/fs/ntfs3/dir.c @@ -423,8 +423,7 @@ static int ntfs_readdir(struct file *file, struct dir_c= ontext *ctx) if (!dir_emit_dots(file, ctx)) return 0; =20 - /* Allocate PATH_MAX bytes. */ - name =3D __getname(); + name =3D kmalloc(PATH_MAX, GFP_KERNEL); if (!name) return -ENOMEM; =20 @@ -502,7 +501,7 @@ static int ntfs_readdir(struct file *file, struct dir_c= ontext *ctx) =20 out: =20 - __putname(name); + kfree(name); put_indx_node(node); =20 if (err =3D=3D 1) { diff --git a/fs/ntfs3/fsntfs.c b/fs/ntfs3/fsntfs.c index 5f138f715835..bd67ba7b5015 100644 --- a/fs/ntfs3/fsntfs.c +++ b/fs/ntfs3/fsntfs.c @@ -2627,7 +2627,7 @@ int ntfs_set_label(struct ntfs_sb_info *sbi, u8 *labe= l, int len) u32 uni_bytes; struct ntfs_inode *ni =3D sbi->volume.ni; /* Allocate PATH_MAX bytes. */ - struct cpu_str *uni =3D __getname(); + struct cpu_str *uni =3D kmalloc(PATH_MAX, GFP_KERNEL); =20 if (!uni) return -ENOMEM; @@ -2671,6 +2671,6 @@ int ntfs_set_label(struct ntfs_sb_info *sbi, u8 *labe= l, int len) err =3D _ni_write_inode(&ni->vfs_inode, 0); =20 out: - __putname(uni); + kfree(uni); return err; } diff --git a/fs/ntfs3/inode.c b/fs/ntfs3/inode.c index 0a9ac5efeb67..edfb973e4e82 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; @@ -1702,7 +1702,7 @@ int ntfs_create_inode(struct mnt_idmap *idmap, struct= inode *dir, ntfs_mark_rec_free(sbi, ino, false); =20 out2: - __putname(new_de); + kfree(new_de); kfree(rp); =20 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 @@ -1737,7 +1737,7 @@ int ntfs_link_inode(struct inode *inode, struct dentr= y *dentry) =20 err =3D ni_add_name(ntfs_i(d_inode(dentry->d_parent)), ni, de); out: - __putname(de); + kfree(de); return err; } =20 @@ -1760,8 +1760,7 @@ int ntfs_unlink_inode(struct inode *dir, const struct= dentry *dentry) if (ntfs_is_meta_file(sbi, ni->mi.rno)) 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 @@ -1797,7 +1796,7 @@ int ntfs_unlink_inode(struct inode *dir, const struct= dentry *dentry) =20 out: ni_unlock(ni); - __putname(de); + kfree(de); return err; } =20 diff --git a/fs/ntfs3/namei.c b/fs/ntfs3/namei.c index 3b24ca02de61..b2af8f695e60 100644 --- a/fs/ntfs3/namei.c +++ b/fs/ntfs3/namei.c @@ -68,7 +68,7 @@ static struct dentry *ntfs_lookup(struct inode *dir, stru= ct dentry *dentry, u32 flags) { struct ntfs_inode *ni =3D ntfs_i(dir); - struct cpu_str *uni =3D __getname(); + struct cpu_str *uni =3D kmalloc(PATH_MAX, GFP_KERNEL); struct inode *inode; int err; =20 @@ -85,7 +85,7 @@ static struct dentry *ntfs_lookup(struct inode *dir, stru= ct dentry *dentry, inode =3D dir_search_u(dir, uni, NULL); ni_unlock(ni); } - __putname(uni); + kfree(uni); } =20 /* @@ -303,8 +303,7 @@ static int ntfs_rename(struct mnt_idmap *idmap, struct = inode *dir, return err; } =20 - /* Allocate PATH_MAX bytes. */ - de =3D __getname(); + de =3D kmalloc(PATH_MAX, GFP_KERNEL); if (!de) return -ENOMEM; =20 @@ -349,7 +348,7 @@ static int ntfs_rename(struct mnt_idmap *idmap, struct = inode *dir, ni_unlock(ni); ni_unlock(dir_ni); out: - __putname(de); + kfree(de); return err; } =20 @@ -407,7 +406,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 +428,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 +467,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 +497,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 diff --git a/fs/ntfs3/xattr.c b/fs/ntfs3/xattr.c index c93df55e98d0..f3bb2c41c000 100644 --- a/fs/ntfs3/xattr.c +++ b/fs/ntfs3/xattr.c @@ -556,8 +556,7 @@ struct posix_acl *ntfs_get_acl(struct mnt_idmap *idmap,= struct dentry *dentry, if (unlikely(is_bad_ni(ni))) return ERR_PTR(-EINVAL); =20 - /* Allocate PATH_MAX bytes. */ - buf =3D __getname(); + buf =3D kmalloc(PATH_MAX, GFP_KERNEL); if (!buf) return ERR_PTR(-ENOMEM); =20 @@ -588,7 +587,7 @@ struct posix_acl *ntfs_get_acl(struct mnt_idmap *idmap,= struct dentry *dentry, if (!IS_ERR(acl)) set_cached_acl(inode, type, acl); =20 - __putname(buf); + kfree(buf); =20 return acl; } --=20 2.47.3 From nobody Sun Feb 8 05:28:56 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 6D6BB318BBE; Thu, 8 Jan 2026 07:36: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=1767857812; cv=none; b=J887rAqJOpTu0sTKXrXuRJU3/sJkl5Te4S4F7Nx8gy69m35zF31UkxmfQwYGK5lPxUcojMLiw2PZwkgRSMlqmf8SMFVPOJp2HSJY+mWTdblME24G8s0W9zC+2Vz5Lnz5EJkpMwH96Lzj6KZ+ksv0qClVQV4y/Y1zeEtpZZ2QbVs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857812; c=relaxed/simple; bh=S4VYrqztxn3qx2+ce8nOumRfGqsXr/vKT8X35BxAw9s=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=l+0ofh3HvQeDqQgiAIv1qi2JfHKHdjR4RH5EFJEvNcjS68kM6L2+gOjxIczcqBCTBGWKDhbTC4DEBrNEeV3LJaVNPrIKcoi4FPbpaWg9eauwAsAdWKulstgOi2wagvpzseddZAVk1/Gr/Rh/C2mnMqTyUP0QA+CVsRMeqc1qQ0c= 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=A2V/0dSN; 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="A2V/0dSN" 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=A2V/0dSNFuEtNFTPwFXk+8UjfF UEpt6xoZd7ht7T6wuEST8L6/F+15dbriC3v1USrJb5p73F1SdmY3cLaN/gJgtXSvX1QZe4p7Lso6Z 3BJAC9LQV+tsqaH6/0hhZ7Bcrh3HRumPR8nYcH9kzkTIKjsSA7ShsEXpDpBDu+PBeS1VX8P3uLnrJ XxjMFLvMb2Vu8gh8EVr/heZDPGzHLDEfD4BEWgWk9iOIN8RBUNApBbgFHpGlDlfFxx9SA8XgY+7nd f/+6y1112boG9KhjobHj/TY1oTm7+1sVYHCXrbPzty3o/Y0/+jsCPGz3+yqXKPd0Bl3LIlJt4or/X PXaA+XJQ==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkar-00000001mgt-0pML; Thu, 08 Jan 2026 07:38:05 +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: [PATCH v4 12/59] getname_flags() massage, part 1 Date: Thu, 8 Jan 2026 07:37:16 +0000 Message-ID: <20260108073803.425343-13-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 05:28:56 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 841B531ED76; Thu, 8 Jan 2026 07:36: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=1767857818; cv=none; b=nnbYS/8hS09UFNlVppNec8xn8ArpH8zI8wRbGKcIRbgSDPcVYKYIlxEA7N1mak07pIdkngmG9mNoq5u7D9IDnexmQk0QoyUPjYbtMpGKJlssDAvOrheghZLA0Qlbm1K4AFGzJagH6dHQ7lYwYEYQt1wedbFhrw0KTv8KctGAnWs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857818; c=relaxed/simple; bh=QmdvDh6ZC+vTUW7I+/3NR1ZSyfxcvYqlL1sBR3JZVe0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=FIt3LajDFVgMDAVSlu/eZGaSCu3ooN/WE8g/AHco7o3ZqdIkeHfxnSt6qeOvlDLTF6Io6ZkyyTfNM/Aw5mCzjRUE8VgxqedsALROlA6CNsnCOfX091/bROGQKfAJEsRk6wijLWrRbUhNI58G/1zCrC8z+690V5ymM37EdRXWFJ8= 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=rNbEzKHo; 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="rNbEzKHo" 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=rNbEzKHoED2LBnJuMjeY59GeIC gWoLatI0Wox7thSh7HQKaelv45HzjzSnWcyQJ5bXBv9l63I33jV8xpQmrXH1GzS6vmnUzqxAA7NQ1 4eCjN8m5DARYlhw/9P/cuhv+0GNNdmqnbhAxoQGcEsUyj/8jFPodZ9TJmmMAbjhaHSfuDcctmALOW C9RuNxNbKNNPl0ygTJR94D2Kx4dsh7Ra/oczoNtpUic15oOC2SN7wE/EnFAe/4oqs83frWoIAoYau VOaeEMSZFlimKLTA26Y618Z9rRAt70bzWc8JGCJb7BGi0/ipt/fcOqW+JKY3upyJqLkrCg7YwDOV+ J0DHUWJw==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkar-00000001mhV-2H4I; Thu, 08 Jan 2026 07:38:05 +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: [PATCH v4 13/59] getname_flags() massage, part 2 Date: Thu, 8 Jan 2026 07:37:17 +0000 Message-ID: <20260108073803.425343-14-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 05:28:56 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 95AF6322C73; Thu, 8 Jan 2026 07:36: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=1767857814; cv=none; b=uN74emOq4n6VZmGF8chkXuXUNHqK/TlNGyj2dmiPl7JjGsRFUqOhI934VP778MO/C0RC3OBb0LRWzJu23pVxTlrlzzyhLYfViiThMyau+fFsq31dvpu6h/T7ZPi4D120OoLngqpYCFgK9rBAaZlPCUDDqewOTsAffv+XN6Yp46I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857814; c=relaxed/simple; bh=F9Ac51sayJ3ZUx8voNJfIEbzwWMQM6cAMJSzRwkhDxA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=UznGott4TnqjXhJPzcrGsZ4KEKKi+Wj460VOvfXg+uiYulW/mzh7V6LMthRgvgIzvwv950ieS9jD0oDmTiUSCDqOc/+B4ou7pHgqdqH0vADlEUxhr2clPyCbe8M1cFn5QclWzDtV1lLDmSN1OqwCU7Ri39WliR94g6IyZgTtvrI= 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=r1/6tcBq; 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="r1/6tcBq" 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=4+7lHyvfxwviiKYkc+HLIxJ+YC5af7rIWX4pEtm/rr4=; b=r1/6tcBqrDyiHKEarhjjQZLaw4 KagvvqyybGRa8WBROKoCjJ6PSI7DO5kBs0GmZqPtAfrk8lsjCU9jyhQ0i6CP+VF671e1PQy6YiwOH hNv1I8Nxq3r7XVuYKRx10MPqnleUJbTLatnZpZgjTJrsYLq4gUS35/mSJmLVmIs45Lrzg/Z5Hn+Yj eKZOwAzf9ZJ98ZdHpQJbegBLxqMrPDnlUymMJlt9nMwlvT2vLleOZXEy5phpN8+BmJYTE542X2deh +3x8ugdhajaRkOk0ZibW3QPaPnqxQ1d7m+Sayz9/7lgciG4epl/uxUshlMs8Dyl2n4N/i9DW2dXUn 6pE2Ftlw==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkas-00000001mim-1YK7; Thu, 08 Jan 2026 07:38:06 +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: [PATCH v4 14/59] struct filename: use names_cachep only for getname() and friends Date: Thu, 8 Jan 2026 07:37:18 +0000 Message-ID: <20260108073803.425343-15-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 2244c54d3bfa..e906f157905c 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 05:28:56 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 3408D32694A; Thu, 8 Jan 2026 07:36: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=1767857818; cv=none; b=ciRvZ1zuonmWaVCP7f2w3k8nNepaLVsfTCvO9GRMbg3aDsAvmHkbDLhI4bRBQyVrVrQUM7pUyUBPq8wBLdLuJlEpQ3LdCEylzGDqlIcEhY3ltkMOvCjQb9MiRnFN2/muivJMTjzebMyqXhcKRbxhdmMiPVocicWGhrKHLtC4258= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857818; c=relaxed/simple; bh=wuiiTj2gHGbhqKFHp0+2ykKm5YAOGcMAqs2NXJoAroA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=jHsRTw5IsdCAbQ84gMZ7VlO6IS0n72xuBsvjCzNMoF+hzyqsJjbCyj6GNN8/zHpzmc6rPx3lYvrGi7yFZ3MNFBhCtdkWaATs5wuHGHvNHc/sK3S9pBuBMPS5IBi8dHUtL9bs/I4vZ5Kdf9PAQ1hJZu4rblPtpIwWv8uYp3ShxLc= 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=gF57Iqs/; 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="gF57Iqs/" 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=ba/co7KFgEinr4WiBkpTr42dNi6tPXfJUwGTV27Gjfk=; b=gF57Iqs/gZloDf8ToDSHKs//lf G1WoOSaE62kzEYxnJxOv4QXerwPxyU3vq5Ks+hjPE/r1J+egDWHMZAK+BAX5YnExZXyyTKcZ2Pk0w wgTCsr7oyvAQnMKRsj1o0fyb+z5ZMVPJ6Z5Vl9Ayit+4bhyIJaallqznDAqx4YBJfmsk5eY+UsDG6 QUPCFvCMG6eOrQysGjYCQdAfWprMB90f0Lnu+YE4//CGAoORDppL8N8wls8T0pcdpMoiFr/WTw1AO ANFbptdupnAy+0IcO9Hou6Z97/c0ZjKHRYtY7EXcEDDQ0xOnjv6PKAU4dBUxyQ04XEjx5bvsS+OSm R7qDrdZA==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkas-00000001mj2-28p8; Thu, 08 Jan 2026 07:38:06 +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: [PATCH v4 15/59] struct filename: saner handling of long names Date: Thu, 8 Jan 2026 07:37:19 +0000 Message-ID: <20260108073803.425343-16-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 kmalloc'ed buffers (PATH_MAX-sized for import from userland, strlen() + 1 - for ones originating kernel-side, where we know the length beforehand). 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 e906f157905c..a74ffcbe8407 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 05:28:56 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 3DC833271E8; Thu, 8 Jan 2026 07:36: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=1767857816; cv=none; b=d5Aie5x49xB2BSic7KMft4XfztUUFkRsNryyWYw3rLMp4g7s6/OG9UufVsyXa11prOXlyuaHPXvSj2wHvE5f+vsHPXZV0pP3CKz/w/pGQN8GCThAyBAgCY9dKcrPNwd2dtcSYlO5Jw3EIflB6E0xwHW2ZBLeZfdXumLQHtCY/3g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857816; c=relaxed/simple; bh=qpbEh74C7X6CMdyErt/mFhuRxl7OR107Lve/D1Fg8nk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=qRTciJFXG5BnPi1mZ2y3ra8T9Gon1I/bLWb31SxBQsaYGMUBvJmAlEU8GQcZK6O//EnwB4ux7o+e/IkcMRMrcu0bt3atnjbycFb2qGceQBc4LO4IldQ4dyJfIyiuu0CxPLPVvVNPqAEjC1tu3N9SUS9wchlm/mYLKccKyeLo8aE= 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=SJBGHDfS; 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="SJBGHDfS" 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=SJBGHDfSF4NS3XhAPkd/oJgWXF ceLCcd5QPdxHJSBAw5PH50PsHI7OSVHjYBlFtTKRDOJ20CFyBNs8ajyxkHhaJ8HcOLDlwN5omhyEV sNZC3Pdtwu2mWIDSNA2uS8m/HKp33RPtNGEhFBztxn3NMrYYTJ/gbNGyt9+pFQzsfS2R3Tl9tg5Ah N32goI1AtgmtSFno2jt/6uEtwcyGbalVN94ZnlZ81Xi9lZ5Zl3a9Prt5on0jc7Elj3lm/b4sUx7JZ HvAymCKRh4NWOHbAZ5cgZS3tvarc7tXl7AbGa/nsASGRydJLVnh1Vf2Vs2kWufJ96UbuIiWSsTjD4 wgPHYLuw==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkas-00000001mjA-2rCj; Thu, 08 Jan 2026 07:38:06 +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: [PATCH v4 16/59] fs: hide names_cache behind runtime const machinery Date: Thu, 8 Jan 2026 07:37:20 +0000 Message-ID: <20260108073803.425343-17-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 05:28:56 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 3B7ED326958; Thu, 8 Jan 2026 07:36: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=1767857815; cv=none; b=IIydXKF1FnNhtPo0nxwmc155GjWveExMhtC/Te50yWemflBYhMTsfX2TgRFj7lM9aqZn3M5fBRmBGZAiMxnQAm5KImUjSMaBRTE3405bwfNkoyJFMqgLorvPnNixaW4DzNTnzdmiYNb1oub+k3qTMk8oUza1YP2vDU6LlYW6bu8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857815; c=relaxed/simple; bh=itjYXpQKRnftlsHN61BFl0sIC9dUJc8OiluxzowKzEk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=JinGM7qfY5ne8vBBJ2VKWS7wp0WaOnX6PLQUfVYGmNgrPi0EPlllXMdTBfUjs3DLnhsDGqayuLGQAs2TNWzzzLo2+EEY8QRJYfc+DuVDslVSuSN+hPycMrc6HRlDhCgJDzlPBa8F63UvgJin/9RY7bxpt+MOBXD3OP7QE7ZVREw= 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=IXMdZquV; 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="IXMdZquV" 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=aD3+Ie3SLvtsh9GPL3oeza5QcNbuEOf1fbgUgR9ntDA=; b=IXMdZquVE8CjudwsS86xBdfV/y lSQEUYP+zRZjc0c600/JlxVCBsWK6kHE+vW95NyFBpkUTMFOCY3UvD1G/b+dN4x6rznfELzoa4aSE LnEwkhsRyD9ij3iPPv/OVdMPhjNvl+JfCL86aEHuIqFQ6XV+Ur3gss/GysrgVLctsN0/JZ1guc7Wu moSeOPCnRYxwoZbOhn6BTQdepx/q+amqH8gcKkOjsvZ2NhuM9EVklw6WfrovM7LJAwMmiuSzwq3yS y1CYZ+Kb9eHAtaLNC+/QFA4kguFKr78LzsmTsqb0XW4ia/cq0GlxKazbUxFXCU0SfOe7WVAl1CYSr 4rGnRSZg==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkas-00000001mjd-3vGm; Thu, 08 Jan 2026 07:38:06 +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: [PATCH v4 17/59] allow to use CLASS() for struct filename * Date: Thu, 8 Jan 2026 07:37:21 +0000 Message-ID: <20260108073803.425343-18-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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_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 | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/include/linux/fs.h b/include/linux/fs.h index a74ffcbe8407..ed16644545db 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -2522,6 +2522,13 @@ static inline struct filename *refname(struct filena= me *name) return name; } =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) + 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 05:28:56 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 7D0F932573B; Thu, 8 Jan 2026 07:36:52 +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=1767857816; cv=none; b=l0uPjw9QvELFdwJB2PqHCJhGQYzo1RGIK6UFkQYGEHRBmo3CNrEOYHryOzbzJzkuGSyEjtr7Go/YWgN7hJ7HLTcORclZthw2ds1F+U7SN5+q5SR9BCS4iRSrHd65NyEPRMBHQ7jA4S02pSl0TnJNaEQbI5KvnbiolyabTvBwweo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857816; c=relaxed/simple; bh=2QgRPPysk3RFE9BKSvg2KLBE3NHzd6S7kLOldkJLQu0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=MiYL77MGzjVAbRPqCnZ/6U5hkn1B3tdtx77D75TXGbHuOWNtRIadCMj9LVKcUXGR2bBKtDCHsj7evA4P5li9XUJ3P0pCBErjZbXBYzbaSTVYhiJUPr3uNOjYQaG2p4j6NFf4r4vHKqUuMY6giUzcL4XBxPmudMkk+HRDr9r45FU= 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=PJ4zFOZ6; 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="PJ4zFOZ6" 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=9NAUwU7USYo2v7JCqOEDK9HM4Z+5fSI5wGIxSuEZ5WQ=; b=PJ4zFOZ6bzP7rB/8AyAMDY2YVb pozGc4gjIsicswE8xC9YSXl5yuFdOgbRYVmMrzpkhaewR3Y8SXD3jV/7mKvllyNIlCbwh8n5/BMBV 1X9hGlfwFebURUTFxhAqquh6HYbWG0WTRIGCL8+kyrEtTly8BCEh/zDtxMEJlxCwr8tqQZ0RZH7Sb TvMGwkRsX/aPOD3E+JIagGqsco9w+PxS+9CkHt+P1ak/02Y60byTya7ahphuUPt8jM5avjSWhPKug AUt35CxY/q8GktnndfAz15NQb7T6FGIbqE43Jpax7uZM+mdCWFd6BfeZWdHI05iSvVJVySJba4h3x PGiDBH0A==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkat-00000001mjz-0lym; Thu, 08 Jan 2026 07:38:07 +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: [PATCH v4 18/59] switch __getname_maybe_null() to CLASS(filename_flags) Date: Thu, 8 Jan 2026 07:37:22 +0000 Message-ID: <20260108073803.425343-19-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/fs/namei.c b/fs/namei.c index 15e14802cabb..f8c11e1a6b11 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -227,7 +227,6 @@ struct filename *getname_uflags(const char __user *file= name, int uflags) =20 struct filename *__getname_maybe_null(const char __user *pathname) { - struct filename *name; char c; =20 /* try to save on allocations; loss on um, though */ @@ -236,12 +235,11 @@ struct filename *__getname_maybe_null(const char __us= er *pathname) if (!c) return NULL; =20 - name =3D getname_flags(pathname, LOOKUP_EMPTY); - if (!IS_ERR(name) && !(name->name[0])) { - putname(name); - name =3D NULL; - } - return name; + CLASS(filename_flags, name)(pathname, LOOKUP_EMPTY); + /* empty pathname translates to NULL */ + if (!IS_ERR(name) && !(name->name[0])) + return NULL; + return no_free_ptr(name); } =20 struct filename *getname_kernel(const char * filename) --=20 2.47.3 From nobody Sun Feb 8 05:28:56 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 55871328B60; Thu, 8 Jan 2026 07:36:52 +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=1767857817; cv=none; b=ffvg0/m30jppZYTsEp96ML7n/aIjw/4GfNV8MmvB3Lri8jCJfy0ZmDdT7toC++i33GDd4iCqqPP7RXwIzHvlBf0XQG6YHVYd1p5yFlRvtZFX8e67pgXkT5BXEO5epznj2TlqjlYLxadDvqVQTZ+1dN0UzoTxvrdqse1PIhX/kRk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857817; c=relaxed/simple; bh=wUdgNkgbzp6xNdNiH2Wto559CitbMgwtZbg7d6IGxy4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=HtmCiI2Z2XvOBX9AdIgzRxJ6xok/GbZSKsT+H4SEFTxhQC0LLG0aGoIho9vI34Utvf1nP9JIGaqAfrCtlAx7dXRIfvbpexL+I+5lCVSFI/TfubFERzMKSCfTY1QN/K8ybjdn7PZVcD98NOww/U7n9NlHvd1O1x5krp5BzPpYLZY= 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=E6amZQRB; 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="E6amZQRB" 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=BBN16evo5+CcKrzP1nX3FvJRMpycCjS3WKDke8Iq3Dc=; b=E6amZQRBi1Y1tM8jB0C2R/O1Ys 4wuvYWwiG1bjnOioNPW2mPpuAfaNDsR3SdT/NvsMCoKWbImhnCdyLmlHhVINkoA5ko4u/dQXTXqQy 2PiUxF+tak1Emq1GwqWffcfleTGUpcQSIu1meYhwPMZYkx0LJHKvDWgpk9v1Gflb7mb7Xerkb+OGp K+QU/Wd+UjsLvx+fjVon1iwPWrXL0Lqi2JJk44MjZvkb6Pl9XQcTBQw23HAl2Q9nIhZ7nGgPyX/bi DLDNrqGfWhFDYARSlzTXvNgMnpsGlf75wqju79puzDmPfNSfv6pOH/bLV5TS4VACJBPwbBTCg88kC mhlWMBUw==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkat-00000001mkA-1V9s; Thu, 08 Jan 2026 07:38:07 +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: [PATCH v4 19/59] allow incomplete imports of filenames Date: Thu, 8 Jan 2026 07:37:23 +0000 Message-ID: <20260108073803.425343-20-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 stashed in delayed_filename and returns struct filename to caller, emptying delayed_filename. CLASS(filename_complete_delayed, name)(&delayed_filename) - variant of CLASS(filename) with complete_getname() for constructor. dismiss_delayed_filename(&delayed_filename) - destructor; drops whatever might be stashed in delayed_filename, 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 | 66 +++++++++++++++++++++++++--- include/linux/fs.h | 12 +++++ 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 f8c11e1a6b11..4de9697bfbee 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; @@ -242,7 +249,7 @@ struct filename *__getname_maybe_null(const char __user= *pathname) return no_free_ptr(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; @@ -267,9 +274,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) @@ -294,6 +307,49 @@ 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) +{ + if (likely(atomic_read(&name->refcnt) =3D=3D 1)) { + v->__incomplete_filename =3D name; + return 0; + } + v->__incomplete_filename =3D do_getname_kernel(name->name, true); + putname(name); + 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 ed16644545db..9fe91db9c053 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); @@ -2528,6 +2539,7 @@ EXTEND_CLASS(filename, _flags, getname_flags(p, f), c= onst char __user *p, unsign 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) =20 extern int finish_open(struct file *file, struct dentry *dentry, int (*open)(struct inode *, struct file *)); 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 15dde9bd6ff6..aa3acb06247f 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; - } req->flags |=3D REQ_F_NEED_CLEANUP; =20 open->file_slot =3D READ_ONCE(sqe->file_index); @@ -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; + CLASS(filename_complete_delayed, name)(&open->filename); 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..7bcae4a6c4a3 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); + CLASS(filename_complete_delayed, name)(&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 05:28:56 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 E3E53329373; Thu, 8 Jan 2026 07:36:52 +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=1767857817; cv=none; b=WKWBUJUQ4IdU5LDMpy9ssosYO9udBE2ozM84hrefk+ydpC67goCVs3EEG8b/H/z9CE0vNx6GPrmI7If90+gd/4lq5uyavQwWTwIvJnJa9ChSc6WhkBti3cJXBnOmC+vj6uTVTp3q0ER9wj/75tiuRy/2VMHl2pLsEHoM6glAJV8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857817; c=relaxed/simple; bh=LCPa6AlgG23FvtWfrcMyRr7CiG/dZNLzjUcN90F5Liw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=jHNIzPWBgC61OwfqpUlWO6+yjWawQjmMuno9BUj+n7bnB8rBNqp9TNveEqaDgUFRhAyI7PlQAwMPQ12Kzgo7g3jjOn6bTpuVjjkIqfobXJtc0fg42DDHFaak3tZkBwxM2cuQ6+G4GlbTCBGZDx73X0diZ03X+GN0Q0TdW5yCMFM= 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=nerlYMSQ; 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="nerlYMSQ" 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=LcWiOTSlwXumgo7zmkdTY0JfE+7QCpe/Zf4NxR/r0b4=; b=nerlYMSQ9FXW542YSkrdRW7A4I KCwDiVw3KzcbXtoP0PXwCfRMWmT30aZQrKnG04YLw5T840jPYLOhEU7mhWFfRfvZdicy1ievS+f7h Bp2DYvgKVqETUT29/0AlJ0GUsh1Jiqe1zFRvJzeJQY0dfM/4EvOk7AMrSQMrHWPWgilGk9ywn0+MH tiHuqds2Rxd1jwNvWbE2cwkvEniHt7LbHE9NQMB2ftQ0a1SSKgbGjyIAEXWt6+xSW/l0jUH0LZBMB 4GgJpcOkz5SzGtVWYuydWb5m8ow4WKuW3VLuP/O7nfRDHMDKXL4sDenpD8/O612PBAmswZeFklcvn YB4vtE4Q==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkat-00000001mkX-2XWX; Thu, 08 Jan 2026 07:38:07 +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: [PATCH v4 20/59] struct filename ->refcnt doesn't need to be atomic Date: Thu, 8 Jan 2026 07:37:24 +0000 Message-ID: <20260108073803.425343-21-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 | 12 ++++++------ include/linux/fs.h | 8 +------- kernel/auditsc.c | 6 +++--- 3 files changed, 10 insertions(+), 16 deletions(-) diff --git a/fs/namei.c b/fs/namei.c index 4de9697bfbee..8f26e91de906 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) @@ -292,13 +292,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)) @@ -328,12 +328,12 @@ int delayed_getname_uflags(struct delayed_filename *v= , const char __user *string =20 int putname_to_delayed(struct delayed_filename *v, struct filename *name) { - if (likely(atomic_read(&name->refcnt) =3D=3D 1)) { + if (likely(name->refcnt =3D=3D 1)) { v->__incomplete_filename =3D name; return 0; } + name->refcnt--; v->__incomplete_filename =3D do_getname_kernel(name->name, true); - putname(name); return PTR_ERR_OR_ZERO(v->__incomplete_filename); } =20 diff --git a/include/linux/fs.h b/include/linux/fs.h index 9fe91db9c053..6aaaf57e90d8 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; -} - 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) diff --git a/kernel/auditsc.c b/kernel/auditsc.c index 67d8da927381..86a44b162a87 100644 --- a/kernel/auditsc.c +++ b/kernel/auditsc.c @@ -2191,7 +2191,7 @@ void __audit_getname(struct filename *name) n->name =3D name; n->name_len =3D AUDIT_NAME_FULL; name->aname =3D n; - refname(name); + name->refcnt++; } =20 static inline int audit_copy_fcaps(struct audit_names *name, @@ -2323,7 +2323,7 @@ void __audit_inode(struct filename *name, const struc= t dentry *dentry, return; if (name) { n->name =3D name; - refname(name); + name->refcnt++; } =20 out: @@ -2445,7 +2445,7 @@ void __audit_inode_child(struct inode *parent, if (found_parent) { found_child->name =3D found_parent->name; found_child->name_len =3D AUDIT_NAME_FULL; - refname(found_child->name); + found_child->name->refcnt++; } } =20 --=20 2.47.3 From nobody Sun Feb 8 05:28:56 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 E3F33329377; Thu, 8 Jan 2026 07:36:52 +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=1767857815; cv=none; b=Vw4m8+KXRXABy2lhBsL8JaPxmnnjFVsW35y8iKzPSK6/QJG8oB4kuz/xqousgf+QgHXNz9jxsxfA8YjmF/4AiXr+3QIpsGBnJDx7TOWSFTQYH0YpZfTAucZt/41hpjyBlLGKh/a0tgVnKk8dm85l2KshFfhkmddKSRS5gixJF74= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857815; c=relaxed/simple; bh=Ht40MPYaxaAZbJgv0XEOHa5Itq6XzQoGLnJtmfQSU6Q=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=E3ndx2GhvX8yHaldugN3jg43z69AfuEU34KNnsV1rvhJwMhFPlUCXp3+qpC5n3sRkGs3tAdwHTz1BPsZAuV6IQRksEZUNjjf+PLIfurm1+AKIGSYbR6lIJSwi4zcbrbF5gQUEd1nVL23FtwyTg1U5DRHMsrV5XYfDgKrQ00d3Ig= 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=RRIgk/ga; 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="RRIgk/ga" 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=ZDR9dpmV8LzFo0YU1af8ScCVNOIEjj2c+wxQMju+zIw=; b=RRIgk/gaBWheK51rZM0EICwpaV QJJTlo+rCNbX41biPaV/iE9fvyZVTyr2RjfBbwfFmv2LWTC//2Qf4yJKFfzAR0QSrCbriXk5zsvTP 5yAYWImCkO4HKGGpdM/0blp59lvUpiYNUeyCjI/dP0IRQ9Y0aqmBdSyOIm/iE8gkPGZ9YWsHieXRq xCGyDnYS8pDCyuo8MJnsUU9RPaNGvvQ/8KPg16B843Ve9hU7CmkpJXNhPwMSdYg9lWSm++XWpAsE8 kSqKGR1Rc0PdzqpZ+Pq6clplm97k/LUU2pxGsiEgizJZpKJmGbGbqQZDI6clOd/zhDEwcpETAQa4N 6xdIJRmg==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkat-00000001mkw-3L7J; Thu, 08 Jan 2026 07:38:07 +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: [PATCH v4 21/59] file_getattr(): filename_lookup() accepts ERR_PTR() as filename Date: Thu, 8 Jan 2026 07:37:25 +0000 Message-ID: <20260108073803.425343-22-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 13cdb31a3e94..ddd4939af7b6 100644 --- a/fs/file_attr.c +++ b/fs/file_attr.c @@ -396,9 +396,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 05:28:56 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 69C6F32A3C8; Thu, 8 Jan 2026 07:36:52 +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=1767857816; cv=none; b=Q4s66Nbpx3ySfwIS+xEcX+QaAEG/gX+m5hDCZUrAx+kKQzwjMXRMX6kYjj9plC98s55z+8FmdP1F08PFtR/4/p3DJmHuRv7av0ssKORa77ZLY2zx79wLs/0TLSkdDRHlvw8ATq9rr5d3XCnVrFJkUjR0wVfLeL1bvIcncnv4ZGU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857816; c=relaxed/simple; bh=K8lF1SNuEKoMNQbK7dKMuZOgDMZYFst5w1ON9+Iq/Jg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Ker3dgRdV1/wHhhneOhgJSGF+kSnFd54UcJnJE5zC0sVAbHMv5buv0vJtJ2lphXwRy4a3rFY7iUY+AQBqSrbJ4xfmi9tWzKlqKXz8f+5MbOzajTFvuDA4C5a9jRpjHQtva7Q8VxuLr9H1j1R6xSF6DBnn6WKeSSZsnghQVxEIvY= 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=Obdi9DZJ; 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="Obdi9DZJ" 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=6nZaYwIgSCv3EgxHBcGovvyRmlXqOp0P97wMYSPOq1M=; b=Obdi9DZJQ1U5/FHhkSIk9T95b9 S/JU54qUamee88XrJlo1EHyupiaVbiyS6VZ5Mqo58skYDNm9/vOLcRbGCZ6+WE1WuIpUmZcrL0+a/ EU3uPexNrPuqKb0W4XntQRd3ZC5Trz46jq+HYaMJjEN4I3L1sB8V2xUeQ/1FJVZlOTnDTSkKeP0Ga kfwkmx9cohb0w2XG6sM1+abFYu9ss7DMSJSKos9YR/56xGO3jDxV5YQey3H3zLfvdJK7YryarBdLs +SFtT2N4Y5O21H/+D1NiopE7Nr6Dde5IWHpUL3fcL5hSWYQzccuD68aqorgbLpaFXLxnX83FglUIc 8+kD1S1w==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkat-00000001ml8-3d6f; Thu, 08 Jan 2026 07:38:07 +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: [PATCH v4 22/59] file_setattr(): filename_lookup() accepts ERR_PTR() as filename Date: Thu, 8 Jan 2026 07:37:26 +0000 Message-ID: <20260108073803.425343-23-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 ddd4939af7b6..f44ce46e1411 100644 --- a/fs/file_attr.c +++ b/fs/file_attr.c @@ -459,9 +459,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 05:28:56 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 8B9F7331A5C; Thu, 8 Jan 2026 07:36:54 +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=1767857817; cv=none; b=SmSe2U9w7kkY524XaDwhdHgAkwe1anPWtZ4mn130pRPjOU3B98EnUB/VFznBT0eNNwEX4MJUbuRKW89/yRRV3IfvKKA1DP8rwV/+LFtmC/KjwuDjUMYm1OZWGeXa8axvhmLgwaZS8eKYErZKD8zS4To0sgaFb5hcAJq6NnUGMNQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857817; c=relaxed/simple; bh=C+2EcojQwnwv5U/vpMob42+W8dy1bNTjOKNG9HnaK5w=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=V/05iK/6zeqLgc5Zyh9WTAUlkPwlAYhEPrGee7HaPe8BcA+6zBJe1G1y1wwx05Lp155brNfyx3Re24+0eTjTVQVcHmO/owkZyyNGmxY+MhHBkynR7Ffy1XEW0Txth6Dc62zxUt4/ZfmJNZaWHczRQpkDwzQhrxSu8vwpHzYrInc= 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=CGJAzNUZ; 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="CGJAzNUZ" 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=CGJAzNUZZBDNrgo/UgOr47tLtL ufOQhyFihJuBumEzy9ahv4tECoRxPf0Yddp1swELK2tMEouBX6YTAJNGS/33y52uWxcVPv19rrFz7 Ry9JO6pdIRac64DHHrOVPabO4uXHs/oE6CuMzBnf3J1M0ubtr/zW+2Ik8L6Ce4nkEsXh4Vf8y8XoO NeuDCOnVphxzpUy4ffmyzzKVPJXY+qz/iGkKruw5mp3WKYVNR0i8GhWYEoPD5OlGNQC9DzhyMTvrq olNJYI9KqH4y3qbI5ZlRgGs/O4lD0SqSXMrNa9VBLebtaZpUSeGi8FSrFLM0lw21QyxDxe5JS9z5k 2+p2nE5g==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkat-00000001mlJ-4BVt; Thu, 08 Jan 2026 07:38:08 +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: [PATCH v4 23/59] move_mount(): filename_lookup() accepts ERR_PTR() as filename Date: Thu, 8 Jan 2026 07:37:27 +0000 Message-ID: <20260108073803.425343-24-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 05:28:56 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 45B99329E43; Thu, 8 Jan 2026 07:36:52 +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=1767857816; cv=none; b=SIe3ELAF7oIyQayTOKLhEi6Ib7HVm8iSHHJiguMg2zvKobls+x1QajHypPtjXtI+2i46O2tz3dx+oE+5SEKJ9VxaNB4jbm15g6lGGPcPrN90/QNPyzn0eFMnZ+9u6xUnv6oXJ3s6sMyXLR5EdE8dkxv/AkuT0hotVx2M29KfAFk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857816; c=relaxed/simple; bh=Ydled4U6L1X7V26SQt7n9puQ7dfK0LX63LBtB+WlC0I=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=R7Z+x77e4p1sfqcHS+niwp6nXNRl9B2M4TPqK3JK0n2jQXKhrwTMpF2aS4l+/JFI3+VomyzH75rIeRTPISJUHahqSr6i2w8+9eQJqU/bZtV4CxG7FIy1WyCIFmxUeCVKJc8m/M/u07CFBAR/11QyNoVlDjff0VxX74BhxyX+uyw= 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=Le6EBqcw; 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="Le6EBqcw" 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=sd2Rgca4jMZ7f1mAJaupLk+3fuY1coBUzS+dbbv0xtA=; b=Le6EBqcwHAfqnlwwJyguPos+y8 /St5BqWcms7r9VcHPM2BguyNzGSa03qRCOF1wO9fcSPZ/cn2c/Ph9egBk9LA7EyoZRoCjD9PMBEL8 9etIzFWOZ4As7QBDDFe+dqNA3ia6Z+9aM03gkr4a68HleKgPC0SNal418WhJ2WshcxyQqLjWkyMXm nNACqSzhAQkb9lPSpIZv88h4Wi3OmSOJS4lZaROZiePL44X7fEWvXaXM0TDsCfiMTvnxL1lOdIQZX yGEIPO8fOWAi8z1IKJM1vZAK0+zCBoDf/r7KmDtKpOaGpoK/gD4OHyrrRVCgW/nVaaD1vXkumb/HS +Js418qw==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkau-00000001mlY-0ZDb; Thu, 08 Jan 2026 07:38:08 +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: [PATCH v4 24/59] ksmbd_vfs_path_lookup(): vfs_path_parent_lookup() accepts ERR_PTR() as name Date: Thu, 8 Jan 2026 07:37:28 +0000 Message-ID: <20260108073803.425343-25-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 f891344bd76b..a97226116840 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 05:28:56 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 1ABED32AABC; Thu, 8 Jan 2026 07:36: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=1767857817; cv=none; b=C0reQJQVq7YUgo9xWdju5Qh2s6v1XQ0WrbmxGxBTjL8I8JV3Q2HZOwOutjfBkLKVgn+YD2uanxKGUt+UT6XC4OnUa3liXNFJNpZBpQL7w3gHNR2042XwVGfM61hW0E7DiND69NP/q50RQCYrcvNDYCsmEsYdrqB3cbMH/5IeYeU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857817; c=relaxed/simple; bh=rYNiXERMORELD3rtPdZULgbnCI+3YEmNF+Hwi5pTBHM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=pdUYXg2h90lZIsDDDlFzEfffduSl+JVQljbDHWY78wxsfM2Kg1B8BE1PWRH7wUoyjeOi74acjhmvoH6blpUJEce3HOqcln/mYRIdiu4cgzG/oErfQNd4FpgQEl+eSK4xE4VYo62R1tuyOBviDOiwr8g0edUSk5yL4KFJRHZDgYE= 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=Qag851np; 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="Qag851np" 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=O3vCMEIcJ6QDV68ynljSAAzPvL85FljOJrW2O7eAqj8=; b=Qag851npjPI5cCZ5wPC3LzRWTX NO2RGhhZGlx79rOTZvvbwj98Ian64HiYNdSkiR0lnKtIdvRTn9lzjR3yA/HpRqlzhO6KaBzyaSHx3 rib+3YCU56VMqFLBvBh4m6YBQ3UOsL9Mj6vOHY9wOb2fofP+Rox7OOm58ucAzg8y4QbpIcOGIctZo +4L3fLxVmfBanVuttLUeToC6BHdWx/xJ8d4/foPHXqQafGELtfZrrcdlgCEV88zjm8hxood6vE71h ldgN8JiMldXYpjrM9KRXUOgRzn4qWuqh0zqQXeOSzLKbSU/PUF2Z3uW6WHc9ryYaKMkxOL8Uhy+0L A0IgbXWQ==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkau-00000001mlt-1SYl; Thu, 08 Jan 2026 07:38:08 +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: [PATCH v4 25/59] ksmbd_vfs_rename(): vfs_path_parent_lookup() accepts ERR_PTR() as name Date: Thu, 8 Jan 2026 07:37:29 +0000 Message-ID: <20260108073803.425343-26-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 a97226116840..30b65b667b96 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 05:28:56 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 9709632A3F2; Thu, 8 Jan 2026 07:36: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=1767857817; cv=none; b=d1NZogdd7+iYYwLR3KAXkqVt6xfYwSUmo3JRrb1+dtP2HEK4zpNqLDyLzl4fzRbNCJHIyZlQJWfvMcn1fD90GpU3nQXHggK+6tz/L74mtDO9DhdXq3eudKLMjVQtXS8Sh/PJk77zMFHjuRvSNWY0pIwLPEP+laYuf7ShWl+d4z0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857817; c=relaxed/simple; bh=WRriJN466GNrPVDup+aZWVv/Wp3+fkgE/IoVZ5UfeDU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=L4ePkVt6lNi1czudqbdBKSJNgErExHesHdqKraVUKAhkMAkleES7rhRe8zifg3z/3lZ5MjUnxg4rJnjv21KA+rSyZF/+h7etbpHgNK1faVzMtKX9lWq6cuXhc7PDOFSSBLVnCqIoVQBpwxcEJ127Phk8XL/3DcebCTI4pWMDxlk= 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=ufTx/oHg; 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="ufTx/oHg" 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=ozC9vkaM+z/rcpUfiwPLiYxS2TFpYNOL05SazZBN1Ps=; b=ufTx/oHgVLiZ4qK9L168IAQy38 2UFakTLf+kObTwCBKRn+ZKoegkIU1FjE2RKzB43vLjVkS9fYKWCkTDDWMeLXp3ENzg0CV1QbExDQp MeSZ4WgIJ1Lu7i5on2MY1nHDLInS+ux8iFgYAG9FFD9R712+VnFM8rcmPIMZNL94RyLzItlcr9467 PCjS+RPC5Yia126kkIdzldLIT2RwyITC8oeUwYago4DpCYFtdIuw+Zr4ZpvFFCEFcp3xSc5P1QrVO qvwH0AriYkdjkLaeyh6w2l89C+rMZF8ydUQT1wVybJie8t2g7FIukJFqU96ZiwCYFZJumcxsrzCeC puHQD/Hg==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkau-00000001mm6-1y5X; Thu, 08 Jan 2026 07:38:08 +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: [PATCH v4 26/59] do_filp_open(): DTRT when getting ERR_PTR() as pathname Date: Thu, 8 Jan 2026 07:37:30 +0000 Message-ID: <20260108073803.425343-27-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 8f26e91de906..c8410dc6c0c6 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -4862,6 +4862,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 05:28:56 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 5E5C032779D; Thu, 8 Jan 2026 07:36: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=1767857819; cv=none; b=PJ75WrivT6QT0tmBqv4QzpywIfetTddbOgEbKHr05b1XRJ7hzvXK+eSaiIU11PXBxyzNfRAYffq+AAvlyMww/G2hsGiZeQItrpTY9lqnUzFnUNkVRgtpJOkVX46c/U4x7Z30K5EJcJ2ggcsZGl+XJX6Rdi3MwrX6Ve9CJ40896g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857819; c=relaxed/simple; bh=ATaHNvEGkj455ZapmLUWkmm24/ySdUOMeuI8hvb1u0E=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=TtbQaBO4Wu6mTqag3yd849KUeDCF4boFT8MjQwD1xEHWBxB4VYRxTGzDgyh6+qqtUHDW0XX09xSSSCYRs9G6TGxK6tz5/0ly7qNEIkpmWiQwvDQsjoU2sfXiz1UwEDYVs3aMxb1Md2HojO470FEA0RF13vWSahGJq7iC4r4dOfk= 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=Lg6rBNqB; 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="Lg6rBNqB" 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=CeV5xnu6YraY0E36YYd9v6GG4gssIj1+wOjZCBNOAG4=; b=Lg6rBNqBsPGYgzeiPQvhqstelK 3KC049nSgy7RGc1zcGAR9FirEwhCjaZpvyeFqq99fmkGoDrO7NxGzoHYRLIcH3LtST2pHFI+WLjvN MjKr3QzCH9B12iTwYPdQ6GAjzcJ5qoNOo//1lf4hNvb7GO7eFIWnS6Bt6hVCT2JHGaEiIYbJAMf4G BLun1rmHqAPMEXYkp5tZ+dHu3MOY4rASAp04zrLJfLQQs7PNcoFjh8b7DeZCb4OXiUuDibWRVD6Sg uXvrqoteHXVutRq09vy5NDonJPety/BQI6c7sYcWx3SPOvJH3gyI6ff1xKSpVgc8YFYXdf/5f4vao t6kwLagA==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkau-00000001mmL-2eCn; Thu, 08 Jan 2026 07:38:08 +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: [PATCH v4 27/59] rename do_filp_open() to do_file_open() Date: Thu, 8 Jan 2026 07:37:31 +0000 Message-ID: <20260108073803.425343-28-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 c8410dc6c0c6..9beb667f0307 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -4855,7 +4855,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 aa3acb06247f..c09dd14108ed 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 05:28:56 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 AF7063321CF; Thu, 8 Jan 2026 07:36:54 +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=1767857818; cv=none; b=hOwSAHOidZ0Jv5fPh2K24D2eTcnY6bzVcMc14xk+YKP0Tbzs7S0XLX1spzwWj3e++QlSr+WqrptQTyL3f6VinTX5VsWEGmOmCRnh9LgVng+IfiRDRXqnpwE7QXMqunaYAjOfaocLafKKAzetj0EWfdaQecpOHsuS5QuhZAzLtb4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857818; c=relaxed/simple; bh=xKaH/NZFW5DN3VJir82hEz4CpporN5Oy57a9aSeWAFQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YL3WC5Y6jPQHI9Pg5rWjXlmk2OZPt4osEZsT7Sm8ORtmOCx7OmqHmUBtS3U7MkyINvXyUVRzflSosbH1BCLTa+21KHUQ7S9cwoPhpjBEHHOp7663z67faMiEegPTEvWlVOAZ47zauBN5uUecWyaf44pignz3cjeFsfTnb4w8oZE= 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=rpG94SJn; 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="rpG94SJn" 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=gaYRFNRfoRssLh/Ga6RL0HdpHSyeDiJIvDb89vnXUNo=; b=rpG94SJnWp41VKgpOulDr/KpQq aeZ3acfdZNeuzedIxY8oWGolg4tMBx041sgoxZWcHpx/RXKLCoTSTkJiTcuRawRn33IfrztCSVtIL Sq9/7CZ6dTr00JrP4MHKfrchIyuPB+p8GZZ7tN6AjfuEKcS8YulnnK3ITK6Ae2U8IUpzLgeI9OxJ/ T3H25ZFn2XJg2RVIm1yWf3ydRzBGNB8yZJwv/wKWanZVodoFZLFtgBxKU+X6/6rIvWTBXbXjZ+eiu 5v/vxkt9aosAFzWWDab0P4nl2vsQPEeKPniTDgxioKlr5XPP8+AyW2F3PmwhaIWaUFBw+IX8KlRKb KXfH1kFg==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkau-00000001mmf-3kdx; Thu, 08 Jan 2026 07:38:08 +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: [PATCH v4 28/59] do_sys_openat2(): get rid of useless check, switch to CLASS(filename) Date: Thu, 8 Jan 2026 07:37:32 +0000 Message-ID: <20260108073803.425343-29-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 when given ERR_PTR() as 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 05:28:56 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 AE2C031B117; Thu, 8 Jan 2026 07:36:54 +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=1767857819; cv=none; b=GGzQVCBy19332v544G2QbBV7C7galEva6Pzs6mCZUcQa23SwbMbg6mjGFA4PcHMQHo3r3RS9s7P8sElKrAKsw8jt17x/9MTGAghGhL4tJR2vaBq2aEohJAP5CC4HYWHSy7zd8Llq9j1QDzj7SOB5wtrXPhjMruW2xsa3ljivWAc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857819; c=relaxed/simple; bh=eXKVmukn3ymqplJ5Nf+zMmgxI0ovB5ZcpB+UI18vaPQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=jUHiGVeX9gYiYP0RPiql65HCXp3wT/EtT4aRnYSxZhnTV1slQORzb7AAXuqC+muAokPtHzRREq6IivfLt0brIeLQE/aA/SpuzlbRqephdpqx4xFzs4Uf9nci2e1fG/kK5EevKyCK5S9Wx+m/6MGE+AG7gj9G8oXwS/alrjeSPP8= 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=XzvhDTXI; 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="XzvhDTXI" 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=XzvhDTXItKvxPhVsx+GwD/9hl9 mVPDEUqE9c3u0OR9w7IlmHSH0pq7qnuF7E+23mPw2QZ+lpeYVriCbOWqpFv+7vWS95zH5b1deblSJ B63fW/JsUs8n8CUQIRov/UXCdYPImTRdyDCCRUwYH6m0DRlxnjT42SWZQgYxh9Dd05K/X8YHWPw9j PinN3iNL5bj1WTO1viCVPMCHr+k0ecl5R5srPao67EubeGdjNDGq7yojK3vnArJmA2wqwaHkHA1XL Xu6Hm2rsRrJy8+OXQcvRVm5Bj91F1Yj6EF8Q98UCQvKY8w/u/K2/K7ZtNyq4OTq6w+uZNZNE22ux/ UP2iGfVw==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkav-00000001mn5-0f0g; Thu, 08 Jan 2026 07:38:09 +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: [PATCH v4 29/59] simplify the callers of file_open_name() Date: Thu, 8 Jan 2026 07:37:33 +0000 Message-ID: <20260108073803.425343-30-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 05:28:56 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 11CD633344D; Thu, 8 Jan 2026 07:36: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=1767857817; cv=none; b=dgO5WHBktTmACVSA8zNFAbFjrZVxhbxK41EO+IrQCHN9V5WvEzeqmnljl5XJfJDofN04ytSv4oXjAu0v3ejDCe/1fcNWmpyNM8b2z/Zc2TweBVttfWeo4BcdOvx/Izcxk9d8w3tDcxl7z4OCn5pgDtfINtXDOHabdFtY8lCVCIc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857817; c=relaxed/simple; bh=dKazOTpP98uEsD5tvT0eCFSPEKi73Z7M/OFRDrSl8h4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=qKJklt+oQ3Z8JR+PjNw5uRc+lg8T9CTwDoPlSRI+QtxOkRp565cH3pGTuMyFmncbF5vNJ1AE4V/K8wNv9J3czbJkkCM8MJmKiyFhkB+SMc27mgiPTjAEQsJ2hwiw39emlBR6EtUiz3NeLGnsQo2Hksi7F/51AKJKQVdxb9FIVuU= 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=nZBBL76G; 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="nZBBL76G" 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=nZBBL76GtI0RLm/jynkgoqC/Zk 5MB+ajm7/TggBFVP0/ZLYaF8uqNRj/iznhrQ4BOX6aGhz63VmHCn9J9JNO3R6ZE13SPd0vj2bBcsC 2wrqHkPq3On1/Taz1tJ9/303VDhF0SylQDES+50ufTlYpYdisC+EXxI2xEFuzhLb/5cdBP+pa6Oc0 QNO54TgUH0sZy3D6CWjWEqXbJ+bKbhb8cV0VmDTbSo++GXF6HmCUSBJpIt+AV7fKcr2ipMpGFutyt 3175Uv6PyxaFplRui1Ccjq0H9nwOA5rUfuzAbbO+aGafHqg/+PI8uba9FFht9dIjN+u9z1mBGanlF 1CVcWk/Q==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkav-00000001mnf-1eHi; Thu, 08 Jan 2026 07:38:09 +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: [PATCH v4 30/59] simplify the callers of do_open_execat() Date: Thu, 8 Jan 2026 07:37:34 +0000 Message-ID: <20260108073803.425343-31-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 05:28:56 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 13D0A334C3D; Thu, 8 Jan 2026 07:36:54 +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=1767857818; cv=none; b=PNWKxyb6a9LlG6r92sfmfarvq9ClaBQsl5jbHrepFjsz8KRAavxkLbNRWkArIXr02jcqerwVKRIa18+BML5s98XpmZvnmfDFMhVSXZBNlYm7NlbkpU1HxcPDyVAh7KfD7JM/+WyudydBvU0aIifTaON+A9DzvZy8mC6gHws0KjQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857818; c=relaxed/simple; bh=SyiCZ+BkgTbuNj29/vmF2KqVFwMK6f6m3rzqyVzJ4sQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=cR5W+ihu3hTGCABHzpFnLNB6bMYZOlS5fpeTp4BnF1+xNS8DtF+EoATUSfo56NAF+osuI/WdTObz2KtazoReBHKDpRjKge9aYZVSUNQkKsCJ+9VkiApsqlXR/8dZFtZTPChHiZ9AtnCS1w4CMMdA0SW2STjSFS5IEIoFizG7E44= 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=JQdLwO/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="JQdLwO/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=JUE8hPERD0FXyjZgOFJkpifcmj2y7nW76IgVSlDIJnk=; b=JQdLwO/eAz0zlyu5thAfVW3EPt rOXFsDV2twyaf+VQFrbnf6U1u/T9BQXGpmC3bIbfGJSBwcbr+zgZJUEOoYJURU3VfxWcLxtlXiXJ4 Br8unqqz2pNzHrMfs3Lo4tmJkNqfvWbsZVpqvc2ltDTOjz/BHVQwSoBLDrnE+09NLYBiCcaTaD46X 0zWStjF4CQF1roTqYkf+hDgO2a4z3Bd07EEMCyPKii9ppu1H5s74Gu+sWSSPZTfOdLKmKeVtDbFOZ duoJs2gTcfZRD7BLfYmjBClAHEIV+i/FylWqJawD7zChbalbZv+ckGxI2KXmpHqxim84tlT9leQjR /dMjqm7A==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkav-00000001mnx-2soF; Thu, 08 Jan 2026 07:38:09 +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: [PATCH v4 31/59] simplify the callers of alloc_bprm() Date: Thu, 8 Jan 2026 07:37:35 +0000 Message-ID: <20260108073803.425343-32-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 05:28:56 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 81AEE33B6F5; Thu, 8 Jan 2026 07:36: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=1767857819; cv=none; b=lP2UfPv5x/a4Yo/2P4aIZt/4N0CC3XckXyCXzdxZ/8C8466xk1RtnSJFBBaDaFt6kiLsYw+8kwS5UBKJotkWY7ExesBXuW6RjavrWJojbixzloyjshfMh3Pvld+hVQRmhkzwDEJdWgP0S69bPmwvqUEO9MW0MYsHQ0pn7mX0i1U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857819; c=relaxed/simple; bh=cxQv9hkw8QvbbztEqUBdFUa0fr0GoUOWAGNW8N8F0vs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=TBXXN5vX7ikp9PF7GckzHPwPvsAiSd5qh8mlaB1Ftou7Udd/vV4DH7fMmC9vwOqbefMZ7dgpc3AwcP1LHqNI6nzSgn9erYgtwye+6VNcOs5KE1Io6e3G5zu/oVXqITg64lHrm3YumfxAMqt3l+uFQ+Y9ePX0dHBXJKl8ayUhJvw= 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=ZEenvuQP; 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="ZEenvuQP" 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=ZEenvuQPSO+KpeNc7B0F9QMNWx mIgpL4LMjCG7D66wSfpLc+vnmfgRccfz0aF3cxnH4i3rGgFsKScSONhCHj8UcOr4isSMGS/bYmI90 jmRNZg0B+bdl/PwWYaqbH1XGeYzpqebfsRVO5HAzREzoZ4GVZRsMm+iYxEyVC+ponjn0ds2Gsc5lC EvqpsIushIAoeFgTcXOK1D8WAGNtyQjkuxonSEAwaqqdfTv6Ww2TI2Jlds9vPwZJcS1zdfOUyIIXb oiQwaiaZKNmWAxPLTGco0yVyX9WRWAzrMEPLBZbz3vMCHD6+K8q728bAloiKOOUNOACNBeeRfwXqA bbqeVwpQ==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkav-00000001moD-3OXi; Thu, 08 Jan 2026 07:38:09 +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: [PATCH v4 32/59] switch {alloc,free}_bprm() to CLASS() Date: Thu, 8 Jan 2026 07:37:36 +0000 Message-ID: <20260108073803.425343-33-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 05:28:56 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 F3E5B33BBC6; Thu, 8 Jan 2026 07:36: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=1767857819; cv=none; b=PVOqfmoLThFe9VWomVNLnK6DLxiDV87TFv+fC6ggJUIm1aVQHM6wgp9JQ+8zzVpSEKX+a/XpAZw1I3RKX2GSysutabKy7h1cRXscU6U0c9VJaQW/TIb7MpMJYaDiUHT62Ly45iuO+NDkVTrjYwYTF2Gw2J1G0nsX/Mv7fwJZQQk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857819; c=relaxed/simple; bh=1T9eJEuB6l9T+/4WSvz0MwkQ6ZS9+2XOjVOn7L1MH44=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=EB6o6l0YiXizzC+VL/LqHfvpq4thXsa8APK+lqgtiRZGrD2RxzB+hHxqGMx2y9U6/cUb+IBGYTj0HuLUKxA/mEOcYd86MrMi81MthWqUdDb73Sm4qgpRLTjBAi6haKg34Im8sGrG0bS0R9if1sb1tA4wlP3LVdSsOxKsrhrax64= 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=p0YYE3vp; 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="p0YYE3vp" 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=KpWOI8XMVeq41RdiPMuRug/lWmTpOFPv9An76fDH+Fk=; b=p0YYE3vpRqG1p2Bq/s+8iqSL+s WYyQWit/Ix+IOXG3jRJMaiA0wXcrqQbgfOI1t9Lwlx4IfazsLIQdMP3Gtg+jn4WxCJkHDLW7m987m K7Go/4T2LSqSGRLyvIUWs6xJ5lOIgy4HCfJ8xvtF0hkS1V1PqcmGvHlU0Kf99uSZjRhzE4BV80yIS aktXyKRWQ5RHjgpHobti4P8N7CqXDZfLZpvDxpRUEDhsuzFw8t5DUic55sjFFF4DphIMrq6JHziMU jC62wOTaUXwEm7+XHH5Ahkb0aFcqxFonBwf/ol9g939eV3EOcBdILxUfpn48So3My8Ni1c5jA9iyV +BI8z96g==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkav-00000001moK-3eTu; Thu, 08 Jan 2026 07:38:09 +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: [PATCH v4 33/59] file_[gs]etattr(2): switch to CLASS(filename_maybe_null) Date: Thu, 8 Jan 2026 07:37:37 +0000 Message-ID: <20260108073803.425343-34-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 f44ce46e1411..42721427245a 100644 --- a/fs/file_attr.c +++ b/fs/file_attr.c @@ -374,7 +374,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; @@ -395,7 +394,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)) @@ -428,7 +427,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; @@ -458,7 +456,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 05:28:56 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 3E70333AD93; Thu, 8 Jan 2026 07:36: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=1767857819; cv=none; b=QbPGjvSxMc0qLgzO1kwBDd0wTBI59X5ZpDZgyJgPjm4pZSzDkyBkUwF8TuwV15AJ9MYiLK8x9Z5Pp0UV9w8ZmC7xSB7irURkdI+mF3VUbOzgMRrRt6XxvfURuV0XQ6tyNOAdllmAzLXBQ5r6oPOhC2Fzh16+LeUV0bLkcwJTqBg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857819; c=relaxed/simple; bh=ltTrYl7GN0DzsMvuK83DN/Ol0bNTuyKzVNTK64WoEE0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=midgLE8KlvJWeAVtzQevMkpak7sC0SQGmGswmRbErzV+8eTn+PscYqU4jdIRBjdyeuiVfd2e9n0nvio1SXGsLyClqnz0CqdsNqOUyIoLylDA8o2TMOnaHfDIylMBmMS0luFoMuLcA6e9ctheLZ57ynZY/gCqOGG5C5K6wJrUTdY= 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=e6WIVynK; 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="e6WIVynK" 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=e6WIVynKFxM+arGZ7DWjSFwayW M6bReEN0U4a6NoNvWwt0L9SmcilWWOKfaZjJfXSgOCmcWBxz3qKLAjQPiCTJOZvaVocYJtsQza9h6 2b1+t4Jr6Vhcv7mf5ZKQ7iP6jnF5E0+MVC6djUWdVyMBM4TWYWrjVMbCSrKk6a8cVY/F4+Vg7bkVu f10jzwx3LInyv7WENeEGsPi3HBInvwsWAnRVFevQqOP4twYzD/VTg1632CCOEdwmp89766H/GtNe5 c9SsokfingSlAMEMyvypoHiuqPbepGkqiy7wImtL1Hvr0tdM2q1t6LzHcZ0jqBxYHYDu1ztmBELEQ mPleW5FA==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkaw-00000001mog-0M7Z; Thu, 08 Jan 2026 07:38:10 +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: [PATCH v4 34/59] mount_setattr(2): don't mess with LOOKUP_EMPTY Date: Thu, 8 Jan 2026 07:37:38 +0000 Message-ID: <20260108073803.425343-35-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 05:28:56 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 2A2A833C530; Thu, 8 Jan 2026 07:36: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=1767857820; cv=none; b=MjTwrys9tAtzxzFqemz3tL3nELSYNnE/pLTIAKfN8QyRxnX0ekV74fwSUdMGKYj9SSstl+vMo1FH/9ihIuxi0irU+wfVqYM5AvzgwcPE0nbpd030TpnUJpVAKuwhcaVclzj2NVa8sTTjvl3qn695C8W1kIl3qR7JdIuRq3/Exqs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857820; c=relaxed/simple; bh=qFWWBZSWrxy2KDGSAaHiqUKXKRDjGyqp+DsZAn7I6ik=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=U5aXOOfLhGu0qM189pxYM6j1RJmr5pZZkbvU0If4BTIKrVyjDpAwvCjiZHPr6wMp437sCSjpaQMU/lJuD9rED+CeWMmEciv5wSRVSK+GueQrxrMw38m3D037zaxw4w8PeemkB2MPau5obdeLLXl5m4juAq6hBBx5njDnLeSQb/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=NzBwocGV; 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="NzBwocGV" 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=NzBwocGVy42tugtMKxspFD0eZC SMLSSFffb7eK83op9AMOA5xqjTgxEOW88R22v6VPpkUlI0SWPFZVMpygTzCPv8aifuT7LIP7sKIjt S3sjBUJkkQeltKdjv2l+NfbyXGtuVMkE5OCQI7+pa02vQMNCyNJGIxy0nxq75EMlUp7lOkaazijjD 9BdZ/CCo5oSDDc7+0BK/b2t3qXlFo3iNf7ZswmsAqaExQhyP2RTWIZQhbkUOUFdGcMN0Td4i+pKiv acNJt7m8La93Sh3PtnUHZQLvhSKLPahCp+L4U6/IkOMCaNg3PuZ8FvcIOcXatbZc/5nIr8QjPZSEr oI6LyvWA==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkaw-00000001mp8-1xb7; Thu, 08 Jan 2026 07:38:10 +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: [PATCH v4 35/59] do_open_execat(): don't care about LOOKUP_EMPTY Date: Thu, 8 Jan 2026 07:37:39 +0000 Message-ID: <20260108073803.425343-36-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 05:28:56 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 D455D329C7D; Thu, 8 Jan 2026 07:36: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=1767857821; cv=none; b=cL30tUPRpWIA3jSmvQ6kGYFfv9xBHu9HGoQx7c5a5ul+8BnKdZDF0TFXmjoU0TCQ+heXDPaOlYyWWmahAn48/+rmYBdYbpDb4XJEHrKZAZNk6+hzdO7jcc0/1+TVArBSxd+ZALA438pwxqEFM7FlLqh54+hGl465VbbVLVvGbXg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857821; c=relaxed/simple; bh=JGIE1Xn73bLwFlYFa1TfmbrgYmGn/Qjf/OmTPOTQAHk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=qypotK2MOR+CvxgcEL/Mda0b58bseOQ3xgvEitjyIkScu33GKeIL9zes3c0lj2MoiDEMqSvgkTAaStuT+CsjBLZgdJYucl36dFKos9im45b/qAEngDRt/uoP2OE96rXWJeqZkZw2o9Z9QCnK6rKRHe2MoVyX9ksrygaD0YvExgo= 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=mQOuYjMI; 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="mQOuYjMI" 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=mQOuYjMIw/MxruNXwEsIy0TBW0 G6/01cKmwDecRFaeDRsDRocV3e0bXU+qA5Z8dEsh9vtK1x3qzFF+eAa4Sqx5wD5Egt5HVgRCIclFl Ep2J4AMQdi3V4Y92F8ckEueK7xC05L82clsqcJRaUqP1DNgNQf9ngVO5nyMV6VLSHjuNeef0MV6bJ zrf0uE0naxN/tSsL4GfJ3NN+r4bUEPP8XwMVKOW0PC/AuxdNiQAAJ3x2tQTy7e7NQ/EkWR5/08PdP 3t94/ns0CLzAM9z++yZTCSHR1zEL5Iks9/00jeyAZUuFRdPnHsPbx8tBb4JDJ/OTXgikkACZWjVBO NKMyDY8w==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkaw-00000001mpd-3Mib; Thu, 08 Jan 2026 07:38:10 +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: [PATCH v4 36/59] vfs_open_tree(): use CLASS(filename_uflags) Date: Thu, 8 Jan 2026 07:37:40 +0000 Message-ID: <20260108073803.425343-37-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 05:28:56 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 0092133BBD1; Thu, 8 Jan 2026 07:36: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=1767857819; cv=none; b=Z0Ipg9o0O5ZTgcRnSVaYz1pO78g+7+YoTnvd0av6va4RAWFNO7cghLu6BvBAEMG4C5Nl37nHxQfoWCuZCnfykNtkkVCB+znVP8mvi14NW2gk4/G2UKsOPghUnyHGkPkGhSs/0Alxo33+SaBSJhe1EYWd5qEYr0OYECcwcee4zxY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857819; c=relaxed/simple; bh=ntStfDefI1LSk8YKGruB1ETOnK4upEIT64zjyBPt37E=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=GTzhjRE3PZlBMW/2sLL0YATjt5LUFntuutLuuCRTDmOYZTIq6gi7y96msuIHzX4wpDmyX/tgiIZE7WcOPd1VjbA8W+FfVeKuO4J4GYpocHhMw5tRju4TX/fxSqrFO1OXNhKmS3OVDwComzONB6Hlg4ux9tE6xIUBTcX2tRQxzEs= 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=csE62p9B; 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="csE62p9B" 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=csE62p9BakBwVfZvoBMipvMz+b lqUbpqq1KUku8pfFJJw7Nnacfpa2g2oFjYT6kZHLGmttO7+QrFAq6Lg1/aucYnt87vQ95ESTV6JSp CJYPqNmOXhkrWdfCr77P8qijYeSwVSFqft6cliZt7pFWCF8wsj70OOiseUjMZiKqqbz+JYf/Pw03J q+n2LSVXOAMZLWkYY19xmpqwQiBX7WHlOgXKYyqpo3CXC/8BQ987ojdWUUAqfIcB3ErHyG8oyOTzb MwS2YIK15SX1Fc+20gIqA/7olVaH8f28Qpjs46MXd5NlZJFt1WchnXibTWRB1Va1PCNAS/lsftxi6 BH+/pa/A==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkax-00000001mpy-0992; Thu, 08 Jan 2026 07:38:11 +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: [PATCH v4 37/59] name_to_handle_at(): use CLASS(filename_uflags) Date: Thu, 8 Jan 2026 07:37:41 +0000 Message-ID: <20260108073803.425343-38-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 05:28:56 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 1AB6D328B6A; Thu, 8 Jan 2026 07:36:56 +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=1767857820; cv=none; b=pnkbDkJKUlUq7UuUUKMbRJKBrCE/Qk46QpxUmd/txsxgsZlsb4erq0KA31F9Qa8exZXwLcXtzl+hmpUUaq7UlWgV8QtbVV4EU/ZdSjEAsor/coXNBy+gS0LJqQb062/Zo9L0WdWRs41grdvNgq1e2ke9pC8tTafmyVc0NaxRdKA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857820; c=relaxed/simple; bh=Lw6fkolzG2z+rslNz1/IkWVTRMaQxHK9deworNvUlPI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Hua7ECkvvgnjraHx/wF4Eyu4MBX2JykyQ4DaQ+K/zok04ic+snD3EROZeE2iNYO7DFpAeFaedl+Zn/z0OoH0kwqEi6h2S3CiNayNDMYtEtzx1+fV+4Ipezyc90awwy3h0CcyW9/DWlrEmhXjikyNUuh7XLcCvc1b+ObZRlFaXL8= 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=pjqJFXxr; 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="pjqJFXxr" 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=pjqJFXxr3U6maPKBqwZblsmDK2 dCDVfMRVThN/71vCW7e28QX2GCoL2IpZYERerXnd8edSnDxXYJVw9XhHlUliAv7XQwCRhWThnFRLz L6Kq7vWgJVgDLX1UJWzudMXCL9JKHARzP7/v6tg65MuDe0bXGvv46WQW+bkhsc0GpO4qeUQ6AEp+7 8UEQFOLrkZGK8b0ANSWQejIPyGOUs2pzG5b6GQKJj5J8LWL9Qx84shbTtLeq0VmLDz3hvqgF14p28 9uqE7dL94oJJ/YxeTKBCM7zT80/gvPmKWUDOJ1LqXDp3In3GWcxhBZ6hiqRxNd7ibIEgg9DVmBd9G 1b9NqXFQ==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkax-00000001mqG-0waR; Thu, 08 Jan 2026 07:38:11 +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: [PATCH v4 38/59] fspick(2): use CLASS(filename_flags) Date: Thu, 8 Jan 2026 07:37:42 +0000 Message-ID: <20260108073803.425343-39-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 05:28:56 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 F2A19329390; Thu, 8 Jan 2026 07:36: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=1767857818; cv=none; b=Lnc0KGG9v0BoXtp4jFfO009XseV2qkh44PnbnW3U49qfoU1GrZ44aEt7zL8OChI7zMUbNT4F7T4yU5XK+XMq3qdMq8swovWt5zzKEUdjpiBUewsIflI+PBIqmpHgzgcQrwWpG4m5RvZrWw5MXQtYDCGvCCOyZ6gZef1Tfo2wHCk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857818; c=relaxed/simple; bh=9rjy/O7zk9NHa0zEpN/u8HwvuzoJz5ExAtWTchA9beE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=C+5JBEt+lNmguSnxpJ5ZNRpSWwgJ68EBC5oJ6bvGqSWCq6okaO/UtMzJiL6sidpIMZi1IWcQ82g3hebpTpGHZ6feYdXP7N5hu969ekbXkmZEF3yxXG9WeuWag6HoUqwCWIxvAv1jQrfO60aLqTFpuMbsnaw1cfM329vuGEwo7tk= 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=JNmx3J0x; 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="JNmx3J0x" 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=JNmx3J0xlR4S8HPod/8cb/f1/m tBIyeI6yuTL+hef6WqvliNasat3TfkhP3cZhTvPHK762mdB6PM2AtlO3LC+w576P2px9jwHS4OcMK mKTQACrWceKnVxYani7zqS68KOWSZX/fZ042nOocenIsIS4IQ8Q9lpP0p+fFehdnKxDE8a5YeGh3H En4KxXqvpaZNnq3ghNHIBOD8Qut02+exvHCdEyHJiC+s5v5tYEFzN3PMdOh4R58ZyWV3XOTQBE7Uq G0iPaWVi4rR419UhBgTLl4i+QC26BL97kZfSV9+m6IrVVsko7aEVujOeHcrqv95d+sJxHmY+qnmfj raIv4t2w==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkax-00000001mqa-1qqB; Thu, 08 Jan 2026 07:38:11 +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: [PATCH v4 39/59] do_fchownat(): unspaghettify a bit... Date: Thu, 8 Jan 2026 07:37:43 +0000 Message-ID: <20260108073803.425343-40-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 05:28:56 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 0161B33BBD4; Thu, 8 Jan 2026 07:36: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=1767857819; cv=none; b=SowtQfm+43WDfknPLboLG5n74l/IsUJMsDiTbnyAZr0ySNhlPz6/xA4wT4bVATCzLTps//VZVbnpV+dykYfw5PTo/fvViS2rJOy7E8tqUI60y9XFaOVPJ55FTmw7Qv5D13vQ7dFkneFWhtIn9p1Z2Nov15bN5zIlD+UVjM41X2k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857819; c=relaxed/simple; bh=urAa3ZS6X7nMsa9ZRz2Pqn/hpkIvLTL3N56s9umZyt4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=sJq6PGCRD5wJB9cuFaOSW2UatwXNE1WSVBvb5Fu9D3IyDHSMxdIXTF4fwvc4xH46gKxJjgazrg8YkiYoI8h5LCgS2PiY8SqIlF/IN4xXspfGMzxLzw4l991O+51hiHSM/Pl+sFsn54SFaC8CsOyuGls3LHOQVjJzYsx1RfZVp0w= 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=EYx527EW; 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="EYx527EW" 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=EYx527EWbEAbefEoNdISMxGVtB wi0OQbuGL7118gpfZPZNJ3mk7kmml02BmLsROpfqnn61uQNKAjf1p6JCAYh4W0YYh115NwJyvIziv noLJO+QRMOepgRbUoMjBqxsDu/Vx7+9DxpR9VeTvOg8TbE5UPGvaJWoo3bBJQa4ENbjj29qH80PqF tqm0iv0SfI9iFnc63B0ZeQ0HlrRAA3XTFzr9QhkO1NhbxcMLe9HIdZSD5uwdOlS6AlYE11jXJ5iG5 CPM16ry6YI6iJMGgXmz385PV41nzwC6IHwos0EUFDvTqpTrhSLaIxWNGarssscuK6PnAa8OxFcblP scRsp0ZA==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkax-00000001mqr-2QCD; Thu, 08 Jan 2026 07:38:11 +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: [PATCH v4 40/59] chdir(2): unspaghettify a bit... Date: Thu, 8 Jan 2026 07:37:44 +0000 Message-ID: <20260108073803.425343-41-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 05:28:56 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 395F933CEA8; Thu, 8 Jan 2026 07:36:56 +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=1767857821; cv=none; b=DF5z+gQngMShxfDoYaXOXwnMlZfQO/PQRWzTfwmJeAh6id2emylybL+10WxUrr0EneF7YjGNbbs5evKIMRKkQ7HDEmrFlTITU7gLw7bgQaxoLmjEjyjLROgwYqbW6+5P4qUtNSkl7f6sryBe1rIJQrnYYCjdpXBdAaR5+5jgVhc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857821; c=relaxed/simple; bh=Ln2QhD1+LiE6hrU8DCpZyq1Aafnjm0E3+Q2zcNTr2ow=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=UqvpccXuNQS12hYxM6/eULnk0oWSgkap+gQ3R54O6kScnASMS7U1Icm/EdcG/sjXmqmEpXqy96PSTR1v8QUHqANgIu7SsYMbVKk3RzpdEydAUXCCVTKss/MF9q5rYw+qrXzzh2TnFC9uLkwtBgZ5WD0jyHU9UIf8d/xMqnbxzfk= 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=GeVwNCtI; 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="GeVwNCtI" 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=GeVwNCtIbwv0nS5oGVA1ZMZPxd 0vc0PvJAPQa9GaMcwIcxpr72VdfABOqWaPqdxvJwiEB38LTbJ1Oic2eTrhuWOERidEZUD0MM9KdZU QfSEJhcH55/cYC7vnAXlzSrUTOMC9e56ueb+vVGYGC9+RS1V+em0t8u2e3cCx0jVj0UG19vfyZsg4 xH4ZHcn1s1wd5l3RlHgUDwoDH216xJJdvepRX6cHPv2D6EvfqhpZFgYWXNG2n9mBY3i7cTa0Be5IZ zbaFB4to7xF2Y0gYCmMmTAQaIoC/8KVs1Lp+OMYczSKfZWqfYzzGrLz3McjI8ERDX+C/PpOytOpjU PEq3DQGg==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkax-00000001mr4-3OHW; Thu, 08 Jan 2026 07:38:11 +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: [PATCH v4 41/59] do_utimes_path(): switch to CLASS(filename_uflags) Date: Thu, 8 Jan 2026 07:37:45 +0000 Message-ID: <20260108073803.425343-42-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 05:28:56 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 9F12933D6D2; Thu, 8 Jan 2026 07:36:57 +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=1767857821; cv=none; b=O/BoaFJmBEdW5X86qP2jjytOdHbRaftqOnVLYvmJs9rZSFWg2axLdm9uoLi3YsYouzUWGWA2RVAhgGG2hUCDNIF67akXeuT010UxUQv9mGKpXntfVWOpjarzH2wlvezTh02sQjLEkW0COuQXUfZzWrd6oERIGPLXub9wR91exWg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857821; c=relaxed/simple; bh=oyKBfs/wj+3AFANKikryvf2/aOkh/ktfJ9g7Txd0zkM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=P0KCvL+pwt1m0Jl4QOfRI+DdLjPas1MBuChlsVsXp14YggRM2GLFtY+HOHsbwbmGDhXysAw+lloS+B/LsXOcmaY1+Fj1kocmJkZfSA3tMJnrZIiTe95/MT/kSGe199hSALM+5t3Tka68kvRuI+TrvXaIMQGzE6eqv1sZvoSHx/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=Vj5AclKv; 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="Vj5AclKv" 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=Vj5AclKvC2Z4txEXi/GDxMXgWi /ap+EUvWKzXkwM8/i6V1b5qRAGMSMvaUuzgFC/KNYcWgQRF7Lyh2wYfXObinW1K/cmhEAoTsoOyOQ miZHU//hE7OV12Od7BhDVa8l9js7n+mr9F0cqFTz58SRucvyH3rTPE4m4i7XOnqxuyEe3HF86+yE/ 97vhpfJx4rQ8jeSetwc7u8bbIKpE61mQIeeOwE7rzj75mcq/izlyVohd+DcwaBStkrJfJWiGwiGRw BTLS8Niu/UXliagwE0u9UZTkwZrRrtgdfRj7RSEdmymXgPEjVhR7e+OY7nq+Y41814lk2F+459dxK smmTFumQ==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkay-00000001mrT-0QSg; Thu, 08 Jan 2026 07:38:12 +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: [PATCH v4 42/59] do_sys_truncate(): switch to CLASS(filename) Date: Thu, 8 Jan 2026 07:37:46 +0000 Message-ID: <20260108073803.425343-43-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 05:28:56 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 CD4AE31D399; Thu, 8 Jan 2026 07:36:57 +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=1767857821; cv=none; b=F+YZXMXyt3oNC4z7UmTR+cB6UCtDGjJvqx2m3Lq/hxvNum6yuEGGdyE2RtqizAQ00rKc3FYu4Gr3xuz6IADLCnRF5/I4YJ8i0A8gWpPQSNaqVc2HTtgVCBrBSlAJpQRgT35nuF33UWssLkClDjHh225oUFyT39BiMtKrWplIzoQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857821; c=relaxed/simple; bh=ZQKnnJ+DT/olw6Lm8LfztDzd27NRaCqPT+q4vUOkjL0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kCpOs/QJDRuF3i/GVZtV/4ZRYB6pL9VENY8tmEh1mC3BJrKExeh+A0u/tCrK1tAUP0fZX1ZdelfyLRvcgSCU9XGAttWrnQafJi03JEhBHUUXfeXE7ACKY8WoA6INZ7INCF9Yy93E2+Zd8xYnvYBOK1c7raTnfcgQjNxqom+prEI= 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=HLtqzkhs; 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="HLtqzkhs" 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=HLtqzkhsyJ4Ynir+iyKsOqjDRu CAXUGjtb5qZhCXBASe7AkK+gcYXhhugStTpT1yVzQrmqDzO9rxIY1u8UWFjQ9IkNujYZC2wRX5Bbi QIquMpDEU8fxGmU6DEAEb7BQ/fnL8gMT1lPzf77CiGsaBmLUtlYCH4bbapp/EBa64oxIZyJcYa5RO GSOw7jLghi4Wc41Tk1maY4MNlq0u2BJurdEcYDG6nPew40brpSgl1rn3PLkMq5HK732zaPsREmbpM 9y01z/4SHx6h2ApVOE7BUgyOZQfU4xeKzD03S6s3gjFZ5ZHCeme9EiDvA5+Q1hEdGqQtRzPmKcxeE z7vvmVkQ==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkay-00000001ms0-25OW; Thu, 08 Jan 2026 07:38:12 +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: [PATCH v4 43/59] do_readlinkat(): switch to CLASS(filename_flags) Date: Thu, 8 Jan 2026 07:37:47 +0000 Message-ID: <20260108073803.425343-44-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 05:28:56 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 57E7133D4E2; Thu, 8 Jan 2026 07:36:57 +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=1767857822; cv=none; b=UtJ1L79wrEzFRl3baDwe8UxKj23N574P2vsL36NXLKQBW+NwG1JqJd0ujJMmX7XFB0ozS8cK+k8/82Mvd+GW95x57C7NbVTRJVF81KMHiTgBS60f5zBShyy0DVy4WBGMAIed8KUXqH9a9DUcVh2P9Dsf+0MsZFgPdTXEnmTW6LE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857822; c=relaxed/simple; bh=flPREUjz226vbhFUNOUM/b2whXof1cRdtkFUivOyMAU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=c+PdpPZydznTn25E01XQV4J0Fui2p3te5VY3LyXiroovfiXLDApCrFVpkK5Spjk0V4pt7bIMRatDNaiG/3UjUkfZ5w58NF8N5fYIMTEqb3qh2F4VtWYyDYCkpLhkPIncfQk7md0KYPu5LpKRpxLelSYwxihu0WzxsIjsj6qPQWI= 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=NfA1Z3b3; 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="NfA1Z3b3" 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=NfA1Z3b3t76p1on+DUEgD72MjZ Pw6DJlsefHFoI5w2pB/COi28F0kmiQA9KAz7UG5h+f2ShEF9dz4R6ohrAEBK5xYLnsdqf1Ur4I2Dl gCn7dPzI6PhnH3ddRxYkq2V8Y0d9sWGITeqtiqe+HYS4ZXWtjdpm1yzMuWMiLfvsLMOWI8nHycrnf sPELMKgus9sRinKI+vCm4gMR35VUELwJe1HxJCd7bUMZfBZTow+EK4KZHc2bGOQ5JcZsSf+sWrVTF 2E3175NvF+BLLLcod/wr6AnEZ/1yzqEJeWBAb3/+xfPEGQTewJHRyyAt0f6nRdsyPkWCEQMTPMDVI wP3w+0/A==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkay-00000001msR-3Qeu; Thu, 08 Jan 2026 07:38:12 +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: [PATCH v4 44/59] do_f{chmod,chown,access}at(): use CLASS(filename_uflags) Date: Thu, 8 Jan 2026 07:37:48 +0000 Message-ID: <20260108073803.425343-45-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 05:28:56 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 13EBE33345E; Thu, 8 Jan 2026 07:36:57 +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=1767857821; cv=none; b=ncR1yKsWtH/5hBmJrO91FyJivhd4GXRdQka4Oxkh0zwV87YiaqKJ+OkB5l2ogVXVzYabhhZ79fiLAgwDViGU0OyyVDjfdokSiyAULp7Yid9ZzSS2xVH0/0pMBYVFZF1ANLiQ8EbuOvq2bE9kXximw3p4M9HsxAeowNH8jsYU090= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857821; c=relaxed/simple; bh=1CZiS82AAJJXS45jvCbc+gzS87qKdtRZQd/MOUEsnqs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=E2hdqFznzswyQ+b8nBQGEGGXVxl8MrpG8/REH/4N9w/LuExLNsT774ihs7zVnywlafXTHNW/c/FAv1ouI/I7VdHHq+spUJa9atf192E6UbTkmTwiEehMnLkgtPADvR8aMvjt18TKCcarfVBERv9I5QoyDiUGaxqtWSqE7UtLI2g= 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=r6eFesjx; 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="r6eFesjx" 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=wPQk+O8gCXhfaPo4McPyrI7a2N9wWNcxUGToz4YmPIc=; b=r6eFesjx31MYemdCwQzeW8MTGl p9u5KYy/8x4nQXo0x8gP8qmUX9TkcKyVSr2NpDg7rPT+JLsCZ580kUXPwEyGLxninygNvHxoSUEoB ZGL9IjdKcPKzUaL5E3ZykMcJ1aOv2PI/cig34JGg3qiZA1RPMZ/RN6dpEzm0mWolOc4VFzh57Vu1P 6F3jFSAEbEq0Y5yI9B7MrR01jplrN1xmSk1J16CD182zoiWFQINPEzp7qXgQJDrOjvNcnnOcwpdVz /H7i8O+bPAjXcSSHk/UAud1AQ4vI+7pDwY4wIwfNRRgV7G1ZC6l9WxnNUx9vZvfWoCJUbb0UL6Lqj fHKvlTDA==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkay-00000001msf-4Axk; Thu, 08 Jan 2026 07:38:13 +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: [PATCH v4 45/59] do_{renameat2,linkat,symlinkat}(): use CLASS(filename_consume) Date: Thu, 8 Jan 2026 07:37:49 +0000 Message-ID: <20260108073803.425343-46-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 9beb667f0307..86e2467c5460 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -5572,23 +5572,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) @@ -5604,9 +5603,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 @@ -5721,9 +5717,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; @@ -5731,10 +5729,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. @@ -5749,7 +5745,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)); @@ -5785,10 +5781,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 @@ -6019,9 +6011,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; @@ -6029,20 +6023,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); @@ -6119,9 +6113,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 05:28:56 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 54D33340D92; Thu, 8 Jan 2026 07:36:58 +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=1767857822; cv=none; b=dGAlWPGtsHlDju284HVvJy6BoBY2Yj/KQ17MoGO1G8GYVVGGuLjOCsWNskOGjh9BoiRqmaEy4PHRypisG058rbh3v3h4oOHfPGD8iXVpESI9HHoTcgV2JL+NKhQPYJoUrad07bCT7oNnaEN1MpmCEDkVC419DAY5wLwqq6WmpPM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857822; c=relaxed/simple; bh=+PwKgi/02suRYVooSrcTQ74mPtX7iYni4fKimRheEbA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=VuAg13G0/1AL0kahvEgw1sG+pYhq9pdE2fx0QTYuBfdc6fOwe//EteM2FqXZSdrIb/TIwEqVuf3lqFHH2ArnuJ4V7Byudgc40GqSkvzIfheJ9JQlufSrc0gJ2+Br+fWfPLG7dp8rh9z4CH6Ie4i2/BNaZslZZ4xEZmKfi5iHqLE= 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=skyrTFjD; 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="skyrTFjD" 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=58ApSCbomH5xnx9mYPWsN3IKMopiJHG9xz18HM9ct5I=; b=skyrTFjDkXzsebQNT+sIouo3dT ZbIWtfzCalIxsCuZCKOFeN1gQhwDBR6S+X0o2dKRztyTpobAEnQBnrN7eyt//7F+zwfl2wb4VA1go E8JNBJtkIHxL1hKqPZbk/y8yLPqYd49dhrQOmcylrE4pSmYbJNotJa3hKty5OXuhaN45D1DwqM27i hI3guhlmodUzMTaJSo3N0ylZVU8wDf3TrszPURDIuGXIz3bmbLwI7Wke+vurlOWkEjbAz0luJljQ4 NBEodOMkCN+06/4Sles13LdArn4BacJ5g41KKvbeAR67YV7T/q0KImr/pgSzDdQW/YGeBmVRjtgHX +rguFUaw==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkaz-00000001msv-0eHf; Thu, 08 Jan 2026 07:38:13 +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: [PATCH v4 46/59] do_{mknodat,mkdirat,unlinkat,rmdir}(): use CLASS(filename_consume) Date: Thu, 8 Jan 2026 07:37:50 +0000 Message-ID: <20260108073803.425343-47-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 86e2467c5460..5acb071c92c4 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -5063,9 +5063,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; @@ -5075,12 +5076,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); @@ -5114,8 +5114,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 @@ -5198,8 +5196,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; @@ -5208,9 +5207,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)); @@ -5230,8 +5228,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 @@ -5305,8 +5301,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; @@ -5317,7 +5314,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: @@ -5359,8 +5356,6 @@ int do_rmdir(int dfd, struct filename *name) lookup_flags |=3D LOOKUP_REVAL; goto retry; } -exit1: - putname(name); return error; } =20 @@ -5448,8 +5443,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; @@ -5461,7 +5457,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) @@ -5508,8 +5504,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 05:28:56 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 8E42D33DEE9; Thu, 8 Jan 2026 07:36:58 +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=1767857821; cv=none; b=G45zvcHmTwBYoIJIoLqr5B2qssK4L67ADb3941YNFmGos6JheDSuxourWnaUJKMp2AW/8bLxDmLnZnZbKvZk/gKa3Jp5qzG96t1468LtRDluFIMpQe2K1XQ6lFHvrh4sP1r9VnzI+tKT0Hz56ENZC16hvTREJGd5BPbYy2RFeFM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857821; c=relaxed/simple; bh=RL/R/o810ZMmcjOAU4F/DFBw8sn97MkOpigt0uJ4rh4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kcVkNWPiW9RqPJhUSjB8PI4JWn21BJMojQ3zc9W8dYtoMTH+xnJ2xrdwC4JMq4orzz1XCPjDGdZc1LdRr/AMqUoHVRSXJJTBqkE5sjVaTNNPQSuQd2okt+nQQU3YZVwKyhqwcnvV1g98k0FGv/1vzf3mxt58faQah4qyDOeYpbg= 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=Y+cpbH2y; 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="Y+cpbH2y" 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=+C4CkgqhnHhwu2xYL6rgmPkMOKMGn4QaEm3wdQcVbl0=; b=Y+cpbH2yfYsz3vrcTLAvY6Aece X9o8BZmb0lp9VCp3EVHQcl6GZ43sjPb2FTrjWY6Dn9frPJWAwCgYoFX6tt2QzwkirGYs4PusNgZRv lFWhny5Jo/IO6PPqwpuitXgNfSH3gaAtfCPFsAVWuWjwTQkNU+7dMvt5zs/bNdAA7AeWbgmtl0ssT bc4pXApCFSJjeRYg+ok40rBjh0Gl/zNPGne4AwLi+6VwD7hZe3Yn+eSN5n9VZ/BBXB9HulVG6kqAb wQGH/igZDZRYflITaBPZmuy6lfrXbKNPMfdJfQBpK7fBUlneJxdcvP9rqWq9VJ2v9IcoSMW7hip3x x9Ug7a8A==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkaz-00000001mt5-13LH; Thu, 08 Jan 2026 07:38:13 +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: [PATCH v4 47/59] namei.c: convert getname_kernel() callers to CLASS(filename_kernel) Date: Thu, 8 Jan 2026 07:37:51 +0000 Message-ID: <20260108073803.425343-48-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 5acb071c92c4..325a69f2bfff 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -2993,7 +2993,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; @@ -3014,11 +3014,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, @@ -3035,12 +3032,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 @@ -3074,15 +3067,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 @@ -4879,13 +4868,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 @@ -4896,7 +4884,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 @@ -4952,11 +4939,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 05:28:56 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 54C5733E37D; Thu, 8 Jan 2026 07:36:58 +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=1767857822; cv=none; b=l4Xxh80p5KI9MnEhpYdJBBORlM10aocacRRlJ/7UVgk4MLdx1QeiwrK7dspcrXl//FTdDuQKKQWMmGDyAMRIof44piD2RNvSUzks/iCOpiPJzzosrRwKQjeNKgj6/O8Ayut9R2t/HEhQ9WXUr8l5D3xOS2rHNeiQnuh8tadST/M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857822; c=relaxed/simple; bh=feV5iC2WMzEnCYTs5Mi4FLodvFANEDFlUJ5R18kq/6A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kUgOCSq+je8F8QrIoos/xTe/upgzeq2ZzjBnaRiQWsvOKKjTP1CPQbm/FGwHnsjlij0wi6DtpXoUyfnao+TVJBG0m7+O8dLISIaquAE8LMkR/xWR9rLoqRmnMF/8QcfAcWYQSJn4EH7kaWGxfrKpQkMHhPtqNunASoWrzKSuC/A= 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=TEWSypab; 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="TEWSypab" 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=4k7kWmP1ZhXBmL+hmhsC3wCogciqSjx/xESlh9/A6eA=; b=TEWSypabzKOAox/7nNTak911u4 UPZ3JOWdEpkrjuxI7RtRFkHOtgnXY7iPWYiPTlkhQ1NjVOD4udEuoEm4+z/BsMh2kvIrGDZrPBwqt amHHRKbqSzYK+bamO0zLHiGc0aRFNqcPMOcxhRUR8HIMSccQn4CLAw3vBj4zKmfQzMh4XZvcmeEuK 5WsdUIVa/uxOg6IeTxPLGxlh4zIOUMxELjqWtkwm+RKzWxJC13zbKb4ViuDVkzfEXjhwOv8eC2dVT 09YRfy5LTacbKJI4+svkEieu3Ykrqtb6PO50fsZ0QBp4MY4uxLPyNJhvFshw6kpe4uG8fbKoNbbFV 8YbvVhrQ==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkaz-00000001mtA-1YVq; Thu, 08 Jan 2026 07:38:13 +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: [PATCH v4 48/59] namei.c: switch user pathname imports to CLASS(filename{,_flags}) Date: Thu, 8 Jan 2026 07:37:52 +0000 Message-ID: <20260108073803.425343-49-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 325a69f2bfff..cbddd5d44a12 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -3022,11 +3022,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 @@ -3604,11 +3601,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 @@ -4967,11 +4961,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 05:28:56 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 D0B88329E47; Thu, 8 Jan 2026 07:36:58 +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=1767857823; cv=none; b=Fhqv3JzRGE4cJ5Si19vnXx2MLqcUTW+by7IzpR35K74/aFKeCkBeKGokjsTdQYjBgduzXEQpy1OO8yv3r8vrqbf27o/dgthLkgQkSDQ3Yci9r3QxXSYUFtDzJOmLeg5jJTggo8d/yLQ1+LVGIDx0ebTkbR6jaHYhS5nu+oPUzvc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857823; c=relaxed/simple; bh=XEXjfy6VIDObTBv09OYWsTKJyw4xhl6Gt/Rc8d8rX18=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=f/wpt6uoXs0ok6FvFQcNI3Xst6BqTHBxmOnVXj+9oDf8+w32aw1Mv1cQ0WsYgXqDkIcMWjuHA7pDbeDZovXJGjHKhZZ1DgCc0D9UAjMQnLWbH34EGQVvAgPWWk5xfsoOvVBhjcjpgxJhICwo0gPRb6tOpfA+Z4hVE/E4w0YvxDI= 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=CNpDKD9+; 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="CNpDKD9+" 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=CNpDKD9+FRr/pt7RPA0OnBdLlR mYeDfo+LGLKxOCRcjS0EuhYA5MlRv73iR/IJ6JaXbSmiaekWQxPyHgeBfjL2iKgaGqqzXlDnCHZPN reDFOidnOHaNU5f8NDxx6wkKr0Pg1DSlK7OiDmcNF6wvelfsZvxS62x5P4o63atG9cfOw8NEHljV1 VpG86vwytf74+ceh4I6fCGlXmHYmUaxkF+BL8wkEykopt1lH1TTNZqV1CkG+ofKpZNny9Sl/4t7NG qQMItJnHSOuJ02iwMmSnJgM1aCW0cV1MH4dPH6RnWL6YDZxXTNheI+LjMXNTB1rVXrAgOA9YdseHC DIJY55Aw==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkaz-00000001mtY-2WQi; Thu, 08 Jan 2026 07:38:13 +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: [PATCH v4 49/59] filename_...xattr(): don't consume filename reference Date: Thu, 8 Jan 2026 07:37:53 +0000 Message-ID: <20260108073803.425343-50-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 05:28:56 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 566A8340DB2; Thu, 8 Jan 2026 07:36:58 +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=1767857822; cv=none; b=g5sjQ8tfDKHIt0TArTz2i3eB1bnlvmJmJBxqQTNb9PbhHmHUzP45ySV/n8MwT4+MBOid9N42cKwlcA8yRaSQPjjoVXLRvj0mxCHoOftkZ0r6Gf7iP++A4pnCyasi6wtalu4go2k2dkuYPUN+SNSnaXjOrF6XK2Ydu3LgZL3f2Z8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857822; c=relaxed/simple; bh=nTHKXw8UwcLMJ53XI29POh8UPZpmRIfzCZ6jAwlP48s=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=pUSIYqCoapxzS7+NJ3BjXcoBH/ncdrCWIlXTXiFhXweakxJexOG2xxcV1GoZ1tgQdp7zaDOVOv+CsCOUNwku/qvmRHM9MO8q2TsE1CoTaksNR2Rr3T1rW/qZ+/FUCNv2ozkgj8VZNmrbyfxOrOsH+n8WKJ33pVFdD6OtyBdDlM8= 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=Lo/ZumX9; 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="Lo/ZumX9" 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=Lo/ZumX9mQKjPPhqKap5cWBikf JinkpExLRlcKqkOBLr5uf2ITH3wUaF2bFlf/FtVEYF4xYJSAqOiRVOayQXt5+5LlsAA/qoCFY6KcE d6SxlCO1zeKsNIELG51BfxNNeuqRldBo3ivYGxBWsnLmiAw7lJYgrJW/WHwGAg2/l+yDRTIig0t5m wHb7nra4KToEG2+tx/vRR866JTIspiAIAk+1lHoCddqLh9g/6rmIDYWw+KiCqYV0kl05PJP3t1wA8 38n/5bsDeqkRXZO9hMSYuoVvXEC2Rob/2lHtoCAcqoci6JKWdeMngE/DFTWxRCu3XdDzZToo5h6Mt 2FsbXQrw==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkaz-00000001mtl-34xm; Thu, 08 Jan 2026 07:38:13 +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: [PATCH v4 50/59] move_mount(2): switch to CLASS(filename_maybe_null) Date: Thu, 8 Jan 2026 07:37:54 +0000 Message-ID: <20260108073803.425343-51-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 05:28:56 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 565CD340DA6; Thu, 8 Jan 2026 07:36:59 +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=1767857822; cv=none; b=S915IL3V3cMcFXA80bbjw0oypNDiO/Q49JPq7MI6STYytlvhmz8gRmEl7Mp2th5pTBSam8ac5ACvwSIIoX5fpS3nRiQyx9Zq3pwKTlcnWD6nThjXswDfkZ05PXEV8I5Mj0vFuHloaC7u9Vo38X6PKiXye5I7YduPkswNa7B9UeY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857822; c=relaxed/simple; bh=K04pMr7mpMxH0hiOJ7GtPBaHUbq5OaTNv0GMZ/FTQJk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=KfTdA0pId4pfKnCX3bKOYk8DVf0whGzJQP3fd61gNSKd2d2wE6xVycaqIN8HEBYlADkRMurvTxjvY3OvSzx4JZw32TqGI8nQsAcXgy/hCf0L/i9sCd/zH6ZHHbLhTjsDW3LvJ5T+s7hCb6rJVEfg3YsF98T0v5QDkAlJ4+aU2mY= 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=G9S7NRtH; 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="G9S7NRtH" 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=G9S7NRtHKwHs2mvYCEH8Yk4AJr vR/Hf7bNBQlhlRDxlYDHAjqmhIONxa9NfIvap+ljX89XHMM/b76CNnR3SpzFeZDrrHMB9XN5fN158 Yy1wbY/UiE6v73vBKcC9QYCoENk+fVinOQ8rG+/r41dlx5KlIIF+xJ+SJkfol+CMserLhkfK/EQYB z5uFuRJArmZD7KGPc15wvCe8+xRvZrGwpTg0r5bRmMWzlaz+P4RmCkMkv6ZxN34sbotNAmGx3/l7q rkQrGCBE4rf6qjNWyw/1uR36z1ShGag/TTlVpaG4JYLdWjeDdYoVthi8VX8cX/BMQcAKTjGDve/qm Oe/UipWw==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkb0-00000001muG-0S0p; Thu, 08 Jan 2026 07:38:14 +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: [PATCH v4 51/59] chroot(2): switch to CLASS(filename) Date: Thu, 8 Jan 2026 07:37:55 +0000 Message-ID: <20260108073803.425343-52-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 05:28:56 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 58FF334105B; Thu, 8 Jan 2026 07:36:59 +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=1767857826; cv=none; b=SDt8krdIJMUntDhed3DevXF8ZiGMJ/Inza65L17QkeOHNXkBx0H6jQKhRrHdUf8QBDBVHUTI6M4OTI9iZam5pmEiX5LQ3Fl9hd8yJjYWuTqxv8b3IZT4xsNoXsJxZlyOweREy0N7Mqb+vVyW3TQyQKMRgpCvybJhkuUvZ/op+xg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857826; c=relaxed/simple; bh=AIif+faRQeRaAqpK3WJa8jVZgeyvF8kX2QVOTCmr1Rc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=PCpAsmLNnXSXCpVWX0ylaF37UWbONu7l1a9HoRfM4bMOyEJrsUPWOiJW1jEg9iAcglJpdvnlY/dD6MH1XNfMTT3K4a/rcD11URq2q98psZNU+jZs/P2oWvOlTZbvWjeOFfmzIgTL5qodJtNsPRXIkddbM6c/PJTR9x+hrNsRByI= 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=Ugi4x0Rs; 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="Ugi4x0Rs" 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=Ugi4x0Rs2waIV/VYW056LyfPwR I4Rp3M4XHQ1R+8EoGhsUiPpCHgUP+eG+LIbsvaR9Z4TXA1HQiTO8+LVu5/Yd5HBkvo66rkdQYY4+M UzpmeFjmCcIYhZUL6ySk5cKHIwnO0CzcMG2S2kF+dqiYrWds6E0epL95fZUEUgBS6n9lLcs4r7ol3 I+j/zBJCC9NpbtIhDunlr1it7ZN1QPwKU0dnjBWNu4rzXMhZ99XYN0/8wyCHotekdcgElYpZRFuSk Z1j1RsqBAXwd5r4CydJJJBhiW9frXQJqlPiBil8fwjpyzVN7SMri2rnCwyo5uAWaY5hSwjOnQAODJ ENBT29aw==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkb0-00000001muh-1dZO; Thu, 08 Jan 2026 07:38:14 +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: [PATCH v4 52/59] quotactl_block(): switch to CLASS(filename) Date: Thu, 8 Jan 2026 07:37:56 +0000 Message-ID: <20260108073803.425343-53-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 05:28:56 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 63071341AD0; Thu, 8 Jan 2026 07:36:59 +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=1767857823; cv=none; b=nJn98ujS4K4nvSBMzH7ERyaA82v0nlBis3d1PCR39FksjXvw5g0Q19khNs6Bj6Jslpt6O3lbBLRHAwbov5kZ6rF1ikWkC3to7JhmpfEyJSocIPOwDMV6KDu9JHvk7SyDksgU5bwwUOi5JVvTd+KWpfOJP4VVqol1Se3q6qX2VDM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857823; c=relaxed/simple; bh=ChpWIeg+38MgGLjdG9lHbGmsXI4DwNrcC5qNS+HG7IM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=HZU8AjXUyECtns7rA7SLu9/1iCoOuTpbOnm3FrRx6vzp2PAyO9oUQuUEaUiwRxnNl1sZoHygliIFSttYSXohvLl30L9ixYZWU+o58qd8l1vhofGWA3HwdIZqgeSZIE/7SsP7MchMu1/dv2KUB7YrOZIs+CREq/o84O5G7pSAySo= 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=ekPboU6A; 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="ekPboU6A" 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=ekPboU6AOWobolBQnKLQ7XAimF b6N6WSE+lpW0Aa4UlUvcw7nyVACuzqw6nWJX2kqQZzsCk8UG5SxwVdS4QOjGX330IcJUIk8xRUAzA et8IXSkCLUPeVWfnxOsO18M9KAe7K9ysl/95zZixv1RI0k/x7dzD66n4/ZV/DxqJ3x2m+/to+v8iO NvJCUEY21WzR92jWqKBIIR0yVO2t6oEWoNSBDCKC0rCxTz0gCPCT0JQMMjk/B1KUitmAX9JwKfRcF M4+urEEeV8xy8xsTNMAMKSYAVtowAUVS+P9Vy58dsj8kagnY4Ml3Ojn50i1wulaCPXxkpcUVJ9c8k iBp5kFoA==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkb0-00000001muv-2PmF; Thu, 08 Jan 2026 07:38:14 +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: [PATCH v4 53/59] statx: switch to CLASS(filename_maybe_null) Date: Thu, 8 Jan 2026 07:37:57 +0000 Message-ID: <20260108073803.425343-54-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 05:28:56 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 8772B342532; Thu, 8 Jan 2026 07:37:00 +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=1767857823; cv=none; b=XWEIv6sDKxeZHWXy3Q9+dC6eVC3gHfMtHkZlM5zjkFjLYE+tweC/0Up6CEsJPQ3DIvrTIEfO+UgYFFe0hDaK6/oAHxQPcVuS/bQ/BTgNsbcKxLm4hB9Wjm8mnuKYM5ukWiEXNn6iDsaJQhwaAQiygVfEexagBC8lXQKKklc/hrc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857823; c=relaxed/simple; bh=ml4RNN/VCnYi1f5kE1GxmfC7TyVm/T5H+RGWeGZ6lPE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=p0Dkss0TV+VCDrXoTW6r8iwU96kl0DLgG+5shPYe5l786DxAl6PJGqGJf63sNUXyh/m9PtWf/fUNc33IYTIj6xjslLWwZk4UfoloDeOKiY+D1xnZe3uXVMkoDM7/YRGqjG0YU3n1VT4G8CuAshs07k8Fp2oo4CXBXLeRfkb4L6M= 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=LCqYn/K3; 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="LCqYn/K3" 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=LCqYn/K3og9GsXtqYeqjHOltkL sYN9hFq8j+w4NVS6su0ZVBTajLk0GdoSNLTXtr3yCp2VBQUtZJQI0C5wIsmQpTWwiPchv0ZlopuCY 2145jBUa4qAjFLE5Y6hGLUvNn/jGvPUTvQs9QqSFplPoG4bl+3E2O4oAxdxUkDv+w4qj1F5tRPYLF RCzkN90bl8cSvXgMrdwhSZB1tNz8czldO5sHp6SEWni2k4sGjjF5YQDMkOPM9Tuc56DBH9IDJrnbc nAXvroYkl/rwo4xJ2Xssj3J1xL+qNS2zAOrSh7vnEPf2JYmXxQC1JNBCPs1YpZcvtVkClqUA7vhwc HLqpoCGQ==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkb0-00000001mvQ-3OHy; Thu, 08 Jan 2026 07:38:14 +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: [PATCH v4 54/59] user_statfs(): switch to CLASS(filename) Date: Thu, 8 Jan 2026 07:37:58 +0000 Message-ID: <20260108073803.425343-55-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 05:28:56 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 61B2B341ACC; Thu, 8 Jan 2026 07:37:00 +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=1767857823; cv=none; b=cnKSFO0KAasNQExRQxO4dAs0TumbWsnqaEe6IvVGbuIOeTaih2TvZDi7Wh62kCnWPFZQmjPeMYH9+Bun1uc9ycUeJz2WyVZ3aZ65O4nQ76c8smTefDN55NMhkGdjbWp6WHiJYYK3PiPu85N8xBMXqO8Oibfkw8MlKsGmehhI61w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857823; c=relaxed/simple; bh=JqqD6xeqUDj3nRwRtlOX37SQyfwoFYklo2JzhGSCFzA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=f7GG4Sm4ZZ39b+phezRyBnfk3PC3sIg1xPNl66UoNXVmjClSFtl8zJm+STctuyQ+V7UpVP9HiW5K0qQuxYcJ+ct7+p+XeH7Pq+tMQwaAO1Quuwj7aDya4+qOxuaa0o9b+KBLhgT3aV9u1EpBvpBk6sktk+ggI/5dR6tvevsjjF8= 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=k4DADIi4; 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="k4DADIi4" 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=k4DADIi46xpKURBHPT2LJp4QHL rV6AmOPsF0HHFLl3vWai/pFieZK9J0To3rELN1dtnZcjxkdWmuTEaVC6n5CcWKIWjAWfGjZZrDpN6 XbaeoHM28BeTmsj/RuIhC5HTi65bRR9Ht4OcNqjXkkWLQIQcfvbwCS+d5uCc9auKjZqWuGNcgbYod GSJ4E/ytpG/CtdwOENF4L+1XMnpumFFgsDABXlHG7hFXPd/CVMTpF93owaxRefUTWLqbLzQKrAHkU vC/QT9RUT9BTmzRpXH+rv6BfBxZfufpBhekGjxOnqVvz0r2WZ7bWsjvS4qQISDJCAVMzEODs9LLKN 1zHr0ouQ==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkb1-00000001mvl-0Ei0; Thu, 08 Jan 2026 07:38:15 +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: [PATCH v4 55/59] mqueue: switch to CLASS(filename) Date: Thu, 8 Jan 2026 07:37:59 +0000 Message-ID: <20260108073803.425343-56-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 05:28:56 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 89554342535; Thu, 8 Jan 2026 07:37:00 +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=1767857823; cv=none; b=lImOEd7YLXDxIeqxp7fG3CtkhdRd2htyADcP1H+hgq7yOQZbGCr5lh3EDZvZqISlrJklASiYQzWW+aOQjpEEHdF4kpYUXXgHB9rVg+bGxviYOX/d4mrYsG6q5kO16H9ylYBzYIqNZTKqeS53lthD9jn3n6/gzvLJtOLr/QMmbLs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857823; c=relaxed/simple; bh=D/4Kpd2bYKbkRLQSN5eQLKG4OXd7jN3AcvumkEOaeMI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=PAh5x6+9uGb/KVF72DwtwmWswe3xHZljjhbUcnSxzB4GD86rdHjAbwTra6ozZTPkIdvrWEXFHX5OzgNfuUxECZs4oPsU23FuWzsyWB2i/2DL1raDI+eSQCe5wi4FwBBe38/dYiwCbRGzHgmVcpv5hKKxfIGuLct0FiwMHe6oqZo= 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=c4WaRlmR; 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="c4WaRlmR" 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=yl4N9qiPKC+robz7RIG19DtsqLRtLo4jXB61e6cJSfg=; b=c4WaRlmRFez+LyIO8ILViGLBfz 18fySqcGXGPRGIrZZ/QDidAJrVsUwrYmDIJEXTbtBZ7V9E0zx5z/ycWl3Z82rBrLM1ncEjoRZFhyy Q9NBpv0UInSVc3ulZ70e969AVo5QCAalvIn+s1Y+ydBBjmSSqCHI4QCsIyuwU0fcUiorqedNWY6vK bQXb6b9jBQAkLW7qhOvfUYAyXhl4/YWMJLkyG0t6D4mhB/0zYTs5Zfl0pqRFlbS/d9q+LicW4fFzC 2y5Zh6Qw+WI+HBrHCKxIejloIJ0ovBrW3QTNIwqzwQqIr0gakupTaX4KpS1U3KA14cXSZAA37r3cV 7+sX4oog==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkb1-00000001mw9-1NOv; Thu, 08 Jan 2026 07:38:15 +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: [PATCH v4 56/59] ksmbd: use CLASS(filename_kernel) Date: Thu, 8 Jan 2026 07:38:00 +0000 Message-ID: <20260108073803.425343-57-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 30b65b667b96..523bc7f942ad 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 05:28:56 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 E16E434252D; Thu, 8 Jan 2026 07:37:00 +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=1767857823; cv=none; b=KoVFUwY67UXJw3ZRuD3jgV2XeZ/KJnWfKUaZ2YvkZcui3EIe3QudmhSKStP4wFsQp1QiKkgg6vWkTMqC9xfFseTkItoHvijp0uxdjZokcCF7b3luTs/Ba2Rf0Whwb2s5uv3svIqAORmGSh0TC++eUD4OfLlmJ/pakvhqZMwgoeY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857823; c=relaxed/simple; bh=RZMRszjUY/fIM2JLm9jks2g6cg0EVOixOwmn11+9ZsU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=pQkC6bLUY3iR6K6aNDV8x/VXErswGzRHCdT4VA2FmZaGDxiiCz3wzP1TTZRh2NwU1mB6ge1IEWS5EEtEf3wgux9f+GPBu+krivdkJc62ySfAivAyOh/FI43PqHKilYLu5sr2qbY7UOKLXrnaryP/IxqklK3wzxmo3jVKtuhzLBk= 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=aNKdbbg8; 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="aNKdbbg8" 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=aNKdbbg8F69mg+KVqWmYxsUMii OGUdUuFdxW+gfU9rBY40iGTrbghF66bOZnpU57JHPYE3+NsODfVEWCDJbYvEWznEyNVhMghAeLnXb lltqo9DcbD00xcQf6vC/7h+2RmTqmLMkaJtO+AQNx0W6nUsfxDVn9wwBHk0m7b3LzLuS4ozEgEt0n 5Dk8sYO/UDe5A4ZJAv4Ys92N/SqANBXb7SyU77RpzsMsKlsaSrN32ZnSM3Esnj3+p6+WxCf196hDm RSQ5tV3t0E9czwAVYL2kbda2E1aVtAjLmZHANVX6L0Gu+Cvd7VXl03qGltUxNbr+h5gDy47egWmUf 3lofgYsA==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkb1-00000001mwQ-2RQS; Thu, 08 Jan 2026 07:38:15 +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: [PATCH v4 57/59] alpha: switch osf_mount() to strndup_user() Date: Thu, 8 Jan 2026 07:38:01 +0000 Message-ID: <20260108073803.425343-58-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 05:28:56 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 656D8342160; Thu, 8 Jan 2026 07:37:00 +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=1767857824; cv=none; b=iateVH/2DLUoX+fcEeEWouH2DGrtWf6PN/SYnS+AzwkzEQND/dB1OBNXb1TZB5BKuC1IsCz8B3L96/rwyYJnEQEDwcTpopNnpQ7ScAmVHg9XInthjZaALVEkElgu5FeEX40eyX9Fcnud/D8+mOJ/pPVoJsFsFdZRdSjGz6Pwylg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857824; c=relaxed/simple; bh=ed4inkFbKg5gXwGxXVyNFfqCJTe0MbLbW/j1/GoDH1w=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=W6x/R/yjUFSGSh8B+HcOgiihFtBGZ1ubDrpua5ikbQqyb+48w8wTNgz8IVL7yzk1/TdMFml65viZciYNFbu31X1SNeWOJIbUB+djbDwzB7h5XsTVpLxuIVoOViTeQYYFR1Y4A2rEK4BuRky0Xb51rQOWIppYA1VAsu+etmRstj0= 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=vJHMTA3x; 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="vJHMTA3x" 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=vJHMTA3xnsNuazDLc/DOHAAF3j Ta+HXaPsDQ/4x+U/mxZZa5YnCv5+4I1kvMHHZaYXGqHGL/1J5NOFNwg/858K2Dz6Vt0Yp1eV+KAuk GXNuIyi/7RLioMk82m90OG3DI2MM2EnKqhL5vw0P+BGd6lxWhmFrEFHOigGhicdG3gpDw4Z4lKL0r QReD531Otx/gEbfEPX/evjOSkTiVmEnRJFgpo+LumXsdmz9BWPoCliBTr4RMOpSTISkhkXntsisZ6 hl/kqJ+l8jGMi9dZG7n08058HMWG9YYSIumMbiIFBik5zffIJELl7y75nQXqyBFJA3sA7Ww4B9Gxj MsmwKAuw==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkb1-00000001mwp-3Ehr; Thu, 08 Jan 2026 07:38:15 +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: [PATCH v4 58/59] sysfs(2): fs_index() argument is _not_ a pathname Date: Thu, 8 Jan 2026 07:38:02 +0000 Message-ID: <20260108073803.425343-59-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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 From nobody Sun Feb 8 05:28:56 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 E7A97342539; Thu, 8 Jan 2026 07:37:00 +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=1767857824; cv=none; b=LwzGBhl9E5xlLzAau+HwsAh9xZFhPd0rotTNzfer8jCgRmG5IFMz1JfPDWBvxlI/JiYmqVqL0ajtcBFdQlt/tHTC0hy/pvcFCH2FFS2HTfpkczHX4N6EBrdXzJ0Nlq5LiXGXuRZpBCad+6r3eUHmViEhXBq9CyaYApjD08dSnss= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767857824; c=relaxed/simple; bh=yoBvx7PMTgvFHImcnFs/b/pKX9fsUsb+NkQDY8xLuIA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kFVWpqU1+p9Q5/+QYf1S+bJPvkjspdnOaznEtn7lP6N1GQlK7l4gP1yQZzZOGQNkc/+ZCEl1lLk/X2Lwfb0d0czifdwIfRCBE0QgKTuy+ZjmqjLZacPoulvKmxHeLFfdFe16xl4kLicbAA2g6mnxYhe/UDgCdXePDS657gEHBSM= 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=kPjYk4Ku; 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="kPjYk4Ku" 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=SSzxc7/Hgm5ux3/KUYvEqBQHfG5T2IKzIwi+kql8s1A=; b=kPjYk4KuYODtLNcxf0QT/cwAzP 5bsYDO8tac88+CCUDW1OUs2qujwGChRmHzx/IPKYvbqoOleuSP4d0Mq77BK2n6fxamPEaLVAMlxtw l//6jg7eRDjmfHm3YitUdLr0zHx2kAwBpYq9ROKLl2d8Yn8TNWImqJaItitX+2VtSz9l1pWDWLtIz 1dQRoCRBJNyzaPNUItIfbmD9HOB3OwzXpHxjoOMyBdJ/NR5HPvdYcmSBbYPVyb8NJn9D9aUye+cVd UPaBRWpZkf/EVFmgq4lesipghKUZHSlCs9xuHTPDIC2elz0WgZkhQJe9IFhkP2gzIKL59GZ/L8Pxw bu+aIeFg==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vdkb1-00000001mx4-45bB; Thu, 08 Jan 2026 07:38:16 +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: [PATCH v4 59/59] switch init_mkdir() to use of do_mkdirat(), etc. Date: Thu, 8 Jan 2026 07:38:03 +0000 Message-ID: <20260108073803.425343-60-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108073803.425343-1-viro@zeniv.linux.org.uk> References: <20260108073803.425343-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" Completely straightforward, the only obstacle is do_mknodat() being static. Signed-off-by: Al Viro --- fs/init.c | 88 ++++----------------------------------------------- fs/internal.h | 1 + fs/namei.c | 2 +- 3 files changed, 8 insertions(+), 83 deletions(-) diff --git a/fs/init.c b/fs/init.c index e0f5429c0a49..da6500d2ee98 100644 --- a/fs/init.c +++ b/fs/init.c @@ -140,78 +140,19 @@ int __init init_stat(const char *filename, struct kst= at *stat, int flags) =20 int __init init_mknod(const char *filename, umode_t mode, unsigned int dev) { - struct dentry *dentry; - struct path path; - int error; - - if (S_ISFIFO(mode) || S_ISSOCK(mode)) - dev =3D 0; - else if (!(S_ISBLK(mode) || S_ISCHR(mode))) - return -EINVAL; - - dentry =3D start_creating_path(AT_FDCWD, filename, &path, 0); - if (IS_ERR(dentry)) - return PTR_ERR(dentry); - - mode =3D mode_strip_umask(d_inode(path.dentry), mode); - error =3D security_path_mknod(&path, dentry, mode, dev); - if (!error) - error =3D vfs_mknod(mnt_idmap(path.mnt), path.dentry->d_inode, - dentry, mode, new_decode_dev(dev), NULL); - end_creating_path(&path, dentry); - return error; + return do_mknodat(AT_FDCWD, getname_kernel(filename), mode, dev); } =20 int __init init_link(const char *oldname, const char *newname) { - struct dentry *new_dentry; - struct path old_path, new_path; - struct mnt_idmap *idmap; - int error; - - error =3D kern_path(oldname, 0, &old_path); - if (error) - return error; - - new_dentry =3D start_creating_path(AT_FDCWD, newname, &new_path, 0); - error =3D PTR_ERR(new_dentry); - if (IS_ERR(new_dentry)) - goto out; - - error =3D -EXDEV; - if (old_path.mnt !=3D new_path.mnt) - goto out_dput; - idmap =3D mnt_idmap(new_path.mnt); - error =3D may_linkat(idmap, &old_path); - if (unlikely(error)) - goto out_dput; - error =3D security_path_link(old_path.dentry, &new_path, new_dentry); - if (error) - goto out_dput; - error =3D vfs_link(old_path.dentry, idmap, new_path.dentry->d_inode, - new_dentry, NULL); -out_dput: - end_creating_path(&new_path, new_dentry); -out: - path_put(&old_path); - return error; + return do_linkat(AT_FDCWD, getname_kernel(oldname), + AT_FDCWD, getname_kernel(newname), 0); } =20 int __init init_symlink(const char *oldname, const char *newname) { - struct dentry *dentry; - struct path path; - int error; - - dentry =3D start_creating_path(AT_FDCWD, newname, &path, 0); - if (IS_ERR(dentry)) - return PTR_ERR(dentry); - error =3D security_path_symlink(&path, dentry, oldname); - if (!error) - error =3D vfs_symlink(mnt_idmap(path.mnt), path.dentry->d_inode, - dentry, oldname, NULL); - end_creating_path(&path, dentry); - return error; + return do_symlinkat(getname_kernel(oldname), AT_FDCWD, + getname_kernel(newname)); } =20 int __init init_unlink(const char *pathname) @@ -221,24 +162,7 @@ int __init init_unlink(const char *pathname) =20 int __init init_mkdir(const char *pathname, umode_t mode) { - struct dentry *dentry; - struct path path; - int error; - - dentry =3D start_creating_path(AT_FDCWD, pathname, &path, - LOOKUP_DIRECTORY); - if (IS_ERR(dentry)) - return PTR_ERR(dentry); - mode =3D mode_strip_umask(d_inode(path.dentry), mode); - error =3D security_path_mkdir(&path, dentry, mode); - if (!error) { - dentry =3D vfs_mkdir(mnt_idmap(path.mnt), path.dentry->d_inode, - dentry, mode, NULL); - if (IS_ERR(dentry)) - error =3D PTR_ERR(dentry); - } - end_creating_path(&path, dentry); - return error; + return do_mkdirat(AT_FDCWD, getname_kernel(pathname), mode); } =20 int __init init_rmdir(const char *pathname) diff --git a/fs/internal.h b/fs/internal.h index 5c3e4eac34f2..4c4d2733c47a 100644 --- a/fs/internal.h +++ b/fs/internal.h @@ -60,6 +60,7 @@ int may_linkat(struct mnt_idmap *idmap, const struct path= *link); int do_renameat2(int olddfd, struct filename *oldname, int newdfd, struct filename *newname, unsigned int flags); int do_mkdirat(int dfd, struct filename *name, umode_t mode); +int do_mknodat(int dfd, struct filename *name, umode_t mode, unsigned int = dev); int do_symlinkat(struct filename *from, int newdfd, struct filename *to); int do_linkat(int olddfd, struct filename *old, int newdfd, struct filename *new, int flags); diff --git a/fs/namei.c b/fs/namei.c index cbddd5d44a12..7418a4e725da 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -5038,7 +5038,7 @@ static int may_mknod(umode_t mode) } } =20 -static int do_mknodat(int dfd, struct filename *__name, umode_t mode, +int do_mknodat(int dfd, struct filename *__name, umode_t mode, unsigned int dev) { CLASS(filename_consume, name)(__name); --=20 2.47.3