From nobody Sun Feb 8 07:58:18 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 E84C82DFA2D; Wed, 14 Jan 2026 04:31: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=1768365114; cv=none; b=p8k1urQI7l8XjPXROZzUcDMYiSXM0Z1Z94reWrUnXf0fDL9PrHovJzcUf2aWp/JpULFC0UjCXTuCoZgZEJhDWJV4yrH/t9bEc9lgKKK8NkL9EG8Rx6XhmjQAanlIvZaDrLV5fe+nLV+VtaWRi0F6iMVh20mylBl9z/1bLGS70+M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365114; c=relaxed/simple; bh=1z22d7wevdkqvPYggkzE3KL6dU8cNEgUkn1BxtLOP2s=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=TN0FUq2rJGmWlQKvmLYWcP6a8BKP0aWMF/AejiLQU4Vr8zYwYJ2Olz9IHUe/BBTbPyDKgQ/Mms9NOVDK4a62YCVGaRk4oKOm17WdXTMgGjh5Lyg+u4m9RClXIcNDyLn5/Z2NKW0AnOKlTvkr1lKeTN7mli7ozBTLEBtKGbuN0uM= 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=OI6NBWMg; 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="OI6NBWMg" 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=RbNOPaetTuN0lnTiQCg917aHs5AZU0T1trGPnAd363c=; b=OI6NBWMgr3YzU0+ImkTR5mdtGf yq/3DzfmgnvAyhPnMK3YlXuIaAUof8Eh8ZZGSVmdydNidpeFGu2t6qE4mgYWM9WcyYrk7i82aE4hR S7pvUx/cnXMBGp2I4TiIyJlAK49w8DZGyxGIklivnNf3HmLTZhPI02dKecp8IV3TvRrUnnCqPeXZ8 CyBd/URPTbdgXbNVlIRcm6bUTxRm90uJBBdg7TaPPAmWYfrAoURr4k3upWbQehxZqKAfO6GZXFqcE KhoaOujDDPV47lxYRG+9jv+bVivbYxMWNzj+hnB7lEid9l8h3rLg1fPpqOKCY6UpPCl4+Klp91TZ1 kYbv10zg==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZC-0000000GImz-35ZI; Wed, 14 Jan 2026 04:33:10 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 01/68] init_mknod(): turn into a trivial wrapper for do_mknodat() Date: Wed, 14 Jan 2026 04:32:03 +0000 Message-ID: <20260114043310.3885463-2-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 init_unlink() and init_rmdir() already are; the only obstacle is do_mknodat() being static. Signed-off-by: Al Viro --- fs/init.c | 21 +-------------------- fs/internal.h | 1 + fs/namei.c | 2 +- 3 files changed, 3 insertions(+), 21 deletions(-) diff --git a/fs/init.c b/fs/init.c index e0f5429c0a49..746d02628bc3 100644 --- a/fs/init.c +++ b/fs/init.c @@ -140,26 +140,7 @@ int __init init_stat(const char *filename, struct ksta= t *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) diff --git a/fs/internal.h b/fs/internal.h index ab638d41ab81..7267aa0926a1 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 cf16b6822dd3..4595b355b3ce 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -5018,7 +5018,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) { struct delegated_inode di =3D { }; --=20 2.47.3 From nobody Sun Feb 8 07:58:18 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 E93412E06EA; Wed, 14 Jan 2026 04:31: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=1768365113; cv=none; b=cnjNalMF6s+9IClUQxOQUdfcb+DEgqPR+8gRI/foRnB8oQroWmu3xCxRYPrmvbv5fGbodZ06YS6fFwsg7RffL7cNm4RBF4YOdaNR5TX8F+oAR5UdwdkObKeMveOnDiUIAf2zBigdemxUUDuDQmqou11irhZaJPH3C1vOPQV8M9E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365113; c=relaxed/simple; bh=+/2fJOB1BO4S+MXr2Oiqwn2QXMarVYCqR7o31SP5sBI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=G2KEFK8m3WL0RzBW/0b97s0F3U4plJPO1uQTlEP8v4pWHttz1RQDCOc1LTFJZLal3mrKJpbbGF0iqwQjYt/DHxb2y4GpqhClVxWKvPfxwgHOhmC99YWaW5A1lMv46Pw0FoQYBoKdwFtypYTwvQFzVV8VYchlOaztEKMjx1+vOuU= 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=ghdvX/qX; 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="ghdvX/qX" 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=DaO+ZA83YcIa1UqEs5gSGH8vIlxyVTG0/Vk+SuN8d7U=; b=ghdvX/qXZbt5hXyxx8S+cQwRpC BHbRvqfzH0A5u2/hb6DCol9OQtymQVUC4M5YU7iyQkGNQx/QASvV8qgx3KiCKb3Krzf5F39XrDDed lUc/W9CBtbUQp9V9Vu5nupNLLn8UOgqt65tG4nTS2RRnKf2Z6f/wAl04it5lh2Yr+7UBHIJ8Ky6hk oFNxBjy0UsU2gzBCU0iVvexwmHyWd6HAD9ucFiYobERa0CRzuMzccad+oh80Av2YgRUMRr9uTQBZU S1rkN+8U/XsZGhd8yAMstmR6qOoTB3gcpitGOj1LynEP9ZA77qHm23m9EfdnWliuoZVnqvNXMyZiv g4E3JTDQ==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZC-0000000GIn1-3kmJ; Wed, 14 Jan 2026 04:33:10 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 02/68] init_mkdir(): turn into a trivial wrapper for do_mkdirat() Date: Wed, 14 Jan 2026 04:32:04 +0000 Message-ID: <20260114043310.3885463-3-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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/init.c | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/fs/init.c b/fs/init.c index 746d02628bc3..4b1fd7675095 100644 --- a/fs/init.c +++ b/fs/init.c @@ -202,24 +202,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) --=20 2.47.3 From nobody Sun Feb 8 07:58:18 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 E811C2DC350; Wed, 14 Jan 2026 04:31: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=1768365113; cv=none; b=NpEXJU/0xZv3SidBRwDV2wBPVg4/40gCqnOONa+Sa6zMxdCVMlHVZdr4kbFd9omh0kL7PSd9H62r69MfJtTWqUZS8C29X4uDemxgfUA+8MSVNFaW15mqU4itIzgzYr0yvwT7NpFpY61ptDt9FkP/bvgcr3MV8j9YlKTCR3xpTOY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365113; c=relaxed/simple; bh=HuofTO6W7vR4qzfevIkIBi62Ny1xGF40NvZUmdOESYA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=UfZdvS+48bCI8BFkRqq9wwtKHqMoSteZEXPN1uye4paGb7dBXZFUUo+gPVfnSjTdtMrEUaZg+scDXzPm9KnajJ/u1FBqTwLDIeGnj+WuwWJZD1FqOskuYKc8jm4DiwfBWMoZczADHQLlk4Tm9ld1vyNt2upK1Ke4XKPj0oRrw7o= 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=ooKloF7Y; 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="ooKloF7Y" 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=5sjmtHpN+aNv13Y+x7OR9WyKLSyrvAiIxsgVcm3G3Vk=; b=ooKloF7Y5owgjXCDb2rohL8m+F E8xTkvDuL+MAjgnO773vg/6C9RgY9im6OWJd6AocKJZYvvuhffS7+ey374q7XqBCa/9MPWmNxEQo7 kB6WEsq+fpoX3AUSFn7qVcPpuAA+a/vBIOuhFl2XZOlkpBm/VAM6vE2lQfZjUNKsTfOHk2ELMTyuA b0v9wlzcb/rRSiI1leG7x1QkqG2HB58YflkAjUXH0sEzbdHTsufEtfCpavGUa6VdkrFnUK6cjwVRM D9UOs1Oe9xbnv5R2akxbA9CsM0yI/Eg61VTauy32Tktk2dkCmaXAdZin3P3P8SZANgtrTQYPNQm7l wpLzmuWA==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZC-0000000GIn4-48tA; Wed, 14 Jan 2026 04:33:11 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 03/68] init_symlink(): turn into a trivial wrapper for do_symlinkat() Date: Wed, 14 Jan 2026 04:32:05 +0000 Message-ID: <20260114043310.3885463-4-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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/init.c | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/fs/init.c b/fs/init.c index 4b1fd7675095..27e149a4e8ce 100644 --- a/fs/init.c +++ b/fs/init.c @@ -180,19 +180,8 @@ int __init init_link(const char *oldname, const char *= newname) =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) --=20 2.47.3 From nobody Sun Feb 8 07:58:18 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 E92812E0401; Wed, 14 Jan 2026 04:31: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=1768365115; cv=none; b=LQMNTV9xGSOPFE+yR1++GlxbwjHs1KU8K1IHkGf6os8V4u1xzRouoaroMffudlJ+Y+kkc2kQSNO8sqAQzQPDpBujeoZIt3C0B0MMKzIUuA3FwCwZxlfwRqolFzty+9txp/9LVL/rYdyn21Z4VkGiSeyQPZ8Gzg+pPsQ72/9KtvM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365115; c=relaxed/simple; bh=XOQAkL5fM0vrcEb36ahezT4R//aAridj+jkPrP1FoXE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=j1y+4WaIj+CdK6s4CVCHMfviy19USfsGEGidobCmC93x6fpGC4uETXvohQElnTmjxwO2EcCQf1CaINSx000ZmjG1izboJZGolAKlUG4Oq00LkPQlMrpwvPXxOVtLZBCc+NJm+D5IutMiBfwwh9X+61SCwfRrW/+tyspZ6D1Dvwo= 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=PQehYD82; 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="PQehYD82" 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=hP44CEabDEpZai/lhIeuT6yG/oej0/lVskNP4hgr82c=; b=PQehYD821vacnONMQO66RSyrIa fBbK6yUJPD+O+D/kyTXsgvv7rb+mrIvfPt3Gao910Pm6umLTafN44C1QHgyE2l4Doj2AyPJfdQCYD 2dsLr87E1NeM2Wz+PTwMYTNjg1tM3ZOI2uAVRUhU47JmSTpG9qPSLk+pQZTs2BzVh4zpIHRiLwVVl XeAuihqN9rM+RXRyoXnRde6w2tRGBKkSCQXg8x2tLq/CJaWP83Ksv+ZJh0a4Bf2SpZQt6OjzCb8+G EIYJMTgbq+SO2M2LHio6Chl6AzayKhVLdwAnh0Mm+ximzpOOJK/7+iNLcW53kvycCfDU4dD+jUOFc GIs0lfCQ==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZD-0000000GIn6-0HXh; Wed, 14 Jan 2026 04:33:11 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 04/68] init_link(): turn into a trivial wrapper for do_linkat() Date: Wed, 14 Jan 2026 04:32:06 +0000 Message-ID: <20260114043310.3885463-5-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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/init.c | 33 ++------------------------------- 1 file changed, 2 insertions(+), 31 deletions(-) diff --git a/fs/init.c b/fs/init.c index 27e149a4e8ce..da6500d2ee98 100644 --- a/fs/init.c +++ b/fs/init.c @@ -145,37 +145,8 @@ int __init init_mknod(const char *filename, umode_t mo= de, unsigned int 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) --=20 2.47.3 From nobody Sun Feb 8 07:58:18 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 E83592DEA86; Wed, 14 Jan 2026 04:31: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=1768365111; cv=none; b=oWeZ+BlrIjxHv9hPGgTxUsEh301Dcbpe/1Hndvg58Fc930UhsTwf1SwWHmX5OpSLfdNUAhVXisB0RbK1roJBOmsUsOa7dIvoQ/fqRD+ShLWzVlZ/DgZTFMVg9QAqN6D1U5S5BsEh2Ee8uKoMitrn5fuxTkfMmJEAkeaOTZFIcIk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365111; c=relaxed/simple; bh=nduInwyXK1O/hLg8VI7EZgIaVz1ezaGJYEXVgU8opJI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=F/daMgRyAv/ykaW+4m3vZv427FSU8tPEyNeICniH+GomExiU7Ka8g4f4XfS+VRXa/xtW/qOnXz0M262MnhdjwvmPhPcAzJvgwD/fC3Pb7Lg4R4x7/wGLsDb5KXQq/u8dSN4/11+hq9AAC3UTtVSmM/2R0BBbG5sXONZ9QMyoJRY= 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=EzGmlcSk; 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="EzGmlcSk" 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=723KmsOQntt+Z1P/JXUg9Rp00cs102h/CYn5O2iaKHg=; b=EzGmlcSkqHdR0PWx8zE/F6NtI4 JLg6vgfavTxxZaRiG2Z9Cdolp6P+W/Nvv9P6QMkS+/clNlhs6hkC6PBNyzs2n9BpqnuBuBWT8OFfc kA8t/G3ollAwBHaZjGn6SUzwCPYb8CWA0IPMahZ3ZH1YMr7fgwyS2JaTvcNG2vAjUSILjAPWYVoqZ Hyx+4W56Pq803hzH2BF9WTd9EvxJvtWe1/7TPY78kk9oBr82o5YuULuItV0ngVvq796oP9rfg/VCU pAe2XQ9IQJea54HzzB6LDCwV0pjC3bH7AUf1EgFjMB2VJaMOHZrD4E0/xEu1P4px1Wj9U1I0Lz2yg lmE3dw9w==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZD-0000000GIn8-0hXF; Wed, 14 Jan 2026 04:33:11 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 05/68] allow to use CLASS() for struct filename * Date: Wed, 14 Jan 2026 04:32:07 +0000 Message-ID: <20260114043310.3885463-6-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 most of them do. By the end of the series we'll be left with very few irregular ones... 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) all with putname() as destructor. "flags" in filename_flags is in LOOKUP_... space, only LOOKUP_EMPTY matters. "flags" in filename_uflags and filename_maybe_null is in AT_...... space, and only AT_EMPTY_PATH matters. filename_flags conventions might be worth reconsidering later (it might or might not be better off with boolean instead) Signed-off-by: Al Viro --- include/linux/fs.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/include/linux/fs.h b/include/linux/fs.h index f5c9cf28c4dc..d49b969ab432 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -2517,6 +2517,12 @@ 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) + 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 07:58:18 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 E82562DCF6C; Wed, 14 Jan 2026 04:31: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=1768365112; cv=none; b=hNMTHAYECuRf2SvF86cQRdsj+KPYpHHJzMCHZIY2n0Mvl4rKKhSmMArAwIsdIFDk8C8eo6/HfXdPXjPntKURTN77Rz2JOUYZgF+DP8DdYi73zMbuDK045fUAR0+be4cndQj+dspql8KNP0jluo1YWQfrxjfMdE5ZN3zD5Hf1u/E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365112; c=relaxed/simple; bh=aacmgBkIekWcKT1nYvHuUWkKevrQq3dWCTP/f16lQvY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dMMWRw/gVaXq05JvypA+09Zsr29tyxSqCFNfmkGACYuFRQBBVBgiUQVXU21NLN2kE7WP+S3p+R3qr8CKIJkKEJxxHXwOXY6V7ArlrCnYtBsWewNCzy3HkkF0+bHhLQXYX7nyuRa4KQc3a7ICToUTReP5YXqNi+7uqzCtmw5SgLU= 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=ceNaE1sS; 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="ceNaE1sS" 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=ceNaE1sS/zgPYbDGwQH4S6r0bD WC+quE5EMv+dfUrAgY3h1aCIHMUDrm/scyKauOzy+GGkK9WRJ3Vu+2CC3UvH0dnpDoFryRKcng4Tn WfMLHoAWac31HtMheTdR3/NPHQ/PczBciz4S7KwRS1IBcwcB0jvJ0BjewvRb9jVQNPMX+sQCAK+6o bDTvL9amooLrCIinOvmPpNocVMwgO8KE5ObMnr7krjECOn10UDU7Ln0OAE7kMgnIVqlMybcxVNmFS 0dplpXw+NyLJb1mI/2gF6jS1eDzfZy3LLbq15Ff5E223iMtMyuWTVKbdv1fOFrZaJzhnPVIpIvFxt 6GxNjUZA==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZD-0000000GInA-15Op; Wed, 14 Jan 2026 04:33:11 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 06/68] do_faccessat(): import pathname only once Date: Wed, 14 Jan 2026 04:32:08 +0000 Message-ID: <20260114043310.3885463-7-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 07:58:18 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 E85522DFA54; Wed, 14 Jan 2026 04:31: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=1768365111; cv=none; b=Gln4GXsSPcsTRkDTGKVkcwprmSlhKdWPgOG9ucq2tVoBj6n/qG18zemJgu2UHRvJhIIAcBI/9ogYKOX+AG4mdsHBPdqtrS73IOgEyYIZXrtaCEBAg2AEA19aMyWuMIYfOqKUJeTm/youpgrRAXQLAzDJbYXck/DUKcx1+wOw5kc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365111; c=relaxed/simple; bh=l5FHgW47f+Yj1iy0m1MGYj33Um71tv4luVBFCT40jnU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=iOKNa0Szr3ytGGMwogKFg3wX8ImWKqOzKjsCsPg0IbdGTzSdZVsM1iVHyzwrDa84s9NM88Y/R3ooZ6SG/PWtO9xcez9emD988JXMSEBT/RB0KoUb58NAnYbDdkJcAHjuOxYb4w/NAADBmvSXgrWpzBjMdKW//yAQ3M3XO80gdCs= 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=KfAxo3FH; 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="KfAxo3FH" 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=KfAxo3FHMN98EnMTwigbun8dgm 4X9/GjMd0cNIdeAKRxIt9AMezGjzKQw4Z0yad4pJMDmx2rt9haMhRbaStCUbl9c2+9V1tTj7Tk9Lz HSJ6DAtg8x/y1bFGW0TEgBYIuBg2So2J5saT2Jaj6srFT+mcWcGLtOCCEuXovr4pZZOM5UqXw8Izg HHVDbFgDpeyQSazFGg37tVEnXMTShjUOY4ZevtwhW0upPw6iT/uDiEMYeK/cWQNOENM/fRP9n2q1L TCwyzc52s6OHv3DAD5Pv6m2k/Hy1u6rtUT2/72qaT0UA4X+YXv4WyI3lZhJUP7QhgNQmFoRPpxb3i YQ+b6rwg==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZD-0000000GInC-1eX3; Wed, 14 Jan 2026 04:33:11 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 07/68] do_fchmodat(): import pathname only once Date: Wed, 14 Jan 2026 04:32:09 +0000 Message-ID: <20260114043310.3885463-8-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 07:58:18 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 1A502284B37; Wed, 14 Jan 2026 04:31: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=1768365113; cv=none; b=g/g/nRnMsHghXovC7sIN/AfDREWJ6wUZWWSRjMCasjUnNJhvnbyg0Jj4i7++HGadf48o9pgH5W/8JOWCvLfqOtoPsGoGGQq2S/AyI08MN1FdoDWUO71TJiocrhLg7tHUB/ke116bpHMCVjdW6H088j9tvcHtCeL7bXjO51E9wZ8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365113; c=relaxed/simple; bh=VJR7OANqAnNeKsJcpMXd5sA1W1qzF/DrbRQlYMiYeY8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=H3uZKexXqPyhKLvxBlvajczaI6cz5FpKvq6rUSSAwu3Huxv05beus6D+jyNt3e9wg/Ycl3M/qzS10OCL5ZbkZZmuULdduF3wom5exoReNn6HG6yKavsPJlF9GsWSfBjqbMYgIi/6NKNjFrZSBF6kEkDNpVOVYDUS7UHbPCTN+zA= 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=L9KdhzPw; 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="L9KdhzPw" 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=L9KdhzPwdOvy348vcbjIOFwFij 5i2CPasJfG2+kI2wUp06VvjvqO1xE9aGpc9NeAugJp+PmiLzOEbQztw6oNIsSw4FUePQh5DKGtEnQ XiePniwC7k2K+qwTNEDizE8femZhIBGmINO1tEhrksY6I4fco7P14WrKq2LCkXCCX+hFuO6AarY+S emkJ1/QdBlQv+91fDkzUr19O7KGPtH4akWWLXwueBEGCkgRZ2GHdImeGk/gQAFAdx7HfF621Dxi11 T3yoAjwstMbwAUOa+UsPSSMWzghzSsgt9aa5nCub0t9cgr9q7DdwetHY4K0dlmcyVtXuFAlLMN0m9 fX3/9riQ==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZD-0000000GInE-2882; Wed, 14 Jan 2026 04:33:11 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 08/68] do_fchownat(): import pathname only once Date: Wed, 14 Jan 2026 04:32:10 +0000 Message-ID: <20260114043310.3885463-9-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 07:58:18 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 E82DE2DEA80; Wed, 14 Jan 2026 04:31: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=1768365112; cv=none; b=ATYjG+ULJzHXFMR/t74GqAUeh1T3yfpOzBi64wyPW8OZgMzRbxEczeGEO2S4WVRG2Hp1f9fPBgW8VGTv6P7vLtVJ14/5yj/Yoygoyt1/8EK9WVSDjhsih7qVYuxoVD9BWg+VbSKQQFI9qMp7vAJJPE/Cb3amTfvjJdKuzJGUyEY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365112; c=relaxed/simple; bh=z/VLR9eMxqpn2kvuklpoYwJtnuXwpuC7asBssPdV4t8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=j2BtqRHGOaxFNY7HC2uJ5Wcyp4wrcLahHFdBdv367hr4UbVxLIOd4SmJvkbjG4Zy/ZAEjyKBNuxlBjO1NW4liaQCVs2/73PEqtEXOKpOoqa+g2kM0fVVolWoROmTV98XuN3Chur3hscAJ/+EMmnnIaQApcrMH8VGFaPPakEZDW8= 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=saKWQsBS; 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="saKWQsBS" 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=saKWQsBSlo7539RdM4g4iCtrIN gP0H0hSxM3N0WcwrbmRHLQ+FVWHsbhPCejsS0DNn/Se/3vnEPQIIDHhO4fIWs0PPUd+H7J7jZXE6z uBPTOCYuRNoPGd68rpGNx6TV+J27NY/oxH53aZvTAHbqOBJCB0CiTyH6NCUrbY5gjFoK3XVok8dx/ t5EizHaoTiPWSoyE0cWXh1Cj87kHUKlQO4J/n9SUDM64L9Elx6vMnRTg+okdzhB3uhUbmEejXFJ+h zoXygry57nVoR6RJMQi7By9wAc9YoSfRDx53I9o4w7BYYCCQhqrVSoGkFeebWX+rVuyCIasetnpdM Bevk+XQA==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZD-0000000GInG-2SHc; Wed, 14 Jan 2026 04:33:11 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 09/68] do_utimes_path(): import pathname only once Date: Wed, 14 Jan 2026 04:32:11 +0000 Message-ID: <20260114043310.3885463-10-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 07:58:18 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 B55792E2665; Wed, 14 Jan 2026 04:31: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=1768365114; cv=none; b=coPmPknj638gBZwKFvGmCFh3NnfXs93EiIr+5VgCaXCFIM6ieBvQ0+UuHNoCvFwVJsfy7aRlin+FH08katLbRgf5OF4PxvqCms+lhJKsikCTpb2/KuEtFioS+oSdbJF+rA8Se8hst53LqxyNci8q4n07CjvIrlIgONsOOE9PYN8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365114; c=relaxed/simple; bh=4oxuQFLk8YkIq/5mYSLl2XCxIvuC91NG8EaCN9dotBs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=GdubSljC/TgkqZG5RbcOMLvGowq1fvRZUDYgaN9sraWvXeLS5SlHzaYbhBTtP+A8OYhRzv+eXuI9Jdd4uD/zu+Ql7Xv5UUFY3FSV+EcuBCALSomS8s+K6Y+oe6UhIsdI3EaYheWQQoi8tVcg/2zQtfgo/drCg0kIoGQxkQmC9Ww= 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=cTfabC0o; 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="cTfabC0o" 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=cTfabC0oPIYKNK9UbJ4KjLGnOW TDqhu1f3WssBucHdUG+waFV2yZEUmsVEC/HmNwUQyqGEeVqzbblWmNyFPbh2NOEADQRHqIe1L46jD T6OcFfN+MvzOK+uFP0cEqMi5TickAh5fBFNGfnhK4FIwwradyYHIbcA5Vqu7EQGUECa4gEBPjyfJ8 SPs0sK1yY8LyvmPonjdv2tqBOfCG154szM4ESHX83x3SKi0Frbdz52txwyPtJ3jptD6gOqsRklUEq pZ4Sp2vc2Ktz9906tmLe+uWyIFv6QiudkDmuMVDdIny5rdMvKekHC15KhT8xq7eqmIMtvAEZCyXv7 6cNXT34w==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZD-0000000GInI-2w8E; Wed, 14 Jan 2026 04:33:11 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 10/68] chdir(2): import pathname only once Date: Wed, 14 Jan 2026 04:32:12 +0000 Message-ID: <20260114043310.3885463-11-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 07:58:18 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 932F82D24BF; Wed, 14 Jan 2026 04:31: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=1768365114; cv=none; b=FPat7tHT1+W50BGxrHS+/mSkPyR3iDCbO5xmiK8cUukPU3hiqGSyWw3rz75d/Mi+NIYjmt71QxyG6xmvWshBqepaPbfCO8wLD+5Xom63jcfK4ztV2od3guSa6B597g8Vn56y54i3gKFjtkYFBY2m5KB0WtI5Q7sWhZKXKgAe3vY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365114; c=relaxed/simple; bh=HNPcrjOGPdK+rUjKiP0RktSumxuu6OLS32qJgPhWCP4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dhgMLcUjACr8ULhtaK67I9+ciDZ6CiNrlG+FkmlhCXVETsXRa1cRk9aaBZEMnqIz1jAl/WzW/xLxgOV+Psfd0UUq6uSJsf9Qp5cfBk9wzSAXzLsZ9h0D7GwN5mz+q3sHm0gtw3v8y8BgCKHZvIrX+R7bTZ8L+oLXETtsediaHtk= 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=NMYZ5IQX; 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="NMYZ5IQX" 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=NMYZ5IQXEUUWx/K/EqR0NHO6rL +doBs0KA6SqrxGzmASQJfkrM7QJ8afyzibwapUJMeK4xdUqx7H5Z31KG3GA20B5TEN3SSZCOdqtf+ bvzl0SDqlLFKoVtH5MyGpyNgL/9Sg0W9qXlEO9WuCQFZYMseOZThpbRsiromy7QnuYLGbUGqNI65c 0tP3qjiGoVUK3RP1q3uF1uNtkN052MYkAeUCQo6Ha3A37UfYJgMgEiPc3sS7oyT41DpZQaP6qieGa MXtHj+8Atop1NFt40IFCg1IiEFHDb1CmHklaAZ/R5bSN9LzKZA/5cTB0qvwhGROOvcPp0+zTcQkrg +mXRmQ4A==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZD-0000000GInK-3HTJ; Wed, 14 Jan 2026 04:33:11 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 11/68] chroot(2): import pathname only once Date: Wed, 14 Jan 2026 04:32:13 +0000 Message-ID: <20260114043310.3885463-12-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 07:58:18 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 DE37F2E92A6; Wed, 14 Jan 2026 04:31: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=1768365116; cv=none; b=RqDFC3jq1NGuK+qKLnOJXnFUYLvXEKNPyyWLWSarLLq7RWhMy6LbCHDojEEnpU0vAoVpMhaen/k5DAuKzSIWj/AfioJnU1pM3ZafVYlbRXLjTKZXU1NLqmZi6sgcl3usr+S/kZ8kwDJU9CjNBBWR+mvNfz1lFmAeQ3oUie9HatE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365116; c=relaxed/simple; bh=5MEqgjhpmzI29H1uV/1SQLwXuo398WOo5iQ8G4kZTTs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=X9wW78QN9+G/ST7s+ZBUcmINkojwgU2QjoqYG8hYExvJWfo5QV9jOp81zDqbvbDcQQT6/8uUW2/FA+SAsz4AeUQ5ReGnBKL17RwBkJBzQ8NqF5bonoIKjEC8aAPn5vcSPZy/8PYi284Gu80/1lmnNg3u3AIHkIEhgBBMFzp4SPg= 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=D7xCKeYL; 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="D7xCKeYL" 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=D7xCKeYLEI0WNdee+ydyGOjzcw 1Co/TKXZVuiaE3tW7G/YvX05tfI/wKDFwsMgRb7HJnloYewWg6Pui9Cu8yGJIbtPLpj/yagT87jxP wWOSNbH3YAEUQ7KQhElOiZK0cokX0/UiBp9QXFZIRnMLz6L0bHT8YidvVa+9tvWsqVrnt+VZYlGqJ FXvwKD8S/8xjkCNycBmOpDgyiXTPVwpFIDIyDb+dQEHqMmLDybDxUWMXvKEbMDAhEO3RhWvmfdc/9 FjLO12rzl4PcMkrnkmlecFMo/1JSIWPkMxbm7pd6c0Hah6kKopFoHcSBxhuTdmdoFOmmyRkgfcvvu qTg2M8IQ==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZD-0000000GInP-3h0c; Wed, 14 Jan 2026 04:33:11 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 12/68] user_statfs(): import pathname only once Date: Wed, 14 Jan 2026 04:32:14 +0000 Message-ID: <20260114043310.3885463-13-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 07:58:18 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 BF2152E6CCE; Wed, 14 Jan 2026 04:31: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=1768365116; cv=none; b=eWDDV6GqBxKI5CvstG5rUWjdICOlrT0M0m0B2j6RE0oFn1JxlJSnj4/g31/FiaH6Zxn5Jw2twSlv22x6bAD3VsGl1hP7r3BOWUGz4UrYpllp170fEle0u2lsYpNsuUeXKvOS9doWmBfvY5JgUm5zo5xeTNINLlE30moIfOa3VI8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365116; c=relaxed/simple; bh=zFlDLU2alFVD/MwuTFbdq6QS587tb9atKC26F68cFjo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=n6pXPp0Su4EK2mdU24qs5r/KQTccRnleQ4fdQreIu9JKDVIGIj3OGFSE9c7IVj2LMrYwZQJXqx5+OnSkmS2AD/0VrORr3GLVwkthuraeI4XEfdFLy7qqBHWvELpCgrofY3irehmFs+LYPjRJTfgoGMhbflaw/2XLRNvEelRdYzU= 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=Eyx6zVtK; 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="Eyx6zVtK" 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=Eyx6zVtKeC1a57zZ4GuXLtCX6+ ryIKdXV4Zy4+RL9CC9blHZX1gcOlwbBCLLjRCe1kOQD2vTab9wVNwmVbXopbUxSqsaJsQLwkz1uDj AxBJt2/xPhe7wo7usLRyWK1UAjIO2CdLkNtJHgRRZI5WN2iUGt/FWVYFHVMzwTpwVIFRDtlurBMhm 4re+osGD+D1DzSnWVsA0Ou/+cqvt+dGTaj3UrKxqvVCEOxcfuBar/vxPWz51jshJAnrq48H5Z4D+u 9ARmmL6XCCx1NW4sgQ6zKCUHfz4cEWKuXGgTKuALneABEuFQvcDSgerjCEMd+0Fj8E4ebW5tBdvu0 OBVHwhhw==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZE-0000000GInT-04wO; Wed, 14 Jan 2026 04:33:12 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 13/68] do_sys_truncate(): import pathname only once Date: Wed, 14 Jan 2026 04:32:15 +0000 Message-ID: <20260114043310.3885463-14-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 07:58:18 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 B582A2D73AD; Wed, 14 Jan 2026 04:31: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=1768365116; cv=none; b=mYgxx8Ltpt7rk0dmr6qZpcnGmEtCOCRH219T41Nk91haOb1DTQK6fywdZ45XZ4JvmcZAragV+Bg20Otx4JfEUzesIG0tebICp8e9ucjjzECtsVghITUKLhWGu8trZZfLWiILiJWblYsIZPfVZjwgjzw4uGNoICs7h5nk4e/K0gk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365116; c=relaxed/simple; bh=ejixYtbS5/J13hPkZAA0xbfFwhUsT8keMfQ9xW+VTHo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=FNI5ORIFvNHVBi9z7yU4lCba64c6g5yzWqAEcC+VKqbWaubjp15CZlkzjL/yoJH19MypKrdHmqbfkoT4BY3MQEg7MGr55LNWUjR/Y6FZOvdQFvS0YBXfrMc53Hh5zf1/gmdrISkZKYhrgxfJWbwTAIfsy/oPnufAWpUXsNSYaTA= 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=HzgfdmGb; 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="HzgfdmGb" 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=HzgfdmGb/uhuDBVCV97HcfpJLM zzjI0o1vwrwnV/vMWIWkFXK4yAPmYxJSyNQSHa4iOqoUlEU4PRbDnAmJOHoc2qbaGKDJ0rKyjCr5p DBdcRWcdNhwp3J+d/bUn6b4sAOp2BqIARuNSIfZ1x6Iu5RqsrRrIV++NUoimZP+/pofaitpp+/415 ZJojbPR1KIW54guMeY5MmUGy3S7pTQbVyWjbUD8VCAa3CvT+Al+Faodj5SDiYh9TSXqnYlOxS1DdI dlFYsPh/N1JJ73VjULWMgXdAATK4JVe+xbVQsJr6eItkuXm/AYK4mwdst851ncq9L8qMncdajBg27 mHSJmtSg==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZE-0000000GInV-0cPl; Wed, 14 Jan 2026 04:33:12 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 14/68] do_readlinkat(): import pathname only once Date: Wed, 14 Jan 2026 04:32:16 +0000 Message-ID: <20260114043310.3885463-15-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 07:58:18 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 996AA2E2679; Wed, 14 Jan 2026 04:31: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=1768365115; cv=none; b=bEB5u1U2A8dsDHzzmTVJJa+c8Gs4HoUqzJPICbsghqA2egU/RVWsphSawPZjQA4fTBFFoVlviQlSEEQshLHJ7yDI686qQ6la9D7FP7TdmrD766rhoILbEvqMEw8HTVj+OleChnd4Qm+SFq0OrgMrkyrWoxhaSUfbYYlpXoJpy48= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365115; c=relaxed/simple; bh=SbI3DRdTxhpxp15wz9oepv4ryqxg+FnvrVgZUV3jt3I=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Nj0z5tVD0y7SlnDe4w5ziL9f+VQjelU2atCRyj2UnEL80s0ck8lHCNombJ+8U0hlLbdBfHPu/hhKaAP03BABHv+fQZxx1FfKW8zhdah1PJBhd24NvPHh9nvPkp1x0yrRdmMthn6OiuREY6Qza+wq7CqqoCfdyIF3L35+FLly+ds= 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=W4JcMz6P; 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="W4JcMz6P" 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=gKzl0eKKcMD290wUxRb/9R5rQSbJcVDAzIuQbkXBR/U=; b=W4JcMz6P9w1G6UB4sewIlRSfok mFdBfbs+tqyd3Q971h8pngPlHB3jzvrHGYTao0tWwcW9rPPRUlhxcK4LrDe6wOYuWQrARc6gf0ub0 eshvB7EBXlRfRpWhfSrNttM74TPz7rcEZMTdDUUiWQ34iWTK7YAvULvays5aUfsScns/l4CLR4yok C7WcIv2rBvF/3K6NmzB9CZWJ3mcohBncHSkPVeXeCkNRJoAYBgREkuKNN/KQieXP9XQAKYhhBqmXZ 0aeaDe5iNVNOfBmALoUmTQUyWX7Zu0+I7XO8a5Mz4Gk5YLuLIwjCU2YaxR21nBx/t900pPoofrbUn oNkTsFJA==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZE-0000000GInX-17p7; Wed, 14 Jan 2026 04:33:12 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 15/68] get rid of audit_reusename() Date: Wed, 14 Jan 2026 04:32:17 +0000 Message-ID: <20260114043310.3885463-16-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 4595b355b3ce..3ba712032f55 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 d49b969ab432..abe9c95c4874 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 07:58:18 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 E90992EA743; Wed, 14 Jan 2026 04:31: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=1768365117; cv=none; b=oLs3prZ3s9MW7GpLjJ59vSAbVGtAVXrXs6IR8jnbAnGo8UqZbBh/PUuGxUuEGRU8B0961E7W0oU5drQ+/Ciy5/6kGilaY2mx0ohk+nf5XFSIHhA4widinXA4g1nf8XX1ia9ujoDHLwLyW642rG2Qo7liVpJYCjghSegymUUJGwg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365117; c=relaxed/simple; bh=IzrgXOT9z6vkgtrPDIdf13q7qyMmn+4ybA/ta0J+TBo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ItOtolMRsUAMghvxolNU0zua46j0176+VZSkz5ejNEn9/AgY47+VXDS4QfgzDuwM3VOG9K7/zW8FqxYp8cuWKcW5CdS2od1s6/O8HciPA26UduTvCWDfmFtBVllVnavGPYQDrcyKPR8ClScRoKcb0FwQC2ix1TdX3xOp11wqjJw= 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=mRHzsbt/; 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="mRHzsbt/" 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=mRHzsbt/EMjM0RGmJYUjo5wW1N NEHDBphqWm6gzFbTK5kdMXVtZIzmzYzBWMIYp5QGSLzyYKxG20QIyBSsnUffrIOGysBPcjc3BGLVG Ey1m5PoPIs+nxHqsLFwvK6lhwdZMq0YYH3frOgAm2bziBEv6ldTTKAMUCF0+wePAjt493w0mggWxy fEH6ZtySdHOz170rhW7fS1zCMfZHzUVeWKMHuECX6myaU+6igVdpThoYiT7oyfTTzIZ3zHujHIQgE u5GznV1YlZXbeja/wTvaZenli2BXGhKZQOC7igT/yFDmYd4q2EyEhR+you+px82p1K0mVWlvu3eM2 l5Ri9j3w==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZE-0000000GInZ-1akx; Wed, 14 Jan 2026 04:33:12 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 16/68] ntfs: ->d_compare() must not block Date: Wed, 14 Jan 2026 04:32:18 +0000 Message-ID: <20260114043310.3885463-17-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 07:58:18 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 B919B2E62D1; Wed, 14 Jan 2026 04:31: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=1768365115; cv=none; b=ilVSDhGP4HeLP6/KzJd9/LlCl3D5TSFYPNudZcKWhZCew0STh/hqyF/kdnPexL0C0m8IiC6De2rLmIOV3bkq0Wf6KdfeWpHJp8m5juqXwMMDQPVMw75BGIt/+nVXK5Euy1yE8mdhhka+FRgb/sz8epYcLKTvHTTMQYws4skvat4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365115; c=relaxed/simple; bh=YMNUEUX2X0rac/jj1KnbG49MMhT1wum48jSCSjbmLLM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=MolhaxUd1RNV1XhqDg8KTgaAmHUkBBbblanB5aLZlSbVJ83cGpjrYaTTg4lTIfAsAA+vcdPkltqkeLnaeHTe/Jjo4Y1sdNmuiTeGZsSqzjW6/qszEWlBcodvws1FWr7MP0MPmw7L69U3B/te02fm2u6M2b3iM8BhQYzi+1qcmW8= 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=ZsDFyg/p; 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="ZsDFyg/p" 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=wVP92Y8THW65X9H3vwh5lJvI+FBhhIBHJIGei+WW+zs=; b=ZsDFyg/pLFkFQbFTbzswbvd+z7 GLvV1alzsCT4Jyw6pxYxy7Gt8dI7tk796nwYxdJ3vG/JoUi/AUfBMDIK0r37FOuU1wVga7Rbfbvj2 YVdRpC0BNSdEolwlazoTxpO+nyCq3OHFwApwy+ZsLk+R/5QIZJaFKyFAW6/sqkacKGzGxukEjFKG3 RljD+SXruu1E63zIHvpXeWTtozAqzBBNjTjz2khLE0eonfSEPayIKQvuvposi1CryzgN/orQi/ULd jvVVyiAYlFED1gJh7thwUB1LzndRXtVo+1W5iUYNvFnRTqZtd8SKTByWdplFrS78+shWwh2AUuQie FhFonf3A==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZE-0000000GInb-28eX; Wed, 14 Jan 2026 04:33:12 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 17/68] getname_flags() massage, part 1 Date: Wed, 14 Jan 2026 04:32:19 +0000 Message-ID: <20260114043310.3885463-18-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 3ba712032f55..72ee663a9b6b 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 07:58:18 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 ED22A2EB5BA; Wed, 14 Jan 2026 04:31: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=1768365116; cv=none; b=EyT7ta7fMa9/kqFBjYJQi1iAaQKatDD4pFsCsBQiZBjVBgupkCldJn+bgbl6XjYx2kgmXec6w88OhS8XMODH3wUECBEUUaJviWDrhHUL0k4HOAOY75BybIhIgolqWhRQpzIbknDAKg5X56paV4HKmphTS/JhQjoKB/X9WvdlxHw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365116; c=relaxed/simple; bh=/0fIWoex2ouah10kzSGOP4Ttry/AywuteHTCCSrYFtE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=sRum3y3hL1HwRFVpLwV0kjVOP/91YNsiphXLqBobqIFuMpXz5mkLny8y1mt5jYQ8s3S5kV4rmagPamgwJbVwxFhdi03wiGSuohn5PGx6UJdep8RUA4a4JBwuAw8h/sGLcdJscoTld5RgIX/EDEB2Oc9L3ncYxRM7ar9fTd1otyw= 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=TsOug69a; 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="TsOug69a" 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=/XGuOGTquR6EckFojlTHWCvwfhZIN4vpTO02m2yi3yQ=; b=TsOug69aEkLQ0THA7cGCru2gt6 3MO9ESlS3bmeJD4PIWKA6pEHgyWuS3JOiVtmtyBATAjL0klgZxXJSZzZyz9FVaQmLB9UkULZ4cYAr SHYdS81BiXxuUXbl8pnkxlGFHhABOSCFxzI8XZQe1Y6ZYvgoRN6JjKsABlDq7gin+2T1tsOBznJ4k qhvxGDZ8Kc0DNQSUlERaXZEPK6DgEDkso7NdUq7W2c41nXYzeC9PpI2ffBVTkK+9qz3nq+EGHkRTP WOx5l+X07McS1x8Sk2czgejmj0NlzZ4ZsLIpOvwZeawFlh143AF02eFu0heR/RQnLeXeK4hUCev+N qsmdNfpA==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZE-0000000GInd-34qz; Wed, 14 Jan 2026 04:33:12 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 18/68] getname_flags() massage, part 2 Date: Wed, 14 Jan 2026 04:32:20 +0000 Message-ID: <20260114043310.3885463-19-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 72ee663a9b6b..953cd254216d 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 07:58:18 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 DB9EF2E8DE3; Wed, 14 Jan 2026 04:31: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=1768365116; cv=none; b=bk+lBbgHp8b9ouSCE93cvvG6G6MdAugFg2IXLVfNN/pUazu4yrGEbfwkwgnFVNhtLyP0MKcfFdkK+gkrgSjkeH3+J/110pSLoguuJ4FZe8rpKqx7ITQFAZA8zc6l2jnKZR0p3NfPzjxtTbhO75dcE5+LxVVml1Vi6AjrtPuh3oc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365116; c=relaxed/simple; bh=a3MPpKZTjWIVekKxJTZynNZ16h9eYF8xT00v7b75Cd4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Qc2zjXH+glAyKPcgsc6kYkDgmr6BppF9WWBPAqr7+Kjc1VWlZh3lpiyZAS63Lzn66WLoUAxjYPsVIb3+XPNUL2CmH7MvIlg2/OSlV4d9CEmDjhgE7cwV8I66A3eDX9yacz11kw1xbpWGd9XV141jRMWxqs9m4NxNU+w8A8s/mo8= 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=KChk9k9v; 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="KChk9k9v" 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=HPYc48+luZoqUO9CkyFBBnfHYc//j22iAMNPQEMCVFc=; b=KChk9k9v1wbClBOCQvOBYZj8Bg E1mkfK/fvqToNK1Vu8qATOB8hsWQUvlBjpzx/W2+XN5FUoZ+sSp8yiYvo5Apid+MeE3FbDkZnYOUn y6ozZhRGoRPrIHL50405dDvCqAINOvFuxsq5crrV6OTZNHe1O7LXWl3BhR4sRIw32I8JFukRCItir BjntYTTjo9hYeg/scx+qqGuD6nAZNq7OqXvTSvU+b1ZpoWezLy3ydnvUs/8VwYI1QHY8bB4ajieQX uiuTB+win39ZsU4r8Aci+BvOoH/o+jgyfY9ON2/ya3IHeDSh1OkUA5udIMqQbrLkoNbwJptM3dBYB zy30KwYg==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZE-0000000GInf-3Wfh; Wed, 14 Jan 2026 04:33:12 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 19/68] struct filename: use names_cachep only for getname() and friends Date: Wed, 14 Jan 2026 04:32:21 +0000 Message-ID: <20260114043310.3885463-20-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 7267aa0926a1..c7a34412399e 100644 --- a/fs/internal.h +++ b/fs/internal.h @@ -72,6 +72,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 953cd254216d..f0be36e257a7 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 abe9c95c4874..997d515bab32 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -2539,10 +2539,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 07:58:18 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 0C4572ED873; Wed, 14 Jan 2026 04:31: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=1768365117; cv=none; b=EFTd85e4lWqdvUS0QcR7Lt4i1F8F6m+lhBmF56f5zatx7B5yKsYNLQXVX5A0N/aqsNWm7kF9KBLAo7skmLuHgsVLE41kbP1jcAYyQVnD1HSSSlPII7PfFk5430mbS7+ylt8TlZOzC7DabEeN4tBFAeq7jafuuCvyscAL3o5eKHY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365117; c=relaxed/simple; bh=k8qMpO5CBjunaBoVfZkpYaRH/ZHk0yIwJ236SLab6nk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=hPbPWMHhuKVd4K9PCgduo2efBJ3FTe04Bdcf5kGt0hb/e9e1aXsZ7xFLSoxHI2b7MVavzNr2eKWYqZ4uYjdYXG7E275Bopbc1vpzRGAsavCguVdklg+IkaFH7l6h9x/wXxCBULuWVvujof0Fh1Bc6WY39b2aagluAeeLzKOpdNc= 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=Lug5MKm8; 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="Lug5MKm8" 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=+qY/rYHSNRPM4PiFQtmH86x1dAtWdCTQbBoCTiBygyE=; b=Lug5MKm8T4Q2YD+LlSlEpq5+wK ta1IrQv5MKhoHIPPRFpeKxE7pxcNXT0G34JKXkxdwzKXe+iq/mUY81nHHT9TgFYbuoDav0XBwvXml Q+3njOjH2mtDZ6xN5xHcAXp47mAsPkGtD9AvuyQpZTUcggRiRkHhlsWdA4za75zlD7AqpEhopK1Bq TAGYtX6Lnk/XEyY/Y9mBMND8iyUTawTZ5eZfy6fXGNzLwymbqkLJ8WcnOf0YO2ZpjDtFQL2h/Xvlm VFuBAv7Aj5RufjUfSSqsYWqXVhNHQbh1k9btG5IeyXZNGS2sWj/Vesi0JXYrfQuST/dILg/j6djxc 8jNWbEXw==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZE-0000000GInh-49qr; Wed, 14 Jan 2026 04:33:13 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 20/68] struct filename: saner handling of long names Date: Wed, 14 Jan 2026 04:32:22 +0000 Message-ID: <20260114043310.3885463-21-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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. [fixed an embarrassing braino in EMBEDDED_NAME_MAX, first reported by Dan Carpenter] 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 f0be36e257a7..57043b81fe27 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 997d515bab32..f0f1e8034539 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 07:58:18 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 CC9BC2D94A0; Wed, 14 Jan 2026 04:31: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=1768365118; cv=none; b=MRlorpbI1JHdwj3hW0K1ra3jRzT/RELrfh7eY9rXZgU4fWiMh9nCLA1QenlEYxKcWjtu5SxZt+glBWg3RkruN3IA9Iy5uAqjd9B7p91ACv+Mil/M4oen9/1d+0e0sPW81R6m0CtoO11extRkSrNfIvlOqtm3hs+vvEUPQoCW87U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365118; c=relaxed/simple; bh=2VlP+6+MBKxgN1IclcGfQgfePCUJ8rHRKFNxyM5IFBk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ob7RO1zbh48hpp5rlqP0LHSk6412X6qkeFj4lGDCx9E61UL5flbWX8g9czCU8KMvrTWgFJ8z9WhNCEu0vmhdGK0Iar70SDVjK5g713DamwAVCzS6Vw2Ad5VskRnvWi4HXcrhhrcacPox962yae7yhxPNn3ngYjNp0lhZqfi7jcI= 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=O+4URxOr; 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="O+4URxOr" 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=kwEcrMngjLvIom2pOPUPNRKbOgmBlUmQNcYUZgCeoow=; b=O+4URxOr5Gw6nUvw0x/mlrFrWm XbiZ+3MDYQm6/eQGPx/vhpySVjF93m4sQ2Pyc1qa8CwwOyCrUOVUWRcYZXnW2nLnCsfyh9sL8SS93 yQXpnF/izfEZzmTcP9vrvJHQR6xtUkh1EMoVXEk3N2ACeJymH60LQ6YERQUlkJwQ0JbYESO4i7M5A Wpe8y9Z0OOvAUJtBWfEBs16/mEqq608r21PNfGIEuUXPal2PRcI5KfpKO5NyYczJ0hqAJkhz339YW BL5lKmJEbuAblzeQfsdvZLdUE0RU6+Epf+Y0O618C/4qi12DUYWGFTTvoNDEbndiJ9zDN3IiOlm/d H902vmww==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZF-0000000GInl-0hi2; Wed, 14 Jan 2026 04:33:13 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 21/68] fs: hide names_cache behind runtime const machinery Date: Wed, 14 Jan 2026 04:32:23 +0000 Message-ID: <20260114043310.3885463-22-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 57043b81fe27..06d60808b0ff 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 07:58:18 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 F21A82D73A6; Wed, 14 Jan 2026 04:31: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=1768365117; cv=none; b=qB3hb9elJZT0XhRNulg77JxblYh6N/r+bhzCxP1rPLah+2a1CMp2fZRdIfXJWW/byYuGrOire9spMZyY6l+dz6FcjBVKaQ5/5YZbLeKQn8HYzSeeufJVtvaodUU+J0R0RoTW7kEAiyG6gqCKVXQzuewKB8Rr1X48U02FfPXX+yM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365117; c=relaxed/simple; bh=II4Jd1KayzSu2stxBC7ry6BC6NM93imrG4s5Ru4XzRk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=l0CpH1etsIs+ttHfHgGuXXpEmsFoFfGxNf4Vw9dzx073eDqV3oQX597GhTG1kA7m6i1w0+E8rJbTAL5uM3UoUm+nv3F8llQxWP+I7VUy4doVsFNnV+koUW5WWmecKXXuWYhGTY1YrY0C5qCOg9BsKUVSNojuFRID6wiXrvhhygA= 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=ZXIEwLqM; 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="ZXIEwLqM" 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=NWFscm8Ml2vJyvKBphRWn8KIV03jpnxcc61yG5p5SAY=; b=ZXIEwLqMKdy6sb2gEW8WyByLTK ZEEwvOwNNdinopg3GjsvsjGTcCSfubVxyxFbstC41gP8DX3QpMtvrkO1xuh5RiZXS0UZr0BeyPDKg CxJQETWQKzwWcCWpG8NhCPkCPg6H/eODv2lCxon4rp6uh6OzsTpWJ9mqkbsqRJwqIiV8S1WzRJGdJ 38sSYGSIHjkiMYrGo801YlDACaM50Izxk5D+I8EZEPaPFB+JWkY/PCqXhEfkq7+hlMpaJEtvKA9t7 WJFjHH0CPvp/BILRU9gVNQxH3SerKTjYSL2ISzl9WQxrfZMuvrTHn0GdseFjb02iqBUpxLTcBjMej C5z5Uvyg==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZF-0000000GInn-19Wu; Wed, 14 Jan 2026 04:33:13 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 22/68] switch __getname_maybe_null() to CLASS(filename_flags) Date: Wed, 14 Jan 2026 04:32:24 +0000 Message-ID: <20260114043310.3885463-23-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 06d60808b0ff..f1a2161bd691 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 07:58:18 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 A00DB2D9780; Wed, 14 Jan 2026 04:31: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=1768365118; cv=none; b=XMRQqnLwHoDlbMgxyv5LZ/8O8l4QdVA56zmb1TMAWgWRgXwvsKY17oJCROYVWm1Le6+1qxcJYmTeU4ccITSc2vAK2TR2+vjHglmRR9T1BYlSeRYWSG0l6s8c1yrnqJD6KNIcY2L3iQnmbs6zPEWp7t04ef2qefzZQwxqn0fpw4U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365118; c=relaxed/simple; bh=fzcXAIuYtN+EDVhHduC2Ki1YNhIkJ0p1xZMV5HbtOGg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=HXJmfMf3D0W0wnuLMHofXHZQ2swiR6t4hcs8qMnaXj/5ePiZiMfYL2ToL9+0s72E3ozlBr4IYndjmEySPuLA5TvU5BUdcB8rFxT6PMSUeUuND3CwiO0q1dIJqSw1xQqW4rvcwnaMy4bJ+mlYNZHECp2Sf2tU6lX0UFo1tGfogQ0= 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=SwIcN5cN; 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="SwIcN5cN" 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=MzXkE5Pp5+OvqrjtNelv1COgAPA0k3Isne8ZRPPwzV0=; b=SwIcN5cNufxUsQ7UPDm9kBUpWX cIifc/wWShDP0FMG6aO/KF4qVeBgpvaKY2hskCT98nHamAkt5PGQhmExozOeYU4VW861oeVYlOWsx JbSZvHceweTagOqgx76RY/JyAyphkAPSrKFaqLFg+mAF/V2raMoa3uyVf4KNxN0cyjYNvx638nVJi 3hfoQlI3h6OUgM6Hwq4ZpFjLsF6owtgiPzpPNMD+yTC9fKVm8wuHCMCdezbFg2yYyv+gxz/2aCN85 y9J88pC7gc3uhtztDURAaGFueqeao+nKdngL3GaqK1HBRLnbouKQ4MK1H2VDfbASTUWdtYB8RaDyP PPnwtt3A==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZF-0000000GInq-1Whk; Wed, 14 Jan 2026 04:33:13 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 23/68] allow incomplete imports of filenames Date: Wed, 14 Jan 2026 04:32:25 +0000 Message-ID: <20260114043310.3885463-24-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 f1a2161bd691..b76cc43fe89d 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 f0f1e8034539..f1612a7dffd0 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); @@ -2527,6 +2538,7 @@ EXTEND_CLASS(filename, _kernel, getname_kernel(p), co= nst 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, _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 07:58:18 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 A01592F362B; Wed, 14 Jan 2026 04:31: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=1768365122; cv=none; b=d4pQV0LL72wPcox4tOow8LBYUQByY/DEdQkJ6Ot4qxnoHlMvZ/wollcmo6oEkDRiJ1b8MeTS4ExKDRsnMbsQWNegDWDOekdV0mBXlaKUoOQxf5UaerrgOP9XU3soEUlKYX4ko052RZXuZ/qcWSoO+pTTT97upYEniSp9oK1kQ+4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365122; c=relaxed/simple; bh=DRDmIOvg1abJl+/JeOeB7ulbY6rmfIdfsjab/8Rf3SE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=mJ0gp/UFXOmixC2yyJrJP0yU8r/jMWgHTVCqIJCBf5TTosm2DRL0wmtS/2LyHxdzewkxqL81CL03ix6WoLw0m7KVXpnrYkDPBfb6sJMG5K3+ALD762xCmzJysCVeSCmHhn6g9NcY13hSb3HrndXh7ZiRLMY9SqqtuaoxnxwS9KI= 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=qP/LMEqQ; 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="qP/LMEqQ" 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=5yAr+d87WTeC2PgxeAVXbzQHbhxJXXfFmShFH8sOGxA=; b=qP/LMEqQn/eejt+MO24g8FWM88 7F8UtvM/lckMH5gaT154etzpDmO6cgFX5OTi/Qrsxfm2icW83e0ygEK8o+By4OcgdgovO7WiNMCrL 6PuC1Wq6qnbKzCxeG2saWHdisI677t75amgt87uB4fvhrXCZCwCbM8OUguwNJh/m1BOxgJIKe1clZ jJgKsjA64BHapqtZ0JIv8bXzDD9/ruvnKgrD4E0N+OpIfik96UNnVyqpidf0ho50GyDRgLKyXxTkg +hDZ+YB0PW++51x5s6n+MEYJV3ABYC2Vu4cOHqHllqjXIOkLHdPGu9StlYgJHB9O0bzne9I2fiMvb 0baYcFOQ==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZF-0000000GInv-2OJH; Wed, 14 Jan 2026 04:33:13 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 24/68] struct filename ->refcnt doesn't need to be atomic Date: Wed, 14 Jan 2026 04:32:26 +0000 Message-ID: <20260114043310.3885463-25-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 b76cc43fe89d..f4359825ba48 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 f1612a7dffd0..6a26ee347517 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 07:58:18 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 ED9692FE063; Wed, 14 Jan 2026 04:31: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=1768365118; cv=none; b=s+XTMEQl21OpKROPn5rK9W0M6ldOn+w07GbkI2pG2DZnHMHHnOCg2Odmm8MPh0bWM3DUvzKB1BQy1mnpL14i5yb3DJkJHdFOxcwCuX8JXngr3JC8QA6g7QPD42QdtSsZt5mD0kMtW/MHW9+a7k/IRTQDANiB4wtyEJxozvKJ8qI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365118; c=relaxed/simple; bh=Ht40MPYaxaAZbJgv0XEOHa5Itq6XzQoGLnJtmfQSU6Q=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=hw+vIE3Gc60DYeW3w903s3RcYkP7p6U48iCmyKV/Mv9DoVxKPYr33QLsahkEBTuARItw2WmOIjlkKt3RdJJkPVdfMz28Dt6xO2KRSxKXx//Gb/xff8PixkG0gB2uAh0+dB5apuPQ6kqnEYb7m+0ki8e+wvqkVNnGkrdlBfsP9IQ= 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=nU2UF7NI; 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="nU2UF7NI" 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=nU2UF7NISLYkke7m23cEvIv4Eg JwGsrBcmpV67pYJj8bjoPjwQ8gpKyTcLaafb8va8dOSMD4AuOTOOkSeHzoDbQz1Grezsr3OF3db2C DNgvpNlLwzkOqOTZ8zieqULG/Lg5cf5TiX4TNzZIm4E774gNGxZryLzKQuZHGYQqF1KWT2l0d7TKu rcEpCVayOMZTb5iG+O11iFbMIIv+jWoTEcUc5fG1qpF9DdjLmhUKNYSKblIV99rrRdDDQPtlvS0ku gXJ7JthscHRPCzkysS2m4iiLCZdwcMwhfAZyBm3vEzlMPw6EqldTIY6e4mMOujwcucGUFtydCZ0ci rS0ktoyQ==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZF-0000000GInx-2yfF; Wed, 14 Jan 2026 04:33:13 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 25/68] file_getattr(): filename_lookup() accepts ERR_PTR() as filename Date: Wed, 14 Jan 2026 04:32:27 +0000 Message-ID: <20260114043310.3885463-26-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 07:58:18 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 EBA1C2FC893; Wed, 14 Jan 2026 04:31: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=1768365118; cv=none; b=BciTTVNnqevcedxZYrAgID6IgM8wnjJSb8dko6RntZx058ol/CTGNqmzjpLsLlKWDTEHgTiaI9r1OCVl9k47QH4tonnXXqD83eCARLcOMw3/LG3m2DX+nvKByARtnzqEM2sKz70wPBsOpjLqF8sxNHY2O9N9an191188ZGYw7DA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365118; c=relaxed/simple; bh=K8lF1SNuEKoMNQbK7dKMuZOgDMZYFst5w1ON9+Iq/Jg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=sw6MINlnKGI9M73flByhA1cEqfX+sYqXdIwaT1aLqAiMHebWTRT7cVq+ekeuhgfBfs+K7N2WvkCADlXIEcbhE3QT5yNW6J02pHMhYXcu2E7EHhm4UEWqG61moMegU9dmsRagR5MVJw/jvmBlzVZP13il3FGJFMyWJWNCbFMas10= 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=BSwbAhqE; 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="BSwbAhqE" 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=BSwbAhqE6ivAzYgcr9XHnXXgIl SNRlzYQWyfFTbMkANc/ukpUJOpo1WzcrK0LCJRrsdvnivyjj3nW2abIkknvLjns9vKxfQRjV8qj0Z WI7DiMEl30pI7d0hlMfQZMYZEauDGAuakuB73Q56MQ7OjrDhJ/JwjqJ9Jf/fxwzBzQmlPfKuXOwIx TFQ2EkIbP7vh2IQOCeT7i6FBZ+/ipJbJ79sK+pzS6nFXnn7peEBFxw0jORAZl3Xy+FkSvMIuuaueG /8e0lYouRbNdEdlCKxmdSRf7er2GoG7cXql8GjdzvJhrNjYHq7WuhHeWsrpoKGZ0aLzE8ZSc6o9Hl abEyGZ0Q==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZF-0000000GIo0-3R4T; Wed, 14 Jan 2026 04:33:13 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 26/68] file_setattr(): filename_lookup() accepts ERR_PTR() as filename Date: Wed, 14 Jan 2026 04:32:28 +0000 Message-ID: <20260114043310.3885463-27-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 07:58:18 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 EDD032FE067; Wed, 14 Jan 2026 04:31: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=1768365118; cv=none; b=YLAug3yCAW9lE5Ww4YlQuClsTr8kSelNtFsD5mw1qcMbIlbGw37YGknzA9icm3HHo7o5BeB2xGflv6u7f+v9R6apTumAGdgFpO3rKFko6FDe/DCnZoLTPTsKrVEGtbj+NwppVMmWJbF3SLX+fTG/zm4rTi0SRuxyJX4goDlrHaI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365118; c=relaxed/simple; bh=C+2EcojQwnwv5U/vpMob42+W8dy1bNTjOKNG9HnaK5w=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=KgRF70Oeid/YcnVcWcTx3LrmhdU6XMC1ck8/lSNw7s4YeuOcVKFbAEvQZGUPvRvM/IjG71sdoPi2VGpyA47LTfoSbyPrrX6JZwKqR98IEAz87/m8o7+mzwNC3LjxBXHglKE3FXPt2lEpQqlVHDxgpstnyqNJUXbYWH/wm+TC7GQ= 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=uVSNCTrL; 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="uVSNCTrL" 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=uVSNCTrLFhaYfQ5HVR+PX8GEos EufNCYDJdW2zSJHh8oRY9X9mCTms2wsAoozYdaWiHHKMwfiIsb2YPSJ+vlMaLYcxzIVAZW4H+wEAB uij1Sv7LjblS6eE982z20RdYSoghQv+deMQDBonkX2Utzu0BVzAHR2qRT9K4D0ntpKpAVTlsySVM5 cjjWoDn1BbHvKKxIo0GRy2D3Zd6iAX0x4TkzqfQu9ntjKIbUU8MS8rGWlLZDCXFJ/SMvfHeXWxSYt MebWUKx5C4MXetUABrVPWc9tfrOOezaS+dfmkUpKkGCycoz9m1djOe2ItFWXBSUvVigcxGTyG9kJL FRb5EJMA==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZF-0000000GIo4-3nc0; Wed, 14 Jan 2026 04:33:13 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 27/68] move_mount(): filename_lookup() accepts ERR_PTR() as filename Date: Wed, 14 Jan 2026 04:32:29 +0000 Message-ID: <20260114043310.3885463-28-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 07:58:18 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 E8D072E03EA; Wed, 14 Jan 2026 04:31: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=1768365113; cv=none; b=WGrMiYF9wLZy5pRIuNBmZOFlaI7uttfjDoLRnIVCZQ+DLcNRO7rQpQxagxOOG0Ags9873nuN7dW+SZT7zttvq7hRY9RJ1ti4Zo66msJVApFs8AyUNx/ECRRsq48fBVpfLvGGvPfWCLI4hRLfgG6Kx4/GnhAwU2UQCB3kne7gFF4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365113; c=relaxed/simple; bh=Ydled4U6L1X7V26SQt7n9puQ7dfK0LX63LBtB+WlC0I=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=X2rgHqN6zjUgxo2XucFL2LrnG4GusagcHlDj5ClbkM7ZxP6VnseNqNc70OHc93fVaF25b7XBjfsLoaLVyPAv2sxuMe3uR4rE+s/kG+76eCaR50v5Am+eV7wq0avtYRY1wP36+RW3xXt4qpKRE8xaP648u811vYpNaXE94/JVTP0= 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=rDHtoqZE; 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="rDHtoqZE" 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=rDHtoqZEiD/2rjP3tVdAyhqd9B a+/TcZajyABSj4wxRS3kCCBf89GVzUkvpCw8M9e48tmfrMysbIMlVoSZtLHeVNWi1QukXQUo9CWPv 7bklDvLPEGIh7l8z/ZSv/4VEaxYR6IOweNWOkv4OGAK6NSFaX2Qi3Aq36ZQPD8CuY6A4omjZk9A1I P+dEFfy1XDzsn0jILjzoiQ0d/+liV4z1nltsuGvIqfYEWilgILFirMdsfZr+z+kEHLZEYyMP3F2tp bbUTOxRP69nO8DqS8wW1iAALaLUcAED05Pgf24F8/VNMpyPtqST6xwQe+qF1Du9ccmhfI0xsEohf1 qrK7EBRA==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZF-0000000GIoA-4BQ5; Wed, 14 Jan 2026 04:33:14 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 28/68] ksmbd_vfs_path_lookup(): vfs_path_parent_lookup() accepts ERR_PTR() as name Date: Wed, 14 Jan 2026 04:32:30 +0000 Message-ID: <20260114043310.3885463-29-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 07:58:18 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 E81CA2DCF57; Wed, 14 Jan 2026 04:31: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=1768365113; cv=none; b=EKaWBUGlWiC7gA2VN2ZT9vEc+JCcSdKCW26FsogbveseV0UUVwX1plcmqIf/EHe4JRuh6TcTjkcANmoNLih3zUHDuinX+m9gv+Vj7uhu5d3uJppHWqDqZ2liNTcSwPIjdE3T+llAK7juRrJ57UFNZJGNG1faeEMYeB4809+XrKk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365113; c=relaxed/simple; bh=rYNiXERMORELD3rtPdZULgbnCI+3YEmNF+Hwi5pTBHM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=TioWhAx70B69cpi+82jcWLNIf/9riut7k5CAN3GP1oNssPRxGLUdWcBQX7hVnqPhwqhk+HGT3VqAFaNDD7pfhd5kCkHzcpNHC06uWrhu37Rn9hpQawb1JqSl+F/eAos2Qhnj+7T5sucFBn9z1oBX8CSWcS4Icr7wpknKUO/IwmQ= 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=r2CFTjOb; 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="r2CFTjOb" 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=r2CFTjObWufo0qMU6F9uUguivd SMJLG/fmXOotEHrVOKHMWtaZvdt0NPkkSzDm8oWB7fWo1BG/9CoUNTHBvar3sic44tQnXnTvtKOE9 PQtHae6VyJiMnrxMdWwCwFW8DkhgPaKdxYDpcvY7hMR5WYy9kqfr37qsArWRVar62d8QwQNNuMfqI 4b7hh/BnxpBo7o/eHRQoTUKy38xeXyM/5b0lXJ4MyYUMEHnOhJs1SG8cXYmTL/6iK+E+eW/s9rafT S22NO7oVIvUiwRrOTJwWhgnEWXeZak7+5SzNbISSjC/cG1ByHXAFtaO52emKYpdKey3ARXZub1qph 981aj2Rg==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZG-0000000GIoD-0n2S; Wed, 14 Jan 2026 04:33:14 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 29/68] ksmbd_vfs_rename(): vfs_path_parent_lookup() accepts ERR_PTR() as name Date: Wed, 14 Jan 2026 04:32:31 +0000 Message-ID: <20260114043310.3885463-30-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 07:58:18 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 1A57D2E1730; Wed, 14 Jan 2026 04:31: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=1768365115; cv=none; b=j10yEcIEnCaFHF6Pepf1Jkx4ssRDmUz4+IIG2K6Tc6MF4QtvaG9kB4Era9DPJMPhmm8lq1aoP+ADBRzEf5e3YMKTWj8yqhJ2hPfX8oL4tnLNKpZ+v5a4ColSHAJ8rup0qq/b1+A10dGibG3tNSl9pDvlPd6rZhr1ekrN1ABehEA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365115; c=relaxed/simple; bh=PzRze4TPSn+FaF2mEY8QRRX+VOcGOgJmg+7Op+juS+k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=HPMluAhRcrwtotMuIVT3Y4uHAfoqACdPaVQy86yS3d/XO70KP6oH+vyLcUw6cv5t+5bPxVNaml59OjI4zPa3vNbPvzdt95yZZql2zruisZXD3uYWEr00olXpnB9EE3plcPV1y0ip4RjiUdDuDO2xVA002TpWm1ozLSmEqUCxjs4= 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=MLR3VVof; 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="MLR3VVof" 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=EBeLYkaHE8Ff0WaLManhd7n2iZENXnDxfI+I0pv7fdk=; b=MLR3VVofIIFhWtDRS1+3JVbnDC GagS0+6haTcLRyh4Z9+ow/YqOiICdjVB6azhdOqBYymsH+epTaREsnuESupPO/KqNPB4A44CSVYcA 5IsNiHVUc0Et7PWsS/HEDgjzkVydhmVQaO6UboLYRlWGkgyr2kSxFADwOnHLAnrhTMAUwfOGGxhWK Y84a1TGQaLL3Spw3Qs9AsALTpBZK3OPL5c68+G7Bps6VvpN6N8hBvfWzEUDEtaievaaAFj7WFa0Fi s80nVeqNDlKdAnK188QyEqlj+zf1amfBB20QtMCln3TABhmHxzpER1dY0gQPXDcZKtSdXEXA38FEI 8vmQEcrA==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZG-0000000GIoG-1FmK; Wed, 14 Jan 2026 04:33:14 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 30/68] do_filp_open(): DTRT when getting ERR_PTR() as pathname Date: Wed, 14 Jan 2026 04:32:32 +0000 Message-ID: <20260114043310.3885463-31-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 f4359825ba48..659c92a6d52c 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -4871,6 +4871,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 07:58:18 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 E83DF2DF130; Wed, 14 Jan 2026 04:31: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=1768365116; cv=none; b=priQqF5mH+XJda+UpIry6JT15W0uvL5MAF/JLeDs6Yjcz037gP4qj0mB8wmWvPm19EEhdeO+c1aFNJqJCrUxfMnarXK6aIFcxc0b0JlOlu7lAIsBaV3C5uaT05WWq+vkLiVAwUwidjONr7W5XAGo9N4rAtBDVSEDmzZkTy6LICY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365116; c=relaxed/simple; bh=Vckd/KSh8BcFemlenjz8zinNKk9silZ2lRrclnwH30A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Sl+Z70U0A9fJFViNTvBHDw3OtiYYtEgpq3UowCLg7nsJsN5dEiSSPcgl2+PaCaI5v2Ih91HAY1zUW1gC4DxkOBbYVJSlf/LsfqJYF/0FuARnCq3J1rYFZ1KzGjhFqE+wmW9BWuO/FwSSzFFzu0k1uexSGHT8dbCw5eciL/kzol0= 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=lVEYg53Z; 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="lVEYg53Z" 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=rdnjXjUxXalP43yg2z/xbhkExF8mK2XEAoj37zKqADM=; b=lVEYg53ZJPpiQNEMJFpmiI355f xxbfTgpuG2NZps83ovj8s5TEtescqiNmSXCYpaYF52D/QYeCQ2zOFqxupjLfoIIt4DvynynqNRMh+ IEhCBi9BUdT6gJLxhtb9p9hcuWWiEfHy7Nj8X0XDEpEOv2hC/vFj3MvhY9LzVCv56wq2Cl2vt0jwy Nmd9/diKCcq16oTiV3mMfhrvkaHQt9vmCX2oICEANomDC/a23FvfupPMSdBMlf/YSsNJrcevwyCMo FxbOJYsrPjqn4Y+4bzc3faa2acRwU8pDQtEAdtEs3wg7LeDGzN4s9JDdUI7bmUHBS5sTVkW8FpV36 AtAJj5Tw==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZG-0000000GIoI-1bjn; Wed, 14 Jan 2026 04:33:14 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 31/68] rename do_filp_open() to do_file_open() Date: Wed, 14 Jan 2026 04:32:33 +0000 Message-ID: <20260114043310.3885463-32-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 c7a34412399e..4c4d2733c47a 100644 --- a/fs/internal.h +++ b/fs/internal.h @@ -190,7 +190,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 659c92a6d52c..65a06fb312af 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -4864,7 +4864,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 07:58:18 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 1A6072E1EE7; Wed, 14 Jan 2026 04:31: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=1768365114; cv=none; b=F7t+mvWOyS79795cg29Z6uCMA2dBx51J+q4cxM0LEsJoZaa9sW2y7pkHXSOXzIJb4Lgh7pM/BrCPq7Fb8a6o/VR2DN7FcfbIHMQhNB1uNtK6THJsrh0wHJOE7fMoR09O+Tsb8/3mQjYsm0Vvj9FLq7MKFB1YRd3KlGUusYIvy5Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365114; c=relaxed/simple; bh=xKaH/NZFW5DN3VJir82hEz4CpporN5Oy57a9aSeWAFQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=jE2ti8iBQY2N8HgQ7RYw8j6kbRGAwVtfnE5nVnRJ1WGLFBjfd/9gF3vbzmZjFOyxbYCPXdr+dsnK/oQLII3jWOhM5vRD+/HqDoocPg/KBV9SDZb1Ca4nXCnQALW27Yg4VX5X0q04yFugEAUM4YSH0mBGgHZnu8xj0A86ZPBqgYE= 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=vFXQVmd0; 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="vFXQVmd0" 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=vFXQVmd0qkv6J5Ez2WjTVeS+4O 6JUC+YLswCAyV84l/NbUYCf6WlMJolyGYBJE3i8XyLWgDhGpsEYCTtFnFnRk+3FiptGh+QOEXCwjp GcnP5O7jF2p8i9EU5DXsxBgPrqvbZyLVgf2FrGYxi06NS0/MmqJYQMDNrS5SrzYhdTsUPuibiR+dX 0XlIsCOPzZXgYdi8Wygb8gPy0RumI+UyOq/RarprYfNfmNVMMbC6PsXIOfayNe5Mi8mCNSBxVMTog rTLog7DWwYCtBYFo6nqlH9WTXs7jRT1U2zac6cxNtVaxHf1AWJTiGpL3KCXeJmmz8AxTDhistP8Iq 50W7wZ8A==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZG-0000000GIoK-1xAK; Wed, 14 Jan 2026 04:33:14 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 32/68] do_sys_openat2(): get rid of useless check, switch to CLASS(filename) Date: Wed, 14 Jan 2026 04:32:34 +0000 Message-ID: <20260114043310.3885463-33-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 07:58:18 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 EA1442F7449; Wed, 14 Jan 2026 04:31: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=1768365117; cv=none; b=BCDtkNQHGCy1f6PwnU15wZvmA04zl97oKoupKBVcNe2Q4dLEAUt9+M+bGII6SIYk6MiLWRmi4bprrps10ctwETYbUe/6uedEg9Udq+5S9xRcnxl0l262X3prTHiMbs0T/bLfVSZqiVVYfjGPPdHaOjeJg6GYO6rN0ByGjlVTEUw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365117; c=relaxed/simple; bh=eXKVmukn3ymqplJ5Nf+zMmgxI0ovB5ZcpB+UI18vaPQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=mRZzLNbmEAinD9tgyr6xJ92B9d/s6IstnNB5aiPr/9y7Gw6OyEGfWBvjg6C0kfr5Pfv11tK6A9mtwha4iQEdGWobGELAzX1wITCjDQzBB26iUuL6x0kO2oDsoukLp0xX2aYyYI7kG6BrConO73kclWVmv0EUY9sr1zkyBEDEen4= 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=vkzyzs4E; 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="vkzyzs4E" 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=vkzyzs4EBwxkCV3by6GdzEeBNa eFwLFqzsqeZjugGpPkmI5KdHWG2pls7/28914DV0qTnROOdUa0fTdMyY7u5t2o2FhoEVOV1swEoTK 3+hobTh/4GHf7Rkg2MUydLioY3CjqgfiT998CtlH4IdluODH+oP6gRGbn5CwvduZy9qjs7DOC4fxX oP8Uj+ePhx0/V8JDzpHYnc1rSzm+nM9TzUa/hvQyc9g7Uf+9pnmVn5yRCMUVSKj2uWsArhLg48jkC D3gvjnKxDR+cXOGz51sPYZSPE6I/7Z6rA9/BK6QXRxKuo2+2hbvWfYxlVmmDYBLlYLpO86wwVPu8j DvIIStag==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZG-0000000GIoM-2Tuk; Wed, 14 Jan 2026 04:33:14 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 33/68] simplify the callers of file_open_name() Date: Wed, 14 Jan 2026 04:32:35 +0000 Message-ID: <20260114043310.3885463-34-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 07:58:18 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 067D82E11B0; Wed, 14 Jan 2026 04:31: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=1768365113; cv=none; b=tZ75f+w3xfefzZsBOE/i4rvh93iClsHMtZyMjU/dEo0EqsLdZeTQDGf9sIIqfO1UTaxA0EAb/VsU6OIfUsRWtCliQLNpVjdj1jtXZO0u7EyIFm03/f5oMQz33uivV/Doc5Si0dA57OCyEvVcmYcZ3RERO77rySNkbkL0UWJp8xA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365113; c=relaxed/simple; bh=dKazOTpP98uEsD5tvT0eCFSPEKi73Z7M/OFRDrSl8h4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=UMUDINPUGTMXskWYsMd1Bu3byoMne8YH6+GjMoXyibNx+g17mf5Oq8QniBZxUX+LjtUan1kvK1O/X/HTje7iaNp5fDNz9B7skXCu+znkUXGnHtBZJSXIs9xEJzjZV/LkTFvHbfiVpLjYVVUBI8UzvfKibf+mw2savn9AezYTV+c= 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=YR+W8c9t; 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="YR+W8c9t" 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=YR+W8c9tc6JQbqqzjO+//SsLtE XTkVKnKd+lTyw4TSxKN4L287M8hDod3y6DqeqgFfgbcWCVc+I0pfdXaBNky6k5U15NZHpbzZA493Q /EsXwxR4NJG5S104VAMqKKYajwyv8/yemEuJXLOo06lXIlWHarOqoHZfw4WtTVJWYL50mO96oHfwZ 1Ssyk9ZcoBXV/x2KygFTLlXvldeAzZtHPHhWWaxaLneFbaG8RfMcQqDIfJZsSuDCdNI4ZHuxEbCo6 eYxiUKZDI0ah4+d+1LxaN/rJGQ51ff2ggPqDkgBWxcVib7u/lEBM4mcoSB7TsI8+0BM2KRcvn29Vf Oo0XReIg==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZG-0000000GIoQ-2sj4; Wed, 14 Jan 2026 04:33:14 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 34/68] simplify the callers of do_open_execat() Date: Wed, 14 Jan 2026 04:32:36 +0000 Message-ID: <20260114043310.3885463-35-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 07:58:18 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 E845A2DF152; Wed, 14 Jan 2026 04:31: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=1768365112; cv=none; b=aezPgzH8NAvJnhW8yz88kFj+pypmXVQdmhIa9vGokQ4lAGqcYyyvygap7A4+kgVGXaZwmes7Wbb+sbigxdfa5yyNIVq51at8DPS9us/Y23F6YDMlC0M/b/f4Q/zsHFiuBx+xp3VlrUgsNgT/CSvo9QG+9DxgfYujRGPPm3huhcI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365112; c=relaxed/simple; bh=SyiCZ+BkgTbuNj29/vmF2KqVFwMK6f6m3rzqyVzJ4sQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=NUv+GvK6vBWrm7V8aRuGgMkwzscASxC4HL90zjC/lIjSqzSX4gDGk1PamkswKMrZ+OxR8bxQgIXcQdVlpItbHujLHEOKpziWVFA4rsfeo7jdjTD6A4eTVYyB0I63IOat1zBqWTHLD8ZJLVgaQoPGO1eNO3aFsgo/g4pG+YxrnK8= 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=mhVIJlc7; 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="mhVIJlc7" 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=mhVIJlc76GvD3yIlbMEZgTvgRI PbDGuK7YDVNZjC2PEBexK+/jJ2eOj5a+826Bxpo+KvLLOuF6ZmSJX4wZsSbfAPGp0WEaWKem5E1E1 KK5TuAywPoGduOE83XlTcBhCFxh04ZzJepMW4JD6p+JadXtKApiHOStNJyPgW4DRVq3YAYn6sUS6K 0NVmX9ml1LEgyzC5boMdpNn3VhcllxWgEHr20pgwBmfRIv3mNpubYxVcl4Fk2QWpXK2kRs20C65I9 //QTN6c0sG9OUYWWD7p3aTdz6JLGN4eK/KuNYHA0DT0hjT0AgCEFei/JhiPPARqsvz4y4r9QIdbLp dTIT9M2Q==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZG-0000000GIoT-3Con; Wed, 14 Jan 2026 04:33:14 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 35/68] simplify the callers of alloc_bprm() Date: Wed, 14 Jan 2026 04:32:37 +0000 Message-ID: <20260114043310.3885463-36-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 07:58:18 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 F009A2E0925; Wed, 14 Jan 2026 04:31: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=1768365111; cv=none; b=QjUyjx5fL+yWE4rejgSB1M8hrL5x2N2+GTYM9e/Qf+S9zqpAhN1eOzlLaxtIGEO9yvFz9ccSzpGwWDMRVRPZUMdb6xUm2hW3D+/xXelCs2xwYlQ0uG4qj0enFDSoa+rS83jhMM5jznujhdvDGsxgSp3eMZQ09XmRqFu49efTjio= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365111; c=relaxed/simple; bh=R4BsGEh9vRT+BWogUYDjPeXxE9IBI/2X8eig9G6UMZw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bvDnzkcysEa4Pwqyc0AbAxcS9q/hVdIda7nfIGr4gsKMh9fgA7eCjusF3v4vV+KQxBNUu4mx+xGWKdy7oywBjkgdxPlz2Du3xY6J0s31q2mG8U1Oid0KYFyFFWhDEXE7VqmUQAkHDJkqFrFYY9fEuZ9hZWNr6ZkbD5YBzWL6U+0= 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=VFyCCnM6; 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="VFyCCnM6" 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=it1twp1kX+r0juotLWglqQevDLHy0Ifx1JDSAtZd98I=; b=VFyCCnM6ICp7S5eHjWCwecFiJL TBqa7RXugzN3lg/fOdmSNwE0pmn+2MobLicLTcQB3HaSuNO9kysb2PQ8O1XfdaDSe5qBWJPKzAtyq YwDqr0yhHjpzwvpawwdLpsf044V476T7ohzQfwJBUTtb1yBZLmtndgy9ljHUoqGOrCpRVh6oJSwRx rjJD4sw9nMgJMiJpuDSYChdU+J4KVvjpH533OQAfRg6rBnmmo5Nlrc/4PBXDr7Qs9Ke0lMvYqLYdf 0nwutecw522t7eT1n+0UUrtyrdyd/huWJo3InlyaxumP2kxny0bY53W8KvdFbn0NSKaVREv4kYHBQ gV0QsL9Q==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZG-0000000GIoW-3fa1; Wed, 14 Jan 2026 04:33:14 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 36/68] execve: fold {compat_,}do_execve{,at}() into their sole callers Date: Wed, 14 Jan 2026 04:32:38 +0000 Message-ID: <20260114043310.3885463-37-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 of them are wrappers for do_execveat_common() and each has exactly one caller. The only difference is in the way they are constructing argv/envp arguments for do_execveat_common() and that's easy to do with less boilerplate. Signed-off-by: Al Viro --- fs/exec.c | 80 +++++++++++++------------------------------------------ 1 file changed, 19 insertions(+), 61 deletions(-) diff --git a/fs/exec.c b/fs/exec.c index 1473e8c06a8c..5d15c0440c3d 100644 --- a/fs/exec.c +++ b/fs/exec.c @@ -1907,59 +1907,6 @@ int kernel_execve(const char *kernel_filename, return retval; } =20 -static int do_execve(struct filename *filename, - const char __user *const __user *__argv, - const char __user *const __user *__envp) -{ - struct user_arg_ptr argv =3D { .ptr.native =3D __argv }; - struct user_arg_ptr envp =3D { .ptr.native =3D __envp }; - return do_execveat_common(AT_FDCWD, filename, argv, envp, 0); -} - -static int do_execveat(int fd, struct filename *filename, - const char __user *const __user *__argv, - const char __user *const __user *__envp, - int flags) -{ - struct user_arg_ptr argv =3D { .ptr.native =3D __argv }; - struct user_arg_ptr envp =3D { .ptr.native =3D __envp }; - - return do_execveat_common(fd, filename, argv, envp, flags); -} - -#ifdef CONFIG_COMPAT -static int compat_do_execve(struct filename *filename, - const compat_uptr_t __user *__argv, - const compat_uptr_t __user *__envp) -{ - struct user_arg_ptr argv =3D { - .is_compat =3D true, - .ptr.compat =3D __argv, - }; - struct user_arg_ptr envp =3D { - .is_compat =3D true, - .ptr.compat =3D __envp, - }; - return do_execveat_common(AT_FDCWD, filename, argv, envp, 0); -} - -static int compat_do_execveat(int fd, struct filename *filename, - const compat_uptr_t __user *__argv, - const compat_uptr_t __user *__envp, - int flags) -{ - struct user_arg_ptr argv =3D { - .is_compat =3D true, - .ptr.compat =3D __argv, - }; - struct user_arg_ptr envp =3D { - .is_compat =3D true, - .ptr.compat =3D __envp, - }; - return do_execveat_common(fd, filename, argv, envp, flags); -} -#endif - void set_binfmt(struct linux_binfmt *new) { struct mm_struct *mm =3D current->mm; @@ -1984,12 +1931,18 @@ void set_dumpable(struct mm_struct *mm, int value) __mm_flags_set_mask_dumpable(mm, value); } =20 +static inline struct user_arg_ptr native_arg(const char __user *const __us= er *p) +{ + return (struct user_arg_ptr){.ptr.native =3D p}; +} + SYSCALL_DEFINE3(execve, const char __user *, filename, const char __user *const __user *, argv, const char __user *const __user *, envp) { - return do_execve(getname(filename), argv, envp); + return do_execveat_common(AT_FDCWD, getname(filename), + native_arg(argv), native_arg(envp), 0); } =20 SYSCALL_DEFINE5(execveat, @@ -1998,17 +1951,23 @@ SYSCALL_DEFINE5(execveat, const char __user *const __user *, envp, int, flags) { - return do_execveat(fd, - getname_uflags(filename, flags), - argv, envp, flags); + return do_execveat_common(fd, getname_uflags(filename, flags), + native_arg(argv), native_arg(envp), flags); } =20 #ifdef CONFIG_COMPAT + +static inline struct user_arg_ptr compat_arg(const compat_uptr_t __user *p) +{ + return (struct user_arg_ptr){.is_compat =3D true, .ptr.compat =3D p}; +} + COMPAT_SYSCALL_DEFINE3(execve, const char __user *, filename, const compat_uptr_t __user *, argv, const compat_uptr_t __user *, envp) { - return compat_do_execve(getname(filename), argv, envp); + return do_execveat_common(AT_FDCWD, getname(filename), + compat_arg(argv), compat_arg(envp), 0); } =20 COMPAT_SYSCALL_DEFINE5(execveat, int, fd, @@ -2017,9 +1976,8 @@ COMPAT_SYSCALL_DEFINE5(execveat, int, fd, const compat_uptr_t __user *, envp, int, flags) { - return compat_do_execveat(fd, - getname_uflags(filename, flags), - argv, envp, flags); + return do_execveat_common(fd, getname_uflags(filename, flags), + compat_arg(argv), compat_arg(envp), flags); } #endif =20 --=20 2.47.3 From nobody Sun Feb 8 07:58:18 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 98FB91DD877; Wed, 14 Jan 2026 04:31: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=1768365113; cv=none; b=Rk8nfmyp+sX5KJ1u1a5YE7IN+uD+430guHtoJMTWDa0GpNDiqeh2rqFSFuQ1ejAGQ5ujxIH+E+GkHKJDevNKnoPHCndEY20mzagnbf3y0WbImmfB2/X11N7L4Cl9oYfnh48nVRGBerwI5AiHdrIiFex08RxqZOpssbBhGJE0Owc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365113; c=relaxed/simple; bh=yfzVKOGC6J1mfQAkrJGAOfs9h1A24vTRVEs1IwTgzSw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=c7XHb5yG6WoO/SFUegU6UgHvcdzuYOuhKLwJWh3CYFU66/S8rZy86Ejny9lk7qyu7Uf6gs1NOkR+PkdOsLoAh/KE8FIyvdQobWgbhDGpmAC0LkIoClg/Kd/QD+tRqHXnyaV/mh6ecZh1IysRvtqXYssq3Uaw2NfJTbbIccuHo6E= 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=esNL/zwR; 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="esNL/zwR" 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=glqNvFd2WCWs9BPH2ZT1TzGGKLgx5BNyq9RljQnkTIg=; b=esNL/zwRFaIc6HXCD9ivssxvLX OFZXOop3QmRIelnyfyzk+/EBiloD5R0xQZjfc2rNesa/5qiqjnQ7NPNo10ZdL9efAWy2jZmINWzCk /Vjwp9DJvTFBk8JLvqrjIlqsZErcChBVsdKUqtdKY3TWAyScjTdIIGr+0IuM6BgunUGtvb/tNhm/q oAfz62ZjXK3liPbvIbbiTzH4y09Y71/wAGbrvZpEbXCj2xBe0JErPm9rT1KM/zfzuS1MgFRkbEmJo 0ArxqTpQ9XZIzQsS1NZu7xajqWtdcvHiow2kfxj5DuXcCfXC2sluAEaD5d3ClmE3dsyHKgymbAqzu E9pltGXA==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZG-0000000GIoZ-4BOQ; Wed, 14 Jan 2026 04:33:15 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 37/68] do_execveat_common(): don't consume filename reference Date: Wed, 14 Jan 2026 04:32:39 +0000 Message-ID: <20260114043310.3885463-38-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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" ... and convert its callers to CLASS(filename...) Signed-off-by: Al Viro --- fs/exec.c | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/fs/exec.c b/fs/exec.c index 5d15c0440c3d..9e799af13602 100644 --- a/fs/exec.c +++ b/fs/exec.c @@ -1789,20 +1789,16 @@ static int do_execveat_common(int fd, struct filena= me *filename, * 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; - } + 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; - } + if (IS_ERR(bprm)) + return PTR_ERR(bprm); =20 retval =3D count(argv, MAX_ARG_STRINGS); if (retval < 0) @@ -1850,9 +1846,6 @@ static int do_execveat_common(int fd, struct filename= *filename, retval =3D bprm_execve(bprm); out_free: free_bprm(bprm); - -out_ret: - putname(filename); return retval; } =20 @@ -1941,7 +1934,8 @@ SYSCALL_DEFINE3(execve, const char __user *const __user *, argv, const char __user *const __user *, envp) { - return do_execveat_common(AT_FDCWD, getname(filename), + CLASS(filename, name)(filename); + return do_execveat_common(AT_FDCWD, name, native_arg(argv), native_arg(envp), 0); } =20 @@ -1951,7 +1945,8 @@ SYSCALL_DEFINE5(execveat, const char __user *const __user *, envp, int, flags) { - return do_execveat_common(fd, getname_uflags(filename, flags), + CLASS(filename_uflags, name)(filename, flags); + return do_execveat_common(fd, name, native_arg(argv), native_arg(envp), flags); } =20 @@ -1966,7 +1961,8 @@ COMPAT_SYSCALL_DEFINE3(execve, const char __user *, f= ilename, const compat_uptr_t __user *, argv, const compat_uptr_t __user *, envp) { - return do_execveat_common(AT_FDCWD, getname(filename), + CLASS(filename, name)(filename); + return do_execveat_common(AT_FDCWD, name, compat_arg(argv), compat_arg(envp), 0); } =20 @@ -1976,7 +1972,8 @@ COMPAT_SYSCALL_DEFINE5(execveat, int, fd, const compat_uptr_t __user *, envp, int, flags) { - return do_execveat_common(fd, getname_uflags(filename, flags), + CLASS(filename_uflags, name)(filename, flags); + return do_execveat_common(fd, name, compat_arg(argv), compat_arg(envp), flags); } #endif --=20 2.47.3 From nobody Sun Feb 8 07:58:18 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 99E4F2857CC; Wed, 14 Jan 2026 04:31: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=1768365114; cv=none; b=cl0ELShPdb9ztrO4ApOn4L1byKWV6zc/sVpVNTtHvXol9uGI1ZQcfM+PG4ofvF5CgOEmQHxCemlbIi2mpiW+3fiAIUKFZ5V58SX7LrJwqcI4ZiAGxbYvA/hJICjCRw1M8oi2r6SB5JVF9nwELfBO45V/N3GiutwEyRJAOyXKZ50= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365114; c=relaxed/simple; bh=wyl2OwewftmSzA2GDeE7hJpAYHdBh4Z9OpsDMrLqY5M=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=NVU5yDObrwdSTwd97ZPBiQ+fkngQxpfuAOFWfnrhVDaUtgEW401Ol3ukjIs1W6W+3CfWPqeAp455Cn0qn0Brfy4/0pCECsEBiGuv+EM1VogUHAbarr2zrAvZB1qlHQfsLlbvrYdYUZ5JtMoVkXVqIDhsqwN03GzAoOUhJ36rAmo= 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=AMW+vAzX; 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="AMW+vAzX" 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=8t9Yib6JJzwfWRyoSOX6RtjnhtOU3jM57OI5Cs+WPdk=; b=AMW+vAzX7YsaDU7sVIaXb7nGrS HYr249VOST23QoBmkeG2eIexjkd3x2KGetxgrmUCSzf9+zHqOhrWUntrn8vF5J4gtUNk7BhjW9f3U ub0YoQfFFntcFaMNIPrMGXXeWyczHSTAvdCa2m8sNOAmFwDhNM6w4g+5/05vQix30E0ZVGZg1H8JR 2I/ywPvS6XP2XaIB67Ke5vcFldH+x4kJaJk4ASH2XwPNmXQi/Y+PsI0JRvvCd9Q371hvQCvCtQFzT 8S5oL3LHXLIbCW0KkvE2I+790mWF9G/TGXN3JVWnlJS+3f6jjpUbbQFfCjoyUAwLYgW3XltrOXSPA tMbbIBlw==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZH-0000000GIpm-0x4N; Wed, 14 Jan 2026 04:33:15 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 38/68] switch {alloc,free}_bprm() to CLASS() Date: Wed, 14 Jan 2026 04:32:40 +0000 Message-ID: <20260114043310.3885463-39-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 | 48 +++++++++++++++++++++--------------------------- 1 file changed, 21 insertions(+), 27 deletions(-) diff --git a/fs/exec.c b/fs/exec.c index 9e799af13602..5dd8ff61f27a 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. */ @@ -1779,7 +1782,6 @@ static int do_execveat_common(int fd, struct filename= *filename, struct user_arg_ptr envp, int flags) { - struct linux_binprm *bprm; int retval; =20 /* @@ -1796,36 +1798,36 @@ static int do_execveat_common(int fd, struct filena= me *filename, * further execve() calls fail. */ current->flags &=3D ~PF_NPROC_EXCEEDED; =20 - bprm =3D alloc_bprm(fd, filename, flags); + 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 @@ -1836,24 +1838,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); - 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 */ @@ -1861,43 +1858,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 void set_binfmt(struct linux_binfmt *new) --=20 2.47.3 From nobody Sun Feb 8 07:58:18 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 AF08E2857CF; Wed, 14 Jan 2026 04:31: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=1768365114; cv=none; b=roqLAx6lzvhKRs1EHRxjYM+glUn0zy+IpiQQpbqZUfkzTbnAZlvDmQ7mBPvxSlNIswtK3Zn6mHrGt+mi3AweBiQWikz6LhtSvW2M4nF9RgptvQVHsBnlq9zW148rzuFRZuTjmngApXo/LurYv+YqL732TpaAlubX1FG4klT+jZY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365114; c=relaxed/simple; bh=2CZDB7CVYrwN3abWlCUw0yD3m+FK/tJCczDNaUGSNs4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=s3mHRCek3kPAjBKIfWsfQkANImOQ+hqlE1LRCcJPX27Ier7K8wSsAFP8kD2in19ZIeF2/05OLMsHibaHhXNCptE7i2W/udAieNI6UazO6We0uDHAq8W3TGJVTYBNIZMqhwV3AjtblRL8kY8aDLFQ3nnsdiZrLy98bFK5O2o1vhQ= 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=HZ9/vhS0; 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="HZ9/vhS0" 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=Rqf9YbK1w0YURS2qwgaIL0HRl5N0+iceYMjcZ+ffdn0=; b=HZ9/vhS097gxnXNkSE5B0lB29u nuQrmFtqQa1yZeDDsTyXqSzQft04PcGSozLNgL2jbkzYtgRCqhRzM3V433EXCfoHDlAythrAUDAJo MSWUrJO+GwEb8+da5dOMxAMXVrDG4VqDxuJsAODIUar1CPrmvOyP6YpD/4fTb0x1enViuUiBydXwK AFTcl6ggyXDHZO2Cyy7Vm9DWfb3RXfMbBByV+IHNn3VMC+OqvoskHXw8zTgnqXyudFBqO1R2NJrl6 5VMubMbSisY4dAkh8PDnxrbZURqKE+OJokwQzTYnunI8guq+TTulf6GlY5MDNryr1S/PSVWNC9cHZ OZPx2SVw==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZH-0000000GIps-1K1K; Wed, 14 Jan 2026 04:33:15 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 39/68] non-consuming variant of do_renameat2() Date: Wed, 14 Jan 2026 04:32:41 +0000 Message-ID: <20260114043310.3885463-40-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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_renameat2() replaces do_renameat2(); unlike the latter, it does not drop filename references - these days it can be just as easily arranged in the caller. Signed-off-by: Al Viro --- Documentation/filesystems/porting.rst | 8 +++++++ fs/internal.h | 2 +- fs/namei.c | 30 +++++++++++++-------------- io_uring/fs.c | 7 ++++--- 4 files changed, 28 insertions(+), 19 deletions(-) diff --git a/Documentation/filesystems/porting.rst b/Documentation/filesyst= ems/porting.rst index 3397937ed838..577f7f952a51 100644 --- a/Documentation/filesystems/porting.rst +++ b/Documentation/filesystems/porting.rst @@ -1334,3 +1334,11 @@ end_creating() and the parent will be unlocked preci= sely when necessary. =20 kill_litter_super() is gone; convert to DCACHE_PERSISTENT use (as all in-tree filesystems have done). + +--- + +**mandatory** + +do_renameat2() is gone; filename_renameat2() replaces it. The difference +is that the former used to consume filename references; the latter does +not. diff --git a/fs/internal.h b/fs/internal.h index 4c4d2733c47a..5047cfbb8c93 100644 --- a/fs/internal.h +++ b/fs/internal.h @@ -57,7 +57,7 @@ extern int filename_lookup(int dfd, struct filename *name= , unsigned flags, int do_rmdir(int dfd, struct filename *name); int do_unlinkat(int dfd, struct filename *name); int may_linkat(struct mnt_idmap *idmap, const struct path *link); -int do_renameat2(int olddfd, struct filename *oldname, int newdfd, +int filename_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); diff --git a/fs/namei.c b/fs/namei.c index 65a06fb312af..5354f240b86a 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -6028,8 +6028,8 @@ 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 filename_renameat2(int olddfd, struct filename *from, + int newdfd, struct filename *to, unsigned int flags) { struct renamedata rd; struct path old_path, new_path; @@ -6038,20 +6038,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); @@ -6128,30 +6128,30 @@ int do_renameat2(int olddfd, struct filename *from,= int newdfd, lookup_flags |=3D LOOKUP_REVAL; goto retry; } -put_names: - putname(from); - putname(to); return error; } =20 SYSCALL_DEFINE5(renameat2, int, olddfd, const char __user *, oldname, int, newdfd, const char __user *, newname, unsigned int, flags) { - return do_renameat2(olddfd, getname(oldname), newdfd, getname(newname), - flags); + CLASS(filename, old)(oldname); + CLASS(filename, new)(newname); + return filename_renameat2(olddfd, old, newdfd, new, flags); } =20 SYSCALL_DEFINE4(renameat, int, olddfd, const char __user *, oldname, int, newdfd, const char __user *, newname) { - return do_renameat2(olddfd, getname(oldname), newdfd, getname(newname), - 0); + CLASS(filename, old)(oldname); + CLASS(filename, new)(newname); + return filename_renameat2(olddfd, old, newdfd, new, 0); } =20 SYSCALL_DEFINE2(rename, const char __user *, oldname, const char __user *,= newname) { - return do_renameat2(AT_FDCWD, getname(oldname), AT_FDCWD, - getname(newname), 0); + CLASS(filename, old)(oldname); + CLASS(filename, new)(newname); + return filename_renameat2(AT_FDCWD, old, AT_FDCWD, new, 0); } =20 int readlink_copy(char __user *buffer, int buflen, const char *link, int l= inklen) diff --git a/io_uring/fs.c b/io_uring/fs.c index c04c6282210a..e5829d112c9e 100644 --- a/io_uring/fs.c +++ b/io_uring/fs.c @@ -82,13 +82,14 @@ int io_renameat_prep(struct io_kiocb *req, const struct= io_uring_sqe *sqe) int io_renameat(struct io_kiocb *req, unsigned int issue_flags) { struct io_rename *ren =3D io_kiocb_to_cmd(req, struct io_rename); + CLASS(filename_complete_delayed, old)(&ren->oldpath); + CLASS(filename_complete_delayed, new)(&ren->newpath); int ret; =20 WARN_ON_ONCE(issue_flags & IO_URING_F_NONBLOCK); =20 - ret =3D do_renameat2(ren->old_dfd, complete_getname(&ren->oldpath), - ren->new_dfd, complete_getname(&ren->newpath), - ren->flags); + ret =3D filename_renameat2(ren->old_dfd, old, + ren->new_dfd, new, ren->flags); =20 req->flags &=3D ~REQ_F_NEED_CLEANUP; io_req_set_res(req, ret, 0); --=20 2.47.3 From nobody Sun Feb 8 07:58:18 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 AC94A27B32C; Wed, 14 Jan 2026 04:31: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=1768365113; cv=none; b=O3OCt4HDUF2BwYy/Nw9NTFp+1qgQqnD0c6t9kJ40+20v0k2H9374N5mEelJ79K4YM00hzCAZOnSxQQ4PTvNJbTc0KgPSvp5+vNCK209mgUMOgTaxaDYDJtzudeos9nICMjZgCgqky0X4zZUSXQytcWzbEhzgVj56InUq3AzHFJ8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365113; c=relaxed/simple; bh=av9suRxH/37UFm53T9UpXb9WlDmQfxwVuqUciT4uPIk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=iuIrpYOaMGHw3cueij4SwpA2a16GJ1bSfN2QIOxKYOVDqxqyyo9eviEK3Gm/wfLYIWzXmFF7y/HCYuyl2qQc+cjv3sR9/SZYQlx1IHrQQxWoTDC9iGHl8Blog2gj2YQze5hhbgHaTlGz7hAveUUNhHktT2/5ryLkT3S3eEUk0eE= 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=F1NlNsMc; 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="F1NlNsMc" 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=X7jzL/LB8VmNSWhjEMOaVlC5iqrIbTfUbf9f5vgIgz4=; b=F1NlNsMcJw7hphjoW+hHY5faZL lFDSxumUMzLujM+2RREYb1fIKsiak47lj+B5xA8TJpLdAUQyTj2ckcuvsUyLXs1/IolhyHttvXabb Ur2dPAa98Re73v2YJdbQ9bQMGA8a4R4ElnSSlKJLK96Zm3HegKFZbJXJ93OfVRWZhxHfLtcVSXAoS c4jKpUK2yneSeUh/eaOr/tSXLxNR+AQSV3iKzqYBtBxanY3BTPqxwKakU85f6ufeerXvz2ItCcQQV jmi7OWQcdNdS5dJX0EVR1nNw95EPPUMH/TnptYoYQW3YZNfy7+kqBAc4aJPETx1D9SKHhegutNHIz D7xxIcow==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZH-0000000GIqX-4B4O; Wed, 14 Jan 2026 04:33:16 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 40/68] non-consuming variant of do_linkat() Date: Wed, 14 Jan 2026 04:32:42 +0000 Message-ID: <20260114043310.3885463-41-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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" similar to previous commit; replacement is filename_linkat() Signed-off-by: Al Viro --- Documentation/filesystems/porting.rst | 6 +++--- fs/init.c | 5 +++-- fs/internal.h | 2 +- fs/namei.c | 27 ++++++++++++--------------- io_uring/fs.c | 5 +++-- 5 files changed, 22 insertions(+), 23 deletions(-) diff --git a/Documentation/filesystems/porting.rst b/Documentation/filesyst= ems/porting.rst index 577f7f952a51..8ecbc41d6d82 100644 --- a/Documentation/filesystems/porting.rst +++ b/Documentation/filesystems/porting.rst @@ -1339,6 +1339,6 @@ in-tree filesystems have done). =20 **mandatory** =20 -do_renameat2() is gone; filename_renameat2() replaces it. The difference -is that the former used to consume filename references; the latter does -not. +do_{link,renameat2}() are gone; filename_{link,renameat2}() replaces those. +The difference is that the former used to consume filename references; +the latter do not. diff --git a/fs/init.c b/fs/init.c index da6500d2ee98..f46e54552931 100644 --- a/fs/init.c +++ b/fs/init.c @@ -145,8 +145,9 @@ int __init init_mknod(const char *filename, umode_t mod= e, unsigned int dev) =20 int __init init_link(const char *oldname, const char *newname) { - return do_linkat(AT_FDCWD, getname_kernel(oldname), - AT_FDCWD, getname_kernel(newname), 0); + CLASS(filename_kernel, old)(oldname); + CLASS(filename_kernel, new)(newname); + return filename_linkat(AT_FDCWD, old, AT_FDCWD, new, 0); } =20 int __init init_symlink(const char *oldname, const char *newname) diff --git a/fs/internal.h b/fs/internal.h index 5047cfbb8c93..c9b70c2716d1 100644 --- a/fs/internal.h +++ b/fs/internal.h @@ -62,7 +62,7 @@ int filename_renameat2(int olddfd, struct filename *oldna= me, int newdfd, 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, +int filename_linkat(int olddfd, struct filename *old, int newdfd, struct filename *new, int flags); int vfs_tmpfile(struct mnt_idmap *idmap, const struct path *parentpath, diff --git a/fs/namei.c b/fs/namei.c index 5354f240b86a..e5d494610c2c 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -5729,9 +5729,9 @@ EXPORT_SYMBOL(vfs_link); * We don't follow them on the oldname either to be compatible * 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 filename_linkat(int olddfd, struct filename *old, + int newdfd, struct filename *new, int flags) { struct mnt_idmap *idmap; struct dentry *new_dentry; @@ -5740,10 +5740,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. @@ -5758,7 +5756,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)); @@ -5794,23 +5792,22 @@ 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 SYSCALL_DEFINE5(linkat, int, olddfd, const char __user *, oldname, int, newdfd, const char __user *, newname, int, flags) { - return do_linkat(olddfd, getname_uflags(oldname, flags), - newdfd, getname(newname), flags); + CLASS(filename_uflags, old)(oldname, flags); + CLASS(filename, new)(newname); + return filename_linkat(olddfd, old, newdfd, new, flags); } =20 SYSCALL_DEFINE2(link, const char __user *, oldname, const char __user *, n= ewname) { - return do_linkat(AT_FDCWD, getname(oldname), AT_FDCWD, getname(newname), = 0); + CLASS(filename, old)(oldname); + CLASS(filename, new)(newname); + return filename_linkat(AT_FDCWD, old, AT_FDCWD, new, 0); } =20 /** diff --git a/io_uring/fs.c b/io_uring/fs.c index e5829d112c9e..e39cd1ca1942 100644 --- a/io_uring/fs.c +++ b/io_uring/fs.c @@ -280,12 +280,13 @@ int io_linkat_prep(struct io_kiocb *req, const struct= io_uring_sqe *sqe) int io_linkat(struct io_kiocb *req, unsigned int issue_flags) { struct io_link *lnk =3D io_kiocb_to_cmd(req, struct io_link); + CLASS(filename_complete_delayed, old)(&lnk->oldpath); + CLASS(filename_complete_delayed, new)(&lnk->newpath); int ret; =20 WARN_ON_ONCE(issue_flags & IO_URING_F_NONBLOCK); =20 - ret =3D do_linkat(lnk->old_dfd, complete_getname(&lnk->oldpath), - lnk->new_dfd, complete_getname(&lnk->newpath), lnk->flags); + ret =3D filename_linkat(lnk->old_dfd, old, lnk->new_dfd, new, lnk->flags); =20 req->flags &=3D ~REQ_F_NEED_CLEANUP; io_req_set_res(req, ret, 0); --=20 2.47.3 From nobody Sun Feb 8 07:58:18 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 B0A3628CF77; Wed, 14 Jan 2026 04:31: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=1768365116; cv=none; b=TGmfK5jRw9OrNScQgUUJhzrCkg/TLqTDW0C1PaOQwQG3YtvNWEPDvnkqec9q49gKn/7AnbKRhjHY1G2jYRnMc+7CjJkzANcU5yoAC74SAU+10B3w2friSOOgihatLrI4viamjpRb6BVcqHi+56ZpeUQtVUWl4+umSWTACBPkrvI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365116; c=relaxed/simple; bh=cdXfVHKKa0r3+DKEEAMGsiNrPAZtfzZXYTdRSq3MJh4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=cdJ37rDE2skIuFbMs8sm0jrG4NjTSpNpkLJ+4i6/umgvQP+5s7hA48dna8QFsjDVE2BPGpi1bamoVqbr2ruX/129UlfcDcMd2EkElvIS/caFIaCxa77aticFamA+WUTlR1iTNhUPxGF4FfKhK6o0/fHJYrYH8HUfliH4jUXFSKc= 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=htEazoqk; 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="htEazoqk" 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=QgePtgHmD8xN/7LrFzcz/pHX+x7oQtmi+XaPljSl06E=; b=htEazoqkGzok/iZdwRjRWkmJ4j A8NhIKGZKOqnEtrKP6NAm7nMbJsZS7Vfe8nbc+9RVS6Q8kDSNunzOoxLljvGkVg3DJgySa31cCQhL Uk4N4TufpPW/u6zLas5YSbe+icHb6izlWqEARVWzeqILvEzo0fNxU+k5LCSTX9+WRImTTvytTixml KieIJ1VkCMUum7oC+Zb0/7PzyIybsLsrbYMKNzTdDsYHva5369Vf1krahkK6mYfnGhrYJDHe59NZB i/0PI/NAIFy/TYROx3/rdcVcj7Bepj8li/GQ/FbG42s197yfNn7a+YpKxKuT97JsPH3odTBVek193 MUKT4GTg==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZI-0000000GIrE-0sAX; Wed, 14 Jan 2026 04:33:16 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 41/68] non-consuming variant of do_symlinkat() Date: Wed, 14 Jan 2026 04:32:43 +0000 Message-ID: <20260114043310.3885463-42-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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" similar to previous commit; replacement is filename_symlinkat() Signed-off-by: Al Viro --- Documentation/filesystems/porting.rst | 6 +++--- fs/init.c | 5 +++-- fs/internal.h | 2 +- fs/namei.c | 23 +++++++++++------------ io_uring/fs.c | 5 +++-- 5 files changed, 21 insertions(+), 20 deletions(-) diff --git a/Documentation/filesystems/porting.rst b/Documentation/filesyst= ems/porting.rst index 8ecbc41d6d82..c44c351bc297 100644 --- a/Documentation/filesystems/porting.rst +++ b/Documentation/filesystems/porting.rst @@ -1339,6 +1339,6 @@ in-tree filesystems have done). =20 **mandatory** =20 -do_{link,renameat2}() are gone; filename_{link,renameat2}() replaces those. -The difference is that the former used to consume filename references; -the latter do not. +do_{link,symlink,renameat2}() are gone; filename_...() counterparts +replace those. The difference is that the former used to consume +filename references; the latter do not. diff --git a/fs/init.c b/fs/init.c index f46e54552931..a54ef750ffe3 100644 --- a/fs/init.c +++ b/fs/init.c @@ -152,8 +152,9 @@ int __init init_link(const char *oldname, const char *n= ewname) =20 int __init init_symlink(const char *oldname, const char *newname) { - return do_symlinkat(getname_kernel(oldname), AT_FDCWD, - getname_kernel(newname)); + CLASS(filename_kernel, old)(oldname); + CLASS(filename_kernel, new)(newname); + return filename_symlinkat(old, AT_FDCWD, new); } =20 int __init init_unlink(const char *pathname) diff --git a/fs/internal.h b/fs/internal.h index c9b70c2716d1..4a63b89c02d7 100644 --- a/fs/internal.h +++ b/fs/internal.h @@ -61,7 +61,7 @@ int filename_renameat2(int olddfd, struct filename *oldna= me, 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 filename_symlinkat(struct filename *from, int newdfd, struct filename = *to); int filename_linkat(int olddfd, struct filename *old, int newdfd, struct filename *new, int flags); int vfs_tmpfile(struct mnt_idmap *idmap, diff --git a/fs/namei.c b/fs/namei.c index e5d494610c2c..c88ad27f66c7 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -5581,7 +5581,7 @@ int vfs_symlink(struct mnt_idmap *idmap, struct inode= *dir, } EXPORT_SYMBOL(vfs_symlink); =20 -int do_symlinkat(struct filename *from, int newdfd, struct filename *to) +int filename_symlinkat(struct filename *from, int newdfd, struct filename = *to) { int error; struct dentry *dentry; @@ -5589,15 +5589,13 @@ int do_symlinkat(struct filename *from, int newdfd,= struct filename *to) 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) @@ -5613,21 +5611,22 @@ int do_symlinkat(struct filename *from, int newdfd,= struct filename *to) lookup_flags |=3D LOOKUP_REVAL; goto retry; } -out_putnames: - putname(to); - putname(from); return error; } =20 SYSCALL_DEFINE3(symlinkat, const char __user *, oldname, int, newdfd, const char __user *, newname) { - return do_symlinkat(getname(oldname), newdfd, getname(newname)); + CLASS(filename, old)(oldname); + CLASS(filename, new)(newname); + return filename_symlinkat(old, newdfd, new); } =20 SYSCALL_DEFINE2(symlink, const char __user *, oldname, const char __user *= , newname) { - return do_symlinkat(getname(oldname), AT_FDCWD, getname(newname)); + CLASS(filename, old)(oldname); + CLASS(filename, new)(newname); + return filename_symlinkat(old, AT_FDCWD, new); } =20 /** diff --git a/io_uring/fs.c b/io_uring/fs.c index e39cd1ca1942..cd4d88d37795 100644 --- a/io_uring/fs.c +++ b/io_uring/fs.c @@ -233,12 +233,13 @@ int io_symlinkat_prep(struct io_kiocb *req, const str= uct io_uring_sqe *sqe) int io_symlinkat(struct io_kiocb *req, unsigned int issue_flags) { struct io_link *sl =3D io_kiocb_to_cmd(req, struct io_link); + CLASS(filename_complete_delayed, old)(&sl->oldpath); + CLASS(filename_complete_delayed, new)(&sl->newpath); int ret; =20 WARN_ON_ONCE(issue_flags & IO_URING_F_NONBLOCK); =20 - ret =3D do_symlinkat(complete_getname(&sl->oldpath), sl->new_dfd, - complete_getname(&sl->newpath)); + ret =3D filename_symlinkat(old, sl->new_dfd, new); =20 req->flags &=3D ~REQ_F_NEED_CLEANUP; io_req_set_res(req, ret, 0); --=20 2.47.3 From nobody Sun Feb 8 07:58:18 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 32A8C2C3271; Wed, 14 Jan 2026 04:31: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=1768365117; cv=none; b=bZkfjlSU4ICdxNUJczfI0YYcubVgvFbGMCHWn6XCOShetVX/Umq25gayYVO/eEKzQqHIMmQfI15bXukSJZoQEe/5is+J/r3eZYin6Yg/XuGPK1yABoJ9+YBd2jSFrczphzknYR4qF4D5kf4nc+1Zm1htLkVLFh4OXlZnOb87bx8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365117; c=relaxed/simple; bh=JNyL/TkYANPwxDw7dlyv46R3RBrMV8xyuHfsJyK8y0Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=nHxeipwoa317iHhcPw9/wWRTwxUpSeda/VKmBJtuab0yBBUu1aVj0B3XDXQMv7gqldhmqjONLXAH0aM0zPfPwRlCblVP8XgxpTvcFBdpOG6HcWKAXwHpz0aSHOS9giVhjOmkdGtMkNiCyPLHPt+mjE4Q43Yag4DV8ogrTz2SFs0= 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=vWd3xDPe; 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="vWd3xDPe" 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=KOMlKW8pfcycdT4Ipg1Qdr7EnS+wAoBtH9cW6rO73XY=; b=vWd3xDPePPFmjSk2dllWO5ezb5 1XDp4vYarggMGW0ppjMXoUxsZnN+m2NnWo8Oe7ndfvzsZboBjxQi8o4fDGQLmBAJ603GbSsXp1GWi iTvO1iiClBikFD5KWNCuakAgHsbkSQ9cK6gm4jJW3xUz1XVy6LigcW6iudctKOpH+Ti6wARyxVPze 4JylUD9qyJlQTT0fffBQEcXZcqpCU3P0lJifjzYSTC55/S5eG47btjq8yCU8Iec+DqwTuhh4fHtOS mdCjPvaU97QCi+3Uu1Ub1qhJMZ7UAoJPh6zQ/FsDGesX3fVD+U0eqxdwAhqatm/5xF97cD6aF45DE 19TGewMA==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZI-0000000GIrg-267z; Wed, 14 Jan 2026 04:33:16 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 42/68] non-consuming variant of do_mkdirat() Date: Wed, 14 Jan 2026 04:32:44 +0000 Message-ID: <20260114043310.3885463-43-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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" similar to previous commit; replacement is filename_mkdirat() Signed-off-by: Al Viro --- Documentation/filesystems/porting.rst | 2 +- fs/init.c | 3 ++- fs/internal.h | 2 +- fs/namei.c | 13 ++++++------- io_uring/fs.c | 3 ++- 5 files changed, 12 insertions(+), 11 deletions(-) diff --git a/Documentation/filesystems/porting.rst b/Documentation/filesyst= ems/porting.rst index c44c351bc297..ace0607fe39c 100644 --- a/Documentation/filesystems/porting.rst +++ b/Documentation/filesystems/porting.rst @@ -1339,6 +1339,6 @@ in-tree filesystems have done). =20 **mandatory** =20 -do_{link,symlink,renameat2}() are gone; filename_...() counterparts +do_{mkdir,link,symlink,renameat2}() are gone; filename_...() counterparts replace those. The difference is that the former used to consume filename references; the latter do not. diff --git a/fs/init.c b/fs/init.c index a54ef750ffe3..9a550ba4802f 100644 --- a/fs/init.c +++ b/fs/init.c @@ -164,7 +164,8 @@ int __init init_unlink(const char *pathname) =20 int __init init_mkdir(const char *pathname, umode_t mode) { - return do_mkdirat(AT_FDCWD, getname_kernel(pathname), mode); + CLASS(filename_kernel, name)(pathname); + return filename_mkdirat(AT_FDCWD, name, mode); } =20 int __init init_rmdir(const char *pathname) diff --git a/fs/internal.h b/fs/internal.h index 4a63b89c02d7..03638008d84a 100644 --- a/fs/internal.h +++ b/fs/internal.h @@ -59,7 +59,7 @@ int do_unlinkat(int dfd, struct filename *name); int may_linkat(struct mnt_idmap *idmap, const struct path *link); int filename_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 filename_mkdirat(int dfd, struct filename *name, umode_t mode); int do_mknodat(int dfd, struct filename *name, umode_t mode, unsigned int = dev); int filename_symlinkat(struct filename *from, int newdfd, struct filename = *to); int filename_linkat(int olddfd, struct filename *old, int newdfd, diff --git a/fs/namei.c b/fs/namei.c index c88ad27f66c7..21a2dbd8b9e6 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -5207,7 +5207,7 @@ 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 filename_mkdirat(int dfd, struct filename *name, umode_t mode) { struct dentry *dentry; struct path path; @@ -5217,9 +5217,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)); @@ -5239,19 +5238,19 @@ int do_mkdirat(int dfd, struct filename *name, umod= e_t mode) lookup_flags |=3D LOOKUP_REVAL; goto retry; } -out_putname: - putname(name); return error; } =20 SYSCALL_DEFINE3(mkdirat, int, dfd, const char __user *, pathname, umode_t,= mode) { - return do_mkdirat(dfd, getname(pathname), mode); + CLASS(filename, name)(pathname); + return filename_mkdirat(dfd, name, mode); } =20 SYSCALL_DEFINE2(mkdir, const char __user *, pathname, umode_t, mode) { - return do_mkdirat(AT_FDCWD, getname(pathname), mode); + CLASS(filename, name)(pathname); + return filename_mkdirat(AT_FDCWD, name, mode); } =20 /** diff --git a/io_uring/fs.c b/io_uring/fs.c index cd4d88d37795..40541b539e0d 100644 --- a/io_uring/fs.c +++ b/io_uring/fs.c @@ -182,11 +182,12 @@ int io_mkdirat_prep(struct io_kiocb *req, const struc= t io_uring_sqe *sqe) int io_mkdirat(struct io_kiocb *req, unsigned int issue_flags) { struct io_mkdir *mkd =3D io_kiocb_to_cmd(req, struct io_mkdir); + CLASS(filename_complete_delayed, name)(&mkd->filename); int ret; =20 WARN_ON_ONCE(issue_flags & IO_URING_F_NONBLOCK); =20 - ret =3D do_mkdirat(mkd->dfd, complete_getname(&mkd->filename), mkd->mode); + ret =3D filename_mkdirat(mkd->dfd, name, mkd->mode); =20 req->flags &=3D ~REQ_F_NEED_CLEANUP; io_req_set_res(req, ret, 0); --=20 2.47.3 From nobody Sun Feb 8 07:58:18 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 9733E2E1F11; Wed, 14 Jan 2026 04:31: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=1768365116; cv=none; b=fF1I1wbkvB+B4YspV5WcHvtNJHU2ZkuFwH6tgAIisAkM1ID1Kbzqa3yBsJ/MKWMVUTybrdufLwciUT4UmtPUbY3XMF/0bxWYWi9YPnns4zPGIJAgEMqRQqOOAyN7gnSNytJUl1Q4/BbIKI3nHJu8CPTrCwrPQpU56C/2tKae77c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365116; c=relaxed/simple; bh=A67ihpKuJasra4IoSjVrrwwp2wKDAUjQWXIk+HIcc/o=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=c17rX17L5xQfKzvmln/vretbQmeqnsINutLdwZ/8MjGu/joXzRmqHiGVABb3PmPy2oFT6FYL3/tJ1+dZ6kbn6Kq9IGeamy5BjwJnGJwKFWSRt6evptYpOZUxlxEYmH1v/wKF/1NaHgPHOYT5o4nIlcJtukJVV/5TvRUbh2b/CNU= 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=tnlUhPUv; 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="tnlUhPUv" 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=PWzRtqCpinFdkapzExjTn2Exm30Ola9EcnVGhZVhRIk=; b=tnlUhPUvDAP4tashfqGNFubDnI cZguo7Pyul4dp3oOZAmc9oXr6B1qo+YU01ZvJGbj8DvAgfBGaJNXs/hKjj6ocnpmTVPDxwEY91IR0 RcglRZNBhMWpkGYXNzD5gZqHOvjdoMB62Lu9qtvocZ3f/ucNk2kANbG8LYuCxouONrqXAgy9m41A3 K6HfqFT3j4uXvgn8tPV4vHuohAszIyTR4akiTiiRQ+KVWXpRRocApHBYlig74Zyg2iK+GFe5OmUIh BLWxItHLOo6aSxuDwQouJVmWvJpLTrel3iOQJJ7lhEaIfiLQbruDwSC6CwBr0ZiEwdEs8dtTcrA6o zZM6xY+Q==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZI-0000000GIsY-425O; Wed, 14 Jan 2026 04:33:16 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 43/68] non-consuming variant of do_mknodat() Date: Wed, 14 Jan 2026 04:32:45 +0000 Message-ID: <20260114043310.3885463-44-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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" similar to previous commit; replacement is filename_mknodat() Signed-off-by: Al Viro --- Documentation/filesystems/porting.rst | 6 +++--- fs/init.c | 3 ++- fs/internal.h | 2 +- fs/namei.c | 17 ++++++++--------- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/Documentation/filesystems/porting.rst b/Documentation/filesyst= ems/porting.rst index ace0607fe39c..7e68a148dd1e 100644 --- a/Documentation/filesystems/porting.rst +++ b/Documentation/filesystems/porting.rst @@ -1339,6 +1339,6 @@ in-tree filesystems have done). =20 **mandatory** =20 -do_{mkdir,link,symlink,renameat2}() are gone; filename_...() counterparts -replace those. The difference is that the former used to consume -filename references; the latter do not. +do_{mkdir,mknod,link,symlink,renameat2}() are gone; filename_...() +counterparts replace those. The difference is that the former used +to consume filename references; the latter do not. diff --git a/fs/init.c b/fs/init.c index 9a550ba4802f..543444c1d79e 100644 --- a/fs/init.c +++ b/fs/init.c @@ -140,7 +140,8 @@ int __init init_stat(const char *filename, struct kstat= *stat, int flags) =20 int __init init_mknod(const char *filename, umode_t mode, unsigned int dev) { - return do_mknodat(AT_FDCWD, getname_kernel(filename), mode, dev); + CLASS(filename_kernel, name)(filename); + return filename_mknodat(AT_FDCWD, name, mode, dev); } =20 int __init init_link(const char *oldname, const char *newname) diff --git a/fs/internal.h b/fs/internal.h index 03638008d84a..02b5dec13ff3 100644 --- a/fs/internal.h +++ b/fs/internal.h @@ -60,7 +60,7 @@ int may_linkat(struct mnt_idmap *idmap, const struct path= *link); int filename_renameat2(int olddfd, struct filename *oldname, int newdfd, struct filename *newname, unsigned int flags); int filename_mkdirat(int dfd, struct filename *name, umode_t mode); -int do_mknodat(int dfd, struct filename *name, umode_t mode, unsigned int = dev); +int filename_mknodat(int dfd, struct filename *name, umode_t mode, unsigne= d int dev); int filename_symlinkat(struct filename *from, int newdfd, struct filename = *to); int filename_linkat(int olddfd, struct filename *old, int newdfd, struct filename *new, int flags); diff --git a/fs/namei.c b/fs/namei.c index 21a2dbd8b9e6..ca524c5b18f4 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -5072,8 +5072,8 @@ static int may_mknod(umode_t mode) } } =20 -int do_mknodat(int dfd, struct filename *name, umode_t mode, - unsigned int dev) +int filename_mknodat(int dfd, struct filename *name, umode_t mode, + unsigned int dev) { struct delegated_inode di =3D { }; struct mnt_idmap *idmap; @@ -5084,12 +5084,11 @@ int do_mknodat(int dfd, struct filename *name, umod= e_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); @@ -5123,20 +5122,20 @@ int do_mknodat(int dfd, struct filename *name, umod= e_t mode, lookup_flags |=3D LOOKUP_REVAL; goto retry; } -out1: - putname(name); return error; } =20 SYSCALL_DEFINE4(mknodat, int, dfd, const char __user *, filename, umode_t,= mode, unsigned int, dev) { - return do_mknodat(dfd, getname(filename), mode, dev); + CLASS(filename, name)(filename); + return filename_mknodat(dfd, name, mode, dev); } =20 SYSCALL_DEFINE3(mknod, const char __user *, filename, umode_t, mode, unsig= ned, dev) { - return do_mknodat(AT_FDCWD, getname(filename), mode, dev); + CLASS(filename, name)(filename); + return filename_mknodat(AT_FDCWD, name, mode, dev); } =20 /** --=20 2.47.3 From nobody Sun Feb 8 07:58:18 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 C6DA92E7621; Wed, 14 Jan 2026 04:31: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=1768365117; cv=none; b=RFC8vCNFQDnaelZU08LfvsT5EgRRiJZ0KH1mlKF1vMs9rA2twr7230GSU7AWJG7qVtOWNn1h06K5IJxRbIy7x8ixR4x6nJwfESNIk8Wp8B4kaCKUzJL8eSlNCJWDu43C4vy7M4buzZ/VJCQGO6FwNMUXKMNb+5jzmzoDXGfEqyQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365117; c=relaxed/simple; bh=mH+IhVh+pGWD+wir6/3XrU+oKiUI4iQYDdHOVb/NhH4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=m6aznI5lfUXw5zPxdVcy0Hx+MzASc8SdPY5mc5NOO34JQP+JA9ML/RI9aGs6WCFuIIRQ4et6/r+R0CigMKKQno8DaIE4xR3XPGBtNPEWLxpvEOH5y2YDigRLErC4ephCnDaSRsgIx9SN7TMvtzsPwlEkRsV1twLZQTPILtbhpTE= 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=mCJe4VV3; 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="mCJe4VV3" 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=OgcfVQFkpDdBHYLYEYn1FYoj0X9C+43KGjqPEVpGXG4=; b=mCJe4VV381ws4rh0IzXRvotLmX myQgKzQrFFFJ6CzBMsI6v01FBdOhW9Z0rb276v/FS6pdrmVWUfY2wEUlXb/mWFI6AftfDkxsq8iZG wXK1IP1HcROUoIbb+FU1M1kGvRgBuTU5gQ2yoK6yjsajyJdFs3kdkeaF4hITeYQsEX6VrkEj6aHD4 ye1f2ELjHKB4C2qwN+wats03wFGYLPGx3Azy5gQYH2qV58F40Mi+DWyd06/EwMydPptSQk1Jy0laj iqTtZV4fjo0/p3BDZfDtyUYkbC9wNitP/ucZtfzfFElR9Bc1LqbaPd/hlOyUcsNFVCN5MDLgG147M uIW0mnWQ==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZJ-0000000GIsr-0Tfn; Wed, 14 Jan 2026 04:33:17 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 44/68] non-consuming variants of do_{unlinkat,rmdir}() Date: Wed, 14 Jan 2026 04:32:46 +0000 Message-ID: <20260114043310.3885463-45-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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" similar to previous commit; replacements are filename_{unlinkat,rmdir}() Signed-off-by: Al Viro --- Documentation/filesystems/porting.rst | 6 +++--- fs/coredump.c | 3 ++- fs/init.c | 6 ++++-- fs/internal.h | 4 ++-- fs/namei.c | 23 +++++++++++------------ io_uring/fs.c | 5 +++-- 6 files changed, 25 insertions(+), 22 deletions(-) diff --git a/Documentation/filesystems/porting.rst b/Documentation/filesyst= ems/porting.rst index 7e68a148dd1e..2b4dddfe6c66 100644 --- a/Documentation/filesystems/porting.rst +++ b/Documentation/filesystems/porting.rst @@ -1339,6 +1339,6 @@ in-tree filesystems have done). =20 **mandatory** =20 -do_{mkdir,mknod,link,symlink,renameat2}() are gone; filename_...() -counterparts replace those. The difference is that the former used -to consume filename references; the latter do not. +do_{mkdir,mknod,link,symlink,renameat2,rmdir,unlink}() are gone; filename_= ...() +counterparts replace those. The difference is that the former used to con= sume +filename references; the latter do not. diff --git a/fs/coredump.c b/fs/coredump.c index 8feb9c1cf83d..d9597610a6ca 100644 --- a/fs/coredump.c +++ b/fs/coredump.c @@ -895,11 +895,12 @@ static bool coredump_file(struct core_name *cn, struc= t coredump_params *cprm, * privs and don't want to unlink another user's coredump. */ if (!coredump_force_suid_safe(cprm)) { + CLASS(filename_kernel, name)(cn->corename); /* * If it doesn't exist, that's fine. If there's some * other problem, we'll catch it at the filp_open(). */ - do_unlinkat(AT_FDCWD, getname_kernel(cn->corename)); + filename_unlinkat(AT_FDCWD, name); } =20 /* diff --git a/fs/init.c b/fs/init.c index 543444c1d79e..ea528b020cd1 100644 --- a/fs/init.c +++ b/fs/init.c @@ -160,7 +160,8 @@ int __init init_symlink(const char *oldname, const char= *newname) =20 int __init init_unlink(const char *pathname) { - return do_unlinkat(AT_FDCWD, getname_kernel(pathname)); + CLASS(filename_kernel, name)(pathname); + return filename_unlinkat(AT_FDCWD, name); } =20 int __init init_mkdir(const char *pathname, umode_t mode) @@ -171,7 +172,8 @@ int __init init_mkdir(const char *pathname, umode_t mod= e) =20 int __init init_rmdir(const char *pathname) { - return do_rmdir(AT_FDCWD, getname_kernel(pathname)); + CLASS(filename_kernel, name)(pathname); + return filename_rmdir(AT_FDCWD, name); } =20 int __init init_utimes(char *filename, struct timespec64 *ts) diff --git a/fs/internal.h b/fs/internal.h index 02b5dec13ff3..4821f8b8fdda 100644 --- a/fs/internal.h +++ b/fs/internal.h @@ -54,8 +54,8 @@ extern int finish_clean_context(struct fs_context *fc); */ extern int filename_lookup(int dfd, struct filename *name, unsigned flags, struct path *path, const struct path *root); -int do_rmdir(int dfd, struct filename *name); -int do_unlinkat(int dfd, struct filename *name); +int filename_rmdir(int dfd, struct filename *name); +int filename_unlinkat(int dfd, struct filename *name); int may_linkat(struct mnt_idmap *idmap, const struct path *link); int filename_renameat2(int olddfd, struct filename *oldname, int newdfd, struct filename *newname, unsigned int flags); diff --git a/fs/namei.c b/fs/namei.c index ca524c5b18f4..ba6e15339ad6 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -5312,7 +5312,7 @@ int vfs_rmdir(struct mnt_idmap *idmap, struct inode *= dir, } EXPORT_SYMBOL(vfs_rmdir); =20 -int do_rmdir(int dfd, struct filename *name) +int filename_rmdir(int dfd, struct filename *name) { int error; struct dentry *dentry; @@ -5324,7 +5324,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: @@ -5366,14 +5366,13 @@ int do_rmdir(int dfd, struct filename *name) lookup_flags |=3D LOOKUP_REVAL; goto retry; } -exit1: - putname(name); return error; } =20 SYSCALL_DEFINE1(rmdir, const char __user *, pathname) { - return do_rmdir(AT_FDCWD, getname(pathname)); + CLASS(filename, name)(pathname); + return filename_rmdir(AT_FDCWD, name); } =20 /** @@ -5455,7 +5454,7 @@ 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 filename_unlinkat(int dfd, struct filename *name) { int error; struct dentry *dentry; @@ -5468,7 +5467,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) @@ -5515,8 +5514,6 @@ int do_unlinkat(int dfd, struct filename *name) lookup_flags |=3D LOOKUP_REVAL; goto retry; } -exit_putname: - putname(name); return error; } =20 @@ -5525,14 +5522,16 @@ SYSCALL_DEFINE3(unlinkat, int, dfd, const char __us= er *, pathname, int, flag) if ((flag & ~AT_REMOVEDIR) !=3D 0) return -EINVAL; =20 + CLASS(filename, name)(pathname); if (flag & AT_REMOVEDIR) - return do_rmdir(dfd, getname(pathname)); - return do_unlinkat(dfd, getname(pathname)); + return filename_rmdir(dfd, name); + return filename_unlinkat(dfd, name); } =20 SYSCALL_DEFINE1(unlink, const char __user *, pathname) { - return do_unlinkat(AT_FDCWD, getname(pathname)); + CLASS(filename, name)(pathname); + return filename_unlinkat(AT_FDCWD, name); } =20 /** diff --git a/io_uring/fs.c b/io_uring/fs.c index 40541b539e0d..d0580c754bf8 100644 --- a/io_uring/fs.c +++ b/io_uring/fs.c @@ -134,14 +134,15 @@ int io_unlinkat_prep(struct io_kiocb *req, const stru= ct io_uring_sqe *sqe) int io_unlinkat(struct io_kiocb *req, unsigned int issue_flags) { struct io_unlink *un =3D io_kiocb_to_cmd(req, struct io_unlink); + CLASS(filename_complete_delayed, name)(&un->filename); int ret; =20 WARN_ON_ONCE(issue_flags & IO_URING_F_NONBLOCK); =20 if (un->flags & AT_REMOVEDIR) - ret =3D do_rmdir(un->dfd, complete_getname(&un->filename)); + ret =3D filename_rmdir(un->dfd, name); else - ret =3D do_unlinkat(un->dfd, complete_getname(&un->filename)); + ret =3D filename_unlinkat(un->dfd, name); =20 req->flags &=3D ~REQ_F_NEED_CLEANUP; io_req_set_res(req, ret, 0); --=20 2.47.3 From nobody Sun Feb 8 07:58:18 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 94F9A2DC34E; Wed, 14 Jan 2026 04:31: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=1768365114; cv=none; b=iJnI6tGAUJZIGRck234iOonKLxLK1+4nWt90yNqVknNl6IWBuQDIR3WgjHfTt8I/AfwSALXD5YpG01MW4x/kV4msa8X7CiMHHsYRe2dGn96CXOIwpGx36C6/yxRyHVgpWOmLswWwz+q+suXh7P/6v/2e2GJj7TGQTq69gGby8UY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365114; c=relaxed/simple; bh=1T9eJEuB6l9T+/4WSvz0MwkQ6ZS9+2XOjVOn7L1MH44=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=iQaTcJfQkEso5IASaKSdSPtjXSRb1FnT+5SAVHIz6LkfZQb6K+FCOIvPBugXZRcxV5ydGQx4EGdOyzwgdf3xSpsIUCtn+5REnvxfBg5EtcdofjwGEc6k1zFu1BzBbm71dDBPRIB6Dx05s6RD8TsdwIzWsepeduiM0x3dXniIPys= 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=Y1v3PAT4; 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="Y1v3PAT4" 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=Y1v3PAT4aVTWLpvyKMFJ7A8roL kTNB4yZQQe2SfDvPFD8HTZSncSDVh8cZIf4LraYO8+DZCCtvSWwJR2zDGezVP7NHltFYAz1rJk1uZ ARD7oOcqr9RtoiM5Dq6XRBFyqFcjBZVuNrmrl5Zs5qM/qAU3Rg5OEIhZjIY44w/krsZ2yHQDK3TvJ iN9EOgRKc2BgImuD3ryiMedob4NWwJ8a9nzA1zvpCCyvQlv8100RhVxJGnl/E9jx+seNhpsPSZEQW ouWAqaCr57mqiZeYbtEFf1N3b3jdmYHZ+CNzLyJ+/dMB0LLUaRwiS0gXXtfUiU2YlK+7U3NxjocwJ 5IqzN0xg==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZJ-0000000GIt3-18FK; Wed, 14 Jan 2026 04:33:17 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 45/68] file_[gs]etattr(2): switch to CLASS(filename_maybe_null) Date: Wed, 14 Jan 2026 04:32:47 +0000 Message-ID: <20260114043310.3885463-46-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 07:58:18 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 1F20D2D322E; Wed, 14 Jan 2026 04:31: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=1768365118; cv=none; b=X1e0SDCYGs7Lv7YIQjWzkjTPbs7FMqglxN+RjPa+e9N/Jc9zJyAfmxTpne5ffGvn9uffH9fOTnpcmMvJ+ZrnDDsLVgoaqIk9+TclY3gvFvILe53+ylV9oO1tIZ7CCl+jwYoAM1qlqmGHFofVRLoqqzqFi87sCENO3I12ZyiY7II= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365118; c=relaxed/simple; bh=ltTrYl7GN0DzsMvuK83DN/Ol0bNTuyKzVNTK64WoEE0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=gJuJxGbZBDv9sGESpIPCbfzULAqQNexrojjfyy0EKVKpwtf0cmjMMsHgZ0wYpN0TAeFSY3m8JPc50bs8C/mQ+xALr8tq0so/+FDdWzoaf+HqDIbNnwHiHulS4Wd+LdQKw0PDFTQvpMHlPld3q/47tnstWjGxGXhTR8tP2PWShwg= 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=BzXb+GIg; 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="BzXb+GIg" 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=BzXb+GIgEXdqrLi17RZGZNANZf Q+oDAcNC8t4GVTt/oQZZwivpKseY2qwS2a38XPFoAqg4IILvSKG+z8teKqI/NAe2kqyAauEntCGg8 AGi6sgscPQqcWDlVsx186ycLy1ZeZHlPyZIn2Et5C3UHpXaDJ8JNbVu8WgDPd4mw7uIbkuH5uNuBI dRvO2g1ond16LpiXxp94KgeUg3tD1AchXQ+GKw3WPLvRhRVWZRKAz8gK9KLJbrV466FtN6kq6CQcx Xwe9DlMSPk3QUzIUHiHG93/pszQi2LlofrgN7NeqzjVsqbJXovor01Z9r/SfbiAWngUuD8MlarWl6 T4/u2XpA==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZJ-0000000GItT-1oxt; Wed, 14 Jan 2026 04:33:17 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 46/68] mount_setattr(2): don't mess with LOOKUP_EMPTY Date: Wed, 14 Jan 2026 04:32:48 +0000 Message-ID: <20260114043310.3885463-47-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 07:58:18 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 E37D22EA490; Wed, 14 Jan 2026 04:31: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=1768365115; cv=none; b=FI4GH5+dA8fi9odl+SnjuhTwfX0SswbIowqQ9t6cDmjNtraLg6nkm6tFqWhpOBLJsYOUkWPwdcLuq0q1dzA+p0CaDsRkrM3CwhIW6A9mHq/uohJatiJ+DjCAsHJrmPbX2XjVgvJIHELM0Ani48nYnEanbMu4jy1Mw/J2EoE6OOQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365115; c=relaxed/simple; bh=EuUwCQQ5BF9lk60Yi0hd6+MTf7hdbXocTKlNTfLdwWU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=SUhBvwfYIttKrjtt2sNEtJs2Z5FohY/8hARNpIq+lnEy8hOYgp+/26u+/ApKSKJZIN/ceXwWOaUKOKJjSGOu1yex+HEHyleQiduYTJCP7F77iPyDPOODtZrrTrZbZA7riR+m1LzsyIkefBN8EaIAipAOpu+RjR9sOYwRgP7piCA= 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=lM65CE7c; 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="lM65CE7c" 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=21dhXbiMOp9FXvz5XDlj+D8KY3Sau8lovkfbiyjSc/I=; b=lM65CE7c/0Yc120Y2qzv4n4M+O ZCLL1wvEwDFCOmRyeYM2tBbqoNxbIobi+dFeHxjGzw0/y5ol17zLEr1K0QL0nGk/g8lMcy9Bm4acb 7YE5wQCsQm+yIlB1Ucc4p1b6Iks1VcnjFrAF3vlRGRpvxzxIlTpZx0SQGtqJ+QACi/RcFJj5KTWBz DtiAn2/vik20KtuYQsw9OYFEOTSO6dyaYaeIXHMAyPbAw03SlLGfcASRd4+9hRBuyGS1Adu6rwu4l e0uBGBkqCt1SSHYz9Co0jo211nSnfhTmZjvc+ShWZweV/GikBgjEGVpGab+skKuKGWJddcYSsRnYG fo7cWYtw==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZJ-0000000GItl-2VPy; Wed, 14 Jan 2026 04:33:18 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 47/68] do_open_execat(): don't care about LOOKUP_EMPTY Date: Wed, 14 Jan 2026 04:32:49 +0000 Message-ID: <20260114043310.3885463-48-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 5dd8ff61f27a..a4f29d2c2d3a 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 07:58:18 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 DE8202E9ECA; Wed, 14 Jan 2026 04:31: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=1768365118; cv=none; b=EaE2UhTveGkmWcRbI78wviaP5b5gdNpUNbkeWa/5nbL3mpnf6RMKebcgqmx+CathV63qHrScIVCgAsJLjr1F+Vn/YHo4zogDe8OSwMnL+32uOuKz9kz5YAfiX2ZQ/SX+Qeo2zhK233szUkj6SpQ+wrUvT5Ospw3s3n+49VbcFUQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365118; c=relaxed/simple; bh=JGIE1Xn73bLwFlYFa1TfmbrgYmGn/Qjf/OmTPOTQAHk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=S/oucq4lF7cbxefsGPu5W8k/zhVUVDSmL5eRLq6SiQWwIPaSykiL+aAUmaHZ+0U78hLt6ah9HkfwFnbUtdha/CpjnOy56Wl1R8e5Cwfg7aBKr5iEhf8PnMIBNqMCFx0u7SIAAuvVMQJhP9hJB+NrXDEa5WvluasT64G9tsdbMes= 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=dBP1edPb; 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="dBP1edPb" 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=dBP1edPbZtJmAyoFq/2obna7dP leWUifReRB+aEsaQlG8yfZoRSK/6myvFJFh+nakW/e7BLpfjTazQjve+jRsXGEgfBerbPCduvWIVO 0yBgfxdJR50ojXoYSaGoVzT3U3s9Ir2iH+T0jQR/KOYynEjOExbuhjKX7KGQwKPc1klSKjmU8MMwY krUpOC2nYVn+BjkwaU30zDFtNu5LPHxPOdgJa9r3fs+yAz+jcMEbZp0bkFHXV0oCZIzjNFkxU7cJg FNKbitKXPC8zeCCfBT7UpkhtYdVqps8XWF/x/txMtU3igeToizpCI7EIi84cWM1guSPXlwdNREOvg 1OTHTVww==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZK-0000000GIuu-1JcP; Wed, 14 Jan 2026 04:33:18 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 48/68] vfs_open_tree(): use CLASS(filename_uflags) Date: Wed, 14 Jan 2026 04:32:50 +0000 Message-ID: <20260114043310.3885463-49-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 07:58:18 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 B2B8B30ACFF; Wed, 14 Jan 2026 04:31: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=1768365117; cv=none; b=DJ2FlcMreRtEZKTt3bClr6hBzEXZYr9mNZ2Ic34JFLXdCWiwSlI52BMu4+OEQqRlK7WXw6x5U/TU81f7OY3PToKQP50qjivPtYWrL6HZIGyxlyiKOa6XHwcYEZutkUIqP1E8XKHXN8OP+kkRlEoSwvuhGIKQBxtDS6MNfouhOqg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365117; c=relaxed/simple; bh=ntStfDefI1LSk8YKGruB1ETOnK4upEIT64zjyBPt37E=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bnmZKpgmqpuPnrgGOqU1SsU/quGkSI/7npGKLaEPrihEI7fFdkBkiHFiVmijiKQAjT0hMYdupysdwD6YV6M8Xkwxi/Pmx18FERnspuALpaTW74L3PdPWuy2fuM6VDMw1vEvOwwMXwGjmYNCZITwEU4xpPdDqknJlv3KknMUKxKo= 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=RLXRx9v/; 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="RLXRx9v/" 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=RLXRx9v/uGWkFOwyu/GhtIXT88 czqDMQ70ZjGDDs1aYJY+OGOeksI1VdaXlF8d36saAO7nGgin2aj/A86HozZIuafF81qiK1LF+D4fY CB2Gyf2ibj5GYNLH+9wIB+dJcn0AEUwXafwHug7I5TwDpORSZbnhg8JSsamU0AaaRXH7lObEu2e0U h0mt9AxKAwHPfLtxqjgw5EsuNG/L0nJpK4i0vT9kD9U0bRDy4gJCz+ocUhosLjUolG+7DDMcKVMTB LZIa8Tb5UAoZrV6lrlNwwLmYB/UdgWBLd+tvUlmNpv2c7MM0My5b/x4YrK+GZuS5EN2bDqL/5pqMJ RU1bhjFQ==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZK-0000000GIvD-2h8V; Wed, 14 Jan 2026 04:33:18 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 49/68] name_to_handle_at(): use CLASS(filename_uflags) Date: Wed, 14 Jan 2026 04:32:51 +0000 Message-ID: <20260114043310.3885463-50-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 07:58:18 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 BE0882D8384; Wed, 14 Jan 2026 04:31: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=1768365118; cv=none; b=CwzuATdM3IiaKGghfiWBL6sjfg9H8gzsBzNNMWSA/VU856EUdQAzQCd0vCLWONUD6fNkIhtEsw0bb79pg3CPgeyYay/tKI55Oe2phnKgMeKSwiT/dqYJiLgHQqBPPvxoDGJ1g2nWxHYD2uV5808elqwlB9j3Fj+mLQR+eZmjWqo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365118; c=relaxed/simple; bh=Lw6fkolzG2z+rslNz1/IkWVTRMaQxHK9deworNvUlPI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dBBvMFbjj5/QsUb/71QYKGisW0IvY60qv+d5oAL5+t9ugnsLQsF4bx0KFhx6o/3dcJsmo46LGgObvn37e2h8mKqaqWWfMWo5kNCUolWZJAtvS/hyA3vafIZ7usPtNRHKS9cWrhyXGylSS8cfp12HJycsTlGbVVhGaiaT8rk8+Zk= 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=dkPcWTw8; 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="dkPcWTw8" 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=dkPcWTw89yMaDh62THni9wpY/7 VwJwmSBfa/eMI16hFaGDw4/aN1UT5xoDD1dH3unmtL2ZewruZuZsUjGOLNyza9MwJyhHFq57MWCcX Z9vdb9TBCtXAx57ia4wgmV0E5gP7LEZRnM2FVC3HTcFj0+fFpRcD5BxcIS9PIblvFRMyHowRuFgnY N+9xvlRxIDzrbBushj31Z46WWYRNYrG/XlufG392ZQyvTKJ6CZgT0EVCEzeGVcCxnmQc8wNbdsz8x KLeV2+L0TR1yBdOi6umAVXdEDaHmi+KoxIkkkNCQs9/DbUprhwEV5J7SICJEIkHn3nzkQNcY0jWHK FbD42L8A==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZK-0000000GIw1-3sPr; Wed, 14 Jan 2026 04:33:19 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 50/68] fspick(2): use CLASS(filename_flags) Date: Wed, 14 Jan 2026 04:32:52 +0000 Message-ID: <20260114043310.3885463-51-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 07:58:18 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 AB110302151; Wed, 14 Jan 2026 04:31: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=1768365117; cv=none; b=UOVvLPDqiFy3syjKjzMkWgfrs8+1kOqgVXeF2ODETqzsM8YiN2PseAM/jRB9vNJl4Y3xed/dGyB+pu7afip8C8fF4zLozl59Zrwmg6vjnnnMUbJxRtaVRLqiz/0+51Jviwn9fi5T+LcVu5WfeHXKgiZa3y+N2Hwm/hUvYSTS8rc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365117; c=relaxed/simple; bh=9rjy/O7zk9NHa0zEpN/u8HwvuzoJz5ExAtWTchA9beE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=mypBYSi+MJOQsR6EsF2DghFOb0v5bznTE0lN7HtFyhe7Vih47Kn9XT/hi/0tIoh7RtPoBj2ygZHvXf0pfJqZxnigYVTkBbqU0x72bQUwkRD/v1OHrJapnL6r08TGVl+ahNueoZa/0aEgoT29p8hq5j7MrlZgA8Tc9RAJypuS/BU= 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=NSJc3nsV; 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="NSJc3nsV" 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=NSJc3nsVmPJoZ2JmtZS3Roy38L xrfbGlO0rxCV1kL4TD2CyFo5eHExYKMnyMlbRCoU31Q9GjufK2g5+0GfYtJnndhFLb6CDj8/Y3OOB gZwr2BtVlWxTxKkEREjqjSJi9SJngv7e6y4IcK51S50CekJ72QGpfPYY1bIGkilpYgsHfT4AmMS4G 615ooNE93tWKgkLk0rIok/eFtdP22yBOtce7qeSOh+g/7lWKz4hsJ/r1uGC5FKbzMMO5fXchNGfzn OIvTCG1j80ADQt67P2JAcu0G3sh1N748oejjFODhQXMz+OY9ulscM0s1B/b/O5nAs+EP/gCBTzrA8 4X2AY7mw==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZL-0000000GIwc-1dFX; Wed, 14 Jan 2026 04:33:19 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 51/68] do_fchownat(): unspaghettify a bit... Date: Wed, 14 Jan 2026 04:32:53 +0000 Message-ID: <20260114043310.3885463-52-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 07:58:18 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 BAC74303A1D; Wed, 14 Jan 2026 04:31: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=1768365120; cv=none; b=p6+aeXHHRthEbGP3u7vAP20KIo28AfxW6eDKTGXcJ+aWYyzs3MeLlJJTjcn+i9kPDWpf3N9ijBFwpooxKcSTMcwI2ycGAQVFrc6Kik3bGqwGFid8cbqwXI7y+/UMEF7d/Dle/7/TFhMm9eHZoHsOUySirvFFGs2n3xbgUPkoNJM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365120; c=relaxed/simple; bh=urAa3ZS6X7nMsa9ZRz2Pqn/hpkIvLTL3N56s9umZyt4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=VZue41xhgVtWo96h5s14raZrs+vG58Xn5gv4VDc6bQV1nLfUhySS6UTcV7quhe/40tewu0KhyVvyvYl2znOJxAByjI9uXHPZR4XG7cTwG26MaPA6DBWaBdChdwDWBZ5sWYDygYkQwhumnAetVdxs7j0ewyPAGs2QrJ1ll5wD41A= 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=Va9dJkUm; 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="Va9dJkUm" 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=Va9dJkUmRZ6qkdGkQKEsXYEUtf 98HjeXCJpQ+CR4pk7/Ru4qbh5VuTyjEZLOaqe6kodcb63JqXwx1l6CsAb5L3xnb3XxlgEGjWjQHPb I9BADjZvFp8/5GHSl44pgjF2xWc6hEx+7PExqnpZO7c2Honz6umVtvB0C7dS8fG7L36wKBCFCMu6T IAWzKD6XcfdNECS1V4g18VIlnOMpkPnDLhOYFVvxL/sOKiivja3BQomQ6agr33PCiUJQGLoosxlWL SeGgkevMT6I9ahicQQmD0+MxelCsaMmCiTJEA1HJbyC42JsJv+4fbchbMYFxM2/C+RoRlfNaofvSu q+bUsfxA==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZL-0000000GIwu-2Jw5; Wed, 14 Jan 2026 04:33:19 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 52/68] chdir(2): unspaghettify a bit... Date: Wed, 14 Jan 2026 04:32:54 +0000 Message-ID: <20260114043310.3885463-53-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 07:58:18 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 C13F12E2DD2; Wed, 14 Jan 2026 04:31: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=1768365118; cv=none; b=DpSwwZdW522iPgQN3rwmMAWnkRf+tk9qUxysxNHlalb+2ZRUpX2Q2DydofqdgcnWAjHnbdXLxO7NzHuSfVVX50tu4zCYINnFo+tsLBOqmtlS6OCprVpEBqgVBvPfa2kBpQWfDOvxu9qKepj/oL8pAiy39SdfqVuOgGoXDoGPhcs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365118; c=relaxed/simple; bh=Ln2QhD1+LiE6hrU8DCpZyq1Aafnjm0E3+Q2zcNTr2ow=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=DLE5BONQ2DpLVJ+OjDm8NPWKV95dE/HT9lTlUGeRvWqWF4hFkfVfsxzBOYZzXtZB0HX/7Ti0fbMKVcl1iRIgSlrM5n7Pea7vNNo+d24GQMf8c28UtLovuJtaOOR0DQPFFDQnGjcB1QQry+wJG927v3KFDvKgnlkS6FaI5L1aMpU= 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=lLJYzHu4; 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="lLJYzHu4" 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=lLJYzHu4dxQMl90dUuKtwEtrj2 M9pobuv3AiJIy8Z8irYkAbd1gM51rip2wbbhpEORnPTPis4ODKYMR1trRzhOB6ygBWv7J6rGemLaF uBfQSxxnqwtRvdmjFCkcpiCt+pKtgm5L82Ss5i8d/zdOGjc7MveY1mnpya5+hsjrxZVxSoecX3ZLF cA3iUB+2mTTYBBvy5FZ7F+0MVaM99xC7D9kurSZw9Cy9CLwLUYowEQRERNBnxLPyYsvnPc8pdH7pH LXNjHFe73RbI5fK03IwZUUbktXNFYV9sTWGF9ftUs1iTZzUrtZBqcP+qSnJ40+2lvQaphu+ASNGJr oKJ1am4g==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZL-0000000GIx4-2tf4; Wed, 14 Jan 2026 04:33:19 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 53/68] do_utimes_path(): switch to CLASS(filename_uflags) Date: Wed, 14 Jan 2026 04:32:55 +0000 Message-ID: <20260114043310.3885463-54-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 07:58:18 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 B15FB303C83; Wed, 14 Jan 2026 04:31: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=1768365117; cv=none; b=ef7VelBVBglLXiD02KG0kPoBRPekKyjQxVqcZp5JwNynHAsCYxllva15ATCLWmqesLsCU3HlZejhNlJrD9kxhR/YMkAuLhFL8tvf693tB6fc48MShbbOWjvq9ma+ZK58vKFUvMKF89WbAecCPc8RrpXkT4nWvQI8UtV6dOGFy8k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365117; c=relaxed/simple; bh=oyKBfs/wj+3AFANKikryvf2/aOkh/ktfJ9g7Txd0zkM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=iqIacfbUzx+/WUR+UKxtPQeVx2N4ZqT9n2k14zxjOxrBc/kElWELy9ZhUUSZW2sqphR+V2WmXkpHtm+nvscN/pW//nR+YLpxIuiP18oZwZ+ecbCTgOUrZyv3EOnnxmyjChZNxHHPb9oKHS6pYWqz9FRRl9j/zzChxyNvHSwhqg0= 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=LLNFfxai; 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="LLNFfxai" 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=LLNFfxai+CFP263vVi0kOaJQsW pmbRSiWJ+IDUrqJn8oi4koG+LGHr6Vvyvh9ix9YXQRXuuD7c+efw1k6uyxmvkTeEyjpoPAlMSUlTR GIfeYO5MLG2QOCDUHiYCqwOf50jKJtsdVN4Jf2ewqVeNeYYlXH12XHyenh8egFhUp80pG/uOvA70V LV0SiJjz+u9KE0iAKcxH2da0MeodbRg1RHdv/xymvMg5Ar2R6g9EPkor8kBWuMNhYXUp0HxI7k/o4 eVxNPX1GoA/vpt/ykP3Xa0jSdPB1S3NmtJTkzojo7zZUgI4uwKihWrp2cGLpyFPDFHyWhhI9ZA5eh vWtR+fCA==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZL-0000000GIxQ-3uX3; Wed, 14 Jan 2026 04:33:20 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 54/68] do_sys_truncate(): switch to CLASS(filename) Date: Wed, 14 Jan 2026 04:32:56 +0000 Message-ID: <20260114043310.3885463-55-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 07:58:18 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 6A7E5314A76; Wed, 14 Jan 2026 04:31: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=1768365119; cv=none; b=SA8XA3vC/TNCHr9wY4UwFuHOsOIx5X2EFQZWa8RJ8NBMv4gF+Un4nXtUEBRhSeL2dy8j0IMoOxfkgn3w5o7VCF0lY6PjucDfuX4H7b/FXrxJaaxf6q8xz6+L27TSohVj2BaJ7pP0BxI2VMvhAI3XxHptfhsAi0OPdDYjw7kQFFM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365119; c=relaxed/simple; bh=ZQKnnJ+DT/olw6Lm8LfztDzd27NRaCqPT+q4vUOkjL0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bq+zBE6/nt7XRY9VN1z9H5CAYqx4T7jsvT9+ySo5Azbd/nyHpYjxuLhdcUZf+bSaha1DOSiZReKWtz1yblUbZ/480dwt/cDzI5iJrviTSjiS53CrfIhTPqrWWnHYIPv8X8Zd09dpxR1IqK7k3S/VBS2lQSnKv7eQbA4fztMsFro= 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=iaYxLbX6; 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="iaYxLbX6" 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=iaYxLbX6Jw+u11/tdoDO+SeNdn pmTwcEuXyT+yoKzAov3P0u9Tr6xqDBJ4ZTsD9Q4GrvwpKUNbCfLFyjJqdVCUuBR+y7WjHjz9cenjP IyBgV/JGsizCYcIz5Ow1mPM+OgyhblPkeX9omlglFNM5Rt+NLA7BhgvAbllkL2BppsUG/T6QrU0GX MwRO0g8oh7lRD+JNLJko2sFsNyEWg1YMGSU3+SyH6eMMWBJc6Ti/1WLswVgTGcxZyQcY0PCB5y2dH bUDE9uDQDM6ttTPCLstyYW/xqttWdNo4znWWjem85SccPKfNcPzAf6jVjQhiRK8raZebBA1SviQQF cKWcOHGA==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZM-0000000GIxr-0gfy; Wed, 14 Jan 2026 04:33:20 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 55/68] do_readlinkat(): switch to CLASS(filename_flags) Date: Wed, 14 Jan 2026 04:32:57 +0000 Message-ID: <20260114043310.3885463-56-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 07:58:18 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 6E86D31A575; Wed, 14 Jan 2026 04:31: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=1768365120; cv=none; b=Qvh9SMp6U/Km9YX713cM+RNl0meQa2JoH2NV7Yn0nJlJB0VqocCmQlOx34CRYZN+WovZo0nSqrrkqCCogqaxjZYEEIV6bGQo+XacWYowlFimJ8SeBWOKDJS+W+xl23QUgS+qBzikVBWorHIOW77QeM4wzvqgUGrJvl8RjD3tkZc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365120; c=relaxed/simple; bh=flPREUjz226vbhFUNOUM/b2whXof1cRdtkFUivOyMAU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ZxtyqzFtyV62oVLaMwwZYiD/yQGdUZZZd2XXFyHI0sRwHZrdWxvI4H8hMoCLh0DwD69rfv1+P0rBxug0jhXfca0T6vTst8iXV3xKZaRndFd5Cx5Xy3xMV9uFaK1sOc5uRHrkosTjzwnjZH49WSCe5Xx1Se1leBvtenKbioBVc3U= 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=QfYZKhl9; 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="QfYZKhl9" 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=QfYZKhl9ZS5sAr87+PkL7p3Ejg 0qSYN83Ujki+pbXZYJzVFgdGfA67n5F9KNc1BQ/gnUY9kdECHJf6/lBAlLmdSW4oeRPRUEPhBokqs wzEjZ+Q1BWwy7prCz+wJZCdNi8b9x12rP1xBO7UmEr0LVHDHophcwnUKPbBJotuA6UMWcNhUJ7eVg 1q910vQE0Z6eBkHRp4NuXsuh1llWnwPgw2cZlJuyb0PJZlX2Dh+cQz8As9BjXi1RWYMzXN4lmv765 ZYTZeSiK9wDtLsdH6uiAj4gpMqcwxqMYhZfqnnVJHIyBlVhDxOxUf0PZ0ffIFbFOR9qYtDeGreR7d CfE8+jtw==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZM-0000000GIyG-1y4w; Wed, 14 Jan 2026 04:33:20 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 56/68] do_f{chmod,chown,access}at(): use CLASS(filename_uflags) Date: Wed, 14 Jan 2026 04:32:58 +0000 Message-ID: <20260114043310.3885463-57-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 07:58:18 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 6B82D318EE3; Wed, 14 Jan 2026 04:31: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=1768365119; cv=none; b=LVWKtVQ8qpwDGWd5ee+kGrr62s75Lm/SrRKFKyhH3QeX1/OT28Ya4yBxWzgLVfasSeFJJLUEzz+J1kkfjnQiwJDJPj24xuYGry3dr6Z3fw3YedtndcJ7Xc+AtK0HKovDm55PyvML4nHua625YbtYbOPMRLANa+D5dHKq+CtWr6Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365119; c=relaxed/simple; bh=ljJhsM2UM5HEh3KIUjpWPjWzR98+V6slammE6w3oPzk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=QpHvqaYjMKj35XS9UgCE49KmOKTUVVCitMFNJsV6jqiAg/SR4uh1vKcIVATqkSqkzl5Y1BS9TlrU3UEkV5VHp8L5SkOnCbscFwL5TmDFdbDwrBmQbT32CfPQTfKgoSsV3NCv/nBTcWlpw+Tn1aQIkh2GLOu4d3H+rUVX9aIWEgQ= 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=HGTog5Y8; 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="HGTog5Y8" 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=u60OFkXUnAqsCaBd4FJv+u2v9etfYl45qHO74HpFUVs=; b=HGTog5Y8Lmgj/rKKNAyvdvcIuG 2Z96leJmRV9ue55kTKUWWbeGw/WqV40ehHQ4NfZG8+Xqz/nkcIuIVS1hvD5FFY+5NjaZrjBf82PCY LbyWr+5GIm30ZznDjJRXTyZxU5GIj0ftzCqvkkyIWMjdT+oy8pWitlVKyQCTRtS3utBFy0XmAZ5cg YOazENxsQQ32l2bIKisq0OVLEbgj787yi0nukFRVSp4aAaOuxJpJad+AxmNcN5Zcm3BGTISJ3tlmR 9o5YDn+34bQptxTHmsilOW/FHhsA+sYkW77lh0b1V8cEh++Y7ev4cNY7zBNlABkWjE6dW2gK9SQvN lkbRpfgg==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZM-0000000GIyW-32vR; Wed, 14 Jan 2026 04:33:20 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 57/68] namei.c: convert getname_kernel() callers to CLASS(filename_kernel) Date: Wed, 14 Jan 2026 04:32:59 +0000 Message-ID: <20260114043310.3885463-58-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 ba6e15339ad6..1158beb9a399 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -3002,7 +3002,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; @@ -3023,11 +3023,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, @@ -3044,12 +3041,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 @@ -3083,15 +3076,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 @@ -4888,13 +4877,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 @@ -4905,7 +4893,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 @@ -4961,11 +4948,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 07:58:18 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 6C12F318EF3; Wed, 14 Jan 2026 04:31: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=1768365119; cv=none; b=p1i5P8xgjMNyxNMW3GYrf239FPia6bBNkt8ASzYm9jo8GkvkW/a6dBfviWzZ0MRaZwAUcZBVnP1QFEJxkPqtWN5O52P3BpTvGY41nIDfSE6M9ph+Tb1A4RnU8b1LvHG54hW2MeHPoFq2HPhERcWRjQGFkxv2Ruwzfoo/aiqi1x4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365119; c=relaxed/simple; bh=KjxmbCW5MCRM6nC5+XrdGJEnUTN01oaui7yoMjFi/e4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=GR+Ur6coF8A6fsFChNBCx1F5n+uuKZ+E1BiLPmdgsvByQVvUwezJcW7NqIkt8d6Bzcb80+lTD2NNgQQnFrtTQ3EAA7BM6FCoSU7Q8+vCJXG3YT9nJ+mj3Ep1I+mvoNP6L+IMIFADSIv4Qv/kMkzBPIA5xhGIcE96iLqUxPJr2wg= 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=rzeQQkWj; 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="rzeQQkWj" 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=f3Tq4dg4vJ+g4m/HKj2ZnXxW+2fjFXXLL87/JSOPfnU=; b=rzeQQkWjhI1z3Omdp4OrPo5aO3 eeOJNz/9tDzuV234STBKH7/3scGRHuPUELpKM206pCyzGYYqg6mNZ1HOIQ37kS3w9zpzZ4d/Oq+y6 f78BDTaK0mh9TBmxUiVmRW3PFvfTmdQxYLQYy6v1kcceaQaDZ3/RolUq20/brqVz1db60bLxJOo/E T0z+hrbQHUAhrYqY71M6559taWvrUDXexQa6lCukwyVlVymYcPs2SlFXpy2XfCiiBbmW6bgWWH2BY ctXqWMISU+a78n1lkOB1ohdogQD0teOrT3+lxCuE4RkWmjO4CsfQl2lxJdrGeehv1QUd/XYcxV2lS vpgzUMJw==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZM-0000000GIyn-43pk; Wed, 14 Jan 2026 04:33:20 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 58/68] namei.c: switch user pathname imports to CLASS(filename{,_flags}) Date: Wed, 14 Jan 2026 04:33:00 +0000 Message-ID: <20260114043310.3885463-59-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 1158beb9a399..25c786ab0542 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -3031,11 +3031,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 @@ -3613,11 +3610,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 @@ -4976,11 +4970,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 07:58:18 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 2CB32326D76; Wed, 14 Jan 2026 04:31: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=1768365121; cv=none; b=A0KY5fpX3NTk0LOVqI2/Fescw6zCXAKQdeZI9HZU63tKQlb0Uac8cwINS1LZD1jdiRNjzPdui5Z6O2qmfi/uFjFVE+6M1KpwpKYLDrIkL6kGME2JAhv4XbS6B1dGJTE33vF20J2WYhXYB7/rQD/bdrXlBHz4B+uDFLWsQtyq5BU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365121; c=relaxed/simple; bh=XEXjfy6VIDObTBv09OYWsTKJyw4xhl6Gt/Rc8d8rX18=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=f560e3Z8L5spxuu6QPYkMrTKtic7SFQyn0H2UAzgJfs7OXstdXDM8utPcFYCx9uUnppJHjcx8JiQqHrAMHqrSFrBVeP8EPyEzzoFyDttOuNdenrC7A5BJWIYUopea2S6irHuR9jhs/UeVhPmBmzlYDd26/NlbnyW9N3reajwhlQ= 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=M5rWo8uO; 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="M5rWo8uO" 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=M5rWo8uOvDMAAXb556hpVNEjPL DWXn7IZoKvo9TiXA2zoHm9/Lxv5BZNMfHQPZEQy76f5A3ZLUg7h3vnBAhKW26PhEGJ3h4QqPVGs08 gt/CE1mHPiAvEi+coyxjjgsE3QEWyZ0PmRAi3h9jMSDraxTyCh6Bmdk0SUJ7OiE8Fv0m2dWJWkjyi MA8bSgW3wMwG1hA/Tw/ai5It6HUafEJQXzsauPxpbJrIfMlvBTvC/MGh7F9pQdKcwoj7I8fDrONHe Hk0jnrNhYGZBRyElhmrl2PsVoFRdY0gO6uqEI6qLtiBV78cbYZxFCo/N28nSBOlSBwfCP3ks2mJPy 6HyJc2CQ==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZN-0000000GIyv-0HH0; Wed, 14 Jan 2026 04:33:21 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 59/68] filename_...xattr(): don't consume filename reference Date: Wed, 14 Jan 2026 04:33:01 +0000 Message-ID: <20260114043310.3885463-60-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 07:58:18 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 2BECC32695B; Wed, 14 Jan 2026 04:31: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=1768365121; cv=none; b=V1gqQJMPUF4xXrxpUAjO6eswSLt3UkHk+PABbLgRIe8TJBK47kitmc3I7q8Wxvnls2F0HT3APGc8fNrQxHtvQgmpvg2aFWCcKWZAsFZHTvkCF6xYM5A3sDgoqnpQ40B4c+JOpdcJI2R+GRz65IhXJmpPpDtAnD0U/dDpxGRkJ6c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365121; c=relaxed/simple; bh=nTHKXw8UwcLMJ53XI29POh8UPZpmRIfzCZ6jAwlP48s=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ITCmaLyvSQhuX2wnBpCJ7n9tnFCFEpTgu7WmCZ3r8sJWFq1vqgJx+Y48as7ml5+y9074SLyuU65zsXCWqq5UB+F0MRNJMGpzRqNNsn5Uei4YKk0E1/CQP0G07CpGmCkR3J4lFxc/fReSou2N+AhdZ0LqEMBfn9fxHwGv9KXRKKE= 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=HUfBs9lK; 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="HUfBs9lK" 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=HUfBs9lKvM/kJt/9kxrY4QErYn UPJZcRT0qr90jAtOrroNRZKtdHS/d4WyaGAvw6vPLov6CzwRV9JJyFxq39NZsSRUb2pRz9BXkcaeI 5PNhYprY8ZNsCLEYigNYdoOOBwrmRMXcoocLcM6bL/7PIh3Atr4660/pSTanrBD95o+pGAlCidfYg bpeqV18iFKoS+/wJj5F/g7Gfn2NNKcElULFLgp+0ycFyEMEgZbJYbLT8+f++3kiiWMOfgAQZygC7R GmH8MkyJ4Xq4C0guBT2HMfQtFUHMsIL4xd0lBEFplBB8zifIiKwo7gKz2kMdexVk8VZN6q1+044P+ g3Xb3uBQ==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZN-0000000GIzB-1XEQ; Wed, 14 Jan 2026 04:33:21 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 60/68] move_mount(2): switch to CLASS(filename_maybe_null) Date: Wed, 14 Jan 2026 04:33:02 +0000 Message-ID: <20260114043310.3885463-61-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 07:58:18 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 7EF1F322C99; Wed, 14 Jan 2026 04:31: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=1768365120; cv=none; b=MjGl+Yr6AkMHY5Us1WDEXSztXNJu19VlkmF0Wo2Y1AVQuOT5Qot4wQQvODBbVZSDeVpz8yakInPJYV0AoU3FM7seNS8biKCXt9oZSWScrjCZo/8V8igxJn8gET6jRFwjVBP8JYEzUz44d8IBCSR4bBQ7U+45Te++tXLAyAOZexM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365120; c=relaxed/simple; bh=K04pMr7mpMxH0hiOJ7GtPBaHUbq5OaTNv0GMZ/FTQJk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Um5VxxopX4kOeksAg3a6bedPXGMdIlO9DsU4k/H/2G6jqTguvEFKHR2PN/kPthFPkmRNJ2kTNRCHX0M3J4jXCiDX6ZzA8CmKFXOB6FM3iHJxa1cC3ZCArcP/iyf6kYDrA8q5vq8dcTzo5V/vZVEQ9esbBH5F01ABmZ1dUWAmhL0= 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=BhCu35aR; 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="BhCu35aR" 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=BhCu35aRoRhIUPsZecco9D1qfn Xs8fcNxfycR6YzE2vi/Uxqh8b42+pswTEQZTZtXsNDyJKZezSWop0yVwRMxhJ8rDl9rgpnFbWxbvR +6WLhIj4FDarUXF/+2HrPIhu+QR0NivQPE99CCFtNTt9l6qc9kxmh/yuY8uq6LtGcpJBzLPcRXWzI LNIc6uIx8pR5KjsHOjIQWGmu/ePfZ1DGv53599TArGdV+UofwYQY/mwtZyDsSwVNSzQriXCMJSObw KDg8o7a+YTiMchREDEeNU2hr3Mbukc+v1kgw4MeeJLig8CdtuI1E5xx6cS27/6T8JIjjeQ4R6iSjr s5JpE3NQ==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZN-0000000GIzP-2WRl; Wed, 14 Jan 2026 04:33:21 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 61/68] chroot(2): switch to CLASS(filename) Date: Wed, 14 Jan 2026 04:33:03 +0000 Message-ID: <20260114043310.3885463-62-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 07:58:18 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 C83B6328623; Wed, 14 Jan 2026 04:31: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=1768365121; cv=none; b=WWwAm7Uulw6hcR6WjmxT9Rob5hrkKLkxkZjdyJ2/dlMqDI6aDAkyq1Aho9ofqSb2ckC+TaFegUbi8hzbrVioSvvX23fA3mS6wCY7bkOn1sd5olgtCq3gM28RuUbKLvLMG4KI2LKuoBeDHDksTEs9CF1hKPjDO2Dfli+83S3gOrE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365121; c=relaxed/simple; bh=AIif+faRQeRaAqpK3WJa8jVZgeyvF8kX2QVOTCmr1Rc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Gp9tnc9ctylsL6wWBh4MOMhzSLSQf537m88R03tfF6cJPMeuwmSpH33UK4FmVlSmqplsFKy5mqPOR56YWvmbgdVXjEzgu7zImW0GixUPnXJSu7ovomIT7Yq1svDBFZmFPd8YwXOZGYjk8ThQXrO+sFcx2w7tHKnB5k/jLwVZdHY= 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=btDc3Tkw; 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="btDc3Tkw" 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=btDc3TkwQwc7Z1UBpQWNJTlEzi CFbocq1lVIPvFn0AHWDcPZQ/jxFloTv5dEzdu/CSjQsX25HqjQe0H3NxKuZb377CXWfWQoYlSrza6 7RDu6hI7QQe0uRkIl4oAXdzD+1PDvl9JuqL+3BC7Hx5QOwfecViUEXSm2stVlGdpjvWMtqakHl0ih CO3ZIfYbgXGRZuC7CD8lCsnFESkyKZRNFuBsj2hKnHrEGBS3QyzyhJm0Gu835mPohLMm6UtxWYEWe 3LhXDWtR1Fyf3H6IJUsdhyUB3zNRpu9bbWOEPdNPRo5UEsM+nI5nCLUvvlGBcaeiNHP5q40hh94rN EcjPW0sg==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZN-0000000GIza-3FtC; Wed, 14 Jan 2026 04:33:21 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 62/68] quotactl_block(): switch to CLASS(filename) Date: Wed, 14 Jan 2026 04:33:04 +0000 Message-ID: <20260114043310.3885463-63-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 07:58:18 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 2C2CE326D5C; Wed, 14 Jan 2026 04:31: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=1768365120; cv=none; b=t+VWyoVEXpjLT8bXcHIF/9+pOHq6d+yVKl33Jq+dXhP7EjqNH5RgMPQSrpwDlLNVcMMMJJRqhkSYJW1rd1PTTT5M1gqS5bKj+aiwb99CW+w2Lt2WhwXZKWuxmGyoh2jMjm5PIzdKpN/cipJpeMwGGguNiXE98pYxhRxs1qM+lBI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365120; c=relaxed/simple; bh=ChpWIeg+38MgGLjdG9lHbGmsXI4DwNrcC5qNS+HG7IM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=EZASuXCWSr6lIX1KZJEI4Odx+UH6GZyCoPo5kVeHGVCNfS7ZhYjKhrHDz/JJkzo8XT6Wwmu8ou9SBFPst9t06MXZMVwTg6ppWobbLsmvFuuD2GiA8S8C+wb6MQBxWq2Nzp0FWLPq44pvlDmH/PCgxa0LouMQRv78IJ/DLO9USqc= 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=cA7NNjjX; 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="cA7NNjjX" 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=cA7NNjjXEdMOJLa4ANPDvyB8Ep zQBOTvemSy1/Q7ZIoftYr4CnKO3fU7uE9+7DF8toHIcv+7RD96g2k3h2Qn09F51zY5gzLW5t5/gGL rTT6UMdh1DiL+ryHFeIPrb3iZK7xKuyviwbcqtCds0qb+SJNBnGHp0O7/dk0AIXiB4z7NuOmHkhqx 5vKufpvhFTuqyA+BIayL2NUdFlxhm6wU1uDhWbg9lyZCvMZs/LE/CDU2anagXKnt83isKXTX+xCaE /FNhMstfV1lg9J11OfSz0qrR6E5BTq8hKHoTSIjjJLDGnfCIHQe6xYl5G0ZX93zxukHtKyKP+cxfA yeGenTgQ==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZN-0000000GIzj-3e9n; Wed, 14 Jan 2026 04:33:21 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 63/68] statx: switch to CLASS(filename_maybe_null) Date: Wed, 14 Jan 2026 04:33:05 +0000 Message-ID: <20260114043310.3885463-64-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 07:58:18 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 205AE32862F; Wed, 14 Jan 2026 04:31: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=1768365123; cv=none; b=WEwP7dSx0BeRtVAQRc3cNnMNNdeDmvcozT9ILCOluGt/3tjrzeyJwIkiWDVViIHmdhSgEyxctRaWmSkRiOPJkkSKxXhDLRfgP9cHeUmmGF24tzA2kO31pYrDB0/MLyPMf4tS4Mkme4NtVbqyc+UE6XISa0BoYmaIUen9x6/toos= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365123; c=relaxed/simple; bh=ml4RNN/VCnYi1f5kE1GxmfC7TyVm/T5H+RGWeGZ6lPE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=C5N1BmQHMsRuLDOgktdmcnFVpQhOryyZL+a7OUNPvbBwBKHsOp9wFLZ7X88SlyqDh9nU0g/xRLQW65ut141YVrGZzcyblzU998N3QqvVHDulMfU0xvr+B41sCBkfkTvSQTOcxbJbvunq2E3c9SEcAVXliTqpgZUEqrtg1baLBm4= 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=fD1HkbKM; 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="fD1HkbKM" 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=fD1HkbKMlykyUBoNy1c4M8nLib IDD1+76YH/xAsKLBziRgc4SkwAm2B2mZTmv5jm1kFX63ie5jKtN/KXsyuN8WIdFzZTJhoZaX0qUnb g32H28QMN7dT87q7+zluHnVA2ssydZoloJmQY8+rjKPpHirliw/szoindwpOYMjMJ8BevM2L1hqLL plMAvnSh/qWycB8OVMctA4glwWwY1/yrmRSQ6bJf9LVq2BqB68pgi5d/u+dHLYA6SZryjGlnLSsvH qRqaWZvtLVezm60Xt0EOLzBQ4PNgcr1oJLOtB8Qgn0TEiuk1FY6nD31kxd7U7VYxEAnCOtB+viTWO DkSRDbuA==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZO-0000000GIzw-0P7d; Wed, 14 Jan 2026 04:33:22 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 64/68] user_statfs(): switch to CLASS(filename) Date: Wed, 14 Jan 2026 04:33:06 +0000 Message-ID: <20260114043310.3885463-65-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 07:58:18 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 2C40A326D68; Wed, 14 Jan 2026 04:31: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=1768365121; cv=none; b=UR8oN9UllbnL4WgWnaNVkAjavzzlGphqTorA9zD0pG44+hN98SBrgWLkNiDfVP7Tt2UHeatqJtM+NU+w8q+IHmXT9RI8FHriFiG7YZrNhk2u3DZ7XEqmTUR8cQRHN6YU3rTieHXXrEkZBea+TisOPK+hWaRfzKXRC8TYlnbOej4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365121; c=relaxed/simple; bh=JqqD6xeqUDj3nRwRtlOX37SQyfwoFYklo2JzhGSCFzA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Gv2etsrZKpmg+EOEoakEnlrmv+NCSEZmmlesqYCko7l7k1cM7HvQf6JlZrZ9ZVdhq+zFfeI0Nza5T+lnb4L+WAvGml651KqAtbgN5yy/7bI2yKL5Ab5vmhUJpqQMrEkWFjycaqJGwdT7MJhVc6C5xcp6wqfxvQ3kpcbj/rcexRk= 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=RJlzETtR; 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="RJlzETtR" 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=RJlzETtRM78ojvFTsE7/gP3g2w RUdV9z2sOCznXNdKqEebQwW0/oBa1szAe9Aj12Wt8RhU5kojl1cwuOuqcDQAKak40HdXwkIGO3xNO r2Ug1R6+NthI/atMpn5sEq7OL326qilpf2MHrQRAof7aIybr+BTemuFmkkKGJTcshOuBf2jXmFx/N fc6e5pw1fn3L+t2Uusz9wP0m1t1PEYrGgAB97uxK4de/vzPUfViP++kwzkQ3LBnvCH84Jc4NpVg6n rR4vWNOhbbjRV0FxHj6QomWeGwJ0uerodAIu7W4mOgJxwXPuVyHBO+FOdKjNslHJD8SzabFggkPKU ZmTFAbYQ==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZO-0000000GJ0F-1x7s; Wed, 14 Jan 2026 04:33:22 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 65/68] mqueue: switch to CLASS(filename) Date: Wed, 14 Jan 2026 04:33:07 +0000 Message-ID: <20260114043310.3885463-66-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 07:58:18 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 CAD29328626; Wed, 14 Jan 2026 04:31: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=1768365122; cv=none; b=Bg67TuEXD5LGXNcAGMR4DnxjoTwHVNWmZT/8UYGLloQzISSh1a+WAdeItCgijLWh+OueSgh8YDRr6GuYoE3+PDG/VjjU/m3FMtmt/8m6AOZwR2zsdje6rw0LwQMfjwsHB/oZZ8uKVBVKdNE944rTtOVrN1SeV0Vfq+WTnhdHWUQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365122; c=relaxed/simple; bh=D/4Kpd2bYKbkRLQSN5eQLKG4OXd7jN3AcvumkEOaeMI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=s/VEe1u73YcJaWBN+a11tKwHE5Xom/gtW5Oph+uSbJ75hA2R0gZD4mfFqNutESQCW5sNfBiqqs36Fs6qJs2sNpUkCFQTufBRSQlzD4zIvU6w+YItJZHKaj8Liz5XpBi0cPGpXGOpaAnJgacRJOdfTCxHxxzRtdIZjZoLA9Ws0kI= 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=q6eDnMVG; 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="q6eDnMVG" 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=q6eDnMVGCue82S/H/esM2+3jZc 6KBSWimbIIsHZFZvq/DkOP5nJeUWVRYSV7mXQzPMcxXaaBZzjw15Rd6HDR7BoBvd2eAAk3TrddjSG 9KMeRzO2odb+BjUR9XFGAVioYH5P+6Joc9Xys2gX4k3PVA26jSpgtPAycQjWPsyq7MnFdAbJl94eZ gmHoL3Kv4bqh5ZaLy79mLaADD71yO3CKyK76HI8YrONkydr+f5dVlTLDiKJt3ih8xAoclS+xZGfx0 iNDQQX5v+5KkYmpKSELOf7eZ0r1E+YWbYMYQCsuHqy7WFhPa060UwuHhkKf/XNrs4+s4dZaa4SM/7 tWBZqHsQ==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZO-0000000GJ0O-2VGS; Wed, 14 Jan 2026 04:33:22 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 66/68] ksmbd: use CLASS(filename_kernel) Date: Wed, 14 Jan 2026 04:33:08 +0000 Message-ID: <20260114043310.3885463-67-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 07:58:18 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 45B1132863E; Wed, 14 Jan 2026 04:31: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=1768365122; cv=none; b=Q06S9TU6nm5FFD4qRlbd9WpKguDH6tCnQgFJzRWn5SwjgnJVYDmvB5kmqJuW1vl9i6FcqRFTg3Zs597OtMdl8BkhFlJ/JH+UZOdM18I8oXeGGHVB5uwtb6C4VT/vBCRvlJm2zeDcb0qj/AX7qax5xItHnGdJVBq5SMUs1I1O9tg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365122; c=relaxed/simple; bh=RZMRszjUY/fIM2JLm9jks2g6cg0EVOixOwmn11+9ZsU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=eisKax52vQh8OBwKPhGgVR+UsYCdOD0B/G66sQO3UQwd+RrGW16XQa9dDoWwXefNn89Hs0ue5Fojowik53LiOwuGjVhJgqEHWF7b+aRKvqOmdDlmNc9G0x/3T3IdTq1X3Ifkdtm/z0rtOGLB5UU2SMXuJwqJ3+9mnNEsItvTBHE= 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=n13ngzUJ; 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="n13ngzUJ" 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=n13ngzUJJNjynAk5oLJT8hVINI U9PhZSXxbeSNzHXmKzk6/VX2mQcxHgVayhLGNULAk8JxYuaob/4rOq+G2DAG8HMgP/NvJbcHLutMv HsEyNcrgJtz1+8fAa9xSBD2irNm3CUU7Rj9l+qaqN6Bs997Wj/55U1+dLofxUPq8tJuvqXCT0ouTK 1gJJUwtd5QlodwnZXkOCUOh7MSJmDaeO5w8HtjO7AsEa4cTxm3ia33vagqUDJKQt7E+3mroSTKdR6 rCuMqH84qJKu9mIYufkCUluPtslleG/TOIECku118jk6p4L91beD0OgcEPt5BDFIY4sCLx2LKdDTj +R9DJaKw==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZO-0000000GJ0Y-2zDO; Wed, 14 Jan 2026 04:33:23 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 67/68] alpha: switch osf_mount() to strndup_user() Date: Wed, 14 Jan 2026 04:33:09 +0000 Message-ID: <20260114043310.3885463-68-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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 07:58:18 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 C9F30328625; Wed, 14 Jan 2026 04:31: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=1768365122; cv=none; b=PyQF/uDoKYYWb5eatyy0v/hHs8VxXlhanQYZr+owxjo5pK8Hd7md5BfEXNrcCBvTj0uYl9d7QxRzOt6Ul/sXQxkEUKjbCAXMyZiFHZyVPApAp5AUCeGbmT6iowUdcNdtjx7xzKvuNwbBKTHZDaQAKRv70vGcaPdoQ/WYef6pDnk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768365122; c=relaxed/simple; bh=ed4inkFbKg5gXwGxXVyNFfqCJTe0MbLbW/j1/GoDH1w=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Fi3WP0Im95MEz2DU9tDe9A7TdC/CS2Li01ZGIhTM6MOecwgU0n7w1cLNSHrWbjK7IOQMyQL2IVZOKAbY6TXLD04JA2rWZmsrf9z6LmiDCQqezDA/8GVpiHr9vTACJN0PZ6lg8Pp4oVPMshepNZXflkaSt4KDAHn9xeWkC4H7jrw= 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=MFkzhdkw; 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="MFkzhdkw" 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=MFkzhdkwaKmEYF1jeGGMTVTEX1 Oy2i8mpA1WMCwhKnZlzywyn+K3s2JZ98UwozDL58g9UUzWYrFLNVdCCWxc/cCLjIuKbLgkWSkbVLD sDj8t3ia9LNqwMPS55VLRo+MbIy6m2uwfnOUO7lnWHekBnbbH3CrYc0+3rVRWEETqLPoIvH/Uo2Jb RRWcQfO9BZbHeGtPu7A+Qp1ZRflnOx9cgTwf0STYb/vYMpLMB6Yr/iBiADNrBG0WB+6QXE5aFZ8dU 2DKfThMl7opKsTekKLL/3LJKOPDfs34aP0c6ULqF4MY0fnDcYFzC5Sh1xbP7sWPBwGeScrw8gAQHb 1Gp+/Duw==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.99 #2 (Red Hat Linux)) id 1vfsZP-0000000GJ0y-3gFS; Wed, 14 Jan 2026 04:33:23 +0000 From: Al Viro To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Christian Brauner , Jan Kara , Mateusz Guzik , Paul Moore , Jens Axboe , audit@vger.kernel.org, io-uring@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 68/68] sysfs(2): fs_index() argument is _not_ a pathname Date: Wed, 14 Jan 2026 04:33:10 +0000 Message-ID: <20260114043310.3885463-69-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114043310.3885463-1-viro@zeniv.linux.org.uk> References: <20260114043310.3885463-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