From nobody Fri Sep 25 07:56:54 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 ED272471D1C; Tue, 15 Sep 2026 11:31:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789471891; cv=none; b=fvxgIuzLU7kMIyphVS7WW13ydw2ntXGR79+ssjuZ/9Xj0/J9MfIEM0P6zYLsLYK+0qkUHkb7zjgr8bDc9+YPT5o5FVVYzN9Vwm0UiVDu6Tn9QiGRMvGzOAYjNsPBLaa4NIFdQkfwsSh3wMRN1U6lF36sbbOj7k6a1J3jGoZLCls= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789471891; c=relaxed/simple; bh=qwpcRc0Jz1/hf+VtwtU8xLhtdahWTgGJe+R6RdnVR1g=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=GBx3iJttbNcc1Z4qy7H+iA9CAJIiozX32KjQYKmIlCXRsCsnyJWtJfaOeYlG/Mk9EGEC3VKnDmKmYkpvgjPM0ckIH0tGSnk2ILoq6VESlqL+SprVvMil/AtC054sMPSyzSdXkxitMANi19FXIJ/R/0+5d1LF01zY2bBZdlflm7o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=iha9zwIE; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="iha9zwIE" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 755561F00893; Tue, 15 Sep 2026 11:31:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789471888; bh=BV+bpXMF0kMr9afG7XMe1ZpQQUGKxWkKKhyZrn6MnI4=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=iha9zwIEtPNkm47XS9IHbSz+doc5x/a0q/BqO5RtdRLBAwJzWWK80HBFjho8vmdLm FVXtzi7D7n3QZYfGQUCaFyIX3kmSsTcpUvtiUA6x4KKHv/BBBHR1xLNY7O8V+AYhW5 6cijN8aepL9eGspZfHpuTUE9Uq0wYtHVBWMS4wfdRaRp4qChXosjV75w3F2vajImL0 37udrL9kmbghIGDt8lvamiamwd5W3kRtRtu7QLfk+6ZfTko2QQy8lt94CL9MoHGkzk YL+StidMUnw4Q+mYhHY2HGWnUmxnlaLD+cmj782YsQP2euPh3/aoEsXUeTUBCBHLQg cIiDaVWOaMMdQ== From: Christian Brauner Date: Tue, 15 Sep 2026 13:30:47 +0200 Subject: [PATCH RFC POC 01/50] file: install files on syscall exit Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260915-work-fd-reserve-unify-folded-v1-1-4d5217d6b246@kernel.org> References: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> In-Reply-To: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> To: Linus Torvalds Cc: Alexander Viro , Jann Horn , Jan Kara , Ingo Molnar , Peter Zijlstra , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Oleg Nesterov , linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, Jens Axboe , io-uring@vger.kernel.org, netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, bpf@vger.kernel.org, David Airlie , virtualization@lists.linux.dev, kvm@vger.kernel.org, kexec@lists.infradead.org, linux-hyperv@vger.kernel.org, "Christian Brauner (Amutable)" X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=openpgp-sha256; l=12607; i=brauner@kernel.org; h=from:subject:message-id; bh=qwpcRc0Jz1/hf+VtwtU8xLhtdahWTgGJe+R6RdnVR1g=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWSt1Kn5Lv3aQNl0bc5joV2rHG692cW0rpr7WL5SYUXhg aV+y6cpd5SyMIhxMciKKbI4tJuEyy3nqdhslKkBM4eVCWQIAxenAExk0i+G/3mbDwQKNu5VuZek N3OWQP6mtXkp0f/+1gs5LXbLerLqtSkjwznpCQcXHti+8cTFD50rwvm6Jr72yVvkOkcw0aS/fZ7 eGlYA X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 So we've spoken about this idea quite a few times over the years that we could reserve fds and files on a task and then install or a clean them up on syscall success or error and get rid of most of the complicated cleanup dance that we have. My original approach to this had been to implement FD_PREPARE() based on cleanup guards and use scopes to make this happen. The other idea was what I'm illustrating here. It is overall equally robust and makes the install fd and file pattern work even if it there's a ton of cleanup or setup work happening in the middle. This is particular evident in the conversions of various dma/drm code later in the series. So this lets the syscall path do the install. fd_prepare() allocates a descriptor like get_unused_fd_flags() does and records it in a slot on the task. fd_stage() attaches the file to that slot and returns the number. When the syscall returns success the exit path installs every staged file. When it returns an error it drops the descriptors and the files. So a caller reserves, hands the number to userspace whenever it wants, creates the file, stages it and returns errors without unwinding anything. fd_prepare() returns the slot itself, as a const pointer. The preexisting fd_prepare_fd() and fd_prepare_file() give access to the fd and file. get_unused_fd_flags() and fd_install() don't change. A descriptor is only reserved where a caller asks for it. And open(), dup() and all other syscalls that maximize speed simply use FD_ADD(). The task keeps two slots inline. For SCM_RIGHTS and multi-descriptor ioctls a spill array is added. It stick with the task. Reservations belong to the thread and the syscall that made them. A child of fork() starts without any. A thread can't unshare its fdtagble with outstanding reservations. Kernel threads never return to userspace so nothing would commit. Anything left at exit is a bug and gets warned about and dropped. Signed-off-by: Christian Brauner (Amutable) --- fs/file.c | 203 ++++++++++++++++++++++++++++++++++++++++++++++= +++- include/linux/file.h | 37 +++++++-- include/linux/sched.h | 21 ++++++ kernel/exit.c | 1 + kernel/fork.c | 1 + 5 files changed, 256 insertions(+), 7 deletions(-) diff --git a/fs/file.c b/fs/file.c index 628ca07dc4b1..90351241bb07 100644 --- a/fs/file.c +++ b/fs/file.c @@ -630,14 +630,215 @@ static void __put_unused_fd(struct files_struct *fil= es, unsigned int fd) files->next_fd =3D fd; } =20 -void put_unused_fd(unsigned int fd) +/* Release @fd in the table, its slot is the caller's business. */ +static void fd_release(unsigned int fd) { struct files_struct *files =3D current->files; + spin_lock(&files->file_lock); __put_unused_fd(files, fd); spin_unlock(&files->file_lock); } =20 +/* Enough for SCM_MAX_FD, and a page of slots on 4K pages. */ +#define FD_SLOTS_SPILL_MIN 256 + +static struct fd_slot *fd_slot(struct fd_slots *slots, unsigned int idx) +{ + if (idx < FD_SLOTS_INLINE) + return &slots->inline_slots[idx]; + return &slots->spill[idx - FD_SLOTS_INLINE]; +} + +/* Room for slot @idx in the spill array, doubling as it fills up. */ +static noinline struct fd_slot *fd_slots_spill(struct fd_slots *slots, + unsigned int idx) +{ + unsigned int max =3D slots->spill_max; + struct fd_slot *spill; + + idx -=3D FD_SLOTS_INLINE; + if (idx < max) + return &slots->spill[idx]; + + max =3D max ? max * 2 : FD_SLOTS_SPILL_MIN; + spill =3D kvrealloc(slots->spill, array_size(max, sizeof(*spill)), + GFP_KERNEL_ACCOUNT); + if (!spill) + return NULL; + slots->spill =3D spill; + slots->spill_max =3D max; + return &spill[idx]; +} + +/* Record @fd in the next slot, returns the slot. */ +static struct fd_slot *fd_slot_record(int fd) +{ + struct fd_slots *slots =3D ¤t->fd_slots; + unsigned int idx =3D slots->nr; + struct fd_slot *slot; + + /* Nothing would ever commit what a kernel thread prepares. */ + VFS_WARN_ON_ONCE(current->flags & PF_KTHREAD); + + if (likely(idx < FD_SLOTS_INLINE)) { + slot =3D &slots->inline_slots[idx]; + } else { + slot =3D fd_slots_spill(slots, idx); + if (!slot) + return ERR_PTR(-ENOMEM); + } + ACCESS_PRIVATE(slot, fd) =3D fd; + ACCESS_PRIVATE(slot, file) =3D NULL; + slots->nr =3D idx + 1; + return slot; +} + +/* The slot holding @fd, if this syscall prepared it. */ +static inline int fd_slot_find(struct fd_slots *slots, unsigned int fd) +{ + unsigned int idx =3D slots->nr; + + while (idx--) { + if (ACCESS_PRIVATE(fd_slot(slots, idx), fd) =3D=3D fd) + return idx; + } + return -1; +} + +/** + * fd_prepare - allocate a descriptor that the syscall exit installs + * @flags: O_CLOEXEC or 0 + * + * Returns the prepared slot as a const handle or an error pointer. + */ +const struct fd_slot *fd_prepare(unsigned flags) +{ + struct fd_slot *slot; + int fd; + + fd =3D get_unused_fd_flags(flags); + if (fd < 0) + return ERR_PTR(fd); + + slot =3D fd_slot_record(fd); + if (IS_ERR(slot)) + fd_release(fd); + return slot; +} +EXPORT_SYMBOL(fd_prepare); + +/** + * fd_stage - attach the file to a prepared slot + * @slot: slot from fd_prepare() + * @file: the file to install, consumed + * + * Returns the number. The syscall exit installs @file there when the sysc= all + * returns success and drops it when the syscall returns an error. + */ +int fd_stage(const struct fd_slot *slot, struct file *file) +{ + struct fd_slot *s =3D (struct fd_slot *)slot; + + VFS_WARN_ON_ONCE(ACCESS_PRIVATE(s, file)); + ACCESS_PRIVATE(s, file) =3D file; + return ACCESS_PRIVATE(s, fd); +} +EXPORT_SYMBOL(fd_stage); + +/** + * __fd_slot_fd - the descriptor number of a prepared slot + * @slot: slot from fd_prepare() + */ +int __fd_slot_fd(const struct fd_slot *slot) +{ + return ACCESS_PRIVATE(slot, fd); +} +EXPORT_SYMBOL(__fd_slot_fd); + +/** + * __fd_slot_file - the file staged into a slot, to configure before insta= ll + * @slot: slot from fd_prepare() + * + * Returns the file handed to fd_stage(), or NULL before one is staged. + */ +struct file *__fd_slot_file(const struct fd_slot *slot) +{ + return ACCESS_PRIVATE(slot, file); +} +EXPORT_SYMBOL(__fd_slot_file); + +/* Install every staged file, release the slots that never got one. */ +static void fd_slots_install(struct fd_slots *slots) +{ + unsigned int idx; + + for (idx =3D 0; idx < slots->nr; idx++) { + struct fd_slot *slot =3D fd_slot(slots, idx); + + if (ACCESS_PRIVATE(slot, file)) + fd_install(ACCESS_PRIVATE(slot, fd), + ACCESS_PRIVATE(slot, file)); + else + fd_release(ACCESS_PRIVATE(slot, fd)); + } +} + +/* Release every slot's descriptor and drop the staged files. */ +static void fd_slots_drop(struct fd_slots *slots) +{ + struct files_struct *files =3D current->files; + unsigned int idx; + + spin_lock(&files->file_lock); + for (idx =3D 0; idx < slots->nr; idx++) + __put_unused_fd(files, ACCESS_PRIVATE(fd_slot(slots, idx), fd)); + spin_unlock(&files->file_lock); + for (idx =3D 0; idx < slots->nr; idx++) { + struct fd_slot *slot =3D fd_slot(slots, idx); + + if (ACCESS_PRIVATE(slot, file)) + fput(ACCESS_PRIVATE(slot, file)); + } +} + +static __always_inline void fd_slots_finish(struct fd_slots *slots, bool f= ailed) +{ + if (likely(!failed)) + fd_slots_install(slots); + else + fd_slots_drop(slots); + slots->nr =3D 0; +} + +/* Install or drop the prepared descriptors based on @ret. */ +void __fd_slots_commit(long ret) +{ + fd_slots_finish(¤t->fd_slots, IS_ERR_VALUE(ret)); +} + +void exit_fd_slots(void) +{ + struct fd_slots *slots =3D ¤t->fd_slots; + + /* A syscall must not exit with prepared descriptors outstanding. */ + if (WARN_ON_ONCE(slots->nr)) + fd_slots_finish(slots, true); + kvfree(slots->spill); +} + +/** + * put_unused_fd - give a descriptor back before it got a file + * @fd: descriptor returned by get_unused_fd_flags() + * + * Not for a prepared descriptor, the syscall exit releases that one. + */ +void put_unused_fd(unsigned int fd) +{ + VFS_WARN_ON_ONCE(fd_slot_find(¤t->fd_slots, fd) >=3D 0); + fd_release(fd); +} + EXPORT_SYMBOL(put_unused_fd); =20 /* diff --git a/include/linux/file.h b/include/linux/file.h index 27484b444d31..fe2893eea945 100644 --- a/include/linux/file.h +++ b/include/linux/file.h @@ -91,6 +91,8 @@ extern bool get_close_on_exec(unsigned int fd); extern int __get_unused_fd_flags(unsigned flags, unsigned long nofile); extern int get_unused_fd_flags(unsigned flags); extern void put_unused_fd(unsigned int fd); +void __fd_slots_commit(long ret); +void exit_fd_slots(void); =20 DEFINE_CLASS(get_unused_fd, int, if (_T >=3D 0) put_unused_fd(_T), get_unused_fd_flags(flags), unsigned flags) @@ -118,6 +120,12 @@ DEFINE_FREE(fput, struct file *, if (!IS_ERR_OR_NULL(_= T)) fput(_T)) =20 extern void fd_install(unsigned int fd, struct file *file); =20 +struct fd_slot; +const struct fd_slot *fd_prepare(unsigned flags); +int fd_stage(const struct fd_slot *slot, struct file *file); +int __fd_slot_fd(const struct fd_slot *slot); +struct file *__fd_slot_file(const struct fd_slot *slot); + int receive_fd(struct file *file, int __user *ufd, unsigned int o_flags); =20 int receive_fd_replace(int new_fd, struct file *file, unsigned int o_flags= ); @@ -148,15 +156,32 @@ struct fd_prepare { /* Typedef for fd_prepare cleanup guards. */ typedef struct fd_prepare class_fd_prepare_t; =20 +/* Do not use directly. */ +static inline int __fd_prepare_fd_old(struct fd_prepare fdf) +{ + return fdf.__fd; +} + +/* Do not use directly. */ +static inline struct file *__fd_prepare_file_old(struct fd_prepare fdf) +{ + return fdf.__file; +} + /* - * Accessors for fd_prepare class members. - * _Generic() is used for zero-cost type safety. + * Accessors for a prepared descriptor. _Generic() bridges struct fd_prepa= re + * (the cleanup class below) and struct fd_slot (fd_prepare()) while calle= rs are + * converted; the struct fd_prepare arm goes away with FD_PREPARE(). */ -#define fd_prepare_fd(_fdf) \ - (_Generic((_fdf), struct fd_prepare: (_fdf).__fd)) +#define fd_prepare_fd(_x) _Generic((_x), \ + struct fd_prepare: __fd_prepare_fd_old, \ + struct fd_slot *: __fd_slot_fd, \ + const struct fd_slot *: __fd_slot_fd)(_x) =20 -#define fd_prepare_file(_fdf) \ - (_Generic((_fdf), struct fd_prepare: (_fdf).__file)) +#define fd_prepare_file(_x) _Generic((_x), \ + struct fd_prepare: __fd_prepare_file_old, \ + struct fd_slot *: __fd_slot_file, \ + const struct fd_slot *: __fd_slot_file)(_x) =20 /* Do not use directly. */ static inline void class_fd_prepare_destructor(const struct fd_prepare *fd= f) diff --git a/include/linux/sched.h b/include/linux/sched.h index 8b3d47a325cc..52bbf9931908 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -832,6 +832,24 @@ struct task_ipi_mask { struct task_ipi_mask { }; #endif =20 +/* Descriptors this syscall prepared, installed when it returns. */ +#define FD_SLOTS_INLINE 2 + +struct file; + +struct fd_slot { + struct file * __private file; + int __private fd; +}; + +/* Inline up to FD_SLOTS_INLINE slots, the rest in the spill. */ +struct fd_slots { + unsigned int nr; + unsigned int spill_max; + struct fd_slot *spill; + struct fd_slot inline_slots[FD_SLOTS_INLINE]; +}; + struct task_struct { #ifdef CONFIG_THREAD_INFO_IN_TASK /* @@ -1206,6 +1224,9 @@ struct task_struct { /* Open file information: */ struct files_struct *files; =20 + /* Descriptors prepared by the current syscall: */ + struct fd_slots fd_slots; + #ifdef CONFIG_IO_URING struct io_uring_task *io_uring; struct io_restriction *io_uring_restrict; diff --git a/kernel/exit.c b/kernel/exit.c index 97686af89501..ee108353a62c 100644 --- a/kernel/exit.c +++ b/kernel/exit.c @@ -1000,6 +1000,7 @@ void __noreturn do_exit(long code) =20 exit_sem(tsk); exit_shm(tsk); + exit_fd_slots(); exit_files(tsk); exit_fs(tsk); if (group_dead) diff --git a/kernel/fork.c b/kernel/fork.c index 416758c8a3d4..59c5cfa3e482 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -980,6 +980,7 @@ static struct task_struct *dup_task_struct(struct task_= struct *orig, int node) tsk->btrace_seq =3D 0; #endif tsk->splice_pipe =3D NULL; + memset(&tsk->fd_slots, 0, sizeof(tsk->fd_slots)); tsk->task_frag.page =3D NULL; tsk->wake_q.next =3D NULL; tsk->worker_private =3D NULL; --=20 2.53.0 From nobody Fri Sep 25 07:56:54 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 B006B471D1C; Tue, 15 Sep 2026 11:31:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789471898; cv=none; b=JECDMsU5+k9n4qftGYfEGnrQEr1mr3btHQ3kiyagp8FojObabBr5Xg25+9MJYEVsk3MQHXCVf0Dwk7qC8E2OxbmQMY8lKVcxwV96W/yNaYkf1vDlCsYUi8N6plDSGKGKgSXObhZjxpYIPWMyMvt3JDxSjKy302szTgRekqnFGLo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789471898; c=relaxed/simple; bh=NtpqRPTNAZlEeaPhe0rYOorWsOpjpNCIyBf0GHcmRWk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=A29x8Y1iEzcaywHb+8AIkoGtH0K9o/LbPtu/9PBf415rSb7eeiL7eVOWpuP46G6UrTGEzRjtI5ifCeanZTLb6GdkUkKKxebjrn8dv+rfEpkRdJ6hTqbEgpDSoq0LQGJUt1B/o2GJnM87x00/UmeWGH+gPqM63Ti5vlQkA0T9Isc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=FA99JUjo; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="FA99JUjo" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 19D9E1F00898; Tue, 15 Sep 2026 11:31:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789471896; bh=H/Q2uFiWqDBb8xqHpNo0BQBrMpfRMKZw5TP1oZm+kmg=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=FA99JUjog1yV1DbWoG2ziqsNO+0sw6EHhtLDfJByBVRaUjyRjJwu1VFldCsris1pZ e2wCrK7C66Yw9jz989T8vHtdcQycYZY1aOUXtThwXFvZsxHJJ78r7g7qoZrOOkMU/s lj0gTkb4Mh3TKCRQmb0rlBwKhGV75TJbATZem6Sjbrdch9yj+/sxhbvRUPzaeynzTg lmZfZ3Gj1rUe2RlV3+OteWTMGEeRJFR//N1tZnHmdQHnT01ZVBDm1L4xmKQwmCU+jR umSCRuNroMIzP8zt6GPqOvmEIb6PE+fF3iEwa5/6zDnWWP2+oNJbKhA8JiapM5A8Pv P/GWj9Gp89ypA== From: Christian Brauner Date: Tue, 15 Sep 2026 13:30:48 +0200 Subject: [PATCH RFC POC 02/50] entry: commit fds on syscall exit Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260915-work-fd-reserve-unify-folded-v1-2-4d5217d6b246@kernel.org> References: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> In-Reply-To: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> To: Linus Torvalds Cc: Alexander Viro , Jann Horn , Jan Kara , Ingo Molnar , Peter Zijlstra , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Oleg Nesterov , linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, Jens Axboe , io-uring@vger.kernel.org, netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, bpf@vger.kernel.org, David Airlie , virtualization@lists.linux.dev, kvm@vger.kernel.org, kexec@lists.infradead.org, linux-hyperv@vger.kernel.org, "Christian Brauner (Amutable)" X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=openpgp-sha256; l=5066; i=brauner@kernel.org; h=from:subject:message-id; bh=NtpqRPTNAZlEeaPhe0rYOorWsOpjpNCIyBf0GHcmRWk=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWSt1KnJVo3fvV5S5/Sii+rtiZfVW3bllXHI7rc8Ks4gk ree7ZZuRykLgxgXg6yYIotDu0m43HKeis1GmRowc1iZQIYwcHEKwEQusDD8Lz+/bproy5BneSeO 7On6+Fbpk7eF5doft2tsDJMENZ0vdjP89zl45Kb3WpH+yPBZEx9N/6r6VywwdGaxQ76IV1yGifk iNgA= X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Reserving a descriptor with fd_prepare() marks the task with SYSCALL_WORK_FD_SLOTS. The syscall exit path already tests the syscall work bits so a syscall that deferred nothing pays nothing new and one that did takes the slow path. syscall_exit_work() commits the reservations before audit and ptrace. Architectures without the generic entry code grow TIF_FD_SLOTS bit in their syscall exit work in the following patches. Signed-off-by: Christian Brauner (Amutable) --- fs/file.c | 24 ++++++++++++++++++++++++ include/linux/entry-common.h | 8 +++++++- include/linux/file.h | 2 ++ include/linux/thread_info.h | 2 ++ 4 files changed, 35 insertions(+), 1 deletion(-) diff --git a/fs/file.c b/fs/file.c index 90351241bb07..6fa481d63dcf 100644 --- a/fs/file.c +++ b/fs/file.c @@ -23,6 +23,7 @@ #include #include #include +#include =20 #include "internal.h" =20 @@ -643,6 +644,19 @@ static void fd_release(unsigned int fd) /* Enough for SCM_MAX_FD, and a page of slots on 4K pages. */ #define FD_SLOTS_SPILL_MIN 256 =20 +/* Make the syscall exit path call fd_slots_commit(). */ +#if defined(CONFIG_GENERIC_ENTRY) +#define fd_slots_set_work() set_syscall_work(FD_SLOTS) +#define fd_slots_clear_work() clear_syscall_work(FD_SLOTS) +#elif defined(TIF_FD_SLOTS) +#define fd_slots_set_work() set_thread_flag(TIF_FD_SLOTS) +#define fd_slots_clear_work() clear_thread_flag(TIF_FD_SLOTS) +#else +/* Nothing commits until the architecture provides the flag. */ +#define fd_slots_set_work() do { } while (0) +#define fd_slots_clear_work() do { } while (0) +#endif + static struct fd_slot *fd_slot(struct fd_slots *slots, unsigned int idx) { if (idx < FD_SLOTS_INLINE) @@ -690,6 +704,8 @@ static struct fd_slot *fd_slot_record(int fd) } ACCESS_PRIVATE(slot, fd) =3D fd; ACCESS_PRIVATE(slot, file) =3D NULL; + if (!idx) + fd_slots_set_work(); slots->nr =3D idx + 1; return slot; } @@ -809,6 +825,14 @@ static __always_inline void fd_slots_finish(struct fd_= slots *slots, bool failed) else fd_slots_drop(slots); slots->nr =3D 0; + fd_slots_clear_work(); +} + +/* Syscall exit hook, keyed on the return value the caller will see. */ +void fd_slots_commit(struct pt_regs *regs) +{ + fd_slots_finish(¤t->fd_slots, + syscall_get_error(current, regs) !=3D 0); } =20 /* Install or drop the prepared descriptors based on @ret. */ diff --git a/include/linux/entry-common.h b/include/linux/entry-common.h index 6574b7183c01..2da30e50cf59 100644 --- a/include/linux/entry-common.h +++ b/include/linux/entry-common.h @@ -3,6 +3,7 @@ #define __LINUX_ENTRYCOMMON_H =20 #include +#include #include #include #include @@ -36,7 +37,8 @@ SYSCALL_WORK_SYSCALL_TRACE | \ SYSCALL_WORK_SYSCALL_AUDIT | \ SYSCALL_WORK_SYSCALL_USER_DISPATCH | \ - SYSCALL_WORK_SYSCALL_EXIT_TRAP) + SYSCALL_WORK_SYSCALL_EXIT_TRAP | \ + SYSCALL_WORK_FD_SLOTS) =20 /** * arch_ptrace_report_syscall_permit_entry - Architecture specific wrapper= for @@ -245,6 +247,10 @@ static __always_inline void syscall_exit_work(struct p= t_regs *regs, unsigned lon { bool step; =20 + /* Install or drop the descriptors the syscall prepared. */ + if (work & SYSCALL_WORK_FD_SLOTS) + fd_slots_commit(regs); + /* * If the syscall was rolled back due to syscall user dispatching, * then the tracers below are not invoked for the same reason as diff --git a/include/linux/file.h b/include/linux/file.h index fe2893eea945..04dd85cdd9bf 100644 --- a/include/linux/file.h +++ b/include/linux/file.h @@ -92,6 +92,8 @@ extern int __get_unused_fd_flags(unsigned flags, unsigned= long nofile); extern int get_unused_fd_flags(unsigned flags); extern void put_unused_fd(unsigned int fd); void __fd_slots_commit(long ret); +struct pt_regs; +void fd_slots_commit(struct pt_regs *regs); void exit_fd_slots(void); =20 DEFINE_CLASS(get_unused_fd, int, if (_T >=3D 0) put_unused_fd(_T), diff --git a/include/linux/thread_info.h b/include/linux/thread_info.h index 307b8390fc67..c80a87444286 100644 --- a/include/linux/thread_info.h +++ b/include/linux/thread_info.h @@ -47,6 +47,7 @@ enum syscall_work_bit { SYSCALL_WORK_BIT_SYSCALL_USER_DISPATCH, SYSCALL_WORK_BIT_SYSCALL_EXIT_TRAP, SYSCALL_WORK_BIT_SYSCALL_RSEQ_SLICE, + SYSCALL_WORK_BIT_FD_SLOTS, }; =20 #define SYSCALL_WORK_SECCOMP BIT(SYSCALL_WORK_BIT_SECCOMP) @@ -57,6 +58,7 @@ enum syscall_work_bit { #define SYSCALL_WORK_SYSCALL_USER_DISPATCH BIT(SYSCALL_WORK_BIT_SYSCALL_US= ER_DISPATCH) #define SYSCALL_WORK_SYSCALL_EXIT_TRAP BIT(SYSCALL_WORK_BIT_SYSCALL_EXIT_= TRAP) #define SYSCALL_WORK_SYSCALL_RSEQ_SLICE BIT(SYSCALL_WORK_BIT_SYSCALL_RSEQ= _SLICE) +#define SYSCALL_WORK_FD_SLOTS BIT(SYSCALL_WORK_BIT_FD_SLOTS) #endif =20 #include --=20 2.53.0 From nobody Fri Sep 25 07:56:54 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 48F753EC837; Tue, 15 Sep 2026 11:31:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789471905; cv=none; b=LALcA+snpkQ4J7SYGE2u6We35oYCEJfqx7Eiruseum9qI4JohZ9lPOIT0AnZMcQ/rsAvFuobvBgueKsk+k5tDVxcSRs5VdPzUBQWXD1KqKeXOOMJUfCe8NtHPGTZ7xt2F9oqe6G/mokX8c6KYyOPSuaqCmSc8zyixpnEsv/K7es= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789471905; c=relaxed/simple; bh=RHaKINpzdp/l9rjcdl2huzzYgE91Xjm8KSEi0tjemx0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=LBOj3DzfWWOi0vm9o6/bzx9FmJ2aJfJlea1i6VDWDv+6ne5mU6FGIU/pvos9dvbysHQRJA96g0lb7coldmsq+IvbO244Z7JITASfaXQntWt/HwnbqCNgn7dWjyLygRqruy5hzQHq8KY1cuWTp5+HobZGFXKbI9CiPM9+kaluXjo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=i7x382Hn; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="i7x382Hn" Received: by smtp.kernel.org (Postfix) with ESMTPSA id B38BA1F000FF; Tue, 15 Sep 2026 11:31:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789471903; bh=XMEKWie9jF24t7TYFlO7sbFAQBsdl6e/pxJpNAPN2Sg=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=i7x382Hnnkl9/28oqzb0mWvS6zSI4aiPrUmgqyFCmzCN9moF5QbSnsvMPDmf6jsFE 20sY8viNkieJZbQC/m/uoRnsZDoZFxiObsIH/1onHcojg8Na5KA8WBmzAnwM4xe7nv cWuvmngGAmVYJETI1rRmztQmkMvwsRgO4LmnzxxzIad+JvmPwmUPG7wVIXCYGBiA0I mqlaXmYHiuxvamjCZ59B9hIoZAdp2d3/z0azbHRAvvW4HC6KY9c6HyzfMGBsxUC5KA wQsLl2gTta2JoSnUidFFvBDUQCl+fjxiaYkM5A0OZHt6XgJeW93tAdk20XFiFzz/9p 9i6uz6bpnbytg== From: Christian Brauner Date: Tue, 15 Sep 2026 13:30:49 +0200 Subject: [PATCH RFC POC 03/50] alpha: commit fds on syscall exit Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260915-work-fd-reserve-unify-folded-v1-3-4d5217d6b246@kernel.org> References: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> In-Reply-To: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> To: Linus Torvalds Cc: Alexander Viro , Jann Horn , Jan Kara , Ingo Molnar , Peter Zijlstra , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Oleg Nesterov , linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, Jens Axboe , io-uring@vger.kernel.org, netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, bpf@vger.kernel.org, David Airlie , virtualization@lists.linux.dev, kvm@vger.kernel.org, kexec@lists.infradead.org, linux-hyperv@vger.kernel.org, "Christian Brauner (Amutable)" X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=openpgp-sha256; l=3840; i=brauner@kernel.org; h=from:subject:message-id; bh=RHaKINpzdp/l9rjcdl2huzzYgE91Xjm8KSEi0tjemx0=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWSt1KnZvvtgiPkBlSLl5w330l/eiLM07dLKTdyvJ/x9U swK10XpHaUsDGJcDLJiiiwO7Sbhcst5KjYbZWrAzGFlAhnCwMUpABN5uouRobnvtNDzWTUxee+k GNbq6gjNkn34863ehHMFswpYD6708Gb47zR1+f3CeV+t1HumyzefFry5dVXvk12PN5yNOaLxR90 pnAMA X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Add TIF_FD_SLOTS and test it once the untraced system call has stored its result. A task that reserved descriptors calls syscall_trace_leave() and joins ret_from_sys_call with the flag gone. We mirror the traced error path where the switch stack is set up and the return address and the syscall restart state are placed in callee-saved registers. Btw, let's remove alpha... It's a pain. Signed-off-by: Christian Brauner (Amutable) --- arch/alpha/include/asm/thread_info.h | 2 ++ arch/alpha/kernel/entry.S | 24 +++++++++++++++++++++++- arch/alpha/kernel/ptrace.c | 3 +++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/arch/alpha/include/asm/thread_info.h b/arch/alpha/include/asm/= thread_info.h index 1552ecca8520..db8465f5fabb 100644 --- a/arch/alpha/include/asm/thread_info.h +++ b/arch/alpha/include/asm/thread_info.h @@ -67,6 +67,7 @@ register unsigned long *current_stack_pointer __asm__ ("$= 30"); #define TIF_NOTIFY_SIGNAL 5 /* signal notifications exist */ #define TIF_SECCOMP 6 /* seccomp syscall filtering active */ #define TIF_SYSCALL_TRACEPOINT 7 /* syscall tracepoint instrumentation */ +#define TIF_FD_SLOTS 8 /* syscall prepared descriptors */ #define TIF_DIE_IF_KERNEL 9 /* dik recursion lock */ #define TIF_MEMDIE 13 /* is terminating due to OOM killer */ #define TIF_POLLING_NRFLAG 14 /* idle is polling for TIF_NEED_RESCHED */ @@ -80,6 +81,7 @@ register unsigned long *current_stack_pointer __asm__ ("$= 30"); #define _TIF_SECCOMP (1< no error */ +$syscall_exit: + /* Descriptors reserved by the syscall are committed in + syscall_trace_leave, off the return path interrupts share. */ + ldl $17, TI_FLAGS($8) + lda $2, _TIF_FD_SLOTS + and $17, $2, $2 + bne $2, $fd_slots_exit =20 .align 4 .globl ret_from_sys_call @@ -612,7 +619,7 @@ $syscall_error: stq $0, 0($sp) mov $31, $26 /* tell "ret_from_sys_call" we can restart */ stq $1, 72($sp) /* a3 for return */ - br ret_from_sys_call + br $syscall_exit =20 /* * Do all cleanup when returning from all interrupts and system calls. @@ -648,6 +655,21 @@ $work_notifysig: UNDO_SWITCH_STACK br restore_all =20 + .align 4 +$fd_slots_exit: + /* Keep the return address and the syscall restart state in + $26/$18/$19 across the call. */ + DO_SWITCH_STACK + mov $26, $9 + mov $18, $10 + mov $19, $11 + jsr $26, syscall_trace_leave + mov $9, $26 + mov $10, $18 + mov $11, $19 + UNDO_SWITCH_STACK + br ret_from_sys_call + /* * PTRACE syscall handler */ diff --git a/arch/alpha/kernel/ptrace.c b/arch/alpha/kernel/ptrace.c index fc8f6cedbb28..736218b34601 100644 --- a/arch/alpha/kernel/ptrace.c +++ b/arch/alpha/kernel/ptrace.c @@ -6,6 +6,7 @@ /* more mutilation by David Mosberger (davidm@azstarnet.com) */ =20 #include +#include #include #include #include @@ -507,6 +508,8 @@ asmlinkage unsigned long syscall_trace_enter(void) asmlinkage void syscall_trace_leave(void) { + if (test_thread_flag(TIF_FD_SLOTS)) + fd_slots_commit(current_pt_regs()); audit_syscall_exit(current_pt_regs()); if (test_thread_flag(TIF_SYSCALL_TRACE)) ptrace_report_syscall_exit(current_pt_regs(), 0); --=20 2.53.0 From nobody Fri Sep 25 07:56:54 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 D439C41378E; Tue, 15 Sep 2026 11:31:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789471913; cv=none; b=jPx2c7aG83EtRZD0JgLG3o0mzyO4QGfrXfkddFIW48BQkKzieui1BlxoyF25QWAhmmfP3x1w8naK6DD418Yc3JMAqLcNjqfIGV1bakd2/JV9dt7zXizJ7UpbtozT2WKugIO5vLIFj54FA0NxII3WS2e/jowUc3mG7iOHkerPE8A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789471913; c=relaxed/simple; bh=evSE6cJdnuFzZXNcFgM0f0Wtj2vW8xSJVidsgxr0vnY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=oI5648ohhLCkrWFyN8WI/LoIQckza2bDTFPH5vsKCXBoN476tgXrHDJYmD7KXe1hOzGJJMpeZ3YYomH87aA8qNMMwXrM7bYeFMfR+0lIoEy+iwbqXeWF59QuJF6iupknSVyvX5Kp9DzC5Ce3Oy+0mWn3X63R/FvZH7+NFsvLmh8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=NjTiEaV3; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="NjTiEaV3" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 44BA31F00893; Tue, 15 Sep 2026 11:31:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789471911; bh=FOANy+Z4EJ+6nqoqN6kMNeWMX83pxCR/f2oFPELw6+I=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=NjTiEaV3ZaSoS1ZK+2F2vFiHjAl7mkp0G3MbSEUlep66TuNm80zD11hu1nBRrXxYn jBTgv2BJxRFDL61U3EX8wu6faVIGU3bVeFZLIy90XxwIrdrOUrOsKYX977rOTgZ/8I 4thUe5a8WqKasgzR8NxRqDgxbn2ffdmAsbyPzlk/nLtbznCt3T36AhEWcTJxWAK16P +oX6GAj1A666bKWBCHBVyXFcgtj42qkim8vnDO1heVDCubdQ6sDhUxhnwBvgcIFp3b tNoelVNVV3FSdtQiheYIa3QaDhiMkmI4KN1O3BjQkmw4KGESv+pMI5iwydQ3oXYyV8 m6gLuAfE4lcLg== From: Christian Brauner Date: Tue, 15 Sep 2026 13:30:50 +0200 Subject: [PATCH RFC POC 04/50] ARC: commit fds on syscall exit Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260915-work-fd-reserve-unify-folded-v1-4-4d5217d6b246@kernel.org> References: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> In-Reply-To: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> To: Linus Torvalds Cc: Alexander Viro , Jann Horn , Jan Kara , Ingo Molnar , Peter Zijlstra , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Oleg Nesterov , linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, Jens Axboe , io-uring@vger.kernel.org, netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, bpf@vger.kernel.org, David Airlie , virtualization@lists.linux.dev, kvm@vger.kernel.org, kexec@lists.infradead.org, linux-hyperv@vger.kernel.org, "Christian Brauner (Amutable)" X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=openpgp-sha256; l=2822; i=brauner@kernel.org; h=from:subject:message-id; bh=evSE6cJdnuFzZXNcFgM0f0Wtj2vW8xSJVidsgxr0vnY=; b=kA0DAAoWkcYbwGV43KIByyZiAGqpLHyhtTAYRmbLzGwRwqcyv1G19KV/PkIkpZzswA8hR9xFL oh1BAAWCgAdFiEEQIc0Vx6nDHizMmkokcYbwGV43KIFAmqpLHwACgkQkcYbwGV43KJF2gD/fYHy 46GYN1jNxZvG5+E3C415n+5O5q2AJF3BkQjO7yQA/1hW7xKAHZiI3T6na5l1kqSbVvDkaRah45d KjuZmRA8O X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Add TIF_FD_SLOTS and test it on the untraced return from a system call. A task that reserved descriptors takes the tracesys_exit path, where syscall_trace_exit() commits them before the ptrace exit stop. The traced path already ends up there. Signed-off-by: Christian Brauner (Amutable) --- arch/arc/include/asm/thread_info.h | 2 ++ arch/arc/kernel/entry.S | 5 +++++ arch/arc/kernel/ptrace.c | 4 ++++ 3 files changed, 11 insertions(+) diff --git a/arch/arc/include/asm/thread_info.h b/arch/arc/include/asm/thre= ad_info.h index 255d2c774219..4c67d4eb434b 100644 --- a/arch/arc/include/asm/thread_info.h +++ b/arch/arc/include/asm/thread_info.h @@ -77,6 +77,7 @@ static inline __attribute_const__ struct thread_info *cur= rent_thread_info(void) #define TIF_NEED_RESCHED 3 /* rescheduling necessary */ #define TIF_SYSCALL_AUDIT 4 /* syscall auditing active */ #define TIF_NOTIFY_SIGNAL 5 /* signal notifications exist */ +#define TIF_FD_SLOTS 6 /* syscall prepared descriptors */ #define TIF_SYSCALL_TRACE 15 /* syscall trace active */ /* true if poll_idle() is polling TIF_NEED_RESCHED */ #define TIF_MEMDIE 16 @@ -88,6 +89,7 @@ static inline __attribute_const__ struct thread_info *cur= rent_thread_info(void) #define _TIF_NEED_RESCHED (1< #include #include #include @@ -355,6 +356,9 @@ asmlinkage int syscall_trace_enter(struct pt_regs *regs) =20 asmlinkage void syscall_trace_exit(struct pt_regs *regs) { + if (test_thread_flag(TIF_FD_SLOTS)) + fd_slots_commit(regs); + if (test_thread_flag(TIF_SYSCALL_TRACE)) ptrace_report_syscall_exit(regs, 0); =20 --=20 2.53.0 From nobody Fri Sep 25 07:56:54 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 67528475331; Tue, 15 Sep 2026 11:31:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789471920; cv=none; b=sMaPz0xBXMnw51bAiIp2uWL8yuhS7GM7PdHN2efM0Wjoaph6kzizhTnS60CgwmL35fhtMU85Rp4wXv6FWO+MV5pdEG3NwCdsc7JeJ4F9kAQBDUiQCOOrRi9z/ukuY/TAp0yTRciApzt0WNSaQabQa2n0wp4fDcaYpY0MkX4ZkiE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789471920; c=relaxed/simple; bh=VK90OItgH7MXKBBbqC1mLihQj+HZYKN65ZEaMtX+9Ng=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=dwU7eDer9ARlzAxi4wDzACPx6ef2ItSFoYyHM4gbkdJarldNWKG2v7xEPckd2wGsleregYU5IBu6oQsG0CqVufhyNjD7C6vD7EQkgo1JMsvz2DrwkE6fSdEsz3ECdc4YdHOhvB+rul+IwcVgPtXJdPSWul1CoZCT8rAXYkJsSaI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=OOznBN+U; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="OOznBN+U" Received: by smtp.kernel.org (Postfix) with ESMTPSA id DA4E41F000FF; Tue, 15 Sep 2026 11:31:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789471919; bh=bga1xdIPGJRsO6QHWVzlP+RWmBvnPkf9+o3GDcABEos=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=OOznBN+Uf6IkiE8I3kD7TX7An2UpW0UjMLCLWj0BehlzG79yWV8en/tlA/s8DbCrh gWRF74c5iDgkaUKo3rLCkI06/mmx8PwQrzIzKtgKISnzxu+yTiJJLaPHivmCUb4yet gsRSlrguCJTnrR6nfgasLlAJM/1CI/n29XMPtqVvwFxiyrAy2oSTUsfReKdzSibjFi 5eiTmh3x1iddDiLDSAh8Q8A5d5+aZVRA3lVTsp8ZS34IsIv2CrR/Nnb2p9GmOr9yTL OCrvlFBZq7VekXjV8m8ckamzk+StbMN2Ma1rK0MuqF7AWmaoazDWObNjYBOIBY0W/z h3FYCx98O7b3Q== From: Christian Brauner Date: Tue, 15 Sep 2026 13:30:51 +0200 Subject: [PATCH RFC POC 05/50] ARM: commit fds on syscall exit Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260915-work-fd-reserve-unify-folded-v1-5-4d5217d6b246@kernel.org> References: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> In-Reply-To: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> To: Linus Torvalds Cc: Alexander Viro , Jann Horn , Jan Kara , Ingo Molnar , Peter Zijlstra , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Oleg Nesterov , linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, Jens Axboe , io-uring@vger.kernel.org, netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, bpf@vger.kernel.org, David Airlie , virtualization@lists.linux.dev, kvm@vger.kernel.org, kexec@lists.infradead.org, linux-hyperv@vger.kernel.org, "Christian Brauner (Amutable)" X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=openpgp-sha256; l=2837; i=brauner@kernel.org; h=from:subject:message-id; bh=VK90OItgH7MXKBBbqC1mLihQj+HZYKN65ZEaMtX+9Ng=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWSt1KmZbrpIOHqtq7zi6WwlNR3r5y5nTvJML3y6vyFW/ qkM8+m/HaUsDGJcDLJiiiwO7Sbhcst5KjYbZWrAzGFlAhnCwMUpABN5I8fwP+zW1CD2pQbsZaa6 tgaTGX+ejU8rUZFb+L5V587bxX43/BkZ9r6dbPjsAn/5JEu7vPbfq3cc+M++af5MlaWxDNouzVe 7mQA= X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Add TIF_FD_SLOTS and test it where the syscall return path decides between the syscall work and the plain work pending slow path. A task that reserved descriptors goes through __sys_trace_return_nosave where syscall_trace_exit() commits them before audit and the ptrace exit stop. The traced path already ends up there. Signed-off-by: Christian Brauner (Amutable) --- arch/arm/include/asm/thread_info.h | 2 ++ arch/arm/kernel/entry-common.S | 2 ++ arch/arm/kernel/ptrace.c | 4 ++++ 3 files changed, 8 insertions(+) diff --git a/arch/arm/include/asm/thread_info.h b/arch/arm/include/asm/thre= ad_info.h index 943ffcf069d2..5337449e8409 100644 --- a/arch/arm/include/asm/thread_info.h +++ b/arch/arm/include/asm/thread_info.h @@ -144,6 +144,7 @@ extern int vfp_restore_user_hwstate(struct user_vfp *, #define TIF_NOTIFY_RESUME 2 /* callback before returning to user */ #define TIF_UPROBE 3 /* breakpointed or singlestepping */ #define TIF_NOTIFY_SIGNAL 4 /* signal notifications exist */ +#define TIF_FD_SLOTS 5 /* syscall prepared descriptors, entry-common.S ne= eds it below 16 */ =20 #define TIF_USING_IWMMXT 17 #define TIF_MEMDIE 18 /* is terminating due to OOM killer */ @@ -163,6 +164,7 @@ extern int vfp_restore_user_hwstate(struct user_vfp *, #define _TIF_SYSCALL_TRACEPOINT (1 << TIF_SYSCALL_TRACEPOINT) #define _TIF_SECCOMP (1 << TIF_SECCOMP) #define _TIF_NOTIFY_SIGNAL (1 << TIF_NOTIFY_SIGNAL) +#define _TIF_FD_SLOTS (1 << TIF_FD_SLOTS) #define _TIF_USING_IWMMXT (1 << TIF_USING_IWMMXT) =20 /* Checks for any syscall work in entry-common.S */ diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S index 88336a1292bb..59a70d90b0b6 100644 --- a/arch/arm/kernel/entry-common.S +++ b/arch/arm/kernel/entry-common.S @@ -83,6 +83,8 @@ ENDPROC(ret_fast_syscall) =20 tst r1, #_TIF_SYSCALL_WORK bne __sys_trace_return_nosave + tst r1, #(_TIF_FD_SLOTS << 16) @ r1 holds TI_FLAGS << 16 + bne __sys_trace_return_nosave slow_work_pending: mov r0, sp @ 'regs' mov r2, why @ 'syscall' diff --git a/arch/arm/kernel/ptrace.c b/arch/arm/kernel/ptrace.c index ed7a2a87a670..75fe26012fcb 100644 --- a/arch/arm/kernel/ptrace.c +++ b/arch/arm/kernel/ptrace.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -876,6 +877,9 @@ asmlinkage int syscall_trace_enter(struct pt_regs *regs) =20 asmlinkage void syscall_trace_exit(struct pt_regs *regs) { + if (test_thread_flag(TIF_FD_SLOTS)) + fd_slots_commit(regs); + /* * Audit the syscall before anything else, as a debugger may * come in and change the current registers. --=20 2.53.0 From nobody Fri Sep 25 07:56:54 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 18B864156F0; Tue, 15 Sep 2026 11:32:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789471928; cv=none; b=ZP09+FrXSN+b5dGw47mk8MN3FJM704SyJLHUuuqLbfh7hKIYrNrhzyvsEy1ttgZjAwIpCG8Vc3n86ARuTz3keqwQ80ZnNHwAlYo+zMOBHd8s5g3c7i+QEaMjGi/GqvxxsFRhzsm/lFjsacE6V76rKXExbmuCNuu80PFGyTyOSIw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789471928; c=relaxed/simple; bh=k8f7wEWfxKpIfpqM0ZZciT9rU/+Z+B0mDMLnzjQbKbc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=a620qd8sBV8X/35YTiMXjCfQUGQXIYgg+JNIdr6ih6sesic2kGMatAVDKZH41orY81SwT9ReC5vEd9igxjWpLzqJUK7UOks82+qAmaEHbITwJd8QnJhz4Tg8jRkM5Rjh2pIdgjHanNNclypMhPD+67NZWKrYX7Ci7jttSugXf2o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=C4zmLfJv; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="C4zmLfJv" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 887861F00893; Tue, 15 Sep 2026 11:31:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789471926; bh=IxmCoZxNvEY3MY1bZ7ewHUS2NdsWvLK1wdW+Bpu3XII=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=C4zmLfJvLb8/XMAlQ0q3DR72O6RIbbpSlqr7mpxZZCXJCOZxs052NdpfsCeWB6jTO sp7ZSYu4dpiFz7qZobKbv0Abd6MgSlwyvtgrq+Q5gxYnbTDPGivrBv40jjmQzLGjRT vrpW8H100OjuekLO+QbwSm4M7Pzv6OLBPqNmMdQXQ9Pvk4HwKHgkGGqx1zr9MQdDkX DH4Qvm5HZpUEMbwwqO5pgKn+CIl2pzB83ZS8OPqmZIf0xHJv0M68Lea7oxkcu2dWSZ yYvMHPI29Nvht7tAvKnNjpHySotS6aewXYvlGWWYpncPxSi676hzekHoKm/yXfnU59 FZU3zcroOoqIA== From: Christian Brauner Date: Tue, 15 Sep 2026 13:30:52 +0200 Subject: [PATCH RFC POC 06/50] arm64: commit fds on syscall exit Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260915-work-fd-reserve-unify-folded-v1-6-4d5217d6b246@kernel.org> References: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> In-Reply-To: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> To: Linus Torvalds Cc: Alexander Viro , Jann Horn , Jan Kara , Ingo Molnar , Peter Zijlstra , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Oleg Nesterov , linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, Jens Axboe , io-uring@vger.kernel.org, netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, bpf@vger.kernel.org, David Airlie , virtualization@lists.linux.dev, kvm@vger.kernel.org, kexec@lists.infradead.org, linux-hyperv@vger.kernel.org, "Christian Brauner (Amutable)" X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=openpgp-sha256; l=2286; i=brauner@kernel.org; h=from:subject:message-id; bh=k8f7wEWfxKpIfpqM0ZZciT9rU/+Z+B0mDMLnzjQbKbc=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWSt1KnZs3W+lNrE9bX1j9JX3V1/xZvtQk5p++zvYh+2m 2y+/NbBoKOUhUGMi0FWTJHFod0kXG45T8Vmo0wNmDmsTCBDGLg4BWAi8csYGbbp9Kz+NflwSea1 kB+Gs1Oy2DcWpDxrSJl+sK8+M9b2eyTDb3Z/1XKDldKc0bdKrTceZZ30eNPnnY6Zhw+Lb5A7wqf zgAMA X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Add TIF_FD_SLOTS to the syscall work bits. el0_svc_common() rereads the flags after the system call and takes the trace exit for any of them. So a task that reserved descriptors ends up in syscall_trace_exit() which commits them before audit and the ptrace exit stop. Signed-off-by: Christian Brauner (Amutable) --- arch/arm64/include/asm/thread_info.h | 4 +++- arch/arm64/kernel/ptrace.c | 4 ++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/arch/arm64/include/asm/thread_info.h b/arch/arm64/include/asm/= thread_info.h index 5d7fe3e153c8..e48006eb98a8 100644 --- a/arch/arm64/include/asm/thread_info.h +++ b/arch/arm64/include/asm/thread_info.h @@ -74,6 +74,7 @@ void arch_setup_new_exec(void); #define TIF_SECCOMP 11 /* syscall secure computing */ #define TIF_SYSCALL_EMU 12 /* syscall emulation active */ #define TIF_PATCH_PENDING 13 /* pending live patching update */ +#define TIF_FD_SLOTS 14 /* syscall prepared descriptors */ #define TIF_MEMDIE 18 /* is terminating due to OOM killer */ #define TIF_FREEZE 19 #define TIF_RESTORE_SIGMASK 20 @@ -107,10 +108,11 @@ void arch_setup_new_exec(void); #define _TIF_MTE_ASYNC_FAULT (1 << TIF_MTE_ASYNC_FAULT) #define _TIF_NOTIFY_SIGNAL (1 << TIF_NOTIFY_SIGNAL) #define _TIF_TSC_SIGSEGV (1 << TIF_TSC_SIGSEGV) +#define _TIF_FD_SLOTS (1 << TIF_FD_SLOTS) =20 #define _TIF_SYSCALL_WORK (_TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT | \ _TIF_SYSCALL_TRACEPOINT | _TIF_SECCOMP | \ - _TIF_SYSCALL_EMU) + _TIF_SYSCALL_EMU | _TIF_FD_SLOTS) =20 #ifdef CONFIG_SHADOW_CALL_STACK #define INIT_SCS \ diff --git a/arch/arm64/kernel/ptrace.c b/arch/arm64/kernel/ptrace.c index f743cbec1c3a..3bedfed977d4 100644 --- a/arch/arm64/kernel/ptrace.c +++ b/arch/arm64/kernel/ptrace.c @@ -28,6 +28,7 @@ #include #include #include +#include #include =20 #include @@ -2486,6 +2487,9 @@ void syscall_trace_exit(struct pt_regs *regs) { unsigned long flags =3D read_thread_flags(); =20 + if (flags & _TIF_FD_SLOTS) + fd_slots_commit(regs); + audit_syscall_exit(regs); =20 if (flags & _TIF_SYSCALL_TRACEPOINT) --=20 2.53.0 From nobody Fri Sep 25 07:56:54 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 B694649DBAA; Tue, 15 Sep 2026 11:32:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789471936; cv=none; b=CjW7fyiugtGAGtyRHZLJ4pMytXcL1Iu1HnqsGQ6fTCf7SQ0xtzWq5U/0cgkEF3k4OMFtqULWe0RFpQtOJ4Cc0AB6q8wNSvtIWBpy1sLilYnA1+vLyBRJc577XTBFhcdyBnm7ZLFhTE/fPCZ6U0T7K7kWcSiCsOaEMCUscIPEzac= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789471936; c=relaxed/simple; bh=a9znqAkO+hvOtZefxwIBQ5T2UBtQYyo8n09NKXNA7dw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=bcnmGEq/gJOESOg0YH7Khy8f2bQJO+8UVDWC9kdZO+kEe1y9GLsuL7Ea5QOfR7rwnfHj25nr0kGnfOsZaRkgiPd6jBlgXzZPlMY1lL6uDzj153rPekV2sgCb6vc6bYRJhkZyERG04/Nyu6SRvaSB3u0FJPgMFT9vlS7UVRItbmE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=GUEfB7kz; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="GUEfB7kz" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1FD8B1F000FF; Tue, 15 Sep 2026 11:32:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789471934; bh=E/WcE2lGsMFSob/cBMgO+hea6aPl2xaxNOKxSHdhki0=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=GUEfB7kz965znZtfpHqb8eIiCiLO6486hnBmkQwRyzaxNwEFt42WOgfKGny2AO9jY DpqE0IKoYZQ3CDqUbNbcjMdJnHniI4Fwuvms6GgbMB9wf1VAHv7229/U9I1vFe9NJ2 qY36omvqqIoX9NFkJOdvBvJQPo9mZFT+l30lGkj4F5tMWGVWdBHQTO1lqNMxuFrqVO OfO8kqQ7j1k9tC1TlYJ8bqUqsF+G/mO7jEhf7l0Ip9oOnDoxcn+y9v2WqMllKuuodC iV25Lg90bMELqmrBnnnzxEgH4HOX9MN+zPjb9ZEZ2BQQYFgld28sSUlqTUgIhK2Mo5 y/yD7KaWeZ/WQ== From: Christian Brauner Date: Tue, 15 Sep 2026 13:30:53 +0200 Subject: [PATCH RFC POC 07/50] csky: commit fds on syscall exit Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260915-work-fd-reserve-unify-folded-v1-7-4d5217d6b246@kernel.org> References: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> In-Reply-To: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> To: Linus Torvalds Cc: Alexander Viro , Jann Horn , Jan Kara , Ingo Molnar , Peter Zijlstra , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Oleg Nesterov , linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, Jens Axboe , io-uring@vger.kernel.org, netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, bpf@vger.kernel.org, David Airlie , virtualization@lists.linux.dev, kvm@vger.kernel.org, kexec@lists.infradead.org, linux-hyperv@vger.kernel.org, "Christian Brauner (Amutable)" X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=openpgp-sha256; l=2976; i=brauner@kernel.org; h=from:subject:message-id; bh=a9znqAkO+hvOtZefxwIBQ5T2UBtQYyo8n09NKXNA7dw=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWSt1KmReJL5+9/LafuaZn07vvD2NNsTS/r9pju0zTneI MsZ4PDocUcpC4MYF4OsmCKLQ7tJuNxynorNRpkaMHNYmUCGMHBxCsBE4p0Z/vsI/l1WJ+2YWb1+ rv5bmZs79nw5b7JPKv5J5eJeHt8sXQeG/zUtrlyha6a8POM74Rhn8++6CEYXZZkjm45o/epqCbm 3lRkA X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Add TIF_FD_SLOTS and test it after the untraced system call has stored its return value. A task that reserved descriptors joins the traced path, where syscall_trace_exit() commits them before audit and the ptrace exit stop. Signed-off-by: Christian Brauner (Amutable) --- arch/csky/include/asm/thread_info.h | 2 ++ arch/csky/kernel/entry.S | 9 +++++++++ arch/csky/kernel/ptrace.c | 4 ++++ 3 files changed, 15 insertions(+) diff --git a/arch/csky/include/asm/thread_info.h b/arch/csky/include/asm/th= read_info.h index fdd4f8ad45ac..59109ce64695 100644 --- a/arch/csky/include/asm/thread_info.h +++ b/arch/csky/include/asm/thread_info.h @@ -61,6 +61,7 @@ static inline struct thread_info *current_thread_info(voi= d) #define TIF_SYSCALL_TRACEPOINT 5 /* syscall tracepoint instrumentati= on */ #define TIF_SYSCALL_AUDIT 6 /* syscall auditing */ #define TIF_NOTIFY_SIGNAL 7 /* signal notifications exist */ +#define TIF_FD_SLOTS 8 /* syscall prepared descriptors */ #define TIF_POLLING_NRFLAG 16 /* poll_idle() is TIF_NEED_RESCHED */ #define TIF_MEMDIE 18 /* is terminating due to OOM killer */ #define TIF_RESTORE_SIGMASK 20 /* restore signal mask in do_signal() */ @@ -73,6 +74,7 @@ static inline struct thread_info *current_thread_info(voi= d) #define _TIF_SYSCALL_TRACEPOINT (1 << TIF_SYSCALL_TRACEPOINT) #define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT) #define _TIF_NOTIFY_SIGNAL (1 << TIF_NOTIFY_SIGNAL) +#define _TIF_FD_SLOTS (1 << TIF_FD_SLOTS) #define _TIF_UPROBE (1 << TIF_UPROBE) #define _TIF_POLLING_NRFLAG (1 << TIF_POLLING_NRFLAG) #define _TIF_MEMDIE (1 << TIF_MEMDIE) diff --git a/arch/csky/kernel/entry.S b/arch/csky/kernel/entry.S index 3261f46f2244..6ff3074b9787 100644 --- a/arch/csky/kernel/entry.S +++ b/arch/csky/kernel/entry.S @@ -80,6 +80,15 @@ ENTRY(csky_systemcall) jsr syscallid #endif stw a0, (sp, LSAVE_A0) /* Save return value */ + /* descriptors reserved by the syscall are committed in syscall_trace_exi= t() */ + mov r9, sp + bmaski r10, THREAD_SHIFT + andn r9, r10 + ldw r10, (r9, TINFO_FLAGS) + lrw r9, _TIF_FD_SLOTS + and r10, r9 + cmpnei r10, 0 + bt 1f jmpi ret_from_exception =20 csky_syscall_trace: diff --git a/arch/csky/kernel/ptrace.c b/arch/csky/kernel/ptrace.c index ee2867a1576e..b19fef9d396d 100644 --- a/arch/csky/kernel/ptrace.c +++ b/arch/csky/kernel/ptrace.c @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include @@ -335,6 +336,9 @@ asmlinkage int syscall_trace_enter(struct pt_regs *regs) =20 asmlinkage void syscall_trace_exit(struct pt_regs *regs) { + if (test_thread_flag(TIF_FD_SLOTS)) + fd_slots_commit(regs); + audit_syscall_exit(regs); =20 if (test_thread_flag(TIF_SYSCALL_TRACE)) --=20 2.53.0 From nobody Fri Sep 25 07:56:54 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 5E4514A64DC; Tue, 15 Sep 2026 11:32:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789471943; cv=none; b=g1GKvAaJDyqStm9nFil98KTUSvTZs2Sz3pdbv8AiuHjsPEOYtyF8TxRpbUkfBgg85yGmXFniwDcBYknMVbg8BxDbuaSMri1rviKnjPwBS14z2NcOE+RubXpr3lrLm8UPa/BSwBDopg++eSsnMRqdgiFd0RQbZT20pOG6+Wg2rPE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789471943; c=relaxed/simple; bh=Bf/Nt9MIp5BYByx3VQiEgkxrXuUu+w3TElLZR1b5xXU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=loE1XY1yFpffX9vAYuCPUjWz4zgnrhDqKa3Rc+GDivA31S8kU650M0CLVCJnNJmV4rDOnEUOqdp3mZcOZjzG5cwkCNLz6uNOCikC3E/3d07pVf/dkp1XKXep/zhenJr3Y3bamXSGikKCKbYv5oXOAxdVKjVkIfK+CwwB0AlQjt0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=KsZ0YSeM; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="KsZ0YSeM" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E4D2C1F00898; Tue, 15 Sep 2026 11:32:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789471942; bh=sj/TXeU8lbnq/VrgmP1w7bpiu8kxbau6iQA5smJm308=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=KsZ0YSeM3U31KwXzuSOBPVbLhE9vK4Yxa17kxnYE4VLLcBpXFBViJ7MpY18d0q6fg Dlkn+mjs3MbZWkyHFiqCn2El/got/SWIrC3Q6gwcviuJR1/ai315fCDOEzDtjnFUA+ ERro30MRjCev/KMJgcrZtL2o1gUZZKhbA8HyLbu41oPLd1EatgWYME4stynmbpZ0mz K2X3JgB7AebymzKvLiHCEwmgdxwueAGGvA/T8oKFv3D8nL35LXrTyGPgC1/a4X9Lk0 vYiOSTed74edj4byJ8eheDQrzWMKeMINNC4B6wsUI+361fX0pdzSzZSfMUdSTok96o JldIOwL5KHMLA== From: Christian Brauner Date: Tue, 15 Sep 2026 13:30:54 +0200 Subject: [PATCH RFC POC 08/50] hexagon: commit fds on syscall exit Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260915-work-fd-reserve-unify-folded-v1-8-4d5217d6b246@kernel.org> References: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> In-Reply-To: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> To: Linus Torvalds Cc: Alexander Viro , Jann Horn , Jan Kara , Ingo Molnar , Peter Zijlstra , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Oleg Nesterov , linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, Jens Axboe , io-uring@vger.kernel.org, netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, bpf@vger.kernel.org, David Airlie , virtualization@lists.linux.dev, kvm@vger.kernel.org, kexec@lists.infradead.org, linux-hyperv@vger.kernel.org, "Christian Brauner (Amutable)" X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=openpgp-sha256; l=2326; i=brauner@kernel.org; h=from:subject:message-id; bh=Bf/Nt9MIp5BYByx3VQiEgkxrXuUu+w3TElLZR1b5xXU=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWSt1KlxSfoWG7jlfrZ0K0tn4qOUcP+ecLZEh3DTGxwiP //KiUzqKGVhEONikBVTZHFoNwmXW85TsdkoUwNmDisTyBAGLk4BmMieN4wMd9vcWj+ZhdjGz730 0Td4Qozfzkm7T2q1yV5i3fu0zPsfNyPDAc8V881XLgs7f0Ke7TKroLtaVRyno/+PV+zTfzPk3mr iBAA= X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Add TIF_FD_SLOTS and test it in do_trap0() once the system call has returned, before the ptrace exit stop gets to see the result. Signed-off-by: Christian Brauner (Amutable) --- arch/hexagon/include/asm/thread_info.h | 2 ++ arch/hexagon/kernel/traps.c | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/arch/hexagon/include/asm/thread_info.h b/arch/hexagon/include/= asm/thread_info.h index e90f280b9ce3..8558d2d147f8 100644 --- a/arch/hexagon/include/asm/thread_info.h +++ b/arch/hexagon/include/asm/thread_info.h @@ -88,6 +88,7 @@ register struct thread_info *__current_thread_info asm(QU= OTED_THREADINFO_REG); #define TIF_SIGPENDING 2 /* signal pending */ #define TIF_NEED_RESCHED 3 /* rescheduling necessary */ #define TIF_SINGLESTEP 4 /* restore ss @ return to usr mode= */ +#define TIF_FD_SLOTS 5 /* syscall prepared descriptors */ #define TIF_RESTORE_SIGMASK 6 /* restore sig mask in do_signal()= */ #define TIF_NOTIFY_SIGNAL 7 /* signal notifications exist */ /* true if poll_idle() is polling TIF_NEED_RESCHED */ @@ -98,6 +99,7 @@ register struct thread_info *__current_thread_info asm(QU= OTED_THREADINFO_REG); #define _TIF_SIGPENDING (1 << TIF_SIGPENDING) #define _TIF_NEED_RESCHED (1 << TIF_NEED_RESCHED) #define _TIF_SINGLESTEP (1 << TIF_SINGLESTEP) +#define _TIF_FD_SLOTS (1 << TIF_FD_SLOTS) #define _TIF_NOTIFY_SIGNAL (1 << TIF_NOTIFY_SIGNAL) =20 /* work to do on interrupt/exception return - All but TIF_SYSCALL_TRACE */ diff --git a/arch/hexagon/kernel/traps.c b/arch/hexagon/kernel/traps.c index 6fe0c1b62c1b..4d15c5212fd7 100644 --- a/arch/hexagon/kernel/traps.c +++ b/arch/hexagon/kernel/traps.c @@ -6,6 +6,7 @@ */ =20 #include +#include #include #include #include @@ -381,6 +382,9 @@ void do_trap0(struct pt_regs *regs) regs->r04, regs->r05); } =20 + if (unlikely(test_thread_flag(TIF_FD_SLOTS))) + fd_slots_commit(regs); + /* allow strace to get the syscall return state */ if (unlikely(test_thread_flag(TIF_SYSCALL_TRACE))) ptrace_report_syscall_exit(regs, 0); --=20 2.53.0 From nobody Fri Sep 25 07:56:54 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 54E12493D2D; Tue, 15 Sep 2026 11:32:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789471952; cv=none; b=fRLxHlX6hJ2seVpTcjSmTxXFuH0V2MMYvKbJ56pzU+3VCYYg4Wn0n87tdNqtUhd8FYCCgFsoo5cGOeh6o6PaL8B11En45KI8jnARqfU0ssIRBQqW2i0hJAq2WIe4VC9r9knEkh/+icofE9BraH+dJmZaIc0XFZE4PUnymeF6uWw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789471952; c=relaxed/simple; bh=vs7iz3bKLJG7CXsTvZEBdGx9Li08YdT/8Wd/px3d4TY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=LDxwHgvm5ska4IJPHMfjyT6F12j2WrMFgBhEffPRMKbe6ERAqeSRqNBoVd2YwLehEDqR0NwnARUzKV2nCj+g2OavhR7k2fiSBTIiW6lvBV2D/HSTD6nKFR+qTDVLD6SOEZXrpwFS8XYy6gt0S3yGCDx404pOjtdg+QnSRHw+JhQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=m+K2QXP/; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="m+K2QXP/" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A80221F000FF; Tue, 15 Sep 2026 11:32:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789471950; bh=i7wVyaLFDwSh4RsQ7x/yFwVaLvEj62at9uwFUzmPLMc=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=m+K2QXP/zbRGzsTYOiazh6maQXF3AuGZOI8kte5zBpS/uMcEZtnwlKYDvWPSx21mx 7TGqdB2C/asSsMklDxBThdjFd165iUvhBszGEb7vDKiAwqKwu88ALg4R3OQntDPmSy pL009b1opBUWgVeuBuk7lGh4yrLHaVwvTc34V6si7vaZd9pMcP+QTIh2EpkZPCrPHa roLy/D8FmA6vUFej8GssEIMuVEW8Xxbjc55QWU2ylDQo6Q1WZPwq27fmmdRMZbmLVP oJ72BLK/Gp1V/aWXjwbp1rJsiSD2B/wSlHgBuF1q53c4nr7kcTHLIyN7mofScYlI7c A/WVLIvzUUtlw== From: Christian Brauner Date: Tue, 15 Sep 2026 13:30:55 +0200 Subject: [PATCH RFC POC 09/50] m68k: commit fds on syscall exit Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260915-work-fd-reserve-unify-folded-v1-9-4d5217d6b246@kernel.org> References: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> In-Reply-To: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> To: Linus Torvalds Cc: Alexander Viro , Jann Horn , Jan Kara , Ingo Molnar , Peter Zijlstra , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Oleg Nesterov , linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, Jens Axboe , io-uring@vger.kernel.org, netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, bpf@vger.kernel.org, David Airlie , virtualization@lists.linux.dev, kvm@vger.kernel.org, kexec@lists.infradead.org, linux-hyperv@vger.kernel.org, "Christian Brauner (Amutable)" X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=openpgp-sha256; l=4471; i=brauner@kernel.org; h=from:subject:message-id; bh=vs7iz3bKLJG7CXsTvZEBdGx9Li08YdT/8Wd/px3d4TY=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWSt1KnprokIqSkKVD/KZ/524Xdnh56o/lnaM35m5YhWv xThf2beUcrCIMbFICumyOLQbhIut5ynYrNRpgbMHFYmkCEMXJwCMJG4VkaGBu1Lkfsvr6ti2m+Q 0zx3V73WWh1tb5Pp3pZGNvef1XwNY2Q4/KqPv1PzYdm70LqORZH7stbOZDNYK+obXGf+cLdIFAc jAA== X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Add TIF_FD_SLOTS and test it on the untraced return from a system call in all three entry paths. A task that reserved descriptors calls syscall_trace_leave(), which commits them before the ptrace exit stop. The traced paths already end up there. Signed-off-by: Christian Brauner (Amutable) --- arch/m68k/68000/entry.S | 10 ++++++++++ arch/m68k/coldfire/entry.S | 12 ++++++++++++ arch/m68k/include/asm/thread_info.h | 2 ++ arch/m68k/kernel/entry.S | 2 ++ arch/m68k/kernel/ptrace.c | 3 +++ 5 files changed, 29 insertions(+) diff --git a/arch/m68k/68000/entry.S b/arch/m68k/68000/entry.S index c257cc415c47..479032af2f2f 100644 --- a/arch/m68k/68000/entry.S +++ b/arch/m68k/68000/entry.S @@ -89,6 +89,16 @@ ENTRY(system_call) jbsr %a0@ movel %d0,%sp@(PT_OFF_D0) /* save the return value*/ =20 + /* descriptors reserved by the syscall are committed in syscall_trace_lea= ve */ + getthreadinfo + btst #(TIF_FD_SLOTS%8),%a2@(TINFO_FLAGS+(31-TIF_FD_SLOTS)/8) + jeq ret_from_exception + subql #4,%sp /* dummy return address */ + SAVE_SWITCH_STACK + jbsr syscall_trace_leave + RESTORE_SWITCH_STACK + addql #4,%sp + ret_from_exception: btst #5,%sp@(PT_OFF_SR) /* check if returning to kernel*/ jeq Luser_return /* if so, skip resched, signals*/ diff --git a/arch/m68k/coldfire/entry.S b/arch/m68k/coldfire/entry.S index 4ea08336e2fb..43e47d4c0018 100644 --- a/arch/m68k/coldfire/entry.S +++ b/arch/m68k/coldfire/entry.S @@ -78,6 +78,18 @@ ENTRY(system_call) movel %d3,%a0 jbsr %a0@ movel %d0,%sp@(PT_OFF_D0) /* save the return value */ + + /* descriptors reserved by the syscall are committed in syscall_trace_lea= ve */ + movel %sp,%d2 /* get thread_info pointer */ + andl #-THREAD_SIZE,%d2 /* at start of kernel stack */ + movel %d2,%a0 + btst #(TIF_FD_SLOTS%8),%a0@(TINFO_FLAGS+(31-TIF_FD_SLOTS)/8) + jeq ret_from_exception + subql #4,%sp /* dummy return address */ + SAVE_SWITCH_STACK + jbsr syscall_trace_leave + RESTORE_SWITCH_STACK + addql #4,%sp jra ret_from_exception 1: movel #-ENOSYS,%d2 /* strace needs -ENOSYS in PT_OFF_D0 */ diff --git a/arch/m68k/include/asm/thread_info.h b/arch/m68k/include/asm/th= read_info.h index 5cb3ace55622..861b6f523bda 100644 --- a/arch/m68k/include/asm/thread_info.h +++ b/arch/m68k/include/asm/thread_info.h @@ -62,6 +62,7 @@ static inline struct thread_info *current_thread_info(voi= d) #define TIF_NOTIFY_RESUME 5 /* callback before returning to user */ #define TIF_SIGPENDING 6 /* signal pending */ #define TIF_NEED_RESCHED 7 /* rescheduling necessary */ +#define TIF_FD_SLOTS 12 /* syscall prepared descriptors */ #define TIF_SECCOMP 13 /* seccomp syscall filtering active */ #define TIF_DELAYED_TRACE 14 /* single step a syscall */ #define TIF_SYSCALL_TRACE 15 /* syscall trace active */ @@ -71,6 +72,7 @@ static inline struct thread_info *current_thread_info(voi= d) #define _TIF_NOTIFY_RESUME (1 << TIF_NOTIFY_RESUME) #define _TIF_SIGPENDING (1 << TIF_SIGPENDING) #define _TIF_NEED_RESCHED (1 << TIF_NEED_RESCHED) +#define _TIF_FD_SLOTS (1 << TIF_FD_SLOTS) #define _TIF_SECCOMP (1 << TIF_SECCOMP) #define _TIF_DELAYED_TRACE (1 << TIF_DELAYED_TRACE) #define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE) diff --git a/arch/m68k/kernel/entry.S b/arch/m68k/kernel/entry.S index 338b474910f7..9e4471f68165 100644 --- a/arch/m68k/kernel/entry.S +++ b/arch/m68k/kernel/entry.S @@ -229,6 +229,8 @@ ret_from_syscall: syscall_exit_work: btst #5,%sp@(PT_OFF_SR) | check if returning to kernel bnes 1b | if so, skip resched, signals + btst #4,%a1@(TINFO_FLAGS+2) | TIF_FD_SLOTS: commit descriptors + jne do_trace_exit lslw #1,%d0 jcs do_trace_exit jmi do_delayed_trace diff --git a/arch/m68k/kernel/ptrace.c b/arch/m68k/kernel/ptrace.c index 4575f6487a9a..07103e6ddeb0 100644 --- a/arch/m68k/kernel/ptrace.c +++ b/arch/m68k/kernel/ptrace.c @@ -11,6 +11,7 @@ */ =20 #include +#include #include #include #include @@ -289,6 +290,8 @@ asmlinkage int syscall_trace_enter(void) =20 asmlinkage void syscall_trace_leave(void) { + if (test_thread_flag(TIF_FD_SLOTS)) + fd_slots_commit(task_pt_regs(current)); if (test_thread_flag(TIF_SYSCALL_TRACE)) ptrace_report_syscall_exit(task_pt_regs(current), 0); } --=20 2.53.0 From nobody Fri Sep 25 07:56:54 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 127E04A0153; Tue, 15 Sep 2026 11:32:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789471959; cv=none; b=GlUEh99yXA6SGKLfasYG7ftg1bLd5mCkawvwC/hGlDKmLLF3SJA8B3uNhx3AqeVE2YYpcc7AiCdW4SgtKzRDEFlUQB1oO/+ghexCEpJBSeIoRySw5WGthn6Jym7rJZmd8x82dqTyBybOZ2Cw+EXGgVGT1ZWjrFURvDWxmzeEX7A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789471959; c=relaxed/simple; bh=nXh3DWWigUzaDKpK2QrpbR3RoNJlzLOS8WiJE98yT14=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ROyqGw/uVxW3dA6QJ6JSrWgILSvLkYIw21XXv0XdJeHtZPPPSbz/K9Oi2WX73kbKkSDeIXmzVyDNLyExKMtJM0u4Fwm7rZVqMwJj02fcIZW/bU7Pd5LSR/gaoPnQ5f5L/XEqyoq8Y87j21PO+p4ftllrblfbPops7W5G3jOgyZw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=SOdqCs6F; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="SOdqCs6F" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 726AF1F00898; Tue, 15 Sep 2026 11:32:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789471957; bh=tg5h99+rXwPUOCpAK+cpKxSGhPsqw2qIAApb6RMTrZY=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=SOdqCs6FFc+m85zKG65RFoiI3OX0TKhMSKuOGs5mjQ4eozA6DlIsvYCrD/FPZMCya K5qpA/W9zCpRVyaXCWr3ds/VJdxhjZpyZLD3Mkij4zr7pNA3EzYnKrukqu7tQxRSqi awcZPh3/KgPK/8y13mc/r6QIcT0xahYOLE6UWC72R99aPngllw7ccPTc2jgUwYcOi7 U74GTjJbNoQ41gpF7hzYmntvuz0kqC5olR/d01x9OdjbXM1vPyPMxQK1LCxZgEa3FG WTQ0xmcaX8BwZ3dvqAm6+xxz2psYUrOreD8islOMqgvBbrNJc0rwt/o9saf69osrsb 1/GNM2HBy3hbw== From: Christian Brauner Date: Tue, 15 Sep 2026 13:30:56 +0200 Subject: [PATCH RFC POC 10/50] microblaze: commit fds on syscall exit Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260915-work-fd-reserve-unify-folded-v1-10-4d5217d6b246@kernel.org> References: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> In-Reply-To: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> To: Linus Torvalds Cc: Alexander Viro , Jann Horn , Jan Kara , Ingo Molnar , Peter Zijlstra , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Oleg Nesterov , linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, Jens Axboe , io-uring@vger.kernel.org, netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, bpf@vger.kernel.org, David Airlie , virtualization@lists.linux.dev, kvm@vger.kernel.org, kexec@lists.infradead.org, linux-hyperv@vger.kernel.org, "Christian Brauner (Amutable)" X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=openpgp-sha256; l=2340; i=brauner@kernel.org; h=from:subject:message-id; bh=nXh3DWWigUzaDKpK2QrpbR3RoNJlzLOS8WiJE98yT14=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWSt1KnZ7yrddCzxyY2/Tpa2vz6x/Nq//Y/DVseZ581KJ U5sMTtwtaOUhUGMi0FWTJHFod0kXG45T8Vmo0wNmDmsTCBDGLg4BWAiZXcYGfaG5Cl1dp6Z4vGN heGfRKcz571g7fAA9V1NlYVnC00jGBkZbjv+T3n9aZpP9I+Lez8pxBz2mPT/3UPhvvRP08XYkut MuAA= X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Add TIF_FD_SLOTS to the syscall work mask. The return path rereads the flags after the system call and calls do_syscall_trace_leave() for any of them which commits the reservations before audit and the ptrace exit stop. Signed-off-by: Christian Brauner (Amutable) --- arch/microblaze/include/asm/thread_info.h | 5 ++++- arch/microblaze/kernel/ptrace.c | 4 ++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/arch/microblaze/include/asm/thread_info.h b/arch/microblaze/in= clude/asm/thread_info.h index 0153f7c2717c..ee2f76589696 100644 --- a/arch/microblaze/include/asm/thread_info.h +++ b/arch/microblaze/include/asm/thread_info.h @@ -103,6 +103,7 @@ static inline struct thread_info *current_thread_info(v= oid) #define TIF_SINGLESTEP 4 #define TIF_NOTIFY_SIGNAL 5 /* signal notifications exist */ #define TIF_MEMDIE 6 /* is terminating due to OOM killer */ +#define TIF_FD_SLOTS 7 /* syscall prepared descriptors */ #define TIF_SYSCALL_AUDIT 9 /* syscall auditing active */ #define TIF_SECCOMP 10 /* secure computing */ =20 @@ -118,10 +119,12 @@ static inline struct thread_info *current_thread_info= (void) #define _TIF_POLLING_NRFLAG (1 << TIF_POLLING_NRFLAG) #define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT) #define _TIF_SECCOMP (1 << TIF_SECCOMP) +#define _TIF_FD_SLOTS (1 << TIF_FD_SLOTS) =20 /* work to do in syscall trace */ #define _TIF_WORK_SYSCALL_MASK (_TIF_SYSCALL_TRACE | _TIF_SINGLESTEP | \ - _TIF_SYSCALL_AUDIT | _TIF_SECCOMP) + _TIF_SYSCALL_AUDIT | _TIF_SECCOMP | \ + _TIF_FD_SLOTS) =20 /* work to do on interrupt/exception return */ #define _TIF_WORK_MASK 0x0000FFFE diff --git a/arch/microblaze/kernel/ptrace.c b/arch/microblaze/kernel/ptrac= e.c index 236264e932d6..e6951fea8593 100644 --- a/arch/microblaze/kernel/ptrace.c +++ b/arch/microblaze/kernel/ptrace.c @@ -25,6 +25,7 @@ */ =20 #include +#include #include #include #include @@ -156,6 +157,9 @@ asmlinkage void do_syscall_trace_leave(struct pt_regs *= regs) { int step; =20 + if (test_thread_flag(TIF_FD_SLOTS)) + fd_slots_commit(regs); + audit_syscall_exit(regs); =20 step =3D test_thread_flag(TIF_SINGLESTEP); --=20 2.53.0 From nobody Fri Sep 25 07:56:54 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 C339E4A9D42; Tue, 15 Sep 2026 11:32:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789471967; cv=none; b=dP7yQEviVrVdTdousCrS89kiKkAN/Q2T3qE2T4fmwRRyS3LsAgUHNgGWVHqX/CTjmZM9SaNmQGI8KGtQLPs7QUTG/M+CebENWVf9T87l0NCEQOYG55/ZbQ3e2/YuU9QoNMXVpeXxmu/G+Rj0zGWUkIlhCp/U2Z14JoVwtRdtcAA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789471967; c=relaxed/simple; bh=O2Sy8b10JPTSM3T8FMxCg3yxJ2yYFrKaQgz1RZTqrDM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Hb1tRBfF1SDSOJ9RPs4d5KIVhV00IPdrzzuG4KqhB4tCpkMqVvTLe0yISZ+ZFLB0wDnFL7e1nv7gIaoMqMhj9Mj32a5fN8VORi04ugLqvINws0/ew/zLktuBNxAufeZPe/COMAwJyEtav0qrnwAI+oqehzDcE36wAHLh+KH/knU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=dCq0TREx; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="dCq0TREx" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 39A7F1F000FF; Tue, 15 Sep 2026 11:32:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789471965; bh=lhrRWmW1jhLpY0b4T+pXdyq2K6/6Lw3I7Dd8oxsFe60=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=dCq0TRExcU+BlQDM8hy6Cs9E6uwVSlfYujcFmaPmD6BlHGcwf1zlVdOj4iekia6nX al4ANJBJ1tX6VX0/MptbgzlPojdMZvifh4Xr1Iux25MunfDMJ0ZdADzgOLF+MDBHzN VJjSchXj7ycWNCGrw0+tgXtNpK5YAPLTUsheMDknEO+8eH1b0rnpbuY1zSztCCnVfA GRrWZUAcC9RH0jbS0xHcc8vRlak+IYa8EXS78G0mBcqGwylEICLDemOC/lzCP+aOI8 4k5cX3F/404vMcxuo7rNpXN7ULTgziEBKlCxV3cgzN4zcwdBCL7BCfVwLs7N1a0luj JpfRAWBOJ7VYQ== From: Christian Brauner Date: Tue, 15 Sep 2026 13:30:57 +0200 Subject: [PATCH RFC POC 11/50] MIPS: commit fds on syscall exit Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260915-work-fd-reserve-unify-folded-v1-11-4d5217d6b246@kernel.org> References: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> In-Reply-To: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> To: Linus Torvalds Cc: Alexander Viro , Jann Horn , Jan Kara , Ingo Molnar , Peter Zijlstra , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Oleg Nesterov , linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, Jens Axboe , io-uring@vger.kernel.org, netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, bpf@vger.kernel.org, David Airlie , virtualization@lists.linux.dev, kvm@vger.kernel.org, kexec@lists.infradead.org, linux-hyperv@vger.kernel.org, "Christian Brauner (Amutable)" X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=openpgp-sha256; l=2696; i=brauner@kernel.org; h=from:subject:message-id; bh=O2Sy8b10JPTSM3T8FMxCg3yxJ2yYFrKaQgz1RZTqrDM=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWSt1KmVfhLzX2amjpDLni+t5iy5HyJ8fnfYuQs5t239d 4fnocLijlIWBjEuBlkxRRaHdpNwueU8FZuNMjVg5rAygQxh4OIUgImcVGP4H7v0ThyX7L2OzssZ Dg/usvC4O0iFJConhHNZcXS9mtKnwfBPb1pj+VPfVuVgW/nrzUqNt57OOi2ptdSndP/0CbwHHU/ xAgA= X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Add TIF_FD_SLOTS to the syscall exit work. The return path rereads the flags after the system call and calls syscall_trace_leave() for any of the exit work bits which commits the reservations before audit and the ptrace exit stop. Signed-off-by: Christian Brauner (Amutable) --- arch/mips/include/asm/thread_info.h | 5 ++++- arch/mips/kernel/ptrace.c | 4 ++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/arch/mips/include/asm/thread_info.h b/arch/mips/include/asm/th= read_info.h index 2707dad260dd..79c81696e9c1 100644 --- a/arch/mips/include/asm/thread_info.h +++ b/arch/mips/include/asm/thread_info.h @@ -114,6 +114,7 @@ register unsigned long current_stack_pointer __asm__("s= p"); #define TIF_NOTIFY_RESUME 5 /* callback before returning to user */ #define TIF_UPROBE 6 /* breakpointed or singlestepping */ #define TIF_NOTIFY_SIGNAL 7 /* signal notifications exist */ +#define TIF_FD_SLOTS 8 /* syscall prepared descriptors */ #define TIF_RESTORE_SIGMASK 9 /* restore signal mask in do_signal() */ #define TIF_USEDFPU 16 /* FPU was used by this task this quantum (SMP) */ #define TIF_MEMDIE 18 /* is terminating due to OOM killer */ @@ -152,6 +153,7 @@ register unsigned long current_stack_pointer __asm__("s= p"); #define _TIF_USEDMSA (1< #include #include +#include #include #include #include @@ -1364,6 +1365,9 @@ asmlinkage void syscall_trace_leave(struct pt_regs *r= egs) */ user_exit(); =20 + if (test_thread_flag(TIF_FD_SLOTS)) + fd_slots_commit(regs); + audit_syscall_exit(regs); =20 if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT))) --=20 2.53.0 From nobody Fri Sep 25 07:56:54 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 35E273AE1B4; Tue, 15 Sep 2026 11:32:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789471974; cv=none; b=G0o23ZIGqmRIE9tHYVYdlhVQ9cxoiV0MyzcsPe6jTuluYTZZ5zj1sG+KPfruPzSMP9QB9PBAcRyklvzSXWpi+fNGv3d8Ylkw+S6tM0u7qaFPuAcIWB6pOz7AeWSbf6QCJCtmyXfTLikI/LTDigt1Ao7v0QUKXx8GMBuiWQFgh+o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789471974; c=relaxed/simple; bh=2xplL1NyM3O4K4L6DfydYO0Aia7T1qYz/CjAzhj5Eew=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=eXZsqMVhIkOckGHTEjUEoWgldhskKelvHs0O3ywVxgDFtgd4LZCvvgJtjyizuR6K4GLxBuuJcpBQfu+wdF9J1cS8h2Qs+3LyWxCjoVMk15KLyjA7sujzHryBRtKT5HGqzgPSlZ4/o0ZsS02sNIisfxyRMa9luGB8kuoETHe91+Q= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=QMTfLeTY; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="QMTfLeTY" Received: by smtp.kernel.org (Postfix) with ESMTPSA id BDE001F00893; Tue, 15 Sep 2026 11:32:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789471972; bh=o3Xn0Mlg9bYlNfr1tPx70kIWOKOkVzvKHpeJ1YxZNRQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=QMTfLeTYDVR+WQ8hqqaurH77Q8HR0/bGnyAWtgaX4cUnejbUKWLppk13HgBi3Ihb2 kPmiHpO3rRdjRdgFadsL7sJc/DJxI741nrJT3qwJoOB8nOvZFJR2SADGysKabk6JuM +Y12LDqq0mzE7YbHwx9mql9DcjNt8nQ+Qa29un0t3I+ZOs7w3oYnaj7NIhtfD7oEQT msU0tD696FtyT0wnuNKm/bu8l4L+UeODuBuHPDS4FE16FLJNZPa3orOY3/myRLQWiZ tTW/UkhDAAaCJ74geD4ZPXSRk/hzP4l1fq1WFCmBvRegAKyGOdjJF20sUD1q1zgGGW 6g8/IXE0N6uQw== From: Christian Brauner Date: Tue, 15 Sep 2026 13:30:58 +0200 Subject: [PATCH RFC POC 12/50] nios2: commit fds on syscall exit Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260915-work-fd-reserve-unify-folded-v1-12-4d5217d6b246@kernel.org> References: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> In-Reply-To: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> To: Linus Torvalds Cc: Alexander Viro , Jann Horn , Jan Kara , Ingo Molnar , Peter Zijlstra , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Oleg Nesterov , linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, Jens Axboe , io-uring@vger.kernel.org, netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, bpf@vger.kernel.org, David Airlie , virtualization@lists.linux.dev, kvm@vger.kernel.org, kexec@lists.infradead.org, linux-hyperv@vger.kernel.org, "Christian Brauner (Amutable)" X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=openpgp-sha256; l=2707; i=brauner@kernel.org; h=from:subject:message-id; bh=2xplL1NyM3O4K4L6DfydYO0Aia7T1qYz/CjAzhj5Eew=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWSt1KlVmMDBeUTxyxptzYxU+5fHZnpauZQ2vi++wMb75 MCxSf+ndZSyMIhxMciKKbI4tJuEyy3nqdhslKkBM4eVCWQIAxenAEzkuybDP6te7od7g1bqHMtY dzzj4ZTFk3lluoP6jtXu1/pwK+HTg9WMDD/8g02vzP+as0ShzGk9q8/0pPLva21Sv4v4uacI9y0 z5QEA X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Add TIF_FD_SLOTS and test it once the untraced system call has had its return code translated into the r2 and r7 pair userspace sees. Signed-off-by: Christian Brauner (Amutable) --- arch/nios2/include/asm/thread_info.h | 2 ++ arch/nios2/kernel/entry.S | 5 +++++ arch/nios2/kernel/ptrace.c | 3 +++ 3 files changed, 10 insertions(+) diff --git a/arch/nios2/include/asm/thread_info.h b/arch/nios2/include/asm/= thread_info.h index 83df79286d62..7f5816e1b3d6 100644 --- a/arch/nios2/include/asm/thread_info.h +++ b/arch/nios2/include/asm/thread_info.h @@ -78,6 +78,7 @@ static inline struct thread_info *current_thread_info(voi= d) #define TIF_SECCOMP 5 /* secure computing */ #define TIF_SYSCALL_AUDIT 6 /* syscall auditing active */ #define TIF_NOTIFY_SIGNAL 7 /* signal notifications exist */ +#define TIF_FD_SLOTS 8 /* syscall prepared descriptors */ #define TIF_RESTORE_SIGMASK 9 /* restore signal mask in do_signal() */ =20 #define TIF_POLLING_NRFLAG 16 /* true if poll_idle() is polling @@ -90,6 +91,7 @@ static inline struct thread_info *current_thread_info(voi= d) #define _TIF_SECCOMP (1 << TIF_SECCOMP) #define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT) #define _TIF_NOTIFY_SIGNAL (1 << TIF_NOTIFY_SIGNAL) +#define _TIF_FD_SLOTS (1 << TIF_FD_SLOTS) #define _TIF_RESTORE_SIGMASK (1 << TIF_RESTORE_SIGMASK) #define _TIF_POLLING_NRFLAG (1 << TIF_POLLING_NRFLAG) =20 diff --git a/arch/nios2/kernel/entry.S b/arch/nios2/kernel/entry.S index dd40dfd908e5..b3a99a6db379 100644 --- a/arch/nios2/kernel/entry.S +++ b/arch/nios2/kernel/entry.S @@ -222,6 +222,11 @@ translate_rc_and_ret: stw r2, PT_R2(sp) stw r1, PT_R7(sp) end_translate_rc_and_ret: + /* Descriptors reserved by the syscall are committed in + * do_syscall_trace_exit, take the traced exit path for them. */ + GET_THREAD_INFO r11 + ldw r11, TI_FLAGS(r11) + BTBNZ r11, r11, TIF_FD_SLOTS, end_translate_rc_and_ret2 =20 ret_from_exception: ldw r1, PT_ESTATUS(sp) diff --git a/arch/nios2/kernel/ptrace.c b/arch/nios2/kernel/ptrace.c index 2cd7e1ecbd74..5cee1b717662 100644 --- a/arch/nios2/kernel/ptrace.c +++ b/arch/nios2/kernel/ptrace.c @@ -9,6 +9,7 @@ =20 #include #include +#include #include #include #include @@ -140,6 +141,8 @@ asmlinkage int do_syscall_trace_enter(void) =20 asmlinkage void do_syscall_trace_exit(void) { + if (test_thread_flag(TIF_FD_SLOTS)) + fd_slots_commit(task_pt_regs(current)); if (test_thread_flag(TIF_SYSCALL_TRACE)) ptrace_report_syscall_exit(task_pt_regs(current), 0); } --=20 2.53.0 From nobody Fri Sep 25 07:56:54 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 D1F2149E5D9; Tue, 15 Sep 2026 11:33:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789471982; cv=none; b=Mbt5bKBg2qZWYH4k7lAUzNuPOBDv79XRBsAJRKRX/zf/gT9vjfA8SR6X472j381WR/dzL/ytLZGOWB8AWd+KzdE7b0cxCAl6hZrOjuRIE1lZ02eEPg1zx0AzWN2fc+lE1g5rBhsHkC/HG8D7/luK88yMWiaBosR0m3h8VL6SbUc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789471982; c=relaxed/simple; bh=WIP/DigF70AMhhxkwNBY6vdiLcTH+iv+tPMUDAZ9Ays=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ZvhRXPsw5LlVxGpIwZ2cBdERMerqsGXWoh28Sqso3WZOwyUy4hMWJpytpOoCOA5j4AiH9BOEqCOR9bls4+zgNl56wDf1l1I7V5zoKBfsUcivFXxHqW0xa+6rGBADnOBudQnn45ehsLBoXa1Tq7A/3rvk1M08LSXTOA/AIpK9n3k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=lW4XDrSS; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="lW4XDrSS" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5C55A1F000FF; Tue, 15 Sep 2026 11:32:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789471980; bh=ieBZ+PGa/U2dHjvXYIOcBUNNdmn+mkwIOuOFCXOxPNU=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=lW4XDrSSE4zqGk0C0CruQFmX6so8N2FOL23Fl09c5bnPSxQl0BFCz51k8cI+0dFfJ dXQThH7z1OdW1butHdlIf/Qob4isTZGHfU/nhc+unhvj37uVwPwqTZHeYk/FuGa0RN aDMtnc4VxYzhvYriaex23gOScyvu/sWWOUrxEFEJ+nQmrms5SkE4/CUmg2GfphSCuj JXVFYRknoQ6WmHDbHxR3xnX/Fm8hP0qkS8zTMO9w9Kxgckeg/VeZIeJThmFkiQBpT6 FVu61jYIIv6ceWPTvf1QMFe5gj978J8MMjetxPLjPfZjoZhoGLBPKY5OnkDnZixiDS 91SUSK7z6ECBg== From: Christian Brauner Date: Tue, 15 Sep 2026 13:30:59 +0200 Subject: [PATCH RFC POC 13/50] openrisc: commit fds on syscall exit Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260915-work-fd-reserve-unify-folded-v1-13-4d5217d6b246@kernel.org> References: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> In-Reply-To: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> To: Linus Torvalds Cc: Alexander Viro , Jann Horn , Jan Kara , Ingo Molnar , Peter Zijlstra , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Oleg Nesterov , linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, Jens Axboe , io-uring@vger.kernel.org, netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, bpf@vger.kernel.org, David Airlie , virtualization@lists.linux.dev, kvm@vger.kernel.org, kexec@lists.infradead.org, linux-hyperv@vger.kernel.org, "Christian Brauner (Amutable)" X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=openpgp-sha256; l=3299; i=brauner@kernel.org; h=from:subject:message-id; bh=WIP/DigF70AMhhxkwNBY6vdiLcTH+iv+tPMUDAZ9Ays=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWSt1Kn9GjAhwFHx+sY/XeefqrdOfq2R3HC8f2v+1Q5lg UcXTzCZdZSyMIhxMciKKbI4tJuEyy3nqdhslKkBM4eVCWQIAxenAEzkAiMjw2k/PoanKkdD5bZf KxfaVXVqje/CGY+/+MbO+vL4QxvPmgRGhoe1GR3WZn18c8xOi7JUnRHY2W96ZGnXoxWdvoqFr4M SOQE= X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Add TIF_FD_SLOTS and test it together with TIF_SYSCALL_TRACE on the way out of a system call. The check used to rely on the flags r30 had been loaded with before the call. Reload them. The syscall may have set the new bit. A task that reserved descriptors calls do_syscall_trace_leave() which commits them before audit and the ptrace exit stop. Signed-off-by: Christian Brauner (Amutable) --- arch/openrisc/include/asm/thread_info.h | 5 ++++- arch/openrisc/kernel/entry.S | 5 +++-- arch/openrisc/kernel/ptrace.c | 4 ++++ 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/arch/openrisc/include/asm/thread_info.h b/arch/openrisc/includ= e/asm/thread_info.h index e338fff7efb0..3d8a710a809d 100644 --- a/arch/openrisc/include/asm/thread_info.h +++ b/arch/openrisc/include/asm/thread_info.h @@ -92,6 +92,7 @@ register struct thread_info *current_thread_info_reg asm(= "r10"); * mode */ #define TIF_NOTIFY_SIGNAL 5 /* signal notifications exist */ +#define TIF_FD_SLOTS 6 /* syscall prepared descriptors */ #define TIF_SYSCALL_TRACEPOINT 8 /* for ftrace syscall instrumentat= ion */ #define TIF_RESTORE_SIGMASK 9 #define TIF_POLLING_NRFLAG 16 /* true if poll_idle() is polling * TI= F_NEED_RESCHED @@ -104,12 +105,14 @@ register struct thread_info *current_thread_info_reg = asm("r10"); #define _TIF_NEED_RESCHED (1<r11. */ + l.lwz r30,TI_FLAGS(r10) + l.andi r30,r30,(_TIF_SYSCALL_TRACE|_TIF_FD_SLOTS) l.sfne r30,r0 l.bf _syscall_trace_leave l.nop diff --git a/arch/openrisc/kernel/ptrace.c b/arch/openrisc/kernel/ptrace.c index 287a9718f0c6..71614b36e516 100644 --- a/arch/openrisc/kernel/ptrace.c +++ b/arch/openrisc/kernel/ptrace.c @@ -13,6 +13,7 @@ */ =20 #include +#include #include #include #include @@ -311,6 +312,9 @@ asmlinkage void do_syscall_trace_leave(struct pt_regs *= regs) { int step; =20 + if (test_thread_flag(TIF_FD_SLOTS)) + fd_slots_commit(regs); + audit_syscall_exit(regs); =20 step =3D test_thread_flag(TIF_SINGLESTEP); --=20 2.53.0 From nobody Fri Sep 25 07:56:54 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 D52C94A2A47; Tue, 15 Sep 2026 11:33:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789471990; cv=none; b=q8+8FesS18+3pxttT3SwJ9pQF6LcIzjoFoUxR1S2xw5GPMJPZuwWa40xOAe2sgPnXMgl2RyOnOK5snlAhyDoxrUf+2d8cHkM1yTfX6sMxfnZ3Lcamtn/mFjKoMFfKMCKUwtRBS56NJfJeGz+E0VeD7uT+3LoMZ7HGF22qUXJ/dg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789471990; c=relaxed/simple; bh=u9Db1ViJfwYuzioCFI+Ic9SCMW7ME/y8i4wAOxFSJrA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=DZ14AR0+LH+odk54OLMdHeVpAjSgItAkxBdFZXQP1mMYgaqtGK785VJje+hJLfiO4MsCmf7cW9GHwnMp9OP5ajuH7zMQJOoTxy2RAT5H/1XlvOFWcThBKIRqyjCf5o9jcEiAubmSouGtaizDZsZUk0YTnG25YOF/0HYgPbhkgGg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=FIre7IPO; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="FIre7IPO" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 365EA1F00893; Tue, 15 Sep 2026 11:33:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789471988; bh=6C1meFw3vaAeYs/vq+sJtwpKCB4NBzs9iQTrTMdIhys=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=FIre7IPObUwSzXf3O2sx48t2Z4H5e1F4uGdxGhRX7VJFjXC2A06It6HiWigcBBMAA 8Vra7vVQTvHialB8SqOPb2eU66kL4TJRssBUy55uhNbh7Fx5LNe7AZKu6GLyBUfsD6 gvQWFBQP1xhLlrZ1husySN/1kg49H9IBp7PQSW5R20QShWAwc1I1rkhE5a8gn/MPIL K1rfYqLjcpreBV4aXozkph6wt+CPhATz8dRKVe/qhoxpxLlAiPlvfFlTEM17EJsySw IAUl5j4U2w/1V7oWGu6C8lLy1GXU5KsBKij6oQvNp9K/WGJ/hy1wm8Um42Z4sZZvVR 5URNgqeCv80NA== From: Christian Brauner Date: Tue, 15 Sep 2026 13:31:00 +0200 Subject: [PATCH RFC POC 14/50] parisc: commit fds on syscall exit Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260915-work-fd-reserve-unify-folded-v1-14-4d5217d6b246@kernel.org> References: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> In-Reply-To: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> To: Linus Torvalds Cc: Alexander Viro , Jann Horn , Jan Kara , Ingo Molnar , Peter Zijlstra , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Oleg Nesterov , linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, Jens Axboe , io-uring@vger.kernel.org, netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, bpf@vger.kernel.org, David Airlie , virtualization@lists.linux.dev, kvm@vger.kernel.org, kexec@lists.infradead.org, linux-hyperv@vger.kernel.org, "Christian Brauner (Amutable)" X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=openpgp-sha256; l=3161; i=brauner@kernel.org; h=from:subject:message-id; bh=u9Db1ViJfwYuzioCFI+Ic9SCMW7ME/y8i4wAOxFSJrA=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWSt1Kl9v0DgirDZt09b9j68fGdbuw7L0fhlLFrRRy8y8 rKpH2YS7yhlYRDjYpAVU2RxaDcJl1vOU7HZKFMDZg4rE8gQBi5OAZiIzTeGvxJCRtXLj2eFi4bc rj56m0FOYPZfpoLaW1crUibKsk2wd2Zk+BO9OoZ7Whbr1/StJ2JZ1nLsCE4I1fn9/7LOIUMGzZM FfAA= X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Add TIF_FD_SLOTS and test it in syscall_exit once the return value has been saved to pt_regs. A task that reserved descriptors calls do_syscall_trace_exit() and then continues with the usual reschedule and signal checks. The traced path already ends up there. Signed-off-by: Christian Brauner (Amutable) --- arch/parisc/include/asm/thread_info.h | 2 ++ arch/parisc/kernel/entry.S | 12 ++++++++++++ arch/parisc/kernel/ptrace.c | 4 ++++ 3 files changed, 18 insertions(+) diff --git a/arch/parisc/include/asm/thread_info.h b/arch/parisc/include/as= m/thread_info.h index b283738bb6da..14a40c53689f 100644 --- a/arch/parisc/include/asm/thread_info.h +++ b/arch/parisc/include/asm/thread_info.h @@ -52,6 +52,7 @@ struct thread_info { #define TIF_SECCOMP 11 /* secure computing */ #define TIF_SYSCALL_TRACEPOINT 12 /* syscall tracepoint instrumentation */ #define TIF_NONBLOCK_WARNING 13 /* warned about wrong O_NONBLOCK usage */ +#define TIF_FD_SLOTS 14 /* syscall prepared descriptors */ =20 #define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE) #define _TIF_SIGPENDING (1 << TIF_SIGPENDING) @@ -65,6 +66,7 @@ struct thread_info { #define _TIF_BLOCKSTEP (1 << TIF_BLOCKSTEP) #define _TIF_SECCOMP (1 << TIF_SECCOMP) #define _TIF_SYSCALL_TRACEPOINT (1 << TIF_SYSCALL_TRACEPOINT) +#define _TIF_FD_SLOTS (1 << TIF_FD_SLOTS) =20 #define _TIF_USER_WORK_MASK (_TIF_SIGPENDING | _TIF_NOTIFY_RESUME | \ _TIF_NEED_RESCHED | _TIF_NOTIFY_SIGNAL) diff --git a/arch/parisc/kernel/entry.S b/arch/parisc/kernel/entry.S index e04c5d806c10..c5807cf6fbd8 100644 --- a/arch/parisc/kernel/entry.S +++ b/arch/parisc/kernel/entry.S @@ -1732,6 +1732,8 @@ syscall_check_resched: /* check for reschedule */ mfctl %cr30,%r19 LDREG TASK_TI_FLAGS(%r19),%r19 /* long */ + /* descriptors reserved by the syscall are committed in do_syscall_trace_= exit */ + bb,<,n %r19, 31-TIF_FD_SLOTS, syscall_do_fd_slots /* forward */ bb,<,n %r19, 31-TIF_NEED_RESCHED, syscall_do_resched /* forward */ =20 .import do_signal,code @@ -1765,6 +1767,16 @@ syscall_do_signal: =20 b,n syscall_check_sig =20 +syscall_do_fd_slots: + mfctl %cr30,%r1 +#ifdef CONFIG_64BIT + ldo -16(%r30),%r29 /* Reference param save area */ +#endif + ldo TASK_REGS(%r1),%r26 /* struct pt_regs *regs */ + BL do_syscall_trace_exit,%r2 + nop + b,n syscall_check_resched + syscall_restore: mfctl %cr30,%r1 =20 diff --git a/arch/parisc/kernel/ptrace.c b/arch/parisc/kernel/ptrace.c index 1d9e210702e1..f142766792af 100644 --- a/arch/parisc/kernel/ptrace.c +++ b/arch/parisc/kernel/ptrace.c @@ -9,6 +9,7 @@ */ =20 #include +#include #include #include #include @@ -381,6 +382,9 @@ void do_syscall_trace_exit(struct pt_regs *regs) int stepping =3D test_thread_flag(TIF_SINGLESTEP) || test_thread_flag(TIF_BLOCKSTEP); =20 + if (test_thread_flag(TIF_FD_SLOTS)) + fd_slots_commit(regs); + audit_syscall_exit(regs); =20 #ifdef CONFIG_HAVE_SYSCALL_TRACEPOINTS --=20 2.53.0 From nobody Fri Sep 25 07:56:54 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 61E554A260B; Tue, 15 Sep 2026 11:33:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789471998; cv=none; b=Rwqf3x42+zjnHw9GhPV9A3zrFOL7nMvXiSTvB4/PbEHvzlyR140OJjKA2QCLeh/I7hoZar9eKpbdvnhZpfYpTrakzh6q7GlElMiEs3U2nqpAejaL9MQjrr2RFlNaFbhIUvDCxdjSPYuImyp1OV20Xn3ompzVWEg+DkWeV2FoSTQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789471998; c=relaxed/simple; bh=D2omDG7mr0KTxlJ4GQ7QAZA4OxsIde5l5dfPMzqmPuo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=A8sOtXPbg7ly6QOMd/A7FCIDfgBclUWgtCCWz1Oe0p0tTU+j1wIZ3EBerFH06X8B4dQf9R4XGUR42ni3wY6cZNSDGj476hf4BtGJgMG8Bb5JMwgDBV1IPl0MyQihHp0WMPRT3AIf7RE0F7zitmcMFg253hcIJF++S1WnzAD3XHQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ahFaO1Ef; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ahFaO1Ef" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C925A1F000FF; Tue, 15 Sep 2026 11:33:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789471996; bh=kxC9gcnyDcUdFgs3BFwtpBJTgH6vRdY/SXD7WnErgiA=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=ahFaO1Ef44833cAg/ipYrlljR/L9kqnoccr/DtSi2ZpktkAECstbBuUB4GsshEh2o 37/q8m87cD/I7tX9ntbegeSKXsEeXv4Fw9pAQ1PmC8L6I9T3UsC/XkGoMHM498NGhQ FxRqxgdQFODLQ/81upkVsZx/cPJJi/WMcnG+dRajxR0jt8M9VdkFbun0aNVMyEwUQ5 XtHO0iVATJ50fn1gpeGdm9Z7iWnBGgBM5hv58to7WQYb3XmbmM+8rmfsCFxIh4aLfu N9c2Ol8XHEuDPz5itF2eetj1K0aBSEdfHdO3T/ovrf08suZa/vYreTr9DEievxGy1D i2Yzc/LALmn9Q== From: Christian Brauner Date: Tue, 15 Sep 2026 13:31:01 +0200 Subject: [PATCH RFC POC 15/50] sh: commit fds on syscall exit Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260915-work-fd-reserve-unify-folded-v1-15-4d5217d6b246@kernel.org> References: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> In-Reply-To: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> To: Linus Torvalds Cc: Alexander Viro , Jann Horn , Jan Kara , Ingo Molnar , Peter Zijlstra , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Oleg Nesterov , linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, Jens Axboe , io-uring@vger.kernel.org, netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, bpf@vger.kernel.org, David Airlie , virtualization@lists.linux.dev, kvm@vger.kernel.org, kexec@lists.infradead.org, linux-hyperv@vger.kernel.org, "Christian Brauner (Amutable)" X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=openpgp-sha256; l=3805; i=brauner@kernel.org; h=from:subject:message-id; bh=D2omDG7mr0KTxlJ4GQ7QAZA4OxsIde5l5dfPMzqmPuo=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWSt1KnNWsrlUHjqoaue3sF7yYL+Gfs/u112TbkevtDom Y/vkpZJHaUsDGJcDLJiiiwO7Sbhcst5KjYbZWrAzGFlAhnCwMUpABPZeo2R4c+KV9OZba12svrO 2S4zjzHAJMO9lPWUn8uRKZu3i0VMOM3I8DSgLigic8O6rYs7ON2+9ysf4gu88um/5/1vyUeDwxn 92QA= X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Add TIF_FD_SLOTS to the syscall work mask. syscall_exit rereads the flags after the system call and goes to syscall_exit_work for any bit in the all-work mask, but hands over a copy shifted right by eight when the bit was in the upper byte. Reload the flags there and test the full mask, so that the bit reaches do_syscall_trace_leave(). Signed-off-by: Christian Brauner (Amutable) --- arch/sh/include/asm/thread_info.h | 10 +++++++--- arch/sh/kernel/entry-common.S | 8 ++++++-- arch/sh/kernel/ptrace_32.c | 4 ++++ 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/arch/sh/include/asm/thread_info.h b/arch/sh/include/asm/thread= _info.h index 471db5173036..d976cf21f346 100644 --- a/arch/sh/include/asm/thread_info.h +++ b/arch/sh/include/asm/thread_info.h @@ -106,6 +106,7 @@ extern void init_thread_xstate(void); #define TIF_SECCOMP 6 /* secure computing */ #define TIF_NOTIFY_RESUME 7 /* callback before returning to user */ #define TIF_SYSCALL_TRACEPOINT 8 /* for ftrace syscall instrumentation */ +#define TIF_FD_SLOTS 9 /* syscall prepared descriptors */ #define TIF_POLLING_NRFLAG 17 /* true if poll_idle() is polling TIF_NEED_R= ESCHED */ #define TIF_MEMDIE 18 /* is terminating due to OOM killer */ =20 @@ -118,22 +119,25 @@ extern void init_thread_xstate(void); #define _TIF_SECCOMP (1 << TIF_SECCOMP) #define _TIF_NOTIFY_RESUME (1 << TIF_NOTIFY_RESUME) #define _TIF_SYSCALL_TRACEPOINT (1 << TIF_SYSCALL_TRACEPOINT) +#define _TIF_FD_SLOTS (1 << TIF_FD_SLOTS) #define _TIF_POLLING_NRFLAG (1 << TIF_POLLING_NRFLAG) =20 /* work to do in syscall trace */ #define _TIF_WORK_SYSCALL_MASK (_TIF_SYSCALL_TRACE | _TIF_SINGLESTEP | \ _TIF_SYSCALL_AUDIT | _TIF_SECCOMP | \ - _TIF_SYSCALL_TRACEPOINT) + _TIF_SYSCALL_TRACEPOINT | _TIF_FD_SLOTS) =20 /* work to do on any return to u-space */ #define _TIF_ALLWORK_MASK (_TIF_SYSCALL_TRACE | _TIF_SIGPENDING | \ _TIF_NEED_RESCHED | _TIF_SYSCALL_AUDIT | \ _TIF_SINGLESTEP | _TIF_NOTIFY_RESUME | \ - _TIF_SYSCALL_TRACEPOINT | _TIF_NOTIFY_SIGNAL) + _TIF_SYSCALL_TRACEPOINT | _TIF_NOTIFY_SIGNAL | \ + _TIF_FD_SLOTS) =20 /* work to do on interrupt/exception return */ #define _TIF_WORK_MASK (_TIF_ALLWORK_MASK & ~(_TIF_SYSCALL_TRACE | \ - _TIF_SYSCALL_AUDIT | _TIF_SINGLESTEP)) + _TIF_SYSCALL_AUDIT | _TIF_SINGLESTEP | \ + _TIF_FD_SLOTS)) =20 /* * Thread-synchronous status. diff --git a/arch/sh/kernel/entry-common.S b/arch/sh/kernel/entry-common.S index 91ab2607a1ff..593a482e85f5 100644 --- a/arch/sh/kernel/entry-common.S +++ b/arch/sh/kernel/entry-common.S @@ -164,9 +164,13 @@ work_resched: =20 .align 2 syscall_exit_work: - ! r0: current_thread_info->flags ! r8: current_thread_info - tst #(_TIF_WORK_SYSCALL_MASK & 0xff), r0 + mov.l @(TI_FLAGS,r8), r0 ! current_thread_info->flags + mov #(_TIF_WORK_SYSCALL_MASK & 0xff), r1 + mov #(_TIF_WORK_SYSCALL_MASK >> 8), r2 + shll8 r2 + or r2, r1 + tst r1, r0 bt/s work_pending tst #_TIF_NEED_RESCHED, r0 TRACE_IRQS_ON diff --git a/arch/sh/kernel/ptrace_32.c b/arch/sh/kernel/ptrace_32.c index 8794081483fb..3deadd71f464 100644 --- a/arch/sh/kernel/ptrace_32.c +++ b/arch/sh/kernel/ptrace_32.c @@ -8,6 +8,7 @@ * Audit support by Yuichi Nakamura */ #include +#include #include #include #include @@ -476,6 +477,9 @@ asmlinkage void do_syscall_trace_leave(struct pt_regs *= regs) { int step; =20 + if (test_thread_flag(TIF_FD_SLOTS)) + fd_slots_commit(regs); + audit_syscall_exit(regs); =20 if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT))) --=20 2.53.0 From nobody Fri Sep 25 07:56:54 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 143312F8E8A; Tue, 15 Sep 2026 11:33:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472005; cv=none; b=JBs3h54KlI8re5JpqtYAS9r3Ljb9QEZEFhHR65Df6TWw72KdFTlVYNbDwBm61/hF9/3Jkh1EJPJhKhBSZ/PXuLse4TSa63n7K5xCeji4dKsxfCH/CjVkP0IXQlEVxSVubplsdWjn+8RGnIJ2qm7C/Zyo6Y5UZI8jBA2SEgO8M0M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472005; c=relaxed/simple; bh=pmbItuaGjYhqGPqyFZ/vQ3bw6O4Agi1po5EvnXuKgAA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=S5RhTibGwKwxdHC4u/pS4sRzgWtM0NjjgppwoQ14gY/Cd9F+RJ3yYLqLuRiEYgXbemyCxSHQ07ABEHogsqcQolTJ5Ti/rCNsukQ/qNQdFbWae7b4C5j8vs7QFgFv4uMKHYNkYQKp5AJs7ypXPtwrg5Njo/e5xydl2kz8/qzqQAE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=b3o4Ofqw; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="b3o4Ofqw" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 75E0B1F00893; Tue, 15 Sep 2026 11:33:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789472003; bh=5pDTYibtotoJl0CfBpt6utVDR2mfl4I4vpQdvs8YOz4=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=b3o4OfqwaaazxAeRj/9Gk+rfkrUg7U0vI6JKs41UHHO10m4El4MPR0Sa+EE2Gn36Z JbZmIMb8qLAtadMRwVadqK0bIP8UDUY4u9lCU6f1ugKbhwheYaNkZU/jT+i4Dv1Jl9 iSky0rNqGXpj8pMhwujZIwbQHG7ClelfVDOe+So8VfCSthJENcXqjh0059JfLailqW emN+KAXu8UUFnpvYfDn0atcumjm+ShG8MC7FrqvcAxOpAeul4vea+zYnk6otK0pmNa VCFcB52eVERu7FbBBcw9uj72b8Lk1KHXA5mpSreLxYJMokQq6XzH3u5VGfdEMuIA0u VKtgipEWo0wug== From: Christian Brauner Date: Tue, 15 Sep 2026 13:31:02 +0200 Subject: [PATCH RFC POC 16/50] sparc: commit fds on syscall exit Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260915-work-fd-reserve-unify-folded-v1-16-4d5217d6b246@kernel.org> References: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> In-Reply-To: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> To: Linus Torvalds Cc: Alexander Viro , Jann Horn , Jan Kara , Ingo Molnar , Peter Zijlstra , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Oleg Nesterov , linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, Jens Axboe , io-uring@vger.kernel.org, netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, bpf@vger.kernel.org, David Airlie , virtualization@lists.linux.dev, kvm@vger.kernel.org, kexec@lists.infradead.org, linux-hyperv@vger.kernel.org, "Christian Brauner (Amutable)" X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=openpgp-sha256; l=6251; i=brauner@kernel.org; h=from:subject:message-id; bh=pmbItuaGjYhqGPqyFZ/vQ3bw6O4Agi1po5EvnXuKgAA=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWSt1KmNrfkT+/ZOoMD81otBR7+qPEnjKjXl+DDvernoB 8aVLipdHaUsDGJcDLJiiiwO7Sbhcst5KjYbZWrAzGFlAhnCwMUpABPRrmH4Z/WrKjlPiWfpjeMh +/UOr9OUYuVN+MrcGf8r+7t7cIlFMyPD/eNVJ7U/2tpNS1Kb+nTNq0L7h/NS/upwScjx8VlbzD3 GAwA= X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Add TIF_FD_SLOTS and test it together with the other syscall exit work on the way out of a system call. A task that reserved descriptors calls syscall_trace() on sparc32 and syscall_trace_leave() on sparc64. Signed-off-by: Christian Brauner (Amutable) --- arch/sparc/include/asm/thread_info_32.h | 2 ++ arch/sparc/include/asm/thread_info_64.h | 9 ++++++++- arch/sparc/kernel/entry.S | 2 +- arch/sparc/kernel/ptrace_32.c | 4 ++++ arch/sparc/kernel/ptrace_64.c | 4 ++++ arch/sparc/kernel/syscalls.S | 4 +++- 6 files changed, 22 insertions(+), 3 deletions(-) diff --git a/arch/sparc/include/asm/thread_info_32.h b/arch/sparc/include/a= sm/thread_info_32.h index fdaf7b171e0a..fbd7af6bb427 100644 --- a/arch/sparc/include/asm/thread_info_32.h +++ b/arch/sparc/include/asm/thread_info_32.h @@ -105,6 +105,7 @@ register struct thread_info *current_thread_info_reg as= m("g6"); #define TIF_NEED_RESCHED 3 /* rescheduling necessary */ #define TIF_RESTORE_SIGMASK 4 /* restore signal mask in do_signal() */ #define TIF_NOTIFY_SIGNAL 5 /* signal notifications exist */ +#define TIF_FD_SLOTS 6 /* syscall prepared descriptors */ #define TIF_USEDFPU 8 /* FPU was used by this task * this quantum (SMP) */ #define TIF_POLLING_NRFLAG 9 /* true if poll_idle() is polling @@ -117,6 +118,7 @@ register struct thread_info *current_thread_info_reg as= m("g6"); #define _TIF_SIGPENDING (1< +#include #include #include #include @@ -437,6 +438,9 @@ asmlinkage int syscall_trace(struct pt_regs *regs, int = syscall_exit_p) { int ret =3D 0; =20 + if (syscall_exit_p && test_thread_flag(TIF_FD_SLOTS)) + fd_slots_commit(regs); + if (test_thread_flag(TIF_SYSCALL_TRACE)) { if (syscall_exit_p) ptrace_report_syscall_exit(regs, 0); diff --git a/arch/sparc/kernel/ptrace_64.c b/arch/sparc/kernel/ptrace_64.c index 825ddf55fece..499b30c505fd 100644 --- a/arch/sparc/kernel/ptrace_64.c +++ b/arch/sparc/kernel/ptrace_64.c @@ -12,6 +12,7 @@ */ =20 #include +#include #include #include #include @@ -1110,6 +1111,9 @@ asmlinkage void syscall_trace_leave(struct pt_regs *r= egs) if (test_thread_flag(TIF_NOHZ)) user_exit(); =20 + if (test_thread_flag(TIF_FD_SLOTS)) + fd_slots_commit(regs); + audit_syscall_exit(regs); =20 if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT))) diff --git a/arch/sparc/kernel/syscalls.S b/arch/sparc/kernel/syscalls.S index 96fe8763d70c..086fb8eaf133 100644 --- a/arch/sparc/kernel/syscalls.S +++ b/arch/sparc/kernel/syscalls.S @@ -269,10 +269,12 @@ ret_sys_call: ldx [%sp + PTREGS_OFF + PT_V9_TSTATE], %g3 mov %ulo(TSTATE_XCARRY | TSTATE_ICARRY), %g2 sllx %g2, 32, %g2 + /* Reload the flags, the syscall may have set TIF_FD_SLOTS. */ + ldx [%g6 + TI_FLAGS], %l0 =20 cmp %o0, -ERESTART_RESTARTBLOCK bgeu,pn %xcc, 1f - andcc %l0, (_TIF_SYSCALL_TRACE|_TIF_SECCOMP|_TIF_SYSCALL_AUDIT|_TIF_SYSC= ALL_TRACEPOINT|_TIF_NOHZ), %g0 + andcc %l0, _TIF_SYSCALL_EXIT_WORK, %g0 ldx [%sp + PTREGS_OFF + PT_V9_TNPC], %l1 ! pc =3D npc =20 2: --=20 2.53.0 From nobody Fri Sep 25 07:56:54 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 90E934A3851; Tue, 15 Sep 2026 11:33:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472014; cv=none; b=ej8NPyImHKyRBLMCkQhhirVVNE9H4+64KuGN3/oCHYvA9ojR2FAkIl8AYb1JTdjeuurKkkQWwaAunzZTIWpJNKM2hl3x+MP80BUTOctrjCmfp0f82vaavmsks2rWAA3upYkPn/IrA3h5aDmN0N0kJ3sB+ieVnhG2PL62n0f9aUk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472014; c=relaxed/simple; bh=S9sXo+/yQO9aORTIGU5zP9aw99mbVPSatnA1JIW5H/M=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=a9/8MhcZOBXgS//8q3N0Lh0uHQSKN0dfp+oGR6Fg5ssdqx0FTkDS3KlGnSec7n1ATKfgbKYhwdGwnw2Vomg1lnJL8dDXR8ehbNbc4A8k9kcqAXG3MNslgc9JmxCGSMCNRm+hrVhIwCH18lwgaG4K050w1wLkhqwIi9fa2H3LAiM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=jUmSavNi; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="jUmSavNi" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1E8D71F00898; Tue, 15 Sep 2026 11:33:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789472011; bh=LsNpEFA01NMLmoDGH+WQ2k5w2caYKI3aFXCKnW6fq4M=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=jUmSavNiamqp7sEiSGUpt1XZfKBJkPkcG/PFCGuuE8ULC/JC+9Uv/jivWwgpx6a/O ndFuFYQRnEyeD6+NTxQCHA1WQfYk7Jmw39axkxPneZ0ZlWHflWnPtQntegHAjSQOHr qvPuy2KIMTAU8QpGMIZajMcBNJZLx1KDydcGwu/7Fq4Sm2suht1GMp/5OShBghjByJ Wo0vc/D/MORpmKTNOKDNlY4+TTriFUPTu4Y02yC+j0UyASaEIruvlKlSwBV+MXdIZL vi9GUupn2o56nWtYus7diY/kBIvVMBlvyHSKLH2hV7NTFX1VBgWRv0lAAGJXCHoiGT eaCHwlU6HAvXg== From: Christian Brauner Date: Tue, 15 Sep 2026 13:31:03 +0200 Subject: [PATCH RFC POC 17/50] um: commit fds on syscall exit Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260915-work-fd-reserve-unify-folded-v1-17-4d5217d6b246@kernel.org> References: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> In-Reply-To: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> To: Linus Torvalds Cc: Alexander Viro , Jann Horn , Jan Kara , Ingo Molnar , Peter Zijlstra , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Oleg Nesterov , linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, Jens Axboe , io-uring@vger.kernel.org, netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, bpf@vger.kernel.org, David Airlie , virtualization@lists.linux.dev, kvm@vger.kernel.org, kexec@lists.infradead.org, linux-hyperv@vger.kernel.org, "Christian Brauner (Amutable)" X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=openpgp-sha256; l=1865; i=brauner@kernel.org; h=from:subject:message-id; bh=S9sXo+/yQO9aORTIGU5zP9aw99mbVPSatnA1JIW5H/M=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWSt1KldP/NzGWPyQ7vZ1w8Z91Y4Xry4dOW/w5ekHD1Nn i1f3lHo1FHKwiDGxSArpsji0G4SLrecp2KzUaYGzBxWJpAhDFycAjCRnzMY/tdevWsc17Pol1js drW1Ndl3Uj4rJ6jNqM1Qvbkzdcr/kFkM//PT/U4ukVght9Iz6NLyeqmVG29b1dz/x+3x4GR56M6 Uan4A X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Add TIF_FD_SLOTS. handle_syscall() calls syscall_trace_leave() after every system call, so test the flag there and commit the reservations before audit and the ptrace exit stop. Signed-off-by: Christian Brauner (Amutable) --- arch/um/include/asm/thread_info.h | 2 ++ arch/um/kernel/ptrace.c | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/arch/um/include/asm/thread_info.h b/arch/um/include/asm/thread= _info.h index 7a6f4dc99fa1..7140516ee0b6 100644 --- a/arch/um/include/asm/thread_info.h +++ b/arch/um/include/asm/thread_info.h @@ -44,6 +44,7 @@ struct thread_info { #define TIF_SECCOMP 9 /* secure computing */ #define TIF_SINGLESTEP 10 /* single stepping userspace */ #define TIF_SYSCALL_TRACEPOINT 11 /* syscall tracepoint instrumentation */ +#define TIF_FD_SLOTS 12 /* syscall prepared descriptors */ =20 =20 #define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE) @@ -55,6 +56,7 @@ struct thread_info { #define _TIF_NOTIFY_RESUME (1 << TIF_NOTIFY_RESUME) #define _TIF_SECCOMP (1 << TIF_SECCOMP) #define _TIF_SINGLESTEP (1 << TIF_SINGLESTEP) +#define _TIF_FD_SLOTS (1 << TIF_FD_SLOTS) =20 #define _TIF_WORK_MASK (_TIF_NEED_RESCHED | _TIF_SIGPENDING | _TIF_NOTIFY= _SIGNAL | \ _TIF_NOTIFY_RESUME) diff --git a/arch/um/kernel/ptrace.c b/arch/um/kernel/ptrace.c index 7da0a5223aa6..f1f89181fb7e 100644 --- a/arch/um/kernel/ptrace.c +++ b/arch/um/kernel/ptrace.c @@ -4,6 +4,7 @@ */ =20 #include +#include #include #include #include @@ -142,6 +143,9 @@ void syscall_trace_leave(struct pt_regs *regs) { int ptraced =3D current->ptrace; =20 + if (test_thread_flag(TIF_FD_SLOTS)) + fd_slots_commit(regs); + audit_syscall_exit(regs); =20 /* Fake a debug trap */ --=20 2.53.0 From nobody Fri Sep 25 07:56:54 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 D89664A3872; Tue, 15 Sep 2026 11:33:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472024; cv=none; b=iUJj9vYha3hUnwNAtUeMYsv6M5sOo4Dk5j3XvOx6utao/rXg52rDrmfsbRfYxR25/ovaKrlVMdujRSQTIEisEmro8jTZncym9axBiND0OiscBUaxRufLRToKGqGpEMGZ1RFll82ubpNofKyfn7lNt2AZ0Pag6Gn//2G+etHxWTo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472024; c=relaxed/simple; bh=Ob3PjpQ/cxpLv/3i+RPAC4oxtU+7SyXGKknKtjIi6uA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=KcxEGl+Hg7pK3/wHrjD/Q5sJtYT6KOf6Hi+c68CyNt1jKIX1Gr5Nir+miASiV89u4IrEsQy8dYl3Fgl88AJxlNyD4nfZ6Gq2tts9q7ylRVNaVnrvKSXlwliq5kLaMKx04qeuEMCSzUz7lJXoqsjzUqagyIshxd459B6m9R4eItI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=m6JS+1os; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="m6JS+1os" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9A06C1F000FF; Tue, 15 Sep 2026 11:33:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789472018; bh=Opabrir2qKnajEOx/bmqQ0vFOOuJF5mcXpUx8QfYgRo=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=m6JS+1osV+HHQ3+stbRMi1nG57ukYiJTEcH35bNEsuFkz3EDpaPqRCxptR5myI3CQ DrVL3ticaSsEmHs4hzrQOkVHuI+pRvmExpm7hSTVT1Fy4ahKbV0yxhDmvASrd6aMLO kfyvZnG8hPY/OSMfxVk2m1KEfL0A4tlDKieBNoYaPaJt6kinrooutLXDgSWdlzJaI4 Qyu0CqnjMLHGESZU0vH6Xh9zHueNHEtLJB7dyoK2455umDXJ25s2IeNCaoYNiPSyj5 BtthgxR3vTZnXL/kG06SW2wMzb3uuLV+YqWCArv2R8bMdgvjWU+Ck1onWTajB/my7G f4cwtNsAzJb3g== From: Christian Brauner Date: Tue, 15 Sep 2026 13:31:04 +0200 Subject: [PATCH RFC POC 18/50] xtensa: commit fds on syscall exit Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260915-work-fd-reserve-unify-folded-v1-18-4d5217d6b246@kernel.org> References: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> In-Reply-To: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> To: Linus Torvalds Cc: Alexander Viro , Jann Horn , Jan Kara , Ingo Molnar , Peter Zijlstra , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Oleg Nesterov , linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, Jens Axboe , io-uring@vger.kernel.org, netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, bpf@vger.kernel.org, David Airlie , virtualization@lists.linux.dev, kvm@vger.kernel.org, kexec@lists.infradead.org, linux-hyperv@vger.kernel.org, "Christian Brauner (Amutable)" X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=openpgp-sha256; l=2590; i=brauner@kernel.org; h=from:subject:message-id; bh=Ob3PjpQ/cxpLv/3i+RPAC4oxtU+7SyXGKknKtjIi6uA=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWSt1Km1PCQWPOf+dN42p7eiixMDrC8oHl3XfDxb8HXeu Q8v17M86ShlYRDjYpAVU2RxaDcJl1vOU7HZKFMDZg4rE8gQBi5OAZiIlRQjwxxl+ehP3JqHnz5Z rnHMf3GFlcCby16MDPn/pqho/776ZA8jwwxuu0Z35YDFs7a2ZE2t16lXXVd42bXR6lPXzm5Ltrk 6jAA= X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Add TIF_FD_SLOTS and test it once the system call has stored its return value. A task that reserved descriptors uses the traced path. Signed-off-by: Christian Brauner (Amutable) --- arch/xtensa/include/asm/thread_info.h | 2 ++ arch/xtensa/kernel/entry.S | 5 +++++ arch/xtensa/kernel/ptrace.c | 4 ++++ 3 files changed, 11 insertions(+) diff --git a/arch/xtensa/include/asm/thread_info.h b/arch/xtensa/include/as= m/thread_info.h index 5b74dfc35ef9..0c8eb5dc8398 100644 --- a/arch/xtensa/include/asm/thread_info.h +++ b/arch/xtensa/include/asm/thread_info.h @@ -124,6 +124,7 @@ static __always_inline struct thread_info *current_thre= ad_info(void) #define TIF_SYSCALL_AUDIT 9 /* syscall auditing active */ #define TIF_SECCOMP 10 /* secure computing */ #define TIF_MEMDIE 11 /* is terminating due to OOM killer */ +#define TIF_FD_SLOTS 12 /* syscall prepared descriptors */ =20 #define _TIF_SYSCALL_TRACE (1<areg[2] =3D return_value */ =20 s32i abi_rv, abi_saved0, PT_AREG2 + + /* descriptors reserved by the syscall are committed in do_syscall_trace_= leave */ + GET_THREAD_INFO(a4, a1) + l32i a4, a4, TI_FLAGS + bbsi.l a4, TIF_FD_SLOTS, 1f bnez abi_saved1, 1f .Lsyscall_exit: #if defined(__XTENSA_WINDOWED_ABI__) diff --git a/arch/xtensa/kernel/ptrace.c b/arch/xtensa/kernel/ptrace.c index 364e4fdabb00..d44d62a56b85 100644 --- a/arch/xtensa/kernel/ptrace.c +++ b/arch/xtensa/kernel/ptrace.c @@ -13,6 +13,7 @@ */ =20 #include +#include #include #include #include @@ -571,6 +572,9 @@ void do_syscall_trace_leave(struct pt_regs *regs) { int step; =20 + if (test_thread_flag(TIF_FD_SLOTS)) + fd_slots_commit(regs); + audit_syscall_exit(regs); =20 if (test_thread_flag(TIF_SYSCALL_TRACEPOINT)) --=20 2.53.0 From nobody Fri Sep 25 07:56:54 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 AAAC34A3D3D; Tue, 15 Sep 2026 11:33:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472029; cv=none; b=XP6DX+NJM2AOGCkVjJYWjiY9zOW6/WRGh7a00sqas7IFygPhSzkFb2SvKcsCXuOq0o3c62HFYudF+hlk1SVJPWLPD0D8y2IKeI2IMN/FIOijb1mSDq3lddB7buQR1YySeRv2zfDcbKs6TlRtwcXF2yBKqBA8kK/JywGyazjxF5E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472029; c=relaxed/simple; bh=kO5/kQT0XZnIdRnIvngddyYIzT4ZNU9mDakuELDqlrQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=DacD9Ng4heGkj6B2nG/hr5PPizMXXURm+FSt9C9Fg7Bw/nJp2Vpe+7eRoh1Vgjem2lkTJOWYQjoyGX+rxE8hgGrKZXZKnH+6QRGwfT1WcA0L7cB/DNWvEMP9aFBQ3kU5vXo1XviFtueLZAiyKL9H09GBW1cU03vDeAEYLSBn0as= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Nmpj4NaF; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Nmpj4NaF" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 32EB01F00898; Tue, 15 Sep 2026 11:33:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789472026; bh=fPUeEhZalZFbuqvBU8/iDG2tqjgIH/ueKLGrOGx0E/Q=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=Nmpj4NaFXMtUCUBJkK324vi22fpzvX6uomFULBZJOjhgDQCroZWI/8lb8hRAJVCHh 9EhYq/igSRVSJd0Z69cCAreFakLrT8v7g5ED2rGJFufV7eihjNzGDapElAJqkyWjpl lBXB4AtsKeIiuD1UD4coI3pcXNoLmTr78UlIqOkuglt9Hw0oChJkwnEGg4w0f6UJ0f E3lrRN0G+U0+0MXEDUccPLURv/tGCWrEtzl5wBa6tk79GG6qHRxEjmf3jJK1LMmPo3 /VFHB2tZrT068p2qgHGbLHusKwE8Tye3wqbBTFb6QOLjp++ERuzcM9sRPxtZnWLn1E KgqcMBfnsrMfA== From: Christian Brauner Date: Tue, 15 Sep 2026 13:31:05 +0200 Subject: [PATCH RFC POC 19/50] file: require the syscall exit hook from every architecture Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260915-work-fd-reserve-unify-folded-v1-19-4d5217d6b246@kernel.org> References: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> In-Reply-To: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> To: Linus Torvalds Cc: Alexander Viro , Jann Horn , Jan Kara , Ingo Molnar , Peter Zijlstra , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Oleg Nesterov , linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, Jens Axboe , io-uring@vger.kernel.org, netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, bpf@vger.kernel.org, David Airlie , virtualization@lists.linux.dev, kvm@vger.kernel.org, kexec@lists.infradead.org, linux-hyperv@vger.kernel.org, "Christian Brauner (Amutable)" X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=openpgp-sha256; l=1044; i=brauner@kernel.org; h=from:subject:message-id; bh=kO5/kQT0XZnIdRnIvngddyYIzT4ZNU9mDakuELDqlrQ=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWSt1Kmt7K/PWBxqv33Jx9xZ93feiJvYXvn0wyGRJfor4 xvDgz5O7ChlYRDjYpAVU2RxaDcJl1vOU7HZKFMDZg4rE8gQBi5OAZjImo8M/0t6Hp5cOHfxxr5q 5ZTEWby+CmuzN2gtu/o25VNw3Kl5VQ8Z/ns2bzkbtn3/k1lfb3I0OE2bn/HePMr9P8+ZRZUPSuV nr+YCAA== X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Every architecture now either uses the generic entry code or provides TIF_FD_SLOTS. The fallback that deferred without ever committing can go. Make it a build error instead. A new architecture can't grow fd_prepare() callers without the syscall exit hook. Signed-off-by: Christian Brauner (Amutable) --- fs/file.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/fs/file.c b/fs/file.c index 6fa481d63dcf..2b041b45f225 100644 --- a/fs/file.c +++ b/fs/file.c @@ -652,9 +652,7 @@ static void fd_release(unsigned int fd) #define fd_slots_set_work() set_thread_flag(TIF_FD_SLOTS) #define fd_slots_clear_work() clear_thread_flag(TIF_FD_SLOTS) #else -/* Nothing commits until the architecture provides the flag. */ -#define fd_slots_set_work() do { } while (0) -#define fd_slots_clear_work() do { } while (0) +#error "the syscall exit path must commit prepared file descriptors" #endif =20 static struct fd_slot *fd_slot(struct fd_slots *slots, unsigned int idx) --=20 2.53.0 From nobody Fri Sep 25 07:56:54 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 0E1FA4A3F27; Tue, 15 Sep 2026 11:33:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472038; cv=none; b=Qhtnx6/bgiWXVH/bgqsohVTscBDSnE07nrLKMGlLxSAZB2Uy4sDt4WFs/ogA6xinqxw0s5tlxc/E1trfJeJ5v+hWbOMMHMfaOsf45w0CEPU0vJ3oQH1iYZs7M8yKzRaf4I/gp3kzkvx9V15yUwVoClpCPH6thfy5BUJphBp8K+0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472038; c=relaxed/simple; bh=G9FG2jHFipdUrRTGsnorEbb5m5RZUr4ZNfIJ8EYrZNY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=pKzAvRdegU/AQR+LwwuRPcMxPs8ohHMqR2JcGW4ekmzFMfViRg7PaZq0DsfaCPGbUlj+MqfcxYUWYFVoRl24VcFZOT/TT5/0B5h84rxPPer4pUxT8qXr9212qRziCydHjsKQagVD2zIcIV9jjsfCmphtUQkQtqo5Q5wTO4oD5vA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=KlpWXuFj; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="KlpWXuFj" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E01081F000FF; Tue, 15 Sep 2026 11:33:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789472034; bh=mbTaUTx0F+8Yd8wvmtUsGd49oHWKxWwv7CwFTyLjhec=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=KlpWXuFj0+jdehVdQRW9dTm9BsasJoCQHq4y714jucc2LKezn+Raj3o0ioX232wqM jhHvMuhWUpiDNoQEY8ZOItiHHjXIh3EJ4lYCmA5rI9RGISwFKPW38moaoO3+dsZ0aK HShijMbdV4vAKfbEdZN7JwWHJCH9KbWrPxcDpTVAS0WUv3FhYQrUmcvC9ARRSnSa7u Ca768uVHlWEAIo6sTG8e8Q1xpvU8CLuiq6NSrBvgzzER0wYqMt62L865asuebsmyIW I7PEM9/+fxn9Mvp/KBLnfVW338UGGCg59dyrovq5duqMA/k5+J43h20hfjg0v7DEBj Nim9gww77JPsw== From: Christian Brauner Date: Tue, 15 Sep 2026 13:31:06 +0200 Subject: [PATCH RFC POC 20/50] file: warn when the descriptor table is unshared with slots Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260915-work-fd-reserve-unify-folded-v1-20-4d5217d6b246@kernel.org> References: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> In-Reply-To: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> To: Linus Torvalds Cc: Alexander Viro , Jann Horn , Jan Kara , Ingo Molnar , Peter Zijlstra , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Oleg Nesterov , linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, Jens Axboe , io-uring@vger.kernel.org, netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, bpf@vger.kernel.org, David Airlie , virtualization@lists.linux.dev, kvm@vger.kernel.org, kexec@lists.infradead.org, linux-hyperv@vger.kernel.org, "Christian Brauner (Amutable)" X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=openpgp-sha256; l=1273; i=brauner@kernel.org; h=from:subject:message-id; bh=G9FG2jHFipdUrRTGsnorEbb5m5RZUr4ZNfIJ8EYrZNY=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWSt1Klt0PSve+Zwt2WPgtbjy2r2c+q+Ga6c6JRtXJz8V 7d7s9uBjlIWBjEuBlkxRRaHdpNwueU8FZuNMjVg5rAygQxh4OIUgIkk9TEybK8Ujbgr9+l9SPar Xzk+r7k8K/PX8z83lr3l0RmsOXPvPIb/xe7Pwk1X1l5rbbs/0/NrxfS1XTYnq53m69hY7lW8vLu CBQA= X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 If the fdtable is unshared or the task exits we can't install reservations. The reserved fd isn't reserved anymore. execve() would leak the reservation into the child. Signed-off-by: Christian Brauner (Amutable) --- fs/exec.c | 3 +++ kernel/fork.c | 2 ++ 2 files changed, 5 insertions(+) diff --git a/fs/exec.c b/fs/exec.c index 745f6eb5279e..1aa0f7b99fc3 100644 --- a/fs/exec.c +++ b/fs/exec.c @@ -1159,6 +1159,9 @@ int begin_new_exec(struct linux_binprm * bprm) */ io_uring_task_cancel(); =20 + /* A prepared descriptor would be installed into the new program. */ + VFS_WARN_ON_ONCE(me->fd_slots.nr); + /* Ensure the files table is not shared. */ retval =3D unshare_files(); if (retval) diff --git a/kernel/fork.c b/kernel/fork.c index 59c5cfa3e482..bd0e1e85abb0 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -3217,6 +3217,8 @@ static int unshare_fd(unsigned long unshare_flags, st= ruct files_struct **new_fdp =20 if ((unshare_flags & CLONE_FILES) && (fd && atomic_read(&fd->count) > 1)) { + /* Prepared descriptors live in the table we are about to leave. */ + VFS_WARN_ON_ONCE(current->fd_slots.nr); fd =3D dup_fd(fd, NULL); if (IS_ERR(fd)) return PTR_ERR(fd); --=20 2.53.0 From nobody Fri Sep 25 07:56:54 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 DEA734B66FC; Tue, 15 Sep 2026 11:34:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472044; cv=none; b=FqdeUwm4y5MVQEjR9ns9QwuBUnu+eoiPnwtjUOlREp5gK4MMLxZ9beB3r/Fiq9pldvMp7O+Z5FUXPZk4FyDOA3ATDF5J6dQtVkDJzkdgfeWGiYdItl+jmyRf+SRPAm2peps6xHIS/qjfqVp986Xilf94ggwSZWidQRMPgsOnGYE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472044; c=relaxed/simple; bh=NBYSDOnHnxDSrh96OHkyXsU+HJM0P1Ng/z5/cryhZ/8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Xt5yiaTmhJnJSwPU/b629m7k0q6zINI+SG42ckcjtGr9VI8yIoQUXU8p5haXU3uT54E/zMdMasiFYIHlIY+DrOWMU94FxHHcGpqIEy9HyzZOSUowwHzqR7ouuNds/o57teeyfheg+lNITgVBjLsYXRHfm3VIH8fjlxiCYYX5sQU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=HDJzJEmZ; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="HDJzJEmZ" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 81EE21F00893; Tue, 15 Sep 2026 11:33:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789472041; bh=BlmLF2ZRuO4m6DET1Els3sWhQ4ZO5mVaz+8mBj4sJho=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=HDJzJEmZuDBgwF9IoA1Gz5NMYoTn4k/FP/na2RbYBjlg+3haxijrVwaRwE0Fk3p/9 dduNx9tHaAq4bWftWkcBXXJDENOHlSBITqm85+0ggCH0eKZJQhv+2GyhMpTAh1HcUR IL/u5wuIBV0Fmym48qvS4CzG79Z/i2ze2wETt3aTQHxG8Pc4zYvnCFHSol5RylYeL5 DeDCULcNPO4YRlsI5/YH4QJacsVnzDFRpn5P7cN7AYDgGAvw47wCQNw4EF+oXq9GE2 w8PkFwpysAj7eqpZOt80WGtmVyxOR6Gc7F8TSGsm/1z0bKOSwas/7HiHKc9gSYqyRW lGTIAw/PIljeg== From: Christian Brauner Date: Tue, 15 Sep 2026 13:31:07 +0200 Subject: [PATCH RFC POC 21/50] io_uring: commit fds per request Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260915-work-fd-reserve-unify-folded-v1-21-4d5217d6b246@kernel.org> References: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> In-Reply-To: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> To: Linus Torvalds Cc: Alexander Viro , Jann Horn , Jan Kara , Ingo Molnar , Peter Zijlstra , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Oleg Nesterov , linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, Jens Axboe , io-uring@vger.kernel.org, netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, bpf@vger.kernel.org, David Airlie , virtualization@lists.linux.dev, kvm@vger.kernel.org, kexec@lists.infradead.org, linux-hyperv@vger.kernel.org, "Christian Brauner (Amutable)" X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=openpgp-sha256; l=3015; i=brauner@kernel.org; h=from:subject:message-id; bh=NBYSDOnHnxDSrh96OHkyXsU+HJM0P1Ng/z5/cryhZ/8=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWSt1KltzMxmiIv1c7m3TjNg8QPLz5dX3E/8KWd5+/mTi Ij+kFazjlIWBjEuBlkxRRaHdpNwueU8FZuNMjVg5rAygQxh4OIUgIn8LmZkWGmezx6orRi24Mvy //nTSwst3kwr9/rdzhrL4arHrG0lxvDPsq5m2fGL6znYz2+zqF2Vtq5LpSio+++Ecq9zHIpvP/E xAgA= X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 io_uring requests don't complete on syscall exit of the task that submitted them. They complete: - inline from io_uring_enter() - from task_work on any return to userspace - from io-wq workers and from the SQPOLL thread The CQEs are visible to other threads before any syscall returns. So commit the reserved descriptors before the completion is posted. Commit them after ->issue() based on the request's result and before every CQE they post. Nothing reachable from io_uring reserves yet. Once SCM_RIGHTS is converted this keeps IORING_OP_RECVMSG working from io-wq workers and the SQPOLL thread. Signed-off-by: Christian Brauner (Amutable) --- io_uring/io_uring.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/io_uring/io_uring.c b/io_uring/io_uring.c index 61053421d809..001c3683bf00 100644 --- a/io_uring/io_uring.c +++ b/io_uring/io_uring.c @@ -870,6 +870,10 @@ bool io_req_post_cqe(struct io_kiocb *req, s32 res, u3= 2 cflags) lockdep_assert(!io_wq_current_is_worker()); lockdep_assert_held(&ctx->uring_lock); =20 + /* Descriptors this CQE reports must be installed before it is visible. */ + if (unlikely(current->fd_slots.nr)) + __fd_slots_commit(res); + if (!(ctx->int_flags & IO_RING_F_LOCKLESS_CQ)) { spin_lock(&ctx->completion_lock); posted =3D io_fill_cqe_aux(ctx, req->cqe.user_data, res, cflags); @@ -895,6 +899,8 @@ bool io_req_post_cqe32(struct io_kiocb *req, struct io_= uring_cqe cqe[2]) lockdep_assert_held(&ctx->uring_lock); =20 cqe[0].user_data =3D req->cqe.user_data; + if (unlikely(current->fd_slots.nr)) + __fd_slots_commit(cqe[0].res); if (!(ctx->int_flags & IO_RING_F_LOCKLESS_CQ)) { spin_lock(&ctx->completion_lock); posted =3D io_fill_cqe_aux32(ctx, cqe); @@ -1365,6 +1371,24 @@ static bool io_assign_file(struct io_kiocb *req, con= st struct io_issue_def *def, =20 #define REQ_ISSUE_SLOW_FLAGS (REQ_F_CREDS | REQ_F_ARM_LTIMEOUT) =20 +/* + * Requests complete from io_uring_enter(), task_work, io-wq workers and t= he + * SQPOLL thread, and their CQEs are visible before any syscall returns. So + * the descriptors a request reserved are committed per request, before its + * completion is posted. + */ +static void io_req_fd_reservations(struct io_kiocb *req, int ret) +{ + long res =3D ret; + + /* A request holding reservations must not go async or be reissued. */ + WARN_ON_ONCE(ret =3D=3D IOU_ISSUE_SKIP_COMPLETE || ret =3D=3D IOU_RETRY || + ret =3D=3D IOU_REQUEUE); + if (ret =3D=3D IOU_COMPLETE) + res =3D req->cqe.res; + __fd_slots_commit(res); +} + static inline int __io_issue_sqe(struct io_kiocb *req, unsigned int issue_flags, const struct io_issue_def *def) @@ -1385,6 +1409,9 @@ static inline int __io_issue_sqe(struct io_kiocb *req, =20 ret =3D def->issue(req, issue_flags); =20 + if (unlikely(current->fd_slots.nr)) + io_req_fd_reservations(req, ret); + if (!def->audit_skip) audit_uring_exit(!ret, ret); =20 --=20 2.53.0 From nobody Fri Sep 25 07:56:54 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 B7B10439F9E; Tue, 15 Sep 2026 11:34:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472052; cv=none; b=Hm5DMjVTkm6glDamsF1RPh342B6oAfJfKrZopEFmq1c3Fz2jJF9P0yNi79rLW1yGn7AkliTo6s+4tKolOMACg2SGY/LEE5f6M47WkejXRIPbU0xA1Lu6UqNAmsjRQUfKdBxHTt11tSntVbmR+u97KNZDoolLItU8qacVL86hzNw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472052; c=relaxed/simple; bh=583XJCrzovkxIXuJOAwpVg9Fhe+TBNMNFPvPLgzJFv0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=hlGTYp7Dn7UX52FzBA6ee4Q1+YXMb+GSD2P/fboRT6QjKTh4cvSjwtYKJlXE2y1WngwykLCyXUcPwwrk5YNjFLVkznsP7iuB9zl/5DtqzwygoBXGRxqFa6KfOKgYmH8ReSJDv74xj9b08UN651HZBnQwfXDuvzfmZ0I/KRok6Fo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=nQ8C1Ifl; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="nQ8C1Ifl" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0CF091F000FF; Tue, 15 Sep 2026 11:34:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789472049; bh=uhGO6+GlrO5bC4tNOgPf4pdo2kq7bPXcK+eEsTvolok=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=nQ8C1Ifl5v/VEdveq9mGf3Z+FkWlXntXzUEHkSwQjH9wNm/+moILJ5obBzqitNP3N IBlzTUeAC+qYwcosyjv/uN3SpN6wKH5b+F1BnYLAvwrpAYFxh7xAzh1A6p2Gwl1LgI rWQJAgcOdwQd5Ylu5a8xK1NTioy4jbHj4ziLLIywDBw+W3mJ8po4oGdT92T3R2egH/ xuquAaax+7jMrr2xNPG/Odz/y7erbajpwwU+weBYntanMeYoJSnYyxmfhWaIp51P4L YpHw70QLsguWOhvBKn1wooIGtRPB4vcJYrpctMzIq0N/zqf/HB3mTynt9TyjQ+rxp/ NpyMNYd5pEyIA== From: Christian Brauner Date: Tue, 15 Sep 2026 13:31:08 +0200 Subject: [PATCH RFC POC 22/50] net: install SCM_RIGHTS descriptors when recvmsg() returns Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260915-work-fd-reserve-unify-folded-v1-22-4d5217d6b246@kernel.org> References: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> In-Reply-To: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> To: Linus Torvalds Cc: Alexander Viro , Jann Horn , Jan Kara , Ingo Molnar , Peter Zijlstra , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Oleg Nesterov , linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, Jens Axboe , io-uring@vger.kernel.org, netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, bpf@vger.kernel.org, David Airlie , virtualization@lists.linux.dev, kvm@vger.kernel.org, kexec@lists.infradead.org, linux-hyperv@vger.kernel.org, "Christian Brauner (Amutable)" X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=openpgp-sha256; l=2042; i=brauner@kernel.org; h=from:subject:message-id; bh=583XJCrzovkxIXuJOAwpVg9Fhe+TBNMNFPvPLgzJFv0=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWSt1Kl1Nz+WcexRzpkZ6+trd0+fFefIwcf4SebIg9qKf 4ll/ixHO0pZGMS4GGTFFFkc2k3C5ZbzVGw2ytSAmcPKBDKEgYtTACbiMIGRYcr6Twc1Fn/48OzN Xc98Cd5J3cfYczNUrC7dCpOb1qzKdIzhf0T4fyfZE4nxKZbFy5ds7U6RenQkNmYPozvL9NMLPpv FswIA X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 scm_recv_one_fd() allocates a descriptor, writes the number into the control message and installs the file right there, one descriptor at a time. Everything that recvmsg() does after scm_detach_fds() can still fail though. When it does the syscall returns -EFAULT while the received descriptors are already in the table and the caller has no way to tell. Reserve the descriptor with fd_prepare() and stage the file with fd_stage(). The number is written to userspace as before, but the file is only installed when recvmsg() returns success and dropped together with the descriptor when it returns an error. A control message that doesn't fit still gets only the descriptors it can report and MSG_CTRUNC. IORING_OP_RECVMSG reaches the same code from io-wq workers and the SQPOLL thread. io_uring requests commit their reservations before the completion is posted. Signed-off-by: Christian Brauner (Amutable) --- net/core/scm.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/net/core/scm.c b/net/core/scm.c index f0d44ecdb11f..f05931eef54d 100644 --- a/net/core/scm.c +++ b/net/core/scm.c @@ -355,6 +355,7 @@ int scm_recv_one_fd(struct file *f, int __user *ufd, un= signed int flags, bool notrunc) { int error; + const struct fd_slot *fd; =20 if (!ufd) return -EFAULT; @@ -363,16 +364,16 @@ int scm_recv_one_fd(struct file *f, int __user *ufd, = unsigned int flags, if (error) return notrunc ? put_user(error, ufd) : error; =20 - FD_PREPARE(fdf, flags, get_file(f)); - if (fdf.err) - return fdf.err; + fd =3D fd_prepare(flags); + if (IS_ERR(fd)) + return PTR_ERR(fd); =20 - error =3D put_user(fd_prepare_fd(fdf), ufd); + error =3D put_user(fd_prepare_fd(fd), ufd); if (error) return error; =20 - __receive_sock(fd_prepare_file(fdf)); - return fd_publish(fdf); + __receive_sock(f); + return fd_stage(fd, get_file(f)); } =20 void scm_detach_fds(struct msghdr *msg, struct scm_cookie *scm, bool notru= nc) --=20 2.53.0 From nobody Fri Sep 25 07:56:54 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 468E74A4850; Tue, 15 Sep 2026 11:34:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472058; cv=none; b=lR1eyR5KElOQCRxP3WS7Yt1VXZIgrDdEUhT1Nj7OPwOuL/CjsfiFgJk1A2zul04MeuBxXStODUw6m/WREeiwNdPpfTBPU6zm4X6ham+vKbNPpomPHnBoz8Ychf4UWveosj96+Qy3TIssE4iAfld4Gwku0fUpzJ3/8Q85LDxVHlo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472058; c=relaxed/simple; bh=9JAnV65R8KRKKJ6YuAvXjbfOJ9otGL1j9hOaIwPGraE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=UQ5B/hJkKwc2JJCe8296ThymMTcRnheX0+dd/us6NF81q6S3IgF20LmlT/hVK9el59i7LrwnfdivfvYV1IjeJ/3ufPXs5v5lwJxuEGCDUC8uaMrrEJ73IslUe7/oS/FxrsNSGbBjDGE5YCMD1LRH/MkI2HxA0jYKQww2rdxi2/8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=lOHGXy8c; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="lOHGXy8c" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8F2821F0089A; Tue, 15 Sep 2026 11:34:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789472056; bh=bA4ynAEQWzLS8TLe1OyiMNmBCpxqZtxYswH6/3xEJn0=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=lOHGXy8cA8jMMGugeuqOHZsHNH9R6NCpiW1SGzSqk2TyhtRX4C5vLan9jF9Lg4sJM A2A2QCI68wPGNuvnvsrzBxBe+YzlBhd/5q0D0YjdRbOCeZ4h8kXDe3U7+UuYQS9gSN nEwgErx77J2ER2m1k0BupFTZUzEnThzBPGlrZZvpU1Un3NXwFxcQXOSeuFbFE3Jgku eXAGNFsAkifaZ03d/z3uqPrGplip5My3/DUaiek0wZjCAPE/m4YXJ55H3MQW+eeCW6 5funLtKEK3ijtyLwLxFdU4Hr4SHgxA1Jfy6H6zqgczgxiU00tDcHkC1P9UYL1yAfe1 +SqeWUaLUrpuA== From: Christian Brauner Date: Tue, 15 Sep 2026 13:31:09 +0200 Subject: [PATCH RFC POC 23/50] file: open-code receive_fd()'s immediate install Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260915-work-fd-reserve-unify-folded-v1-23-4d5217d6b246@kernel.org> References: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> In-Reply-To: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> To: Linus Torvalds Cc: Alexander Viro , Jann Horn , Jan Kara , Ingo Molnar , Peter Zijlstra , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Oleg Nesterov , linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, Jens Axboe , io-uring@vger.kernel.org, netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, bpf@vger.kernel.org, David Airlie , virtualization@lists.linux.dev, kvm@vger.kernel.org, kexec@lists.infradead.org, linux-hyperv@vger.kernel.org, "Christian Brauner (Amutable)" X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=openpgp-sha256; l=1378; i=brauner@kernel.org; h=from:subject:message-id; bh=9JAnV65R8KRKKJ6YuAvXjbfOJ9otGL1j9hOaIwPGraE=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWSt1KllfvjTfp2zVVTgt9NTTlxN9shpKt3NzyD6qO520 LPPTxYs7yhlYRDjYpAVU2RxaDcJl1vOU7HZKFMDZg4rE8gQBi5OAZjI1CCG/yUL4597uxz9uSVv B5MCM+uUS19mlk6c3GQWOy8v+s8XQzOGv5ILE+KOSk0/EKpzUmdZprjQ2jqtG2qZb/98t1fIsHn zhgcA X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 receive_fd() cannot defer to syscall exit as SECCOMP_IOCTL_NOTIF_ADDFD installs into the target task and hands the number to the supervisor and IORING_OP_FIXED_FD_INSTALL runs from an io_uring op. Open-code the get_unused_fd_flags() + fd_install() it did through FD_PREPARE(). Signed-off-by: Christian Brauner (Amutable) --- fs/file.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/fs/file.c b/fs/file.c index 2b041b45f225..1f06d0c846c2 100644 --- a/fs/file.c +++ b/fs/file.c @@ -1607,25 +1607,27 @@ int replace_fd(unsigned fd, struct file *file, unsi= gned flags) */ int receive_fd(struct file *file, int __user *ufd, unsigned int o_flags) { - int error; + int fd, error; =20 error =3D security_file_receive(file); if (error) return error; =20 - FD_PREPARE(fdf, o_flags, file); - if (fdf.err) - return fdf.err; - get_file(file); + fd =3D get_unused_fd_flags(o_flags); + if (fd < 0) + return fd; =20 if (ufd) { - error =3D put_user(fd_prepare_fd(fdf), ufd); - if (error) + error =3D put_user(fd, ufd); + if (error) { + put_unused_fd(fd); return error; + } } =20 - __receive_sock(fd_prepare_file(fdf)); - return fd_publish(fdf); + __receive_sock(file); + fd_install(fd, get_file(file)); + return fd; } EXPORT_SYMBOL_GPL(receive_fd); =20 --=20 2.53.0 From nobody Fri Sep 25 07:56:54 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 568774A498D; Tue, 15 Sep 2026 11:34:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472067; cv=none; b=DiCDK4ivtjNgN30r3f3lf3ujfqU2utdgOW+NtzV870Kb0pNsIE2FrgN0opqswssPii1D5LOkuoNLnqR0CwNKiurvRAa9SeIs3xicRiBLIbUMGnvGoK8Q0XaxRszB7rY0yt2McQ+FZ0j1+kBatg6xxL0Qfs28e6rDho1fSFiBkRk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472067; c=relaxed/simple; bh=T3KSWcji/YSytHTghs9Kt5BT4n+B/RVkFjKfZEpUiUE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=aSw9rgAGK8k2l/ckiMctDGUk8WODZlZdWgKjagPTCOkzJ+DYmLn9/DOCELAFtl08ptSb81quQ3aUvKtjEgfnms2uMKcACzRLuGPU8Hv5ykG47gryv9IIsFUQKHA7ziPNtTZvn8dibrddx1yQRilF88cPvRsTj8QRfDwO6+o7mtA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=JyIhvS+J; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="JyIhvS+J" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 405011F000FF; Tue, 15 Sep 2026 11:34:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789472064; bh=KlocZhp7qjck9olR3klidY4UlF+C5OwdG3ef0fBmbDU=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=JyIhvS+JT82mqNUDoQEI5NLWlLHGSvHqAL4SSQ1kt8SKfEf+HfcjXdwmraSKCHGE8 ZOy1pOhBVyA8CD8/PMtsr6/M5DyMiVViu2ENl+54eY1cvO87TiRTHmWjqOn6VYaBoZ R+EwigxYuUkdDx++PpQix7gADr1dTufOLv25uLow4e3SSmRhk6Xa/nk8d3fLnQOYYC Ydpt0fW4a/KY4J+ehGRp+fITQ9UnHopTKNJg1/CR1zut9A3qFE0J3crkfG5HDtEzwq G8elLfwAFZ2cfYNwrhA3h2Y1eTB9tlgjFj5+2pZKNm3kY5rb7mp2PNhr6wwTmKvzYc atFGIdRwNt4XQ== From: Christian Brauner Date: Tue, 15 Sep 2026 13:31:10 +0200 Subject: [PATCH RFC POC 24/50] file: make FD_ADD() a standalone immediate install Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260915-work-fd-reserve-unify-folded-v1-24-4d5217d6b246@kernel.org> References: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> In-Reply-To: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> To: Linus Torvalds Cc: Alexander Viro , Jann Horn , Jan Kara , Ingo Molnar , Peter Zijlstra , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Oleg Nesterov , linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, Jens Axboe , io-uring@vger.kernel.org, netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, bpf@vger.kernel.org, David Airlie , virtualization@lists.linux.dev, kvm@vger.kernel.org, kexec@lists.infradead.org, linux-hyperv@vger.kernel.org, "Christian Brauner (Amutable)" X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=openpgp-sha256; l=2484; i=brauner@kernel.org; h=from:subject:message-id; bh=T3KSWcji/YSytHTghs9Kt5BT4n+B/RVkFjKfZEpUiUE=; b=kA0DAAoWkcYbwGV43KIByyZiAGqpLH2gnJPMvFkt0o4MjNDtgkqII7AmPHUY9LRg5JJdYim/g oh1BAAWCgAdFiEEQIc0Vx6nDHizMmkokcYbwGV43KIFAmqpLH0ACgkQkcYbwGV43KIfFQEAxyCZ bG8G/x+eu+vLdk6b9eKItI7HciqUsL6XwpabfYsA/1x0tYtG16iv2X3gSieaXgcMCW+XfqmAtez piRVBKO4N X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 FD_ADD() was built on FD_PREPARE() + fd_publish(). Give it its own small macro that allocates the descriptor so it stays an immediate one-shot for the hot descriptor-is-the-result paths (open, socket, accept, memfd etc.). Signed-off-by: Christian Brauner (Amutable) --- include/linux/file.h | 36 +++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/include/linux/file.h b/include/linux/file.h index 04dd85cdd9bf..1ee7f058a882 100644 --- a/include/linux/file.h +++ b/include/linux/file.h @@ -259,24 +259,30 @@ static inline int class_fd_prepare_lock_err(const str= uct fd_prepare *fdf) take_fd(fdp->__fd); \ }) =20 -/* Do not use directly. */ -#define __FD_ADD(_fdf, _fd_flags, _file_owned) \ - ({ \ - FD_PREPARE(_fdf, _fd_flags, _file_owned); \ - s32 ret =3D _fdf.err; \ - if (likely(!ret)) \ - ret =3D fd_publish(_fdf); \ - ret; \ - }) - /* - * FD_ADD - Allocate and install an fd and file in one step. + * FD_ADD - allocate a descriptor, build the file and install it in one st= ep. * @_fd_flags: flags for get_unused_fd_flags() - * @_file_owned: struct file to take ownership of + * @_file_owned: struct file to take ownership of (can be an expression) * - * Returns the allocated fd number, or negative error code on failure. + * The file expression is evaluated only after the descriptor is allocated= , so + * a full table does not run its side effects. Drops the file and returns a + * negative errno on failure. Installs immediately: for anything more than= a + * bare install-and-return (reporting the number, configuring the file, + * installing several descriptors) use fd_prepare()/fd_stage(). */ -#define FD_ADD(_fd_flags, _file_owned) \ - __FD_ADD(__UNIQUE_ID(fd_prepare), _fd_flags, _file_owned) +#define FD_ADD(_fd_flags, _file_owned) \ +({ \ + int __fd =3D get_unused_fd_flags(_fd_flags); \ + if (likely(__fd >=3D 0)) { \ + struct file *__file =3D (_file_owned); \ + if (unlikely(IS_ERR_OR_NULL(__file))) { \ + put_unused_fd(__fd); \ + __fd =3D __file ? PTR_ERR(__file) : -ENOMEM; \ + } else { \ + fd_install(__fd, __file); \ + } \ + } \ + __fd; \ +}) =20 #endif /* __LINUX_FILE_H */ --=20 2.53.0 From nobody Fri Sep 25 07:56:54 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 86B604A49B8; Tue, 15 Sep 2026 11:34:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472075; cv=none; b=bft1eQREhWaIbxbmF3/9LOthh6ILcMOQbI0Ii/KCtKAkOKnkv6YEQpMHMjS1ziq4b3qDLgTU4kcCymaQsrHqTxj85PtAtMc8lFqSVbrqF3Eep5BJxv7aFakpeSZzlrfHQXB7rl4MegdzttanAPtwsvnW2HBotuIuSgzZ+sQpHME= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472075; c=relaxed/simple; bh=rCUeU1oxHG7aERgXlrzAeAZc9EA3kZL/Oa602pXoJ4E=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=evpOXmedOSl2pn+x4UgAZTY7LOD+ZxA7du64Fa699uOXxnUdu4B4tvjiW4Q3jL4XkGcUeVsoLrkDp2ot5CrUhlADLlZFtsIfqEexh78rjgWorDiNdjpwz4DePb3WoE3iWBk0y5H9Ru0gxa87Hk35clCIt42ytSWQWgaAaU7i8/0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=gVRiMQZE; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="gVRiMQZE" Received: by smtp.kernel.org (Postfix) with ESMTPSA id EA7691F00898; Tue, 15 Sep 2026 11:34:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789472072; bh=uJkokD3f+q1c9pnrp0lbI+TZpmNSabQpiHVaEMwkcXg=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=gVRiMQZEzNekHg2rAKAlmyX2NEVGR1ZCdc63CV4n6VKSSJvFtAwsA5Q5YnsSZ59aM sBl/nTPM5nGVO9hMzw0QCgO4jZ7KgkQ+751oGBcqTAQwmEE+BmOo8Or9x37jbJLlCh x/Xv21Njc47KpLMHcP+tDPWRQFwlmH/02z/eanZGCii9GABQHqkWDAmTvq/p32qex7 wQpF9HLh+wyLJP1m0SqfQBhNbHRllVb1MmJeWPYsSHYzQy73BXNmavRDVVJPgDQDkQ f6iBo3mC/s+rHSITqIpBFUC/Dg1FHDuH2bG6srbP1O8UFhu9kscvBh1hLdHBSYyeXz bds5RQBIfjqYg== From: Christian Brauner Date: Tue, 15 Sep 2026 13:31:11 +0200 Subject: [PATCH RFC POC 25/50] file: reimplement FD_PREPARE() on the deferred fd_prepare() path Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260915-work-fd-reserve-unify-folded-v1-25-4d5217d6b246@kernel.org> References: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> In-Reply-To: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> To: Linus Torvalds Cc: Alexander Viro , Jann Horn , Jan Kara , Ingo Molnar , Peter Zijlstra , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Oleg Nesterov , linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, Jens Axboe , io-uring@vger.kernel.org, netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, bpf@vger.kernel.org, David Airlie , virtualization@lists.linux.dev, kvm@vger.kernel.org, kexec@lists.infradead.org, linux-hyperv@vger.kernel.org, "Christian Brauner (Amutable)" X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=openpgp-sha256; l=23000; i=brauner@kernel.org; h=from:subject:message-id; bh=rCUeU1oxHG7aERgXlrzAeAZc9EA3kZL/Oa602pXoJ4E=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWSt1Klde0duc6nl6/dOu1nuZniGhepapebMPXZY9VLZ7 EtlOkdXdpSyMIhxMciKKbI4tJuEyy3nqdhslKkBM4eVCWQIAxenAEzElI/hr4A/Z+IRwd5lR0r6 NE0SsmwjWAqX81p8uuquoCKVXfz4ECPDnxqnG1panoku6+OTzvDej5lz2uXX7mNONmukt2oJH/7 OBQA= X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 The FD_PREPARE() cleanup class allocated and installed immediately and required fd_publish() to be the last thing that could fail. Reimplement it on the deferred path. FD_PREPARE() reserves a slot with fd_prepare() and stages the file on it. The syscall exit installs on success and drops on error. fd_prepare_fd() and fd_prepare_file() now read the slot. fd_publish() is gone. Convert every FD_PREPARE() user since fdf.err can now become a simple IS_ERR(fdf). Signed-off-by: Christian Brauner (Amutable) --- arch/powerpc/platforms/cell/spufs/inode.c | 12 +-- drivers/gpio/gpiolib-cdev.c | 18 ++-- drivers/gpu/drm/msm/msm_perfcntr.c | 6 +- drivers/media/mc/mc-request.c | 6 +- drivers/misc/ntsync.c | 6 +- fs/eventfd.c | 6 +- fs/eventpoll.c | 6 +- fs/file.c | 12 +-- fs/namespace.c | 12 +-- fs/nsfs.c | 6 +- fs/xfs/xfs_handle.c | 6 +- include/linux/file.h | 143 ++++----------------------= ---- io_uring/mock_file.c | 5 +- kernel/bpf/bpf_iter.c | 6 +- kernel/bpf/token.c | 6 +- mm/userfaultfd.c | 6 +- net/handshake/netlink.c | 20 +++-- net/kcm/kcmsock.c | 5 +- 18 files changed, 89 insertions(+), 198 deletions(-) diff --git a/arch/powerpc/platforms/cell/spufs/inode.c b/arch/powerpc/platf= orms/cell/spufs/inode.c index 2b54afb31529..b3e9204e7031 100644 --- a/arch/powerpc/platforms/cell/spufs/inode.c +++ b/arch/powerpc/platforms/cell/spufs/inode.c @@ -266,10 +266,10 @@ spufs_mkdir(struct inode *dir, struct dentry *dentry,= unsigned int flags, static int spufs_context_open(const struct path *path) { FD_PREPARE(fdf, 0, dentry_open(path, O_RDONLY, current_cred())); - if (fdf.err) - return fdf.err; + if (IS_ERR(fdf)) + return PTR_ERR(fdf); fd_prepare_file(fdf)->f_op =3D &spufs_context_fops; - return fd_publish(fdf); + return fd_prepare_fd(fdf); } =20 static struct spu_context * @@ -499,10 +499,10 @@ static int spufs_gang_open(const struct path *path) * in error path of *_open(). */ FD_PREPARE(fdf, 0, dentry_open(path, O_RDONLY, current_cred())); - if (fdf.err) - return fdf.err; + if (IS_ERR(fdf)) + return PTR_ERR(fdf); fd_prepare_file(fdf)->f_op =3D &spufs_gang_fops; - return fd_publish(fdf); + return fd_prepare_fd(fdf); } =20 static int spufs_create_gang(struct inode *inode, diff --git a/drivers/gpio/gpiolib-cdev.c b/drivers/gpio/gpiolib-cdev.c index 9f3b628d5793..4d138db25472 100644 --- a/drivers/gpio/gpiolib-cdev.c +++ b/drivers/gpio/gpiolib-cdev.c @@ -377,16 +377,14 @@ static int linehandle_create(struct gpio_device *gdev= , void __user *ip) FD_PREPARE(fdf, O_RDONLY | O_CLOEXEC, anon_inode_getfile("gpio-linehandle", &linehandle_fileops, lh, O_RDONLY | O_CLOEXEC)); - if (fdf.err) - return fdf.err; + if (IS_ERR(fdf)) + return PTR_ERR(fdf); retain_and_null_ptr(lh); =20 handlereq.fd =3D fd_prepare_fd(fdf); if (copy_to_user(ip, &handlereq, sizeof(handlereq))) return -EFAULT; =20 - fd_publish(fdf); - dev_dbg(&gdev->dev, "registered chardev handle for %d lines\n", handlereq.lines); =20 @@ -1715,16 +1713,14 @@ static int linereq_create(struct gpio_device *gdev,= void __user *ip) FD_PREPARE(fdf, O_RDONLY | O_CLOEXEC, anon_inode_getfile("gpio-line", &line_fileops, lr, O_RDONLY | O_CLOEXEC)); - if (fdf.err) - return fdf.err; + if (IS_ERR(fdf)) + return PTR_ERR(fdf); retain_and_null_ptr(lr); =20 ulr.fd =3D fd_prepare_fd(fdf); if (copy_to_user(ip, &ulr, sizeof(ulr))) return -EFAULT; =20 - fd_publish(fdf); - dev_dbg(&gdev->dev, "registered chardev handle for %d lines\n", ulr.num_lines); =20 @@ -2115,16 +2111,14 @@ static int lineevent_create(struct gpio_device *gde= v, void __user *ip) FD_PREPARE(fdf, O_RDONLY | O_CLOEXEC, anon_inode_getfile("gpio-event", &lineevent_fileops, le, O_RDONLY | O_CLOEXEC)); - if (fdf.err) - return fdf.err; + if (IS_ERR(fdf)) + return PTR_ERR(fdf); retain_and_null_ptr(le); =20 eventreq.fd =3D fd_prepare_fd(fdf); if (copy_to_user(ip, &eventreq, sizeof(eventreq))) return -EFAULT; =20 - fd_publish(fdf); - return 0; } =20 diff --git a/drivers/gpu/drm/msm/msm_perfcntr.c b/drivers/gpu/drm/msm/msm_p= erfcntr.c index ce65b1160955..65c067d39ca0 100644 --- a/drivers/gpu/drm/msm/msm_perfcntr.c +++ b/drivers/gpu/drm/msm/msm_perfcntr.c @@ -543,8 +543,8 @@ msm_ioctl_perfcntr_config(struct drm_device *dev, void = *data, struct drm_file *f =20 FD_PREPARE(fdf, O_CLOEXEC, anon_inode_getfile("[msm_perfcntrs]", &stream_fops, stream, 0)); - if (fdf.err) - return fdf.err; + if (IS_ERR(fdf)) + return PTR_ERR(fdf); =20 INIT_WORK(&stream->sel_work, sel_worker); kthread_init_work(&stream->sample_work, sample_worker); @@ -564,7 +564,7 @@ msm_ioctl_perfcntr_config(struct drm_device *dev, void = *data, struct drm_file *f =20 msm_perfcntr_resume_locked(perfcntrs->stream); =20 - stream_fd =3D fd_publish(fdf); + stream_fd =3D fd_prepare_fd(fdf); } else { kfree(ctx->perfctx); ctx->perfctx =3D no_free_ptr(perfctx); diff --git a/drivers/media/mc/mc-request.c b/drivers/media/mc/mc-request.c index 13e77648807c..c9296bdbee27 100644 --- a/drivers/media/mc/mc-request.c +++ b/drivers/media/mc/mc-request.c @@ -316,8 +316,8 @@ int media_request_alloc(struct media_device *mdev, int = *alloc_fd) FD_PREPARE(fdf, O_CLOEXEC, anon_inode_getfile("request", &request_fops, NULL, O_CLOEXEC)); - if (fdf.err) { - ret =3D fdf.err; + if (IS_ERR(fdf)) { + ret =3D PTR_ERR(fdf); goto err_free_req; } =20 @@ -328,7 +328,7 @@ int media_request_alloc(struct media_device *mdev, int = *alloc_fd) atomic_inc(&mdev->num_requests); dev_dbg(mdev->dev, "request: allocated %s\n", req->debug_str); =20 - *alloc_fd =3D fd_publish(fdf); + *alloc_fd =3D fd_prepare_fd(fdf); =20 return 0; =20 diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c index 4a805919bb0c..721b0d9f0e1f 100644 --- a/drivers/misc/ntsync.c +++ b/drivers/misc/ntsync.c @@ -724,10 +724,10 @@ static int ntsync_obj_get_fd(struct ntsync_obj *obj) { FD_PREPARE(fdf, O_CLOEXEC, anon_inode_getfile("ntsync", &ntsync_obj_fops, obj, O_RDWR)); - if (fdf.err) - return fdf.err; + if (IS_ERR(fdf)) + return PTR_ERR(fdf); obj->file =3D fd_prepare_file(fdf); - return fd_publish(fdf); + return fd_prepare_fd(fdf); } =20 static int ntsync_create_sem(struct ntsync_device *dev, void __user *argp) diff --git a/fs/eventfd.c b/fs/eventfd.c index 9d33a02757d5..a00fea879f9a 100644 --- a/fs/eventfd.c +++ b/fs/eventfd.c @@ -403,12 +403,12 @@ static int do_eventfd(unsigned int count, int flags) FD_PREPARE(fdf, flags, anon_inode_getfile_fmode("[eventfd]", &eventfd_fops, ctx, flags, FMODE_NOWAIT)); - if (fdf.err) - return fdf.err; + if (IS_ERR(fdf)) + return PTR_ERR(fdf); =20 ctx->id =3D ida_alloc(&eventfd_ida, GFP_KERNEL); retain_and_null_ptr(ctx); - return fd_publish(fdf); + return fd_prepare_fd(fdf); } =20 SYSCALL_DEFINE2(eventfd2, unsigned int, count, int, flags) diff --git a/fs/eventpoll.c b/fs/eventpoll.c index e0c4bf88a838..81857725f810 100644 --- a/fs/eventpoll.c +++ b/fs/eventpoll.c @@ -2514,12 +2514,12 @@ static int do_epoll_create(int flags) FD_PREPARE(fdf, O_RDWR | (flags & O_CLOEXEC), anon_inode_getfile("[eventpoll]", &eventpoll_fops, ep, O_RDWR | (flags & O_CLOEXEC))); - if (fdf.err) { + if (IS_ERR(fdf)) { ep_clear_and_put(ep); - return fdf.err; + return PTR_ERR(fdf); } ep->file =3D fd_prepare_file(fdf); - return fd_publish(fdf); + return fd_prepare_fd(fdf); } =20 SYSCALL_DEFINE1(epoll_create1, int, flags) diff --git a/fs/file.c b/fs/file.c index 1f06d0c846c2..7c05246a5129 100644 --- a/fs/file.c +++ b/fs/file.c @@ -761,26 +761,26 @@ int fd_stage(const struct fd_slot *slot, struct file = *file) EXPORT_SYMBOL(fd_stage); =20 /** - * __fd_slot_fd - the descriptor number of a prepared slot + * fd_prepare_fd - the descriptor number of a prepared slot * @slot: slot from fd_prepare() */ -int __fd_slot_fd(const struct fd_slot *slot) +int fd_prepare_fd(const struct fd_slot *slot) { return ACCESS_PRIVATE(slot, fd); } -EXPORT_SYMBOL(__fd_slot_fd); +EXPORT_SYMBOL(fd_prepare_fd); =20 /** - * __fd_slot_file - the file staged into a slot, to configure before insta= ll + * fd_prepare_file - the file staged into a slot, to configure before inst= all * @slot: slot from fd_prepare() * * Returns the file handed to fd_stage(), or NULL before one is staged. */ -struct file *__fd_slot_file(const struct fd_slot *slot) +struct file *fd_prepare_file(const struct fd_slot *slot) { return ACCESS_PRIVATE(slot, file); } -EXPORT_SYMBOL(__fd_slot_file); +EXPORT_SYMBOL(fd_prepare_file); =20 /* Install every staged file, release the slots that never got one. */ static void fd_slots_install(struct fd_slots *slots) diff --git a/fs/namespace.c b/fs/namespace.c index 1ecd96c918b3..fba29bcc0164 100644 --- a/fs/namespace.c +++ b/fs/namespace.c @@ -4544,9 +4544,9 @@ SYSCALL_DEFINE3(fsmount, int, fs_fd, unsigned int, fl= ags, =20 FD_PREPARE(fdf, (flags & FSMOUNT_CLOEXEC) ? O_CLOEXEC : 0, dentry_open(&new_path, O_PATH, fc->cred)); - if (fdf.err) { + if (IS_ERR(fdf)) { dissolve_on_fput(new_path.mnt); - return fdf.err; + return PTR_ERR(fdf); } =20 /* @@ -4554,7 +4554,7 @@ SYSCALL_DEFINE3(fsmount, int, fs_fd, unsigned int, fl= ags, * need to unmount it, not just simply put it. */ fd_prepare_file(fdf)->f_mode |=3D FMODE_NEED_UNMOUNT; - return fd_publish(fdf); + return fd_prepare_fd(fdf); } =20 static inline int vfs_move_mount(const struct path *from_path, @@ -5198,8 +5198,8 @@ SYSCALL_DEFINE5(open_tree_attr, int, dfd, const char = __user *, filename, return -EINVAL; =20 FD_PREPARE(fdf, flags, vfs_open_tree(dfd, filename, flags)); - if (fdf.err) - return fdf.err; + if (IS_ERR(fdf)) + return PTR_ERR(fdf); =20 if (uattr) { struct mount_kattr kattr =3D {}; @@ -5220,7 +5220,7 @@ SYSCALL_DEFINE5(open_tree_attr, int, dfd, const char = __user *, filename, return ret; } =20 - return fd_publish(fdf); + return fd_prepare_fd(fdf); } =20 int show_path(struct seq_file *m, struct dentry *root) diff --git a/fs/nsfs.c b/fs/nsfs.c index c3b6ae76594a..da021c8b49b2 100644 --- a/fs/nsfs.c +++ b/fs/nsfs.c @@ -348,8 +348,8 @@ static long ns_ioctl(struct file *filp, unsigned int io= ctl, return ret; =20 FD_PREPARE(fdf, O_CLOEXEC, dentry_open(&path, O_RDONLY, current_cred())); - if (fdf.err) - return fdf.err; + if (IS_ERR(fdf)) + return PTR_ERR(fdf); /* * If @uinfo is passed return all information about the * mount namespace as well. @@ -357,7 +357,7 @@ static long ns_ioctl(struct file *filp, unsigned int io= ctl, ret =3D copy_ns_info_to_user(to_mnt_ns(ns), uinfo, usize, &kinfo); if (ret) return ret; - ret =3D fd_publish(fdf); + ret =3D fd_prepare_fd(fdf); break; } default: diff --git a/fs/xfs/xfs_handle.c b/fs/xfs/xfs_handle.c index 0689cade8f74..174aa3c8260f 100644 --- a/fs/xfs/xfs_handle.c +++ b/fs/xfs/xfs_handle.c @@ -272,8 +272,8 @@ xfs_open_by_handle( path.mnt =3D mntget(parfilp->f_path.mnt); =20 FD_PREPARE(fdf, 0, dentry_open(&path, hreq->oflags, cred)); - if (fdf.err) - return fdf.err; + if (IS_ERR(fdf)) + return PTR_ERR(fdf); =20 if (S_ISREG(inode->i_mode)) { struct file *filp =3D fd_prepare_file(fdf); @@ -282,7 +282,7 @@ xfs_open_by_handle( filp->f_mode |=3D FMODE_NOCMTIME; } =20 - return fd_publish(fdf); + return fd_prepare_fd(fdf); } =20 int diff --git a/include/linux/file.h b/include/linux/file.h index 1ee7f058a882..45d68e097c05 100644 --- a/include/linux/file.h +++ b/include/linux/file.h @@ -125,8 +125,8 @@ extern void fd_install(unsigned int fd, struct file *fi= le); struct fd_slot; const struct fd_slot *fd_prepare(unsigned flags); int fd_stage(const struct fd_slot *slot, struct file *file); -int __fd_slot_fd(const struct fd_slot *slot); -struct file *__fd_slot_file(const struct fd_slot *slot); +int fd_prepare_fd(const struct fd_slot *slot); +struct file *fd_prepare_file(const struct fd_slot *slot); =20 int receive_fd(struct file *file, int __user *ufd, unsigned int o_flags); =20 @@ -137,128 +137,6 @@ extern void __fput_sync(struct file *); =20 extern unsigned int sysctl_nr_open_min, sysctl_nr_open_max; =20 -/* - * fd_prepare: Combined fd + file allocation cleanup class. - * @err: Error code to indicate if allocation succeeded. - * @__fd: Allocated fd (may not be accessed directly) - * @__file: Allocated struct file pointer (may not be accessed directly) - * - * Allocates an fd and a file together. On error paths, automatically clea= ns - * up whichever resource was successfully allocated. Allows flexible file - * allocation with different functions per usage. - * - * Do not use directly. - */ -struct fd_prepare { - s32 err; - s32 __fd; /* do not access directly */ - struct file *__file; /* do not access directly */ -}; - -/* Typedef for fd_prepare cleanup guards. */ -typedef struct fd_prepare class_fd_prepare_t; - -/* Do not use directly. */ -static inline int __fd_prepare_fd_old(struct fd_prepare fdf) -{ - return fdf.__fd; -} - -/* Do not use directly. */ -static inline struct file *__fd_prepare_file_old(struct fd_prepare fdf) -{ - return fdf.__file; -} - -/* - * Accessors for a prepared descriptor. _Generic() bridges struct fd_prepa= re - * (the cleanup class below) and struct fd_slot (fd_prepare()) while calle= rs are - * converted; the struct fd_prepare arm goes away with FD_PREPARE(). - */ -#define fd_prepare_fd(_x) _Generic((_x), \ - struct fd_prepare: __fd_prepare_fd_old, \ - struct fd_slot *: __fd_slot_fd, \ - const struct fd_slot *: __fd_slot_fd)(_x) - -#define fd_prepare_file(_x) _Generic((_x), \ - struct fd_prepare: __fd_prepare_file_old, \ - struct fd_slot *: __fd_slot_file, \ - const struct fd_slot *: __fd_slot_file)(_x) - -/* Do not use directly. */ -static inline void class_fd_prepare_destructor(const struct fd_prepare *fd= f) -{ - if (unlikely(fdf->__fd >=3D 0)) - put_unused_fd(fdf->__fd); - if (unlikely(!IS_ERR_OR_NULL(fdf->__file))) - fput(fdf->__file); -} - -/* Do not use directly. */ -static inline int class_fd_prepare_lock_err(const struct fd_prepare *fdf) -{ - if (unlikely(fdf->err)) - return fdf->err; - if (unlikely(fdf->__fd < 0)) - return fdf->__fd; - if (unlikely(IS_ERR(fdf->__file))) - return PTR_ERR(fdf->__file); - if (unlikely(!fdf->__file)) - return -ENOMEM; - return 0; -} - -/* - * __FD_PREPARE_INIT - Helper to initialize fd_prepare class. - * @_fd_flags: flags for get_unused_fd_flags() - * @_file_owned: expression that returns struct file * - * - * Returns a struct fd_prepare with fd, file, and err set. - * If fd allocation fails, fd will be negative and err will be set. If - * fd succeeds but file_init_expr fails, file will be ERR_PTR and err - * will be set. The err field is the single source of truth for error - * checking. - */ -#define __FD_PREPARE_INIT(_fd_flags, _file_owned) \ - ({ \ - struct fd_prepare fdf =3D { \ - .__fd =3D get_unused_fd_flags((_fd_flags)), \ - }; \ - if (likely(fdf.__fd >=3D 0)) \ - fdf.__file =3D (_file_owned); \ - fdf.err =3D ACQUIRE_ERR(fd_prepare, &fdf); \ - fdf; \ - }) - -/* - * FD_PREPARE - Macro to declare and initialize an fd_prepare variable. - * - * Declares and initializes an fd_prepare variable with automatic - * cleanup. No separate scope required - cleanup happens when variable - * goes out of scope. - * - * @_fdf: name of struct fd_prepare variable to define - * @_fd_flags: flags for get_unused_fd_flags() - * @_file_owned: struct file to take ownership of (can be expression) - */ -#define FD_PREPARE(_fdf, _fd_flags, _file_owned) \ - CLASS_INIT(fd_prepare, _fdf, __FD_PREPARE_INIT(_fd_flags, _file_owned)) - -/* - * fd_publish - Publish prepared fd and file to the fd table. - * @_fdf: struct fd_prepare variable - */ -#define fd_publish(_fdf) \ - ({ \ - struct fd_prepare *fdp =3D &(_fdf); \ - VFS_WARN_ON_ONCE(fdp->err); \ - VFS_WARN_ON_ONCE(fdp->__fd < 0); \ - VFS_WARN_ON_ONCE(IS_ERR_OR_NULL(fdp->__file)); \ - fd_install(fdp->__fd, fdp->__file); \ - retain_and_null_ptr(fdp->__file); \ - take_fd(fdp->__fd); \ - }) - /* * FD_ADD - allocate a descriptor, build the file and install it in one st= ep. * @_fd_flags: flags for get_unused_fd_flags() @@ -285,4 +163,21 @@ static inline int class_fd_prepare_lock_err(const stru= ct fd_prepare *fdf) __fd; \ }) =20 +/* + * FD_PREPARE - reserve a descriptor and stage @_file_owned on it for the + * install at syscall exit; declares @_fdf, an fd_prepare() slot. + * @_fdf: name of the const struct fd_slot * to declare + * @_fd_flags: flags for get_unused_fd_flags() + * @_file_owned: struct file to take ownership of (can be an expression) + */ +#define FD_PREPARE(_fdf, _fd_flags, _file_owned) \ + const struct fd_slot *_fdf =3D fd_prepare(_fd_flags); \ + if (!IS_ERR(_fdf)) { \ + struct file *__file =3D (_file_owned); \ + if (unlikely(IS_ERR_OR_NULL(__file))) \ + _fdf =3D __file ? ERR_CAST(__file) : ERR_PTR(-ENOMEM); \ + else \ + fd_stage(_fdf, __file); \ + } + #endif /* __LINUX_FILE_H */ diff --git a/io_uring/mock_file.c b/io_uring/mock_file.c index b318ed697998..67164c28ed65 100644 --- a/io_uring/mock_file.c +++ b/io_uring/mock_file.c @@ -257,8 +257,8 @@ static int io_create_mock_file(struct io_uring_cmd *cmd= , unsigned int issue_flag FD_PREPARE(fdf, O_RDWR | O_CLOEXEC, anon_inode_create_getfile("[io_uring_mock]", fops, mf, O_RDWR | O_CLOEXEC, NULL)); - if (fdf.err) - return fdf.err; + if (IS_ERR(fdf)) + return PTR_ERR(fdf); =20 retain_and_null_ptr(mf); file =3D fd_prepare_file(fdf); @@ -271,7 +271,6 @@ static int io_create_mock_file(struct io_uring_cmd *cmd= , unsigned int issue_flag if (copy_to_user(uarg, &mc, uarg_size)) return -EFAULT; =20 - fd_publish(fdf); return 0; } =20 diff --git a/kernel/bpf/bpf_iter.c b/kernel/bpf/bpf_iter.c index 14a5fdfa0421..00edc394101b 100644 --- a/kernel/bpf/bpf_iter.c +++ b/kernel/bpf/bpf_iter.c @@ -643,15 +643,15 @@ int bpf_iter_new_fd(struct bpf_link *link) flags =3D O_RDONLY | O_CLOEXEC; =20 FD_PREPARE(fdf, flags, anon_inode_getfile("bpf_iter", &bpf_iter_fops, NUL= L, flags)); - if (fdf.err) - return fdf.err; + if (IS_ERR(fdf)) + return PTR_ERR(fdf); =20 iter_link =3D container_of(link, struct bpf_iter_link, link); err =3D prepare_seq_file(fd_prepare_file(fdf), iter_link); if (err) return err; /* Automatic cleanup handles fput */ =20 - return fd_publish(fdf); + return fd_prepare_fd(fdf); } =20 struct bpf_prog *bpf_iter_get_info(struct bpf_iter_meta *meta, bool in_sto= p) diff --git a/kernel/bpf/token.c b/kernel/bpf/token.c index e85a179523f0..5cac7fc5694b 100644 --- a/kernel/bpf/token.c +++ b/kernel/bpf/token.c @@ -169,8 +169,8 @@ int bpf_token_create(union bpf_attr *attr) FD_PREPARE(fdf, O_CLOEXEC, alloc_file_pseudo(inode, path.mnt, BPF_TOKEN_INODE_NAME, O_RDWR, &bpf_token_fops)); - if (fdf.err) - return fdf.err; + if (IS_ERR(fdf)) + return PTR_ERR(fdf); =20 token =3D kzalloc_obj(*token, GFP_USER); if (!token) @@ -191,7 +191,7 @@ int bpf_token_create(union bpf_attr *attr) =20 get_user_ns(token->userns); fd_prepare_file(fdf)->private_data =3D no_free_ptr(token); - return fd_publish(fdf); + return fd_prepare_fd(fdf); } =20 int bpf_token_get_info_by_fd(struct bpf_token *token, diff --git a/mm/userfaultfd.c b/mm/userfaultfd.c index 23fb68fce000..b5131fc597e6 100644 --- a/mm/userfaultfd.c +++ b/mm/userfaultfd.c @@ -4809,14 +4809,14 @@ static int new_userfaultfd(int flags) anon_inode_create_getfile("[userfaultfd]", &userfaultfd_fops, ctx, O_RDONLY | (flags & UFFD_SHARED_FCNTL_FLAGS), NULL)); - if (fdf.err) - return fdf.err; + if (IS_ERR(fdf)) + return PTR_ERR(fdf); =20 /* prevent the mm struct to be freed */ mmgrab(ctx->mm); fd_prepare_file(fdf)->f_mode |=3D FMODE_NOWAIT; retain_and_null_ptr(ctx); - return fd_publish(fdf); + return fd_prepare_fd(fdf); } =20 static inline bool userfaultfd_syscall_allowed(int flags) diff --git a/net/handshake/netlink.c b/net/handshake/netlink.c index 3fd4fef9bab1..98d4266e700e 100644 --- a/net/handshake/netlink.c +++ b/net/handshake/netlink.c @@ -106,19 +106,23 @@ int handshake_nl_accept_doit(struct sk_buff *skb, str= uct genl_info *info) err =3D -EAGAIN; req =3D handshake_req_next(hn, class); if (req) { - FD_PREPARE(fdf, O_CLOEXEC, req->hr_file); - if (fdf.err) { + /* The ack carries the error, sendmsg() succeeds: stage last. */ + const struct fd_slot *fd =3D fd_prepare(O_CLOEXEC); + + if (IS_ERR(fd)) { fput(req->hr_file); /* drop ref from handshake_req_next() */ - err =3D fdf.err; + err =3D PTR_ERR(fd); goto out_complete; } =20 - err =3D req->hr_proto->hp_accept(req, info, fd_prepare_fd(fdf)); - if (err) - goto out_complete; /* Automatic cleanup handles fput */ + err =3D req->hr_proto->hp_accept(req, info, fd_prepare_fd(fd)); + if (err) { + fput(req->hr_file); /* not staged, drop it by hand */ + goto out_complete; + } =20 - trace_handshake_cmd_accept(net, req, req->hr_sk, fd_prepare_fd(fdf)); - fd_publish(fdf); + fd_stage(fd, req->hr_file); + trace_handshake_cmd_accept(net, req, req->hr_sk, fd_prepare_fd(fd)); return 0; } =20 diff --git a/net/kcm/kcmsock.c b/net/kcm/kcmsock.c index 71af69d442f2..2d744ee3d340 100644 --- a/net/kcm/kcmsock.c +++ b/net/kcm/kcmsock.c @@ -1580,14 +1580,13 @@ static int kcm_ioctl(struct socket *sock, unsigned = int cmd, unsigned long arg) struct kcm_clone info; =20 FD_PREPARE(fdf, 0, kcm_clone(sock)); - if (fdf.err) - return fdf.err; + if (IS_ERR(fdf)) + return PTR_ERR(fdf); =20 info.fd =3D fd_prepare_fd(fdf); if (copy_to_user((void __user *)arg, &info, sizeof(info))) return -EFAULT; =20 - fd_publish(fdf); err =3D 0; break; } --=20 2.53.0 From nobody Fri Sep 25 07:56:54 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 DEFAA4BFE8D; Tue, 15 Sep 2026 11:34:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472081; cv=none; b=TnW9k8I4elIfamziNMXeAZVV1rfVQnSJjc/jN5hyvbLQtKFpnvYLS8uTZk5RluPfJ7rf0QUZOt6hAhvZop8n64BWYTASNi7azOdd26UfGcrx5jvxEpXtdS5+MeN+kP0vTA+JWTg+SefC00hWfVt+9nbotEZNHv4+5l0taVLXteE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472081; c=relaxed/simple; bh=WVbD0pO6d4mjiUvlOLIjL57eEEjsBq56vpsfDeJomcY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=i5n+hWkgw5sR+znWKq2eg0fIQh06IJa4wmEpCfQtkP6uHHdvDHnFevE3sJMNcGG8oKHaC6Q6FIYzrsw4FByd0vRZsZrb9w40E5zYUrtXeu3gzQlLhRGa6Nm9XH3GbaU+lwz7eSkR55IQxMPRhpYqXUCp64zD+H92hBMaxb0K/ME= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=NLbpzRry; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="NLbpzRry" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 77FDC1F00893; Tue, 15 Sep 2026 11:34:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789472079; bh=cDPO1Tppu7zGiZS0wqcZiTuTwlavGuE/rjDjnQsBE8E=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=NLbpzRryDp6dFPNq2d5OJvruDzyZONEFg64LrDUeM5ugsoft5S7pBeG/pH66NE5IL 3K1p9eHLYNaeeDaMavKCpdAseqox6l5EnfcT+KopXRUVpAGLpJ9yfjtXkfsEViD35p ADMqHomqefTxla65WmYonAYRk046Vz0TUnURPnhxUASNKqUUkNdFTTmZNpEDsrmsBU 6GsRHd/hVex1t+bazl57XSA3/fWSISHGQVrMQ+hQ7z2QElRmXKMZdLoquUEY4uZ9o0 wbzzdJN3unzzMqJSYGFB8PGFSj10gPRo7LK7HDW022JXae9+9AS0j5tXO3J4dwtg5G rF8s/BzuCbuwQ== From: Christian Brauner Date: Tue, 15 Sep 2026 13:31:12 +0200 Subject: [PATCH RFC POC 26/50] dma-buf: stop unwinding sync file descriptors by hand Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260915-work-fd-reserve-unify-folded-v1-26-4d5217d6b246@kernel.org> References: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> In-Reply-To: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> To: Linus Torvalds Cc: Alexander Viro , Jann Horn , Jan Kara , Ingo Molnar , Peter Zijlstra , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Oleg Nesterov , linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, Jens Axboe , io-uring@vger.kernel.org, netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, bpf@vger.kernel.org, David Airlie , virtualization@lists.linux.dev, kvm@vger.kernel.org, kexec@lists.infradead.org, linux-hyperv@vger.kernel.org, "Christian Brauner (Amutable)" X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=openpgp-sha256; l=5768; i=brauner@kernel.org; h=from:subject:message-id; bh=WVbD0pO6d4mjiUvlOLIjL57eEEjsBq56vpsfDeJomcY=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWSt1Klbx7fSV2vzb4mztp+e+U8pjOoJ5RRLmcKaIWU0y e1svXhCRykLgxgXg6yYIotDu0m43HKeis1GmRowc1iZQIYwcHEKwEQM9zMyHNVclB75UIUtlMkq +oqP/KHwKflt//9e3LImMGbio3sWXQz/448uNWN/83aF2Gujxje/v7ndnOYetv30l/bU9fpNKqo 7eQE= X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Rely on the fd exit path machinery. Signed-off-by: Christian Brauner (Amutable) --- drivers/dma-buf/dma-buf.c | 33 ++++++++++------------------ drivers/dma-buf/sw_sync.c | 40 +++++++++++----------------------- drivers/dma-buf/sync_file.c | 52 +++++++++++++----------------------------= ---- 3 files changed, 38 insertions(+), 87 deletions(-) diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c index d504c636dc29..f0d581fad7ae 100644 --- a/drivers/dma-buf/dma-buf.c +++ b/drivers/dma-buf/dma-buf.c @@ -440,7 +440,8 @@ static long dma_buf_export_sync_file(struct dma_buf *dm= abuf, enum dma_resv_usage usage; struct dma_fence *fence =3D NULL; struct sync_file *sync_file; - int fd, ret; + int ret; + const struct fd_slot *fd; =20 if (copy_from_user(&arg, user_data, sizeof(arg))) return -EFAULT; @@ -451,14 +452,14 @@ static long dma_buf_export_sync_file(struct dma_buf *= dmabuf, if ((arg.flags & DMA_BUF_SYNC_RW) =3D=3D 0) return -EINVAL; =20 - fd =3D get_unused_fd_flags(O_CLOEXEC); - if (fd < 0) - return fd; + fd =3D fd_prepare(O_CLOEXEC); + if (IS_ERR(fd)) + return PTR_ERR(fd); =20 usage =3D dma_resv_usage_rw(arg.flags & DMA_BUF_SYNC_WRITE); ret =3D dma_resv_get_singleton(dmabuf->resv, usage, &fence); if (ret) - goto err_put_fd; + return ret; =20 if (!fence) fence =3D dma_fence_get_stub(); @@ -467,26 +468,14 @@ static long dma_buf_export_sync_file(struct dma_buf *= dmabuf, =20 dma_fence_put(fence); =20 - if (!sync_file) { - ret =3D -ENOMEM; - goto err_put_fd; - } - - arg.fd =3D fd; - if (copy_to_user(user_data, &arg, sizeof(arg))) { - ret =3D -EFAULT; - goto err_put_file; - } + if (!sync_file) + return -ENOMEM; =20 - fd_install(fd, sync_file->file); + arg.fd =3D fd_stage(fd, sync_file->file); + if (copy_to_user(user_data, &arg, sizeof(arg))) + return -EFAULT; =20 return 0; - -err_put_file: - fput(sync_file->file); -err_put_fd: - put_unused_fd(fd); - return ret; } =20 static long dma_buf_import_sync_file(struct dma_buf *dmabuf, diff --git a/drivers/dma-buf/sw_sync.c b/drivers/dma-buf/sw_sync.c index 8df20b0218a9..90852950e4e3 100644 --- a/drivers/dma-buf/sw_sync.c +++ b/drivers/dma-buf/sw_sync.c @@ -344,8 +344,7 @@ static int sw_sync_debugfs_release(struct inode *inode,= struct file *file) static long sw_sync_ioctl_create_fence(struct sync_timeline *obj, unsigned long arg) { - int fd =3D get_unused_fd_flags(O_CLOEXEC); - int err; + const struct fd_slot *fd =3D fd_prepare(O_CLOEXEC); struct sync_pt *pt; struct sync_file *sync_file; struct sw_sync_create_fence_data data; @@ -353,41 +352,26 @@ static long sw_sync_ioctl_create_fence(struct sync_ti= meline *obj, /* SW sync fence are inherently unsafe and can deadlock the kernel */ add_taint(TAINT_SOFTLOCKUP, LOCKDEP_STILL_OK); =20 - if (fd < 0) - return fd; + if (IS_ERR(fd)) + return PTR_ERR(fd); =20 - if (copy_from_user(&data, (void __user *)arg, sizeof(data))) { - err =3D -EFAULT; - goto err; - } + if (copy_from_user(&data, (void __user *)arg, sizeof(data))) + return -EFAULT; =20 pt =3D sync_pt_create(obj, data.value); - if (!pt) { - err =3D -ENOMEM; - goto err; - } + if (!pt) + return -ENOMEM; =20 sync_file =3D sync_file_create(&pt->base); dma_fence_put(&pt->base); - if (!sync_file) { - err =3D -ENOMEM; - goto err; - } - - data.fence =3D fd; - if (copy_to_user((void __user *)arg, &data, sizeof(data))) { - fput(sync_file->file); - err =3D -EFAULT; - goto err; - } + if (!sync_file) + return -ENOMEM; =20 - fd_install(fd, sync_file->file); + data.fence =3D fd_stage(fd, sync_file->file); + if (copy_to_user((void __user *)arg, &data, sizeof(data))) + return -EFAULT; =20 return 0; - -err: - put_unused_fd(fd); - return err; } =20 static long sw_sync_ioctl_inc(struct sync_timeline *obj, unsigned long arg) diff --git a/drivers/dma-buf/sync_file.c b/drivers/dma-buf/sync_file.c index 2166bbdf7e4a..316fffc4067e 100644 --- a/drivers/dma-buf/sync_file.c +++ b/drivers/dma-buf/sync_file.c @@ -213,56 +213,34 @@ static __poll_t sync_file_poll(struct file *file, pol= l_table *wait) static long sync_file_ioctl_merge(struct sync_file *sync_file, unsigned long arg) { - int fd =3D get_unused_fd_flags(O_CLOEXEC); - int err; + const struct fd_slot *fd =3D fd_prepare(O_CLOEXEC); struct sync_file *fence2, *fence3; struct sync_merge_data data; =20 - if (fd < 0) - return fd; + if (IS_ERR(fd)) + return PTR_ERR(fd); =20 - if (copy_from_user(&data, (void __user *)arg, sizeof(data))) { - err =3D -EFAULT; - goto err_put_fd; - } + if (copy_from_user(&data, (void __user *)arg, sizeof(data))) + return -EFAULT; =20 - if (data.flags || data.pad) { - err =3D -EINVAL; - goto err_put_fd; - } + if (data.flags || data.pad) + return -EINVAL; =20 fence2 =3D sync_file_fdget(data.fd2); - if (!fence2) { - err =3D -ENOENT; - goto err_put_fd; - } + if (!fence2) + return -ENOENT; =20 data.name[sizeof(data.name) - 1] =3D '\0'; fence3 =3D sync_file_merge(data.name, sync_file, fence2); - if (!fence3) { - err =3D -ENOMEM; - goto err_put_fence2; - } - - data.fence =3D fd; - if (copy_to_user((void __user *)arg, &data, sizeof(data))) { - err =3D -EFAULT; - goto err_put_fence3; - } - - fd_install(fd, fence3->file); fput(fence2->file); - return 0; - -err_put_fence3: - fput(fence3->file); + if (!fence3) + return -ENOMEM; =20 -err_put_fence2: - fput(fence2->file); + data.fence =3D fd_stage(fd, fence3->file); + if (copy_to_user((void __user *)arg, &data, sizeof(data))) + return -EFAULT; =20 -err_put_fd: - put_unused_fd(fd); - return err; + return 0; } =20 static int sync_fill_fence_info(struct dma_fence *fence, --=20 2.53.0 From nobody Fri Sep 25 07:56:54 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 17EB64C4F76; Tue, 15 Sep 2026 11:34:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472090; cv=none; b=pWeB3nPdEpEyxX+wX8VI0eaN/70CO4wJ/SsJ68glcPe+TwkqyB5eW1/UJXopOOpFJZk+n3LGyxHO6O1tZvMe9OCNV6FlMxeqv3FUrhNfAr8yCY93hLwfMGT3S2VT23U3TJxn2Y8qxHDsF0iprub65hK4M2fkhV6a0MLrev/Z1rI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472090; c=relaxed/simple; bh=Uhm5pGuH1u5xvAiYltqyiEc1yitYtbQkVnEw911bZpc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=mL/cRSHSberk093ha/o/WeCnvcIQa947mGMITRqCGnLgCBaa/ndj09HnvsiHcSqZKNQSmnh3X7SK5paC4KGYziuc/V0au9pI0HaZUqoSy/htruUkRSkYrF4HelO8EQtKtKVkpbY3ceNkqTYLLuqWIBsnR2iHilVIBjuDCgMN6PY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Flsbpaaf; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Flsbpaaf" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3A3EE1F0089A; Tue, 15 Sep 2026 11:34:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789472087; bh=hTcFPD5nJ4+2LMtt0zaRlcDz8pb9ncWK9jLD+CuAEYQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=FlsbpaafsIOIgMpG7HCaM1DGGB+32ZzKmdnN26bxlcjfIBYeSqjg7SV0fHdam08z6 UPHMCKlmukOmWEHllUecx7o++e5Lh3XRpN7AoTUW08gMYmF+pJlT/fJIqly9PGTq+Q uS8J8PziF121Z3kDQMB072y+lW4FQwZm+xGXX0ts1HmNDiDLjcAfccLqn5D3mHANLN CqNXVBrP5dfz3b/gqBl92UwVJ+JI45K95UWmPc4kdiJc8xu1YSfVfi7VzrYDrKL8fJ epFtYGN9LUEdiCXHagpzqxt2EfM73ZpJkAjsDTURRWezAHawT/pR7B3JghREyKTwwX W4GQ4hx051nWA== From: Christian Brauner Date: Tue, 15 Sep 2026 13:31:13 +0200 Subject: [PATCH RFC POC 27/50] drm/amdkfd: stop collecting CRIU dma-buf descriptors for a final install Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260915-work-fd-reserve-unify-folded-v1-27-4d5217d6b246@kernel.org> References: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> In-Reply-To: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> To: Linus Torvalds Cc: Alexander Viro , Jann Horn , Jan Kara , Ingo Molnar , Peter Zijlstra , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Oleg Nesterov , linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, Jens Axboe , io-uring@vger.kernel.org, netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, bpf@vger.kernel.org, David Airlie , virtualization@lists.linux.dev, kvm@vger.kernel.org, kexec@lists.infradead.org, linux-hyperv@vger.kernel.org, "Christian Brauner (Amutable)" X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=openpgp-sha256; l=5171; i=brauner@kernel.org; h=from:subject:message-id; bh=Uhm5pGuH1u5xvAiYltqyiEc1yitYtbQkVnEw911bZpc=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWSt1KnLvXpYsF3fqHGS4YdPk5Xs9qW0bU/n3sgcUJuWL yu8Wl+zo5SFQYyLQVZMkcWh3SRcbjlPxWajTA2YOaxMIEMYuDgFYCLz5jIynODjjVis7j19ziS2 AGmxAyL/v9W4StwoyMiZ+y5dYVWsNSPDvtpDpbc/Xihcun6Paoagrpdv5G6xV3U64XVmjU+13Lp ZAA== X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Rely on the fd exit path machinery. Signed-off-by: Christian Brauner (Amutable) --- drivers/gpu/drm/amd/amdkfd/kfd_chardev.c | 67 +++++++---------------------= ---- 1 file changed, 13 insertions(+), 54 deletions(-) diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c b/drivers/gpu/drm/amd= /amdkfd/kfd_chardev.c index 7fcfc150a7fc..158abe7e3da6 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c @@ -1988,11 +1988,10 @@ static uint32_t get_process_num_bos(struct kfd_proc= ess *p) return num_of_bos; } =20 -static int criu_get_prime_handle(struct kgd_mem *mem, - int flags, u32 *shared_fd, - struct file **file) +static int criu_get_prime_handle(struct kgd_mem *mem, int flags, u32 *shar= ed_fd) { struct dma_buf *dmabuf; + const struct fd_slot *fd; int ret; =20 ret =3D amdgpu_amdkfd_gpuvm_export_dmabuf(mem, &dmabuf); @@ -2001,38 +2000,17 @@ static int criu_get_prime_handle(struct kgd_mem *me= m, return ret; } =20 - ret =3D get_unused_fd_flags(flags); - if (ret < 0) { + fd =3D fd_prepare(flags); + if (IS_ERR(fd)) { + ret =3D PTR_ERR(fd); pr_err("dmabuf create fd failed, ret:%d\n", ret); - goto out_free_dmabuf; + dma_buf_put(dmabuf); + return ret; } =20 - *shared_fd =3D ret; - *file =3D dmabuf->file; + /* Installed or dropped with the ioctl's result, nothing to put back. */ + *shared_fd =3D fd_stage(fd, dmabuf->file); return 0; - -out_free_dmabuf: - dma_buf_put(dmabuf); - return ret; -} - -static void commit_files(struct file **files, - struct kfd_criu_bo_bucket *bo_buckets, - unsigned int count, - int err) -{ - while (count--) { - struct file *file =3D files[count]; - - if (!file) - continue; - if (err) { - fput(file); - put_unused_fd(bo_buckets[count].dmabuf_fd); - } else { - fd_install(bo_buckets[count].dmabuf_fd, file); - } - } } =20 static int criu_checkpoint_bos(struct kfd_process *p, @@ -2043,7 +2021,6 @@ static int criu_checkpoint_bos(struct kfd_process *p, { struct kfd_criu_bo_bucket *bo_buckets; struct kfd_criu_bo_priv_data *bo_privs; - struct file **files =3D NULL; int ret =3D 0, pdd_index, bo_index =3D 0, id; void *mem; =20 @@ -2057,12 +2034,6 @@ static int criu_checkpoint_bos(struct kfd_process *p, goto exit; } =20 - files =3D kvcalloc(num_bos, sizeof(struct file *), GFP_KERNEL); - if (!files) { - ret =3D -ENOMEM; - goto exit; - } - for (pdd_index =3D 0; pdd_index < p->n_pdds; pdd_index++) { struct kfd_process_device *pdd =3D p->pdds[pdd_index]; struct amdgpu_bo *dumper_bo; @@ -2105,7 +2076,7 @@ static int criu_checkpoint_bos(struct kfd_process *p, ret =3D criu_get_prime_handle(kgd_mem, bo_bucket->alloc_flags & KFD_IOC_ALLOC_MEM_FLAGS_WRITABLE ? DRM_RDWR : 0, - &bo_bucket->dmabuf_fd, &files[bo_index]); + &bo_bucket->dmabuf_fd); if (ret) goto exit; } else { @@ -2156,8 +2127,6 @@ static int criu_checkpoint_bos(struct kfd_process *p, *priv_offset +=3D num_bos * sizeof(*bo_privs); =20 exit: - commit_files(files, bo_buckets, bo_index, ret); - kvfree(files); kvfree(bo_buckets); kvfree(bo_privs); return ret; @@ -2504,8 +2473,7 @@ static int criu_restore_memory_of_gpu(struct kfd_proc= ess_device *pdd, =20 static int criu_restore_bo(struct kfd_process *p, struct kfd_criu_bo_bucket *bo_bucket, - struct kfd_criu_bo_priv_data *bo_priv, - struct file **file) + struct kfd_criu_bo_priv_data *bo_priv) { struct kfd_process_device *pdd; struct kgd_mem *kgd_mem; @@ -2557,7 +2525,7 @@ static int criu_restore_bo(struct kfd_process *p, if (bo_bucket->alloc_flags & (KFD_IOC_ALLOC_MEM_FLAGS_VRAM | KFD_IOC_ALLOC_MEM_FLAGS_GTT)) { ret =3D criu_get_prime_handle(kgd_mem, DRM_RDWR, - &bo_bucket->dmabuf_fd, file); + &bo_bucket->dmabuf_fd); if (ret) return ret; } else { @@ -2574,7 +2542,6 @@ static int criu_restore_bos(struct kfd_process *p, { struct kfd_criu_bo_bucket *bo_buckets =3D NULL; struct kfd_criu_bo_priv_data *bo_privs =3D NULL; - struct file **files =3D NULL; int ret =3D 0; uint32_t i =3D 0; =20 @@ -2588,12 +2555,6 @@ static int criu_restore_bos(struct kfd_process *p, if (!bo_buckets) return -ENOMEM; =20 - files =3D kvcalloc(args->num_bos, sizeof(struct file *), GFP_KERNEL); - if (!files) { - ret =3D -ENOMEM; - goto exit; - } - ret =3D copy_from_user(bo_buckets, (void __user *)args->bos, args->num_bos * sizeof(*bo_buckets)); if (ret) { @@ -2619,7 +2580,7 @@ static int criu_restore_bos(struct kfd_process *p, =20 /* Create and map new BOs */ for (; i < args->num_bos; i++) { - ret =3D criu_restore_bo(p, &bo_buckets[i], &bo_privs[i], &files[i]); + ret =3D criu_restore_bo(p, &bo_buckets[i], &bo_privs[i]); if (ret) { pr_debug("Failed to restore BO[%d] ret%d\n", i, ret); goto exit; @@ -2634,8 +2595,6 @@ static int criu_restore_bos(struct kfd_process *p, ret =3D -EFAULT; =20 exit: - commit_files(files, bo_buckets, i, ret); - kvfree(files); kvfree(bo_buckets); kvfree(bo_privs); return ret; --=20 2.53.0 From nobody Fri Sep 25 07:56:54 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 DD0F64C753A; Tue, 15 Sep 2026 11:34:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472099; cv=none; b=d6GboCMbtVjPUSKCK65a0Cy1I7axsnNk3mrUGUK+Qdru3AjlNuoY2jTq5UVJYPLisesE4IdpxHh1eejXZHEBblGedWHcbFq+sHnNv1s7e3qJF3rjTxUvA0SGwua2BXsKxzTeJ7EO4vyOG7M9NAFu6npRBhZmrZpJMSZUAbhh6EQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472099; c=relaxed/simple; bh=0aF43DhxqkdJzKcsExOwjxx4MBfkynUOKohe+cP6pHo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=VF0Eto5gienEMNFVGt7gimvxRqAaagZ2fMkA82UTV6Dmri+UNkQORCe7hzuPWmajgZuNKCuM8PI7QCMvMya5eu3sQlIVP242CP4y/mh67GSIBM++LZ/93PODL6u3Al20tB0Wl/BqYDAg7YaulspKNkznM3nnFz+p0qsSakQqT74= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=dILdN8rE; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="dILdN8rE" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 047041F00893; Tue, 15 Sep 2026 11:34:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789472095; bh=Cxkt5ZZmGkjFd539Cl9RA+9e8VT0n+2aqKlnDvtva3g=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=dILdN8rEl6D0AvNs+ADrv4qyz7XFz7x4boFlXmBNHuzp8dsfrNxC3GxAas+GJFMv+ KJnK0aX5JPblFXsMNwsHCIlkZII+0cYJLUL4usXBn+tv30sxD+kVeBTY5hcwuU5iTw MXYhBhYyk8HliVAWPS90CFPCshSX6kinnV9G6S3iAxfflAZBj+c9/TE3CiaFW3hDG7 dRdxg6OcMTB4GCjwlFFQl9XbyBURQfFnRT9yVIi6yc8yWO4+AzWpSl0LOZwVL0qtIE Rv5L8GTAkHFUQiQIsfVM5d6ZEM2JM2QT8a+Fnw1EggkywbFsnu2tEM8H3ZlrtZibQk qheZhWDLwLoTQ== From: Christian Brauner Date: Tue, 15 Sep 2026 13:31:14 +0200 Subject: [PATCH RFC POC 28/50] drm/msm: install the out-fence descriptor when the ioctl returns Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260915-work-fd-reserve-unify-folded-v1-28-4d5217d6b246@kernel.org> References: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> In-Reply-To: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> To: Linus Torvalds Cc: Alexander Viro , Jann Horn , Jan Kara , Ingo Molnar , Peter Zijlstra , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Oleg Nesterov , linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, Jens Axboe , io-uring@vger.kernel.org, netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, bpf@vger.kernel.org, David Airlie , virtualization@lists.linux.dev, kvm@vger.kernel.org, kexec@lists.infradead.org, linux-hyperv@vger.kernel.org, "Christian Brauner (Amutable)" X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=openpgp-sha256; l=3900; i=brauner@kernel.org; h=from:subject:message-id; bh=0aF43DhxqkdJzKcsExOwjxx4MBfkynUOKohe+cP6pHo=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWSt1KkrWhO2ocr+XsOZ92nMd0VvHVZ7Ky7587iN4qmUy EPVDqtUOkpZGMS4GGTFFFkc2k3C5ZbzVGw2ytSAmcPKBDKEgYtTACZixcnwT519/+ba76oz/vy5 vmjf+l1Wu2z2blt9XNlWNjDylNSVxs0Mf2WKlse//zVlb82qCaECXSHqTPxv9vQ9tHvbvedgQGZ ROgcA X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Rely on the fd exit path machinery. Signed-off-by: Christian Brauner (Amutable) --- drivers/gpu/drm/msm/msm_gem_submit.c | 22 +++++++++------------- drivers/gpu/drm/msm/msm_gem_vma.c | 22 +++++++++------------- 2 files changed, 18 insertions(+), 26 deletions(-) diff --git a/drivers/gpu/drm/msm/msm_gem_submit.c b/drivers/gpu/drm/msm/msm= _gem_submit.c index 5862db05297a..4ddfd07c1480 100644 --- a/drivers/gpu/drm/msm/msm_gem_submit.c +++ b/drivers/gpu/drm/msm/msm_gem_submit.c @@ -558,7 +558,7 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *= data, struct drm_syncobj **syncobjs_to_reset =3D NULL; struct sync_file *sync_file =3D NULL; unsigned cmds_to_parse; - int out_fence_fd =3D -1; + const struct fd_slot *out_fence_fd =3D NULL; unsigned i; int ret; =20 @@ -601,9 +601,9 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *= data, ring =3D gpu->rb[queue->ring_nr]; =20 if (args->flags & MSM_SUBMIT_FENCE_FD_OUT) { - out_fence_fd =3D get_unused_fd_flags(O_CLOEXEC); - if (out_fence_fd < 0) { - ret =3D out_fence_fd; + out_fence_fd =3D fd_prepare(O_CLOEXEC); + if (IS_ERR(out_fence_fd)) { + ret =3D PTR_ERR(out_fence_fd); goto out_post_unlock; } } @@ -777,6 +777,8 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *= data, sync_file =3D sync_file_create(submit->user_fence); if (!sync_file) ret =3D -ENOMEM; + else + fd_stage(out_fence_fd, sync_file->file); } =20 if (ret) @@ -814,15 +816,9 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void = *data, out_unlock: mutex_unlock(&queue->lock); out_post_unlock: - if (ret) { - if (out_fence_fd >=3D 0) - put_unused_fd(out_fence_fd); - if (sync_file) - fput(sync_file->file); - } else if (sync_file) { - fd_install(out_fence_fd, sync_file->file); - args->fence_fd =3D out_fence_fd; - } + /* A staged sync file and its descriptor are dropped on return. */ + if (!ret && sync_file) + args->fence_fd =3D fd_prepare_fd(out_fence_fd); =20 if (!IS_ERR_OR_NULL(submit)) { msm_gem_submit_put(submit); diff --git a/drivers/gpu/drm/msm/msm_gem_vma.c b/drivers/gpu/drm/msm/msm_ge= m_vma.c index c11d021581e0..77d365566732 100644 --- a/drivers/gpu/drm/msm/msm_gem_vma.c +++ b/drivers/gpu/drm/msm/msm_gem_vma.c @@ -1441,7 +1441,7 @@ msm_ioctl_vm_bind(struct drm_device *dev, void *data,= struct drm_file *file) struct drm_syncobj **syncobjs_to_reset =3D NULL; struct sync_file *sync_file =3D NULL; struct dma_fence *fence; - int out_fence_fd =3D -1; + const struct fd_slot *out_fence_fd =3D NULL; int ret, nr_bos =3D 0; unsigned i; =20 @@ -1479,9 +1479,9 @@ msm_ioctl_vm_bind(struct drm_device *dev, void *data,= struct drm_file *file) } =20 if (args->flags & MSM_VM_BIND_FENCE_FD_OUT) { - out_fence_fd =3D get_unused_fd_flags(O_CLOEXEC); - if (out_fence_fd < 0) { - ret =3D out_fence_fd; + out_fence_fd =3D fd_prepare(O_CLOEXEC); + if (IS_ERR(out_fence_fd)) { + ret =3D PTR_ERR(out_fence_fd); goto out_post_unlock; } } @@ -1565,6 +1565,8 @@ msm_ioctl_vm_bind(struct drm_device *dev, void *data,= struct drm_file *file) sync_file =3D sync_file_create(job->fence); if (!sync_file) ret =3D -ENOMEM; + else + fd_stage(out_fence_fd, sync_file->file); } =20 if (ret) @@ -1593,15 +1595,9 @@ msm_ioctl_vm_bind(struct drm_device *dev, void *data= , struct drm_file *file) out_unlock: mutex_unlock(&queue->lock); out_post_unlock: - if (ret) { - if (out_fence_fd >=3D 0) - put_unused_fd(out_fence_fd); - if (sync_file) - fput(sync_file->file); - } else if (sync_file) { - fd_install(out_fence_fd, sync_file->file); - args->fence_fd =3D out_fence_fd; - } + /* A staged sync file and its descriptor are dropped on return. */ + if (!ret && sync_file) + args->fence_fd =3D fd_prepare_fd(out_fence_fd); =20 if (!IS_ERR_OR_NULL(job)) { if (ret) --=20 2.53.0 From nobody Fri Sep 25 07:56:54 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 9E6D14C8C5B; Tue, 15 Sep 2026 11:35:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472118; cv=none; b=kN/49UC7yl8csOHlbGjCuig+C4UdykKOv5aC1ixk6eevxzG1zwh/jmnyJ96IkZ2mmuEUDHIWrVq0+tSmbSL29TETViJw7I87q42MoPgnB+6KRyBqTIAp2RUAr/UUygg8LRPttaLC0m3L0NWrEKHmSrtj3+kZGdKE0+lyLL6PLUo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472118; c=relaxed/simple; bh=p0ASybizHVeWg3+K+2/U4eYr0FkEait3G8m6yrPnxug=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=YFtAGWidFsycrVnWBPn/vnBhjKbjpZm20SR1PXogokrZNLsDnWYwXA/1fHS9lJ/HzDNvdtwXkKHzBKbYJleEHD+kFZEj0sDFhuR7ddmOyVVlx7QIo0ulzvVg+5KLHpcs4QWebQrYT+AxF1X72+ZS8SuhH2YX7pRuaqIvL0vObkw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=KA44M0cm; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="KA44M0cm" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C030B1F00898; Tue, 15 Sep 2026 11:34:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789472103; bh=+Z7YvZoUhgCp4iTA46gJpRmnztUthrtoZVj66HfgwUY=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=KA44M0cmNF2mMlF/NDPOuyRWz4vVkHxzKiMxMZ4ISNNfo7H9BTar51IZgT37QoJX1 6srepTnNRPf2DDq8k0Xr2lGax/zEGP29xcg5Q8NVjuDbwOO/px017DffFztmjp8Ha+ BN9rxQ+ckzz66olSbf9AzLwaWhDMxhbiTnSee7sd06Ig+WHUQKBNw53tm8cd+iRMgv H7ptnEs+6ym+zmmY2nGMKn3UT9nTIljKiF99YIGQvS2ezwjHF2FGWp1leEB/9nrbJj zA9+UppFgEv9UDF+Tete4exU2H8M/NSppcn+lHJLgDsGhlGujiOkLCF8yydq5B/Mxi RYtXu9Hi+fWsg== From: Christian Brauner Date: Tue, 15 Sep 2026 13:31:15 +0200 Subject: [PATCH RFC POC 29/50] drm/virtio: install the out-fence descriptor when the ioctl returns Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260915-work-fd-reserve-unify-folded-v1-29-4d5217d6b246@kernel.org> References: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> In-Reply-To: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> To: Linus Torvalds Cc: Alexander Viro , Jann Horn , Jan Kara , Ingo Molnar , Peter Zijlstra , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Oleg Nesterov , linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, Jens Axboe , io-uring@vger.kernel.org, netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, bpf@vger.kernel.org, David Airlie , virtualization@lists.linux.dev, kvm@vger.kernel.org, kexec@lists.infradead.org, linux-hyperv@vger.kernel.org, "Christian Brauner (Amutable)" X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=openpgp-sha256; l=3421; i=brauner@kernel.org; h=from:subject:message-id; bh=p0ASybizHVeWg3+K+2/U4eYr0FkEait3G8m6yrPnxug=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWSt1KlTnNOyTUQz0y+rQub5bi2Wdr3pRa+cWq6FHSt8z FPyLjOgo5SFQYyLQVZMkcWh3SRcbjlPxWajTA2YOaxMIEMYuDgFYCLPhRgZzpcEpJcv22rRdtX7 cKbUFkn/pfMZNuqxXquY3F4nrdInx/CH946PZqsxs8HCIweudkmFfO3eM+HpqaU/s9ffmbhJTXk XOwA= X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Rely on the fd exit path machinery. Signed-off-by: Christian Brauner (Amutable) --- drivers/gpu/drm/virtio/virtgpu_submit.c | 32 ++++++++++++-----------------= --- 1 file changed, 12 insertions(+), 20 deletions(-) diff --git a/drivers/gpu/drm/virtio/virtgpu_submit.c b/drivers/gpu/drm/virt= io/virtgpu_submit.c index 32cb1e4aa425..51b224acb72b 100644 --- a/drivers/gpu/drm/virtio/virtgpu_submit.c +++ b/drivers/gpu/drm/virtio/virtgpu_submit.c @@ -39,7 +39,7 @@ struct virtio_gpu_submit { struct virtio_gpu_device *vgdev; struct sync_file *sync_file; struct drm_file *file; - int out_fence_fd; + const struct fd_slot *out_fence_fd; u64 fence_ctx; u32 ring_idx; void *buf; @@ -340,14 +340,8 @@ static void virtio_gpu_cleanup_submit(struct virtio_gp= u_submit *submit) if (submit->buflist) virtio_gpu_array_put_free(submit->buflist); =20 - if (submit->out_fence_fd >=3D 0) - put_unused_fd(submit->out_fence_fd); - if (submit->out_fence) dma_fence_put(&submit->out_fence->f); - - if (submit->sync_file) - fput(submit->sync_file->file); } =20 static void virtio_gpu_submit(struct virtio_gpu_submit *submit) @@ -363,7 +357,7 @@ static void virtio_gpu_complete_submit(struct virtio_gp= u_submit *submit) submit->buf =3D NULL; submit->buflist =3D NULL; submit->sync_file =3D NULL; - submit->out_fence_fd =3D -1; + submit->out_fence_fd =3D NULL; } =20 static int virtio_gpu_init_submit(struct virtio_gpu_submit *submit, @@ -405,7 +399,7 @@ static int virtio_gpu_init_submit(struct virtio_gpu_sub= mit *submit, submit->out_fence =3D out_fence; submit->fence_ctx =3D fence_ctx; submit->ring_idx =3D ring_idx; - submit->out_fence_fd =3D -1; + submit->out_fence_fd =3D NULL; submit->vfpriv =3D vfpriv; submit->vgdev =3D vgdev; submit->exbuf =3D exbuf; @@ -420,15 +414,15 @@ static int virtio_gpu_init_submit(struct virtio_gpu_s= ubmit *submit, return PTR_ERR(submit->buf); =20 if (exbuf->flags & VIRTGPU_EXECBUF_FENCE_FD_OUT) { - err =3D get_unused_fd_flags(O_CLOEXEC); - if (err < 0) - return err; - - submit->out_fence_fd =3D err; + submit->out_fence_fd =3D fd_prepare(O_CLOEXEC); + if (IS_ERR(submit->out_fence_fd)) + return PTR_ERR(submit->out_fence_fd); =20 submit->sync_file =3D sync_file_create(&out_fence->f); if (!submit->sync_file) return -ENOMEM; + + fd_stage(submit->out_fence_fd, submit->sync_file->file); } =20 return 0; @@ -456,12 +450,10 @@ static int virtio_gpu_wait_in_fence(struct virtio_gpu= _submit *submit) return ret; } =20 -static void virtio_gpu_install_out_fence_fd(struct virtio_gpu_submit *subm= it) +static void virtio_gpu_report_out_fence_fd(struct virtio_gpu_submit *submi= t) { - if (submit->sync_file) { - submit->exbuf->fence_fd =3D submit->out_fence_fd; - fd_install(submit->out_fence_fd, submit->sync_file->file); - } + if (submit->sync_file) + submit->exbuf->fence_fd =3D fd_prepare_fd(submit->out_fence_fd); } =20 static int virtio_gpu_lock_buflist(struct virtio_gpu_submit *submit) @@ -534,7 +526,7 @@ int virtio_gpu_execbuffer_ioctl(struct drm_device *dev,= void *data, * Set up user-out data after submitting the job to optimize * the job submission path. */ - virtio_gpu_install_out_fence_fd(&submit); + virtio_gpu_report_out_fence_fd(&submit); virtio_gpu_process_post_deps(&submit); virtio_gpu_complete_submit(&submit); cleanup: --=20 2.53.0 From nobody Fri Sep 25 07:56:54 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 A27E34A5C34; Tue, 15 Sep 2026 11:35:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472120; cv=none; b=liJdvFz3nHfe71EDB+6WoG2djUJz+6kEoPCgxTls45N+gufxe6c2jEfbCUodovetY9aevG2VJSln59RZ5PCZYk7l2+a5qTbQz1xeW5VWJ7p6IVsJz3twXC080x2fFa+N70Rw+tHfKROPZcAqO89tJSIkERKDpSDf41WDfJhyG/c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472120; c=relaxed/simple; bh=tFtZ4cL0NphK82dRD7+3sjxv1Q+YPE/6KXVfeTbJao0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=DR+67JcV5mQXvb8OkSKGGiHFlfprBs3R8u7y0ir83hmQ6E1ruy60btDuYF8FZmxKm77uHkveczjG2IVi3+ZbCRTQFVNoxxipqRoMAYsmve+jX84OLm0N27PiI2e6spOIk1pGVdbmTafRI0xukCrh8ANLXU3fN9kpG8imktS3dpI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Dekb8smf; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Dekb8smf" Received: by smtp.kernel.org (Postfix) with ESMTPSA id B11231F00899; Tue, 15 Sep 2026 11:35:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789472111; bh=BaiQKOdzM8NM+WnZnsY02ffmMIwkfiUXQItc1CF3f8Q=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=Dekb8smfKI2n5yGWIpNEMN0jdgTr4spZdVK3MdD/TCKNKco8XRVA1TQl+GxXP21IR mQ1bfkZDLmhKqxrPetlmFnyIp76FwXgaVFoceDbmku29MuUZSQS/RfIncrnkMTBqkg IsK8+0mFLEiKooNi0Ql2Y8fw+QKMPZyQpJ0DxXA6DHNh5fdea9CSHRxHeWPOu0c9b3 eXo0ja9rpUrTYduFglwTe8Jute8IZc768Hl3Jb0QwhrUuoIFCwPR0au4hj53ko0ecq gFl4P7NPfeiu/9IfvP8VqLsljSKHoYKJSA97s2sEcmTCisygMQvKIWdbiZ4j2ejXUG CzttZl/23iXnQ== From: Christian Brauner Date: Tue, 15 Sep 2026 13:31:16 +0200 Subject: [PATCH RFC POC 30/50] drm/vmwgfx: install the out-fence descriptor when the ioctl returns Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260915-work-fd-reserve-unify-folded-v1-30-4d5217d6b246@kernel.org> References: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> In-Reply-To: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> To: Linus Torvalds Cc: Alexander Viro , Jann Horn , Jan Kara , Ingo Molnar , Peter Zijlstra , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Oleg Nesterov , linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, Jens Axboe , io-uring@vger.kernel.org, netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, bpf@vger.kernel.org, David Airlie , virtualization@lists.linux.dev, kvm@vger.kernel.org, kexec@lists.infradead.org, linux-hyperv@vger.kernel.org, "Christian Brauner (Amutable)" X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=openpgp-sha256; l=2552; i=brauner@kernel.org; h=from:subject:message-id; bh=tFtZ4cL0NphK82dRD7+3sjxv1Q+YPE/6KXVfeTbJao0=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWSt1KmT96hOWNmU/qLa/h57o09DBu/EH9cY+lcu13eXn l+3V9iuo5SFQYyLQVZMkcWh3SRcbjlPxWajTA2YOaxMIEMYuDgFYCLKcQz/Mxl6ebeze05NNe4M 0FAtDVBmvSBeuO2BBu/r/juTJPP5GP7wZvx9JTPBIYjfMCaNkc/2ZcaSF9xnJPsurtiQL5V+QZc FAA== X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Rely on the fd exit path machinery. Signed-off-by: Christian Brauner (Amutable) --- drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c | 29 +++++++++++------------------ 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c b/drivers/gpu/drm/vmwg= fx/vmwgfx_execbuf.c index a9136a6523cb..9daa74a13485 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c @@ -4109,15 +4109,17 @@ int vmw_execbuf_process(struct drm_file *file_priv, uint32_t handle =3D 0; int ret; int32_t out_fence_fd =3D -1; + const struct fd_slot *out_fd =3D NULL; struct sync_file *sync_file =3D NULL; DECLARE_VAL_CONTEXT(val_ctx, sw_context, 1); =20 if (flags & DRM_VMW_EXECBUF_FLAG_EXPORT_FENCE_FD) { - out_fence_fd =3D get_unused_fd_flags(O_CLOEXEC); - if (out_fence_fd < 0) { + out_fd =3D fd_prepare(O_CLOEXEC); + if (IS_ERR(out_fd)) { VMW_DEBUG_USER("Failed to get a fence fd.\n"); - return out_fence_fd; + return PTR_ERR(out_fd); } + out_fence_fd =3D fd_prepare_fd(out_fd); } =20 if (throttle_us) { @@ -4256,28 +4258,21 @@ int vmw_execbuf_process(struct drm_file *file_priv, sync_file =3D sync_file_create(&fence->base); if (!sync_file) { VMW_DEBUG_USER("Sync file create failed for fence\n"); - put_unused_fd(out_fence_fd); + /* The reserved descriptor is released on return. */ out_fence_fd =3D -1; =20 (void) vmw_fence_obj_wait(fence, false, false, VMW_FENCE_WAIT_TIMEOUT); + } else { + /* Link the fence with the FD created earlier */ + fd_stage(out_fd, sync_file->file); } } =20 + /* A staged sync file is dropped with the ioctl on error. */ ret =3D vmw_execbuf_copy_fence_user(dev_priv, vmw_fpriv(file_priv), ret, user_fence_rep, fence, handle, out_fence_fd); =20 - if (sync_file) { - if (ret) { - /* usercopy of fence failed, put the file object */ - fput(sync_file->file); - put_unused_fd(out_fence_fd); - } else { - /* Link the fence with the FD created earlier */ - fd_install(out_fence_fd, sync_file->file); - } - } - /* Don't unreference when handing fence out */ if (unlikely(out_fence !=3D NULL)) { *out_fence =3D fence; @@ -4323,9 +4318,7 @@ int vmw_execbuf_process(struct drm_file *file_priv, if (header) vmw_cmdbuf_header_free(header); out_free_fence_fd: - if (out_fence_fd >=3D 0) - put_unused_fd(out_fence_fd); - + /* A reserved descriptor is released on return. */ return ret; } =20 --=20 2.53.0 From nobody Fri Sep 25 07:56:54 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 974CF4CC299; Tue, 15 Sep 2026 11:35:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472123; cv=none; b=h5Z7sfTGTUots5Fr1iP2XF9S7r1pcYUMP6HTDrVn9zVpedOhL5MAY7kDQXCdnOfEVxomGwCUIaxz8gYfEaWZHlRNIrDNxF/rLvBAMdbPwpnXUtF+shutOrwzWklUCVIyIgAT9hHsk9hmurHXvYYS56JWrUUIoHfmdvHucXtf9Ys= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472123; c=relaxed/simple; bh=ZuarGRo5ZqIHA3hh6zA1izPVcZ2LCwhC5SlPF3ZepH0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=MhmWxjbzPtwYe0W+Qj8QSdBWLIf6F4VwTRViXnFTDneNsx5Zr1Vg5p93zSMpbH/RiXFvvdBbxV0p6eLXRGsXmLLbzB0yqvQQjeipwNTZ31pKtc7e7H3z4qd+4XAeWd1xCXvn+McY5qxKkhvScgGZrMNn31WFl7+VVmQUU7IJQ0M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=HrkMpIvO; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="HrkMpIvO" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 91A641F0089B; Tue, 15 Sep 2026 11:35:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789472119; bh=vu/oKxz+arn92APs3M7qiv06zwHfUu2cH5sFUjT3DBs=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=HrkMpIvO7iGYskIOyxgrnhbmY51Jc8Ub7q4Why0AOMW3f+ydbKbSBCxy95zXyqe1p ZoAv51UkkYKpcZYTAAisBxBl4hf6Uv+KmnEvtmEszCrFQ4UCX6prXJTwvfuh+VBg0H KsE2Brv2yI+jIip82JC/Ngr+3NzDrIw2sFwoF22lMvLiCLY/9/fGutyOhJmWBoHQ0r N5tgRdT+HEy2DU7RimgNlnfIOmMDcup/G0VPUdWrNxwZPN/IikW4sEG5zmO1gaEX/J VgppH76C/4vJ+axoPp1uwZD0v634hBDcqupR0UFuTNRHu80xxaX7JAyL6dF7YCetWD 6h8T6BgsJ0X2A== From: Christian Brauner Date: Tue, 15 Sep 2026 13:31:17 +0200 Subject: [PATCH RFC POC 31/50] vfio: install the migration data descriptor when the ioctl returns Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260915-work-fd-reserve-unify-folded-v1-31-4d5217d6b246@kernel.org> References: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> In-Reply-To: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> To: Linus Torvalds Cc: Alexander Viro , Jann Horn , Jan Kara , Ingo Molnar , Peter Zijlstra , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Oleg Nesterov , linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, Jens Axboe , io-uring@vger.kernel.org, netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, bpf@vger.kernel.org, David Airlie , virtualization@lists.linux.dev, kvm@vger.kernel.org, kexec@lists.infradead.org, linux-hyperv@vger.kernel.org, "Christian Brauner (Amutable)" X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=openpgp-sha256; l=1192; i=brauner@kernel.org; h=from:subject:message-id; bh=ZuarGRo5ZqIHA3hh6zA1izPVcZ2LCwhC5SlPF3ZepH0=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWSt1Kkzvf951a0G+ZqpXSZ3J2/arrxG/8r9+aez1z9K9 bjIVK2r1FHKwiDGxSArpsji0G4SLrecp2KzUaYGzBxWJpAhDFycAjCRLQaMDBeN9d/bKs4OXXDx gkR+xafcmPCqbumzYcILTbl2Jzp0VTP8YspvytbQP3uhP99bqOslw97nz5UieFd43hf6lsB++8w DdgA= X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Rely on the fd exit path machinery. Signed-off-by: Christian Brauner (Amutable) --- drivers/vfio/vfio_main.c | 25 +++++++------------------ 1 file changed, 7 insertions(+), 18 deletions(-) diff --git a/drivers/vfio/vfio_main.c b/drivers/vfio/vfio_main.c index 423ead48aafe..93d9d21f4074 100644 --- a/drivers/vfio/vfio_main.c +++ b/drivers/vfio/vfio_main.c @@ -903,28 +903,17 @@ EXPORT_SYMBOL_GPL(vfio_mig_get_next_state); static int vfio_ioct_mig_return_fd(struct file *filp, void __user *arg, struct vfio_device_feature_mig_state *mig) { - int ret; - int fd; + FD_PREPARE(fdf, O_CLOEXEC, filp); =20 - fd =3D get_unused_fd_flags(O_CLOEXEC); - if (fd < 0) { - ret =3D fd; - goto out_fput; + if (IS_ERR(fdf)) { + fput(filp); + return PTR_ERR(fdf); } =20 - mig->data_fd =3D fd; - if (copy_to_user(arg, mig, sizeof(*mig))) { - ret =3D -EFAULT; - goto out_put_unused; - } - fd_install(fd, filp); + mig->data_fd =3D fd_prepare_fd(fdf); + if (copy_to_user(arg, mig, sizeof(*mig))) + return -EFAULT; return 0; - -out_put_unused: - put_unused_fd(fd); -out_fput: - fput(filp); - return ret; } =20 static int --=20 2.53.0 From nobody Fri Sep 25 07:56:54 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 7E59C47D931; Tue, 15 Sep 2026 11:35:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472133; cv=none; b=G0HqPjuHPq33y7VorTzMRCBzulrC5jFOUJTc/ukrj4nhM5RepPNTGFeT0brOAWiXA+L4qOEjigxxxLaYGHV67dVsaH3zNm8VK9sqqAufRPcpOAptILxqQDCjW0yU5oGl7CoT3jMuy9sJHQqLSb1FBmYCUZvIj+4+FMc5JN1gM8E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472133; c=relaxed/simple; bh=B2yzY8WVH9I+iLi4OuPEJenUrd90D6GAB5zasGpbfEQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=KIMbHbRHWZHj+Hvua4fGWG+6lIojmT8vR24jmTPiiqhHuv4cpvXmXyDpDMMHziFpkdMOUmBWKrM9ZJ92LEzYsH4GInMahEaZXJ7kG4iNnk/Ut+EuGC8cfz3XqE1BARnPbqyEmSEYHP2uz6I3HukuJ6rLk7qbwyydMuH090ekFcs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=XqYmNccj; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="XqYmNccj" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 863231F00893; Tue, 15 Sep 2026 11:35:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789472127; bh=SiDQySP8IWTYUOdB117br7TNLcvsxWg+xpN5r3cQq6M=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=XqYmNccjTCHTgLZfaFkSBqBDFVVBpN4V7uWmro0nlZYhYXdIOR3pUJm31rdV5qmY+ IvkQ+yJ07iMIJdVfTfCU/X+J1F85+bUe/IC+GzOLdoIsjHzzI0cRTRkin0A6HJ4e9A wjbY7EF1qh+Lal3EYMMKlHTRwBv+A5nykmakJD+8D67Z72hDwiPvXhqDAFfL92TuNh lR+9tIh+dTMh59L9wRnctKfZHIAF9NgyjZ0E3adVhwso4Hs5jlLy1+Oyk4a8gR0BJY rzlOT3+qL2yuGXywSlb/k0KzE8CbI8Z7lw3SuGIaABfBF2TZ/OabNmu6rvP9iBmcEe 3ufAwvnh6Znbw== From: Christian Brauner Date: Tue, 15 Sep 2026 13:31:18 +0200 Subject: [PATCH RFC POC 32/50] liveupdate: install the session descriptors when the ioctl returns Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260915-work-fd-reserve-unify-folded-v1-32-4d5217d6b246@kernel.org> References: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> In-Reply-To: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> To: Linus Torvalds Cc: Alexander Viro , Jann Horn , Jan Kara , Ingo Molnar , Peter Zijlstra , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Oleg Nesterov , linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, Jens Axboe , io-uring@vger.kernel.org, netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, bpf@vger.kernel.org, David Airlie , virtualization@lists.linux.dev, kvm@vger.kernel.org, kexec@lists.infradead.org, linux-hyperv@vger.kernel.org, "Christian Brauner (Amutable)" X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=openpgp-sha256; l=3361; i=brauner@kernel.org; h=from:subject:message-id; bh=B2yzY8WVH9I+iLi4OuPEJenUrd90D6GAB5zasGpbfEQ=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWSt1Kk7WTbjY/LDc6u2Nl9xvMO+7IG4y7ylT0vafyesW 7+59X5BSUcpC4MYF4OsmCKLQ7tJuNxynorNRpkaMHNYmUCGMHBxCsBEdFwZGQ4ll/MKLt9+yuPv Ls73Mh5H/nGs+LpMfK0El6Rj9O4LjyQZGY7rKSdd2rLmmIq27bPU4yUy5+NELr/9Lxu7/vCdBG/ ZPH4A X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Rely on the fd exit path machinery. Signed-off-by: Christian Brauner (Amutable) --- kernel/liveupdate/luo_core.c | 48 ++++++++++++-------------------------= ---- kernel/liveupdate/luo_session.c | 24 ++++++--------------- 2 files changed, 21 insertions(+), 51 deletions(-) diff --git a/kernel/liveupdate/luo_core.c b/kernel/liveupdate/luo_core.c index 1b2bda22902d..3899bbf30b53 100644 --- a/kernel/liveupdate/luo_core.c +++ b/kernel/liveupdate/luo_core.c @@ -270,61 +270,41 @@ struct luo_device_state { static int luo_ioctl_create_session(struct luo_ucmd *ucmd) { struct liveupdate_ioctl_create_session *argp =3D ucmd->cmd; + const struct fd_slot *fd; struct file *file; int err; =20 - argp->fd =3D get_unused_fd_flags(O_CLOEXEC); - if (argp->fd < 0) - return argp->fd; + fd =3D fd_prepare(O_CLOEXEC); + if (IS_ERR(fd)) + return PTR_ERR(fd); =20 err =3D luo_session_create(argp->name, &file); if (err) - goto err_put_fd; - - err =3D luo_ucmd_respond(ucmd, sizeof(*argp)); - if (err) - goto err_put_file; - - fd_install(argp->fd, file); - - return 0; + return err; =20 -err_put_file: - fput(file); -err_put_fd: - put_unused_fd(argp->fd); + argp->fd =3D fd_stage(fd, file); =20 - return err; + return luo_ucmd_respond(ucmd, sizeof(*argp)); } =20 static int luo_ioctl_retrieve_session(struct luo_ucmd *ucmd) { struct liveupdate_ioctl_retrieve_session *argp =3D ucmd->cmd; + const struct fd_slot *fd; struct file *file; int err; =20 - argp->fd =3D get_unused_fd_flags(O_CLOEXEC); - if (argp->fd < 0) - return argp->fd; + fd =3D fd_prepare(O_CLOEXEC); + if (IS_ERR(fd)) + return PTR_ERR(fd); =20 err =3D luo_session_retrieve(argp->name, &file); if (err < 0) - goto err_put_fd; - - err =3D luo_ucmd_respond(ucmd, sizeof(*argp)); - if (err) - goto err_put_file; - - fd_install(argp->fd, file); - - return 0; + return err; =20 -err_put_file: - fput(file); -err_put_fd: - put_unused_fd(argp->fd); + argp->fd =3D fd_stage(fd, file); =20 - return err; + return luo_ucmd_respond(ucmd, sizeof(*argp)); } =20 static int luo_open(struct inode *inodep, struct file *filep) diff --git a/kernel/liveupdate/luo_session.c b/kernel/liveupdate/luo_sessio= n.c index f48e9a4185f9..7de35bad1ede 100644 --- a/kernel/liveupdate/luo_session.c +++ b/kernel/liveupdate/luo_session.c @@ -282,33 +282,23 @@ static int luo_session_retrieve_fd(struct luo_session= *session, struct luo_ucmd *ucmd) { struct liveupdate_session_retrieve_fd *argp =3D ucmd->cmd; + const struct fd_slot *fd; struct file *file; int err; =20 - argp->fd =3D get_unused_fd_flags(O_CLOEXEC); - if (argp->fd < 0) - return argp->fd; + fd =3D fd_prepare(O_CLOEXEC); + if (IS_ERR(fd)) + return PTR_ERR(fd); =20 mutex_lock(&session->mutex); err =3D luo_retrieve_file(&session->file_set, argp->token, &file); mutex_unlock(&session->mutex); if (err < 0) - goto err_put_fd; - - err =3D luo_ucmd_respond(ucmd, sizeof(*argp)); - if (err) - goto err_put_file; - - fd_install(argp->fd, file); - - return 0; + return err; =20 -err_put_file: - fput(file); -err_put_fd: - put_unused_fd(argp->fd); + argp->fd =3D fd_stage(fd, file); =20 - return err; + return luo_ucmd_respond(ucmd, sizeof(*argp)); } =20 static int luo_session_finish(struct luo_session *session, --=20 2.53.0 From nobody Fri Sep 25 07:56:54 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 E3A294CC630; Tue, 15 Sep 2026 11:35:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472145; cv=none; b=IPJjvZk6Px2HF7lR93SW5DuDC/f4p78dsk1ZntKZ3ys8W5C2CKzB92izoGonj/BGUdeg14N0vpKTBDqow5sXHA1gif6RmoNYWw9vfqyP1MI8Svonktbz3mBdV2G5yxc4xY9Pz8sfWPhcJ96UCR0HVYtGCkIt3vnOBYhTWY9Q2wM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472145; c=relaxed/simple; bh=g4cMNX/82jJQalDLSwX1Nity2yqjS0J0NiJHAB23CT0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=J62rKc/Wgx8GPRQPuPmTysNqbHy7hT9iy1uLojebyU0jsVb4jAXMCPfDsqCHeNEX2ii+fWVZgzZpqPG8K3gZwL0AF943iYhJcQShO3E8Pb2fTILo0l17NsI9DgVHP4K3xyll1UyBWSE8HaY7YJROatkwogyfUWk3pgxLC2hfmno= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=QShSpSCR; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="QShSpSCR" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 855EE1F000FF; Tue, 15 Sep 2026 11:35:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789472135; bh=4cyWZY3NqovxpRDY6IE9b0iFSwFNHI0DbK45a85UipQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=QShSpSCRD6Ol4MQvbWaGFCrC9D2hEvMMsqJVxbgperwaAzfDuHUwR651hhvjbuklD V8TQMFUcMD9eSXSMuyAwgiWFzi0aqbkjT2ga+ukHQTd+ooSqbRR0w+8dklcQllx84s J1vd1rrkg7W2xCcJFOtsGmjuUfysGb2g+4rZjFbqLWmyJ8Yf8Ww523QPYOM4gdlVYe 9qjw6VvRm1T5endGkraMKVYh3kIi8DvPoXM1B76VPl1ZetouR5ZWcWZs/UQmu4oEg/ QeIQWjAGAMnj1aiLn/FeAtI3+y0er7L+q8OA2u/+KtDir8seIk/RUJip7Wgf4oA2Ys w5GYgWQdLMU4Q== From: Christian Brauner Date: Tue, 15 Sep 2026 13:31:19 +0200 Subject: [PATCH RFC POC 33/50] io_uring/zcrx: install the exported descriptor when the request returns Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260915-work-fd-reserve-unify-folded-v1-33-4d5217d6b246@kernel.org> References: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> In-Reply-To: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> To: Linus Torvalds Cc: Alexander Viro , Jann Horn , Jan Kara , Ingo Molnar , Peter Zijlstra , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Oleg Nesterov , linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, Jens Axboe , io-uring@vger.kernel.org, netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, bpf@vger.kernel.org, David Airlie , virtualization@lists.linux.dev, kvm@vger.kernel.org, kexec@lists.infradead.org, linux-hyperv@vger.kernel.org, "Christian Brauner (Amutable)" X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=openpgp-sha256; l=1536; i=brauner@kernel.org; h=from:subject:message-id; bh=g4cMNX/82jJQalDLSwX1Nity2yqjS0J0NiJHAB23CT0=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWSt1Kk73H60xLL/uL9c1Ubz66I7n/6tuiXcUVn6/cZhl 7opP+8pdJSyMIhxMciKKbI4tJuEyy3nqdhslKkBM4eVCWQIAxenAExk/weG/3mbVB0z75nsf+2g kJwuHDdbwrosi1P7+cq1bOytTdFl1gz/Y3eZWfw1evMxy/980nMezqvh6nqrq+2qsnZHrDSbM9O WEQA= X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Rely on the fd exit path machinery. Signed-off-by: Christian Brauner (Amutable) --- io_uring/zcrx.c | 25 +++++++------------------ 1 file changed, 7 insertions(+), 18 deletions(-) diff --git a/io_uring/zcrx.c b/io_uring/zcrx.c index 1b3b11405dac..d458c614c765 100644 --- a/io_uring/zcrx.c +++ b/io_uring/zcrx.c @@ -795,8 +795,6 @@ static int zcrx_export(struct io_ring_ctx *ctx, struct = io_zcrx_ifq *ifq, struct zcrx_ctrl *ctrl, void __user *arg) { struct zcrx_ctrl_export *ce =3D &ctrl->zc_export; - struct file *file; - int fd; =20 if (!mem_is_zero(ce, sizeof(*ce))) return -EINVAL; @@ -804,27 +802,18 @@ static int zcrx_export(struct io_ring_ctx *ctx, struc= t io_zcrx_ifq *ifq, refcount_inc(&ifq->refs); refcount_inc(&ifq->user_refs); =20 - file =3D anon_inode_create_getfile("[zcrx]", &zcrx_box_fops, - ifq, O_CLOEXEC, NULL); - if (IS_ERR(file)) { + FD_PREPARE(fdf, O_CLOEXEC, + anon_inode_create_getfile("[zcrx]", &zcrx_box_fops, ifq, + O_CLOEXEC, NULL)); + if (IS_ERR(fdf)) { zcrx_unregister(ifq, NULL); - return PTR_ERR(file); - } - - fd =3D get_unused_fd_flags(O_CLOEXEC); - if (fd < 0) { - fput(file); - return fd; + return PTR_ERR(fdf); } =20 - ce->zcrx_fd =3D fd; - if (copy_to_user(arg, ctrl, sizeof(*ctrl))) { - fput(file); - put_unused_fd(fd); + ce->zcrx_fd =3D fd_prepare_fd(fdf); + if (copy_to_user(arg, ctrl, sizeof(*ctrl))) return -EFAULT; - } =20 - fd_install(fd, file); return 0; } =20 --=20 2.53.0 From nobody Fri Sep 25 07:56:54 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 109694D2EC3; Tue, 15 Sep 2026 11:35:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472155; cv=none; b=MP+n4fPpleqvVGCDsskuT9IkripdC2aHFYEaWiOMq/xXe4s1+ZoqVSpZ4tsEmImPjm7XcrzmP9d76Cm4SirF37xC5Ed/enQFvaQvqhTW+QEeT7fUFmhMdDx/+UWaQvJHw4n4+oy0NG8P4WNahQ+Fe5wJWFhglKw5fdpyXZO/v+E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472155; c=relaxed/simple; bh=jxeTmf0RLLPrfqfHR6VaW0QlyLJFo9vgcxMApZCym7U=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=jHGB3BR1waAmo9gMVZPz7mOuw+2ms/FznqKjVRNFsET1pQHbTnRy2tuJN4osqZp6jZ9QYBnJXkm8SlRZDp2X1ByRmQ2lCaoJrTd67PbshYmxHglndeuxyrVvmRCOjiJqf75n45nnMCQXJIWskcz3wEoFL15xLGj4AZ4rp9CHwns= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=HEvP3jmw; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="HEvP3jmw" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 738C21F00893; Tue, 15 Sep 2026 11:35:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789472142; bh=1MrvtETchtY74VhNhdP5L1TLK5JZUI/4E6S7ET6JvLE=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=HEvP3jmwChKyeHdJ9Jg3mkRQ3dA8Vigmgn9aN70pEyemzrmDRt+HBflUFt5dg79cy nmMA9QgA22+3lDgeMbCub5jO8UBj8OpN+VauBt7p0dIet/Okhi/+8AxBkWACPQan5v iQ0CGGPOK3xa6Bp++Ti5WKZZzuDFnPibEu6y50nXpqvsbgWZb46/QO9Fp/CohuBmiy 4H6uR9SGKU0GNDbp8fufyXpe2tUFSDQhZvLM/dJkrYmbemLCUe0oHuhVmELpbcwMRe lCVZjHzvU3NtKwOBPfXEcCycM3OMg+ZekdadygNaeC/QE91ROYMdhIuR0e/OpAPmhY Sv9/raR2HHHcg== From: Christian Brauner Date: Tue, 15 Sep 2026 13:31:20 +0200 Subject: [PATCH RFC POC 34/50] sctp: install the peeloff descriptor when the syscall returns Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260915-work-fd-reserve-unify-folded-v1-34-4d5217d6b246@kernel.org> References: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> In-Reply-To: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> To: Linus Torvalds Cc: Alexander Viro , Jann Horn , Jan Kara , Ingo Molnar , Peter Zijlstra , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Oleg Nesterov , linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, Jens Axboe , io-uring@vger.kernel.org, netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, bpf@vger.kernel.org, David Airlie , virtualization@lists.linux.dev, kvm@vger.kernel.org, kexec@lists.infradead.org, linux-hyperv@vger.kernel.org, "Christian Brauner (Amutable)" X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=openpgp-sha256; l=3999; i=brauner@kernel.org; h=from:subject:message-id; bh=jxeTmf0RLLPrfqfHR6VaW0QlyLJFo9vgcxMApZCym7U=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWSt1Km7cNv2coTSh6uv2SKV9J9xe1cli18O2fg9bbWMR XmeZEFFRykLgxgXg6yYIotDu0m43HKeis1GmRowc1iZQIYwcHEKwEQuPmT4ZzXhBS9/eF7krI4v 9nuSVLY1Xi4SeKo2SeDbFrPXBqrPxBj+yrHXSsXOVdm4U/HG2oqX3ly9K7UCc6pmru7Si/L9f7W YAQA= X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Rely on the fd exit path machinery. Signed-off-by: Christian Brauner (Amutable) --- net/sctp/socket.c | 78 +++++++++++++++++++++------------------------------= ---- 1 file changed, 29 insertions(+), 49 deletions(-) diff --git a/net/sctp/socket.c b/net/sctp/socket.c index c7b9e325ec1c..b75c50af8c16 100644 --- a/net/sctp/socket.c +++ b/net/sctp/socket.c @@ -5744,46 +5744,41 @@ static int sctp_do_peeloff(struct sock *sk, sctp_as= soc_t id, } =20 static int sctp_getsockopt_peeloff_common(struct sock *sk, sctp_peeloff_ar= g_t *peeloff, - struct file **newfile, unsigned flags) + unsigned flags) { struct socket *newsock; + struct file *newfile; + const struct fd_slot *fd; int retval; =20 retval =3D sctp_do_peeloff(sk, peeloff->associd, &newsock); if (retval < 0) - goto out; + return retval; =20 - /* Map the socket to an unused fd that can be returned to the user. */ - retval =3D get_unused_fd_flags(flags & SOCK_CLOEXEC); - if (retval < 0) { + /* Map the socket to a reserved fd that can be returned to the user. */ + fd =3D fd_prepare(flags & SOCK_CLOEXEC); + if (IS_ERR(fd)) { sock_release(newsock); - goto out; - } - - *newfile =3D sock_alloc_file(newsock, 0, NULL); - if (IS_ERR(*newfile)) { - put_unused_fd(retval); - retval =3D PTR_ERR(*newfile); - *newfile =3D NULL; - return retval; + return PTR_ERR(fd); } =20 - pr_debug("%s: sk:%p, newsk:%p, sd:%d\n", __func__, sk, newsock->sk, - retval); - - peeloff->sd =3D retval; + newfile =3D sock_alloc_file(newsock, 0, NULL); + if (IS_ERR(newfile)) + return PTR_ERR(newfile); =20 if (flags & SOCK_NONBLOCK) - (*newfile)->f_flags |=3D O_NONBLOCK; -out: - return retval; + newfile->f_flags |=3D O_NONBLOCK; + + peeloff->sd =3D fd_stage(fd, newfile); + pr_debug("%s: sk:%p, newsk:%p, sd:%d\n", __func__, sk, newsock->sk, + peeloff->sd); + return peeloff->sd; } =20 static int sctp_getsockopt_peeloff(struct sock *sk, int len, char __user *= optval, int __user *optlen) { sctp_peeloff_arg_t peeloff; - struct file *newfile =3D NULL; - int retval =3D 0; + int retval; =20 if (len < sizeof(sctp_peeloff_arg_t)) return -EINVAL; @@ -5791,24 +5786,17 @@ static int sctp_getsockopt_peeloff(struct sock *sk,= int len, char __user *optval if (copy_from_user(&peeloff, optval, len)) return -EFAULT; =20 - retval =3D sctp_getsockopt_peeloff_common(sk, &peeloff, &newfile, 0); + retval =3D sctp_getsockopt_peeloff_common(sk, &peeloff, 0); if (retval < 0) - goto out; + return retval; =20 /* Return the fd mapped to the new socket. */ - if (put_user(len, optlen)) { - fput(newfile); - put_unused_fd(retval); + if (put_user(len, optlen)) return -EFAULT; - } =20 - if (copy_to_user(optval, &peeloff, len)) { - fput(newfile); - put_unused_fd(retval); + if (copy_to_user(optval, &peeloff, len)) return -EFAULT; - } - fd_install(retval, newfile); -out: + return retval; } =20 @@ -5816,8 +5804,7 @@ static int sctp_getsockopt_peeloff_flags(struct sock = *sk, int len, char __user *optval, int __user *optlen) { sctp_peeloff_flags_arg_t peeloff; - struct file *newfile =3D NULL; - int retval =3D 0; + int retval; =20 if (len < sizeof(sctp_peeloff_flags_arg_t)) return -EINVAL; @@ -5826,24 +5813,17 @@ static int sctp_getsockopt_peeloff_flags(struct soc= k *sk, int len, return -EFAULT; =20 retval =3D sctp_getsockopt_peeloff_common(sk, &peeloff.p_arg, - &newfile, peeloff.flags); + peeloff.flags); if (retval < 0) - goto out; + return retval; =20 /* Return the fd mapped to the new socket. */ - if (put_user(len, optlen)) { - fput(newfile); - put_unused_fd(retval); + if (put_user(len, optlen)) return -EFAULT; - } =20 - if (copy_to_user(optval, &peeloff, len)) { - fput(newfile); - put_unused_fd(retval); + if (copy_to_user(optval, &peeloff, len)) return -EFAULT; - } - fd_install(retval, newfile); -out: + return retval; } =20 --=20 2.53.0 From nobody Fri Sep 25 07:56:54 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 8835E4D90B5; Tue, 15 Sep 2026 11:35:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472157; cv=none; b=siIkRFu9Ng8kaAuBB6CyUk+E0exi3f78kxXvc27Wlw2HfE+wFK084yQ+ztzBQjQzNIUrlbINBLeadDj6htqmPIs1f/1yfqAh+fht190O8sV9ebBJfyVaA6NByv7gx2fRxe8tOYSqMHpfWf2/AJ6BIgRmjyNguEVA1mFbMoPvY2Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472157; c=relaxed/simple; bh=QV1nvuOZOTXbG885TIwwr0E5buagCxFnNDHDpDWzkd0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=C3HvDXen9hazl/vKSMa2c5SPhfn+dzOlgdJuzKoHuNTr8n6wPoh/ZSIigFqro3qvwwEI18AXMWwuKt/oBhhkU3E7mRdgA1UYvwKn1nv3tnROUHdpeGjKQy0T+pWN0KxrKpPBR6RmvkFgT7RVuB6YOLpwI0DDjSDkNGqv3FWloTA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=MdYtXPMr; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="MdYtXPMr" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4FDC21F00898; Tue, 15 Sep 2026 11:35:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789472150; bh=RYwvcYgPe7F+yniz25uY8kYzwfi4Dpf3GuV+JDSn+cI=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=MdYtXPMryZ+6SAlSbL19CQpX3Z64/AWWELS/WUVzAp8Xg1GKcwta2ZBYcN6wG36Mt as5Dtg1uHZx0++57+0zFQf62SXXotYbTuzCZx9KtLUQmxwarrRVEc5GHr8NgTGLTnD fm7wTaE+frwG78TGBDzq5+X5mT91CNgxDsAlIIvj/82S1VRyMtU0YNLM25MFctgbyo vTKRbl5GQlZXJ0hhVYRlwEl093ozZ6/IECB99aVD24EC0zmPYaRRHVzNiU6egwU8ae gX3+hqTSVslPaF8dAefZoz9w+FElBtfBAJO7mXAQPx7QPzbOBB9Xhv3/9TzLihtFHy 3qlJrcB+1giaw== From: Christian Brauner Date: Tue, 15 Sep 2026 13:31:21 +0200 Subject: [PATCH RFC POC 35/50] ALSA: compress: install the task descriptors when the ioctl returns Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260915-work-fd-reserve-unify-folded-v1-35-4d5217d6b246@kernel.org> References: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> In-Reply-To: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> To: Linus Torvalds Cc: Alexander Viro , Jann Horn , Jan Kara , Ingo Molnar , Peter Zijlstra , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Oleg Nesterov , linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, Jens Axboe , io-uring@vger.kernel.org, netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, bpf@vger.kernel.org, David Airlie , virtualization@lists.linux.dev, kvm@vger.kernel.org, kexec@lists.infradead.org, linux-hyperv@vger.kernel.org, "Christian Brauner (Amutable)" X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=openpgp-sha256; l=2232; i=brauner@kernel.org; h=from:subject:message-id; bh=QV1nvuOZOTXbG885TIwwr0E5buagCxFnNDHDpDWzkd0=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWSt1Kk7NZFnW/2OMo2T/F2ffljdXrzpyBybxa2xOhV3m 5euvTinqKOUhUGMi0FWTJHFod0kXG45T8Vmo0wNmDmsTCBDGLg4BWAidmKMDD3u79olF+/8fDpn 05GGxJ924Sr7JVZeMFmoxWl14Jl/rCQjQzvbH6/0789fvC17P2P1pnCZsljB76s+Sl9/e0W5ZEW eETMA X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Rely on the fd exit path machinery. Signed-off-by: Christian Brauner (Amutable) --- sound/core/compress_offload.c | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/sound/core/compress_offload.c b/sound/core/compress_offload.c index 23d62fede06e..94bc226f8db9 100644 --- a/sound/core/compress_offload.c +++ b/sound/core/compress_offload.c @@ -1065,7 +1065,8 @@ static u64 snd_compr_seqno_next(struct snd_compr_stre= am *stream) static int snd_compr_task_new(struct snd_compr_stream *stream, struct snd_= compr_task *utask) { struct snd_compr_task_runtime *task; - int retval, fd_i, fd_o; + int retval; + const struct fd_slot *fd_i, *fd_o; =20 if (stream->runtime->total_tasks >=3D stream->runtime->fragments) return -EBUSY; @@ -1080,29 +1081,26 @@ static int snd_compr_task_new(struct snd_compr_stre= am *stream, struct snd_compr_ if (retval < 0) goto cleanup; /* similar functionality as in dma_buf_fd(), but ensure that both - file descriptors are allocated before fd_install() */ + file descriptors are reserved before either is staged */ if (!task->input || !task->input->file || !task->output || !task->output-= >file) { retval =3D -EINVAL; goto free_driver_task; } - fd_i =3D get_unused_fd_flags(O_WRONLY|O_CLOEXEC); - if (fd_i < 0) { - retval =3D fd_i; + fd_i =3D fd_prepare(O_WRONLY|O_CLOEXEC); + if (IS_ERR(fd_i)) { + retval =3D PTR_ERR(fd_i); goto free_driver_task; } - fd_o =3D get_unused_fd_flags(O_RDONLY|O_CLOEXEC); - if (fd_o < 0) { - retval =3D fd_o; - put_unused_fd(fd_i); + fd_o =3D fd_prepare(O_RDONLY|O_CLOEXEC); + if (IS_ERR(fd_o)) { + retval =3D PTR_ERR(fd_o); goto free_driver_task; } /* keep dmabuf reference until freed with task free ioctl */ get_dma_buf(task->input); get_dma_buf(task->output); - fd_install(fd_i, task->input->file); - fd_install(fd_o, task->output->file); - utask->input_fd =3D fd_i; - utask->output_fd =3D fd_o; + utask->input_fd =3D fd_stage(fd_i, task->input->file); + utask->output_fd =3D fd_stage(fd_o, task->output->file); list_add_tail(&task->list, &stream->runtime->tasks); stream->runtime->total_tasks++; return 0; --=20 2.53.0 From nobody Fri Sep 25 07:56:54 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 0A64F4E66A1; Tue, 15 Sep 2026 11:35:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472161; cv=none; b=LlybUZ/TMRzIFwY4W9VPwfjGo4tD89q3K5T9yuTVISw6dUp4g6wCoou0X9XXVxpvMguRHt7VnSIK6GEifaR0jI+mPHCeBd5t40cvQxtY0YrkCcauaZVkohoNtEJ26kmanGe2zVnQrr6lHnsYi71Wtpu0EjUe8Pv8afFVIqHkvJk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472161; c=relaxed/simple; bh=06X+neGC1JeQjfUMZrHZWaV7oELS9OsBJ6UQD7zSi4E=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=VLpXBoynM+VWiJoho2iRz3DT2+NBopl3Z1AxeFif8n6qpkNNzvDoDCA0JiVPFubHmxATyFm2fzwgMg7GJk/hQ4odqvFMvNskm6//w2S54W3LjjiL8MUtdOLd78WhPPYtI3GM2zSrT5dg2K8lP+cMlbrL51WSUfC8JAsSFATrcRQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=DP7k+2oY; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="DP7k+2oY" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2B05B1F000FF; Tue, 15 Sep 2026 11:35:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789472158; bh=b40qx/awPhHY3pAbyOLJ2VCQCA5LCLOxDhc9IZ5eVmE=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=DP7k+2oYU08PDg3XHLYvBCrc74ArLylq263ZQfhfXbqRVkmDQErCOMCCjVwzRS3TV Y8Y1vhMdhR6mX1rzdLqcAsmQNs12N3hdTVztl8RasOi+yrl66kgtJvAm30HiqkZulb BeZJvaqfhTtzMk7k9vathecezVTk0f7HRyPRJBoxuaSPdxLiJQMLNsbQRaHiPb0ydM Bs/kN8QurhjzxM80pFu9PHszrjXHegO9Dn6LZ3pRg5VWri7b/KneuctABvHx5t6aU8 tZLPUAdsUnZNPuONncunNV8jM+2yLhEhGWV0UDmSzPkb9+7dEf6jOyeVoYut8bPYY5 6Fs/9ju++IrEA== From: Christian Brauner Date: Tue, 15 Sep 2026 13:31:22 +0200 Subject: [PATCH RFC POC 36/50] nitro_enclaves: install the enclave descriptor when the ioctl returns Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260915-work-fd-reserve-unify-folded-v1-36-4d5217d6b246@kernel.org> References: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> In-Reply-To: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> To: Linus Torvalds Cc: Alexander Viro , Jann Horn , Jan Kara , Ingo Molnar , Peter Zijlstra , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Oleg Nesterov , linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, Jens Axboe , io-uring@vger.kernel.org, netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, bpf@vger.kernel.org, David Airlie , virtualization@lists.linux.dev, kvm@vger.kernel.org, kexec@lists.infradead.org, linux-hyperv@vger.kernel.org, "Christian Brauner (Amutable)" X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=openpgp-sha256; l=2840; i=brauner@kernel.org; h=from:subject:message-id; bh=06X+neGC1JeQjfUMZrHZWaV7oELS9OsBJ6UQD7zSi4E=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWSt1Knzubs1YsvpZZZH3i8+78BV7P4vtpYxKWmuZeMPN v7juhcdO0pZGMS4GGTFFFkc2k3C5ZbzVGw2ytSAmcPKBDKEgYtTACYi/YThf2b/jhn+T+e6nmr7 eXfahbUvovRN4zg2RHUHPFri9vTunR6G/1ElTBHnt53eUxYocDY8j1mnxvWvpfIKaanlW1376r2 dWQE= X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Rely on the fd exit path machinery. Signed-off-by: Christian Brauner (Amutable) --- drivers/virt/nitro_enclaves/ne_misc_dev.c | 33 ++++++++++++---------------= ---- 1 file changed, 13 insertions(+), 20 deletions(-) diff --git a/drivers/virt/nitro_enclaves/ne_misc_dev.c b/drivers/virt/nitro= _enclaves/ne_misc_dev.c index c91300a73f50..93c3f00f5443 100644 --- a/drivers/virt/nitro_enclaves/ne_misc_dev.c +++ b/drivers/virt/nitro_enclaves/ne_misc_dev.c @@ -1589,7 +1589,7 @@ static const struct file_operations ne_enclave_fops = =3D { static int ne_create_vm_ioctl(struct ne_pci_dev *ne_pci_dev, u64 __user *s= lot_uid) { struct ne_pci_dev_cmd_reply cmd_reply =3D {}; - int enclave_fd =3D -1; + const struct fd_slot *enclave_fd =3D NULL; struct file *enclave_file =3D NULL; unsigned int i =3D 0; struct ne_enclave *ne_enclave =3D NULL; @@ -1647,9 +1647,9 @@ static int ne_create_vm_ioctl(struct ne_pci_dev *ne_p= ci_dev, u64 __user *slot_ui goto free_cpumask; } =20 - enclave_fd =3D get_unused_fd_flags(O_CLOEXEC); - if (enclave_fd < 0) { - rc =3D enclave_fd; + enclave_fd =3D fd_prepare(O_CLOEXEC); + if (IS_ERR(enclave_fd)) { + rc =3D PTR_ERR(enclave_fd); =20 dev_err_ratelimited(ne_misc_dev.this_device, "Error in getting unused fd [rc=3D%d]\n", rc); @@ -1664,7 +1664,7 @@ static int ne_create_vm_ioctl(struct ne_pci_dev *ne_p= ci_dev, u64 __user *slot_ui dev_err_ratelimited(ne_misc_dev.this_device, "Error in anon inode get file [rc=3D%d]\n", rc); =20 - goto put_fd; + goto free_cpumask; } =20 rc =3D ne_do_request(pdev, SLOT_ALLOC, @@ -1688,27 +1688,20 @@ static int ne_create_vm_ioctl(struct ne_pci_dev *ne= _pci_dev, u64 __user *slot_ui =20 list_add(&ne_enclave->enclave_list_entry, &ne_pci_dev->enclaves_list); =20 - if (copy_to_user(slot_uid, &ne_enclave->slot_uid, sizeof(ne_enclave->slot= _uid))) { - /* - * As we're holding the only reference to 'enclave_file', fput() - * will call ne_enclave_release() which will do a proper cleanup - * of all so far allocated resources, leaving only the unused fd - * for us to free. - */ - fput(enclave_file); - put_unused_fd(enclave_fd); + fd_stage(enclave_fd, enclave_file); =20 + /* + * The failed ioctl drops the descriptor and with it the only reference + * to 'enclave_file', so ne_enclave_release() does a proper cleanup of + * all so far allocated resources. + */ + if (copy_to_user(slot_uid, &ne_enclave->slot_uid, sizeof(ne_enclave->slot= _uid))) return -EFAULT; - } - - fd_install(enclave_fd, enclave_file); =20 - return enclave_fd; + return fd_prepare_fd(enclave_fd); =20 put_file: fput(enclave_file); -put_fd: - put_unused_fd(enclave_fd); free_cpumask: free_cpumask_var(ne_enclave->vcpu_ids); for (i =3D 0; i < ne_enclave->nr_parent_vm_cores; i++) --=20 2.53.0 From nobody Fri Sep 25 07:56:54 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 841EB4F0543; Tue, 15 Sep 2026 11:36:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472168; cv=none; b=Ewc3fXUcIYI2xXekio6oaEgInWPQFp2bNWhKZXRiEFAxQ/wdzXWXgFvPfqo7LAPSgA0gpWjbTYXvWkGg1RhmCXxZOubEmL1DukPvRycFho+Q+UdeULWpXszXnah3o31io0gUPhBvmRZRyY1iR2yAJ3vCjioXOvFb6Zf/C00CR8s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472168; c=relaxed/simple; bh=WL6iBvGKSQMcLT8fyxBve2m38vKajd88XKUitLJDfoo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=qV80s87RLhZ/sNAjav0RoQ/Qc1XmKUL1QEQvtZdQeqlFq3Mm+ICgPsWLG19Udp5/XPU7KnUUIDs9xWjpTryKB9GpDlR1pboYRgYo431hT+MQVLeYTR6y0JRnUy9tvKZKR52kXd1bsxi9xFloZN+0b5DWm5ESb7iBbaCknElH8Ds= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=OMJ+b7mB; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="OMJ+b7mB" Received: by smtp.kernel.org (Postfix) with ESMTPSA id EFA1E1F00898; Tue, 15 Sep 2026 11:35:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789472166; bh=o2lQ5Ka+5N2KnUU5FmxbFpjzBp5OWSe8vXNiFGVP9wo=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=OMJ+b7mBI0Q8O65xdljhCPY3wAhJtYK6vRviUYwoOTOfvpAhVhrNZ1kCsXQAqmv7v 3GuPhfOQ15Waw0FL/v7cPGU1CKFB0vIzNSBGpVjd2qBgP1hQ3swVBB0qsd708/I1v5 vg/o9z55oXEAHcBz+9R03GejIoqfhheuysEBDKH6SjqNuu/M7QucGgMkPeQdb5GX9n uQNmyO/vVkhVONQwgr/tUv50HwF7x4nXtsyG+xs9H48A8Y+g/iDSD50VrmcEX/KGAo 6x7qUbImLs8LGWOMAtx7W/94RYq1+vZrklFF1JGznEjJF5X02jojdwcWqWCWnxH6Bc DQcVPuaGmWDvQ== From: Christian Brauner Date: Tue, 15 Sep 2026 13:31:23 +0200 Subject: [PATCH RFC POC 37/50] tpm: vtpm_proxy: install the server descriptor when the ioctl returns Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260915-work-fd-reserve-unify-folded-v1-37-4d5217d6b246@kernel.org> References: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> In-Reply-To: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> To: Linus Torvalds Cc: Alexander Viro , Jann Horn , Jan Kara , Ingo Molnar , Peter Zijlstra , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Oleg Nesterov , linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, Jens Axboe , io-uring@vger.kernel.org, netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, bpf@vger.kernel.org, David Airlie , virtualization@lists.linux.dev, kvm@vger.kernel.org, kexec@lists.infradead.org, linux-hyperv@vger.kernel.org, "Christian Brauner (Amutable)" X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=openpgp-sha256; l=2398; i=brauner@kernel.org; h=from:subject:message-id; bh=WL6iBvGKSQMcLT8fyxBve2m38vKajd88XKUitLJDfoo=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWSt1KkLDfGbfS6nzTDW3+CR3ZeWem2mM3pd9c9eC2/x8 KvW8xPoKGVhEONikBVTZHFoNwmXW85TsdkoUwNmDisTyBAGLk4BmMhPNYb/Ude3PmqXNzFcrfTk c5TA/YXTT8zPT3uZ3v9yqU5S93XBRYwM/34c1tN5sX7LjoD5b9gnnuLVilnzKtv7cqb0mf/eLA+ 5+AA= X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Rely on the fd exit path machinery. Signed-off-by: Christian Brauner (Amutable) --- drivers/char/tpm/tpm_vtpm_proxy.c | 30 +++++++++--------------------- 1 file changed, 9 insertions(+), 21 deletions(-) diff --git a/drivers/char/tpm/tpm_vtpm_proxy.c b/drivers/char/tpm/tpm_vtpm_= proxy.c index b81fd2a537df..8eb87044596a 100644 --- a/drivers/char/tpm/tpm_vtpm_proxy.c +++ b/drivers/char/tpm/tpm_vtpm_proxy.c @@ -531,8 +531,8 @@ static struct file *vtpm_proxy_create_device( struct vtpm_proxy_new_dev *vtpm_new_dev) { struct proxy_dev *proxy_dev; - int rc, fd; struct file *file; + int rc; =20 if (vtpm_new_dev->flags & ~VTPM_PROXY_FLAGS_ALL) return ERR_PTR(-EOPNOTSUPP); @@ -544,20 +544,15 @@ static struct file *vtpm_proxy_create_device( proxy_dev->flags =3D vtpm_new_dev->flags; =20 /* setup an anonymous file for the server-side */ - fd =3D get_unused_fd_flags(O_RDWR); - if (fd < 0) { - rc =3D fd; + FD_PREPARE(fdf, O_RDWR, + anon_inode_getfile("[vtpms]", &vtpm_proxy_fops, proxy_dev, + O_RDWR)); + if (IS_ERR(fdf)) { + rc =3D PTR_ERR(fdf); goto err_delete_proxy_dev; } + file =3D fd_prepare_file(fdf); =20 - file =3D anon_inode_getfile("[vtpms]", &vtpm_proxy_fops, proxy_dev, - O_RDWR); - if (IS_ERR(file)) { - rc =3D PTR_ERR(file); - goto err_put_unused_fd; - } - - /* from now on we can unwind with put_unused_fd() + fput() */ /* simulate an open() on the server side */ vtpm_proxy_fops_open(file); =20 @@ -566,16 +561,13 @@ static struct file *vtpm_proxy_create_device( =20 vtpm_proxy_work_start(proxy_dev); =20 - vtpm_new_dev->fd =3D fd; + vtpm_new_dev->fd =3D fd_prepare_fd(fdf); vtpm_new_dev->major =3D MAJOR(proxy_dev->chip->dev.devt); vtpm_new_dev->minor =3D MINOR(proxy_dev->chip->dev.devt); vtpm_new_dev->tpm_num =3D proxy_dev->chip->dev_num; =20 return file; =20 -err_put_unused_fd: - put_unused_fd(fd); - err_delete_proxy_dev: vtpm_proxy_delete_proxy_dev(proxy_dev); =20 @@ -640,13 +632,9 @@ static long vtpmx_ioc_new_dev(struct file *file, unsig= ned int ioctl, return PTR_ERR(vtpm_file); =20 if (copy_to_user(vtpm_new_dev_p, &vtpm_new_dev, - sizeof(vtpm_new_dev))) { - put_unused_fd(vtpm_new_dev.fd); - fput(vtpm_file); + sizeof(vtpm_new_dev))) return -EFAULT; - } =20 - fd_install(vtpm_new_dev.fd, vtpm_file); return 0; } =20 --=20 2.53.0 From nobody Fri Sep 25 07:56:54 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 77F0B486647; Tue, 15 Sep 2026 11:36:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472175; cv=none; b=A9vYIBzj7K0SzCFLv35fkHke8lnFKdwb+n+22xz2zRfO/+0uUVGcUoGbTIPxLNPuihLtcl6kRwZ7VNxMTmobMDSj6ziscSg3WedhwDIWie0mPdR1ReVdyyz3P3bwdAvE5r0kc+Yj8IjZi7UcLITet+TL5Xje2lzqkExe4Fsf8ho= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472175; c=relaxed/simple; bh=gBId4KwT9HjrpRN/GtoshdJN45hNk2Km5XhUS+Rx/dQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ToDB89T5I4VlHXyELwjxMRX8K2FxwUrRc8W9T2XuVx9MekMPPxCaL0Ue1iprIJeQ1T+ugtxhoNoAiIbqIesW0d61hBW+7OKG0Y+qbUg7OWC1V8/kr/yl99CVucVP4AKpziIXpFy3qm+1EAs/neMv0KqPTxbWiEWoT+vwaRPY/us= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=fXxOaBNd; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="fXxOaBNd" Received: by smtp.kernel.org (Postfix) with ESMTPSA id D6F6B1F000FF; Tue, 15 Sep 2026 11:36:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789472174; bh=SUM43IO6qNWvRdNooAPnPsLAAH/RcolhMgr+hyP1MvM=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=fXxOaBNdJwFX/Lk/E/kRGTURHefQKpPPy4SOimei8WnuQFymjQ54Osu1qX23oVPTQ m0A8Uo6l6w4qKA2hJ3urgORqbpweOp4clPRtYTGkNID+oymAFlp8BwoOHfWgXjq00g 2jaCNdDGKnUTjAY9tG8l6AGYNW5fihLVRuWziN2I32TvRehjGk6CF4lsh9F7JKNwM8 v5WKv5XKjGiJgpuTC+6woLjedYHaONUBygXryBe6w8FmgPTi4h5Mt5Fbn+0QCTmLSc 1dRRPZi0WCjS5bVpj31Cm7wGEaPUy3iJpp2OQokIUXhIHQiwa1Leonc8PLtC/JB8/R gVXIBaAx596pQ== From: Christian Brauner Date: Tue, 15 Sep 2026 13:31:24 +0200 Subject: [PATCH RFC POC 38/50] perf: stop putting the event descriptor back on failure Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260915-work-fd-reserve-unify-folded-v1-38-4d5217d6b246@kernel.org> References: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> In-Reply-To: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> To: Linus Torvalds Cc: Alexander Viro , Jann Horn , Jan Kara , Ingo Molnar , Peter Zijlstra , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Oleg Nesterov , linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, Jens Axboe , io-uring@vger.kernel.org, netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, bpf@vger.kernel.org, David Airlie , virtualization@lists.linux.dev, kvm@vger.kernel.org, kexec@lists.infradead.org, linux-hyperv@vger.kernel.org, "Christian Brauner (Amutable)" X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=openpgp-sha256; l=2461; i=brauner@kernel.org; h=from:subject:message-id; bh=gBId4KwT9HjrpRN/GtoshdJN45hNk2Km5XhUS+Rx/dQ=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWSt1Knz3yduOPXT6cQYVeXHZzbnqs7Zqcayytk3qHiay eV9UyYIdpSyMIhxMciKKbI4tJuEyy3nqdhslKkBM4eVCWQIAxenAEwk7jIjw7OGE8fOrTS3bVvT 7m02I8bx3+9MntLGq9z1gtyNvPx5jAz/fe684tNnVrol8LfYa7a9+/c7fcJ8jXoa4n6P/MXywr1 5AA== X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Rely on the fd exit path machinery. Signed-off-by: Christian Brauner (Amutable) --- kernel/events/core.c | 31 +++++++++++-------------------- 1 file changed, 11 insertions(+), 20 deletions(-) diff --git a/kernel/events/core.c b/kernel/events/core.c index a6c8e38a3110..54834a7aca53 100644 --- a/kernel/events/core.c +++ b/kernel/events/core.c @@ -13924,7 +13924,7 @@ SYSCALL_DEFINE5(perf_event_open, struct file *event_file =3D NULL; struct task_struct *task =3D NULL; struct pmu *pmu; - int event_fd; + const struct fd_slot *event_fd; int move_group =3D 0; int err; int f_flags =3D O_RDWR; @@ -13990,9 +13990,9 @@ SYSCALL_DEFINE5(perf_event_open, if (flags & PERF_FLAG_FD_CLOEXEC) f_flags |=3D O_CLOEXEC; =20 - event_fd =3D get_unused_fd_flags(f_flags); - if (event_fd < 0) - return event_fd; + event_fd =3D fd_prepare(f_flags); + if (IS_ERR(event_fd)) + return PTR_ERR(event_fd); =20 /* * Event creation should be under SRCU, see perf_pmu_unregister(). @@ -14001,15 +14001,11 @@ SYSCALL_DEFINE5(perf_event_open, =20 CLASS(fd, group)(group_fd); // group_fd =3D=3D -1 =3D> empty if (group_fd !=3D -1) { - if (!is_perf_file(group)) { - err =3D -EBADF; - goto err_fd; - } + if (!is_perf_file(group)) + return -EBADF; group_leader =3D fd_file(group)->private_data; - if (group_leader->state <=3D PERF_EVENT_STATE_EXIT) { - err =3D -ENODEV; - goto err_fd; - } + if (group_leader->state <=3D PERF_EVENT_STATE_EXIT) + return -ENODEV; if (flags & PERF_FLAG_FD_OUTPUT) output_event =3D group_leader; if (flags & PERF_FLAG_FD_NO_GROUP) @@ -14018,10 +14014,8 @@ SYSCALL_DEFINE5(perf_event_open, =20 if (pid !=3D -1 && !(flags & PERF_FLAG_PID_CGROUP)) { task =3D find_lively_task_by_vpid(pid); - if (IS_ERR(task)) { - err =3D PTR_ERR(task); - goto err_fd; - } + if (IS_ERR(task)) + return PTR_ERR(task); } =20 if (task && group_leader && @@ -14298,8 +14292,7 @@ SYSCALL_DEFINE5(perf_event_open, * This ensures destruction of the group leader will find * the pointer to itself in perf_group_detach(). */ - fd_install(event_fd, event_file); - return event_fd; + return fd_stage(event_fd, event_file); =20 err_context: put_pmu_ctx(event->pmu_ctx); @@ -14316,8 +14309,6 @@ SYSCALL_DEFINE5(perf_event_open, err_task: if (task) put_task_struct(task); -err_fd: - put_unused_fd(event_fd); return err; } =20 --=20 2.53.0 From nobody Fri Sep 25 07:56:54 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 92A794A8A2C; Tue, 15 Sep 2026 11:36:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472184; cv=none; b=Qgf3Nck/YoOgZ87c4qQs4IsuMYfhx9MDLSRMSKVFghg1DTppfY4/Bfq02cyU5AWU5BE9I4T/OJVOvGlnsQw8UzsBm2OndYR+fE7taNCQVH/qDGosbNWb3J4ev4eFS+WriIg362oazcCMsPn6X53efVgc60ynDTrbPppSTSQ97gM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472184; c=relaxed/simple; bh=SoVog+6B8HBuyIDP19b0KqkTeSBHFQ/u5Q+O82974JE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=CX5yux5I0npGOEl0kNJUq5jIFpeTnh6qsZqtFSfUZd+K1R0zCjCMBm54c3e2l4swrMP5qW989SaIYkiArs2KNuoksUJcwJHBylLPtIoJMvMimEoZLdUdFjM4QtHW0pjFQyXtRpE0W1mTJ5krrocWRBZ1thjL6ObGWboFzm8w/Ns= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=j3rMRnP4; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="j3rMRnP4" Received: by smtp.kernel.org (Postfix) with ESMTPSA id BD5001F00893; Tue, 15 Sep 2026 11:36:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789472182; bh=oZh0vLqcxduUWTFynumJFhxFNW42oEX6Rn3UwZlew10=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=j3rMRnP4Yq76LugZgcTC3Qf0Ci80ZsR1Bjf4RalPTu0XQJWg3exDlCNJpfFK/5MxM WYaKKc+iEEvUbRPZPKxBSCicd83hSTqA7oZhBEyYRVXy1eWTpEG9V0qCpYWagSWyJM LMC9aTfO6/vIRu0BhEoAicivAddy21JTUJ9Ey/WFXSkOgO7lRUm/69w2OsJiTlTGJJ PVaIxbRP2QqlmQ8miseIjAxpQqw4BFWTU0OlqdE4kvqHra2NIRZhFlj+TvL3m+l5UE la7dnSw8kYUKUgJ4W/pOpOV1l55Kv3959gLF9FNT0wDZZqyVfgaqZTmzG3/cOJbMQV 93dOclKCiZGPQ== From: Christian Brauner Date: Tue, 15 Sep 2026 13:31:25 +0200 Subject: [PATCH RFC POC 39/50] seccomp: stop putting the listener descriptor back on failure Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260915-work-fd-reserve-unify-folded-v1-39-4d5217d6b246@kernel.org> References: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> In-Reply-To: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> To: Linus Torvalds Cc: Alexander Viro , Jann Horn , Jan Kara , Ingo Molnar , Peter Zijlstra , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Oleg Nesterov , linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, Jens Axboe , io-uring@vger.kernel.org, netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, bpf@vger.kernel.org, David Airlie , virtualization@lists.linux.dev, kvm@vger.kernel.org, kexec@lists.infradead.org, linux-hyperv@vger.kernel.org, "Christian Brauner (Amutable)" X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=openpgp-sha256; l=1590; i=brauner@kernel.org; h=from:subject:message-id; bh=SoVog+6B8HBuyIDP19b0KqkTeSBHFQ/u5Q+O82974JE=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWSt1Kl7drfm0vIrUa8YdK4pvXG67XDtwdnLWZ9s8lgOH X5/t2WKdEcpC4MYF4OsmCKLQ7tJuNxynorNRpkaMHNYmUCGMHBxCsBEGD4xMjwJva2x4G9RxkHX XU1ZZuuPNKZYpJh/z8h6/EhWU//pvNcM/2vKj01as7z7q8HKc/dLTVZVbHkiJn/kXu5zo+cFdn4 LL/MDAA== X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Rely on the fd exit path machinery. Signed-off-by: Christian Brauner (Amutable) --- kernel/seccomp.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/kernel/seccomp.c b/kernel/seccomp.c index 86cf4460d69e..dc275ab1e031 100644 --- a/kernel/seccomp.c +++ b/kernel/seccomp.c @@ -1957,7 +1957,7 @@ static long seccomp_set_mode_filter(unsigned int flag= s, const unsigned long seccomp_mode =3D SECCOMP_MODE_FILTER; struct seccomp_filter *prepared =3D NULL; long ret =3D -EINVAL; - int listener =3D -1; + const struct fd_slot *listener =3D NULL; struct file *listener_f =3D NULL; =20 /* Validate flags. */ @@ -1990,15 +1990,14 @@ static long seccomp_set_mode_filter(unsigned int fl= ags, return PTR_ERR(prepared); =20 if (flags & SECCOMP_FILTER_FLAG_NEW_LISTENER) { - listener =3D get_unused_fd_flags(O_CLOEXEC); - if (listener < 0) { - ret =3D listener; + listener =3D fd_prepare(O_CLOEXEC); + if (IS_ERR(listener)) { + ret =3D PTR_ERR(listener); goto out_free; } =20 listener_f =3D init_listener(prepared); if (IS_ERR(listener_f)) { - put_unused_fd(listener); ret =3D PTR_ERR(listener_f); goto out_free; } @@ -2038,11 +2037,9 @@ static long seccomp_set_mode_filter(unsigned int fla= gs, if (ret) { listener_f->private_data =3D NULL; fput(listener_f); - put_unused_fd(listener); seccomp_notify_detach(prepared); } else { - fd_install(listener, listener_f); - ret =3D listener; + ret =3D fd_stage(listener, listener_f); } } out_free: --=20 2.53.0 From nobody Fri Sep 25 07:56:54 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 5FC7D4A8A04; Tue, 15 Sep 2026 11:36:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472191; cv=none; b=AnJ7NoOT49ubbpToWzkRi0NrsxrucIo0v1NHSEhx6pzPOgbiE63XDTprQWtSBxnc5uOZYhnBH84zoW2a/HL01ItdkLPG7XhIjX7Xxfm8soiHYb7qUqKspgSF+G7rdwp+Bt03a/U3bLlk/BHbxXUQmnwMRaUFuka7ak9hiUTDGAU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472191; c=relaxed/simple; bh=78vO7PDsYGy3GJUzt5pCpyZhq20MYXeEqBv9mkCwUOM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=SDeK3bSSJlgbjTiuFanJ8kYFEnU/wrnSk46D91fBEv0QSUDrQ/rbAWPDrbnrzIC1EFJpJmsX9lySTPYuHWR2YktnIGbIETN7sT9NtcPFLCiHT0OYFByt05BPkj6GL+LhsOtbRYIlOxOwX0RZFv4prRvKqMpPVE8/ruPiBU/KuhQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=JOl8mduH; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="JOl8mduH" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A888C1F00898; Tue, 15 Sep 2026 11:36:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789472190; bh=0ixA4Ace6BJn7IjrzCTCU0/h7/zoW2kue4sGkrY9xCg=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=JOl8mduHPaeVv3eaq9MEhCqzMicOygBaK5O7Dzp/RHXpO7NODADnSsZqyfqWqEQZR lR/VPeQyWMIddPe1rPhDu05Hlm3nHa5FLkG932tVgVvVmp1QfM/hVE5mMYh+azuISL UmAM+w7jZ6/RT6AK2zvRXbcbWwva8oTaEAofof43ADeJYUXP4l+fKFnPm5nLpARsob 2FLL0ErbZn7q0fCeD9rQeCPTtW4yh3QMmMpEVQM39yn4qUnY43PiI3hNDpcRqaUIti KY9m4cCM616bpCnYMsG+DY5wREnfHQo42u9v21mvFC1w6Cr6Wausbj6m5LHNP95jEM Ck7KRCyZ89YTg== From: Christian Brauner Date: Tue, 15 Sep 2026 13:31:26 +0200 Subject: [PATCH RFC POC 40/50] KVM: stop putting descriptors back on failure Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260915-work-fd-reserve-unify-folded-v1-40-4d5217d6b246@kernel.org> References: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> In-Reply-To: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> To: Linus Torvalds Cc: Alexander Viro , Jann Horn , Jan Kara , Ingo Molnar , Peter Zijlstra , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Oleg Nesterov , linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, Jens Axboe , io-uring@vger.kernel.org, netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, bpf@vger.kernel.org, David Airlie , virtualization@lists.linux.dev, kvm@vger.kernel.org, kexec@lists.infradead.org, linux-hyperv@vger.kernel.org, "Christian Brauner (Amutable)" X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=openpgp-sha256; l=3135; i=brauner@kernel.org; h=from:subject:message-id; bh=78vO7PDsYGy3GJUzt5pCpyZhq20MYXeEqBv9mkCwUOM=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWSt1KmrZTOP7Ev9FMJVxubVxbdNfUMIq6RooWz7Kg6W0 u0ly+I7SlkYxLgYZMUUWRzaTcLllvNUbDbK1ICZw8oEMoSBi1MAJmLaxPC/6MvkYx+dQ5OZjxmx 1NY+4H3y0sQ15JTH4W0GqkVf38y+wsgwpWTB7u0yUtPOBqdErHHe3P2Vb+cBu4mdx15GLt51wuM UCwA= X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Rely on the fd exit path machinery. Signed-off-by: Christian Brauner (Amutable) --- virt/kvm/kvm_main.c | 65 +++++++++++++++++--------------------------------= ---- 1 file changed, 21 insertions(+), 44 deletions(-) diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index 65eb26a0520d..8d3d47a6c98a 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -4326,27 +4326,18 @@ static const struct file_operations kvm_vcpu_stats_= fops =3D { =20 static int kvm_vcpu_ioctl_get_stats_fd(struct kvm_vcpu *vcpu) { - int fd; - struct file *file; char name[15 + ITOA_MAX_LEN + 1]; =20 snprintf(name, sizeof(name), "kvm-vcpu-stats:%d", vcpu->vcpu_id); =20 - fd =3D get_unused_fd_flags(O_CLOEXEC); - if (fd < 0) - return fd; - - file =3D anon_inode_getfile_fmode(name, &kvm_vcpu_stats_fops, vcpu, - O_RDONLY, FMODE_PREAD); - if (IS_ERR(file)) { - put_unused_fd(fd); - return PTR_ERR(file); - } + FD_PREPARE(fdf, O_CLOEXEC, + anon_inode_getfile_fmode(name, &kvm_vcpu_stats_fops, vcpu, + O_RDONLY, FMODE_PREAD)); + if (IS_ERR(fdf)) + return PTR_ERR(fdf); =20 kvm_get_kvm(vcpu->kvm); - fd_install(fd, file); - - return fd; + return fd_prepare_fd(fdf); } =20 #ifdef CONFIG_KVM_GENERIC_PRE_FAULT_MEMORY @@ -5136,24 +5127,14 @@ static const struct file_operations kvm_vm_stats_fo= ps =3D { =20 static int kvm_vm_ioctl_get_stats_fd(struct kvm *kvm) { - int fd; - struct file *file; - - fd =3D get_unused_fd_flags(O_CLOEXEC); - if (fd < 0) - return fd; - - file =3D anon_inode_getfile_fmode("kvm-vm-stats", - &kvm_vm_stats_fops, kvm, O_RDONLY, FMODE_PREAD); - if (IS_ERR(file)) { - put_unused_fd(fd); - return PTR_ERR(file); - } + FD_PREPARE(fdf, O_CLOEXEC, + anon_inode_getfile_fmode("kvm-vm-stats", &kvm_vm_stats_fops, + kvm, O_RDONLY, FMODE_PREAD)); + if (IS_ERR(fdf)) + return PTR_ERR(fdf); =20 kvm_get_kvm(kvm); - fd_install(fd, file); - - return fd; + return fd_prepare_fd(fdf); } =20 #define SANITY_CHECK_MEM_REGION_FIELD(field) \ @@ -5499,21 +5480,20 @@ EXPORT_SYMBOL_FOR_KVM_INTERNAL(file_is_kvm); static int kvm_dev_ioctl_create_vm(unsigned long type) { char fdname[ITOA_MAX_LEN + 1]; - int r, fd; struct kvm *kvm; struct file *file; + const struct fd_slot *fd; + int r; =20 - fd =3D get_unused_fd_flags(O_CLOEXEC); - if (fd < 0) - return fd; + fd =3D fd_prepare(O_CLOEXEC); + if (IS_ERR(fd)) + return PTR_ERR(fd); =20 - snprintf(fdname, sizeof(fdname), "%d", fd); + snprintf(fdname, sizeof(fdname), "%d", fd_prepare_fd(fd)); =20 kvm =3D kvm_create_vm(type, fdname); - if (IS_ERR(kvm)) { - r =3D PTR_ERR(kvm); - goto put_fd; - } + if (IS_ERR(kvm)) + return PTR_ERR(kvm); =20 file =3D anon_inode_getfile("kvm-vm", &kvm_vm_fops, kvm, O_RDWR); if (IS_ERR(file)) { @@ -5529,13 +5509,10 @@ static int kvm_dev_ioctl_create_vm(unsigned long ty= pe) */ kvm_uevent_notify_change(KVM_EVENT_CREATE_VM, kvm); =20 - fd_install(fd, file); - return fd; + return fd_stage(fd, file); =20 put_kvm: kvm_put_kvm(kvm); -put_fd: - put_unused_fd(fd); return r; } =20 --=20 2.53.0 From nobody Fri Sep 25 07:56:54 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 32CB04A8A04; Tue, 15 Sep 2026 11:36:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472200; cv=none; b=Qds8/uclOY7MnZCuSz3IsRFr/3yDbMAYsBFgxnLqQuzu4FvnxDt+Oed94pE4wSdftEaynFasziOj8vBSKGtGNaFE7dM+pFogMa5KoqE8EcYndslGkOzpeGCkYrx/j4mmiQsp5Yym73ytQiZ8UkrOhkW61lMEmKSrCPEG+LxX8y4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472200; c=relaxed/simple; bh=KLCbLLJNzFhK9KnJoDv8kDUlKXi4pqPjbkN6aCwr8bo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=humiqd6CmvDgM0K5Pr6eCu60EC7evt2AEdsotXxaca51XmF55QVKeVc51SCIa0V1ORN9N63cf6R+H/pl5CVzSAUkB+q2D+c4HvJxgN6ScaPjV3GA878zDqKt5rGSP7I3wUiLktdbwlesOuLSxI7lNlXrWlt6fwyUjQ5fMV9dOzI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=keM2MELZ; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="keM2MELZ" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 948881F00893; Tue, 15 Sep 2026 11:36:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789472198; bh=dR2AT7slAh5QiQGKBciNLhR24TAk5bJ3ys4Ah5Rt7mE=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=keM2MELZ8tMeEj63s6rILS1a6ikUND0cm/hSBjQN5i9zsMHRwumL2LpgndOJca1Aa 97kIpfNmItf2JE76ybod5HhCCbaR3uSYEM810jrmgilIii5FRWRh1O86tNdM0FYWJl 38f1UHzSPEd+hj/T0Nlt8QEoyRs4wb5r4JVdV9i/rSIOmEYhsfaqAD31KqLx/f0h3O ACHfbLbzGXb+++iV7WaxfM+tTIGP+WsUWGxYSjDxuYEbOqm0MVVuZjc4buiK4jUw7O C9LHTBiZSEultvzvuQBhaDEJQMVPhyftCJPppnofTMl7IPUPEYHfgCv4gmlMrEOmjT oPjncB8aAwY0Q== From: Christian Brauner Date: Tue, 15 Sep 2026 13:31:27 +0200 Subject: [PATCH RFC POC 41/50] KVM: guest_memfd: stop putting the descriptor back on failure Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260915-work-fd-reserve-unify-folded-v1-41-4d5217d6b246@kernel.org> References: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> In-Reply-To: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> To: Linus Torvalds Cc: Alexander Viro , Jann Horn , Jan Kara , Ingo Molnar , Peter Zijlstra , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Oleg Nesterov , linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, Jens Axboe , io-uring@vger.kernel.org, netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, bpf@vger.kernel.org, David Airlie , virtualization@lists.linux.dev, kvm@vger.kernel.org, kexec@lists.infradead.org, linux-hyperv@vger.kernel.org, "Christian Brauner (Amutable)" X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=openpgp-sha256; l=1418; i=brauner@kernel.org; h=from:subject:message-id; bh=KLCbLLJNzFhK9KnJoDv8kDUlKXi4pqPjbkN6aCwr8bo=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWSt1Kk/tfzHImu/Gp6ZRSssN5fyinw4ruUhZCIkyWFT3 bH7k9a5jlIWBjEuBlkxRRaHdpNwueU8FZuNMjVg5rAygQxh4OIUgIm8sWZk6GKcxbHPfdfrbYrn f0Zr1u290KLF8etT65HPSeyxa5JK9zH8jwg7xHPKv6v/9/8HHp3fHOUXznI3MuD7/nrNS8a/OUU arAA= X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Rely on the fd exit path machinery. Signed-off-by: Christian Brauner (Amutable) --- virt/kvm/guest_memfd.c | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c index 625e62e1a031..e0d1cb869342 100644 --- a/virt/kvm/guest_memfd.c +++ b/virt/kvm/guest_memfd.c @@ -526,17 +526,16 @@ static int __kvm_gmem_create(struct kvm *kvm, loff_t = size, u64 flags) struct gmem_file *f; struct inode *inode; struct file *file; - int fd, err; + const struct fd_slot *fd; + int err; =20 - fd =3D get_unused_fd_flags(0); - if (fd < 0) - return fd; + fd =3D fd_prepare(0); + if (IS_ERR(fd)) + return PTR_ERR(fd); =20 f =3D kzalloc_obj(*f); - if (!f) { - err =3D -ENOMEM; - goto err_fd; - } + if (!f) + return -ENOMEM; =20 /* __fput() will take care of fops_put(). */ if (!fops_get(&kvm_gmem_fops)) { @@ -575,8 +574,7 @@ static int __kvm_gmem_create(struct kvm *kvm, loff_t si= ze, u64 flags) xa_init(&f->bindings); list_add(&f->entry, &GMEM_I(inode)->gmem_file_list); =20 - fd_install(fd, file); - return fd; + return fd_stage(fd, file); =20 err_inode: iput(inode); @@ -584,8 +582,6 @@ static int __kvm_gmem_create(struct kvm *kvm, loff_t si= ze, u64 flags) fops_put(&kvm_gmem_fops); err_gmem: kfree(f); -err_fd: - put_unused_fd(fd); return err; } =20 --=20 2.53.0 From nobody Fri Sep 25 07:56:54 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 8972146AA94; Tue, 15 Sep 2026 11:36:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472209; cv=none; b=PgpVdkSKTccTXs+GgOARI5XljZm3CMZr7T7BmSHLW7FQ+k+bPoGvjgxfx3kl4gsV7MUuQGjwwD8UDb1Wbi9cubWZjt3h3AbIjRnxz0d4AsGOQCZKBvgoGMocYKQVl5WzTMrSdpUHoKoRBwDD01VqjD3h6n+bAWTDc5p0AUXHTDE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472209; c=relaxed/simple; bh=KjXekIWfPavjYonIGQ+ziJSd2VL98XtdFHe2kliVlr0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ofV6sZcpTLXiYnehRtG91nKReBh/kU9QzvndkIUldrb6zO6hSy54y3ELc+2qaBaAaX4qrh7ZSTB3s+IBEphBA7RXcpO6g5EXcl7rLs+jQd15EI8Q5f45Lv5cGIcE2lrr8rtboDLLKiADLEzC3sNyhaxcKiH9xFYK2hvSzvQDDzU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=k0B0nnun; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="k0B0nnun" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8CA9E1F0089A; Tue, 15 Sep 2026 11:36:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789472206; bh=Ja/detmDRdqJionOE2YxTutvZMYrfmHVqKWhc7op5z8=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=k0B0nnunmsO4k0FOMQGSFMJINyyKujE8uhdGQkypzo+/7wAuYosHeieRrqGX896SE jv0+jbulb9ltALO0OmQ+EsdlJ6gIA3nXbRVbRqClon2eDQSEkEs0SGUl1pccz2t0gn Ex/7MGoP0rovVhh+JefOEeLJ+Zg+ArPzBOp7WhZLTZcsHHkAtRMmn/t7nzcxeX6A71 wPF3zcOYfiVH5XAccqGogPi1JWYEwXqpaR4pa24KyQ3/325SMh3HSC93eSuO+sogfB azvVwpsOVoq7c+CuSQTvf0zUpuwC034v8JGqti42vDt/NRF7mUFTkRmt14V+qwNO3P E+iZSoWuXbX/A== From: Christian Brauner Date: Tue, 15 Sep 2026 13:31:28 +0200 Subject: [PATCH RFC POC 42/50] drm: stop unwinding descriptors by hand Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260915-work-fd-reserve-unify-folded-v1-42-4d5217d6b246@kernel.org> References: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> In-Reply-To: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> To: Linus Torvalds Cc: Alexander Viro , Jann Horn , Jan Kara , Ingo Molnar , Peter Zijlstra , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Oleg Nesterov , linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, Jens Axboe , io-uring@vger.kernel.org, netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, bpf@vger.kernel.org, David Airlie , virtualization@lists.linux.dev, kvm@vger.kernel.org, kexec@lists.infradead.org, linux-hyperv@vger.kernel.org, "Christian Brauner (Amutable)" X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=openpgp-sha256; l=5076; i=brauner@kernel.org; h=from:subject:message-id; bh=KjXekIWfPavjYonIGQ+ziJSd2VL98XtdFHe2kliVlr0=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWSt1KnXXtVVltWkLiD/9M6kwpRagVX3n83QkfpTd8T79 sbDSqcedJSyMIhxMciKKbI4tJuEyy3nqdhslKkBM4eVCWQIAxenAEzkpAYjw8uMrzI/Gn0vNR6b r3KTrUSUt6VhVQNj8CEPxi8OCwpPBTAy7OGWebTYilF9c4qm0KsLrb/vrOaMmT1nzfvnFkpaHbe TeQE= X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Rely on the fd exit path machinery. Signed-off-by: Christian Brauner (Amutable) --- drivers/gpu/drm/drm_lease.c | 20 +++++++++----------- drivers/gpu/drm/drm_prime.c | 13 +++++-------- drivers/gpu/drm/drm_syncobj.c | 44 +++++++++++++--------------------------= ---- 3 files changed, 27 insertions(+), 50 deletions(-) diff --git a/drivers/gpu/drm/drm_lease.c b/drivers/gpu/drm/drm_lease.c index 5d2cf724cbd7..b95747cf79a7 100644 --- a/drivers/gpu/drm/drm_lease.c +++ b/drivers/gpu/drm/drm_lease.c @@ -484,7 +484,7 @@ int drm_mode_create_lease_ioctl(struct drm_device *dev, struct file *lessee_file =3D NULL; struct file *lessor_file =3D lessor_priv->filp; struct drm_file *lessee_priv; - int fd =3D -1; + const struct fd_slot *fd; uint32_t *object_ids; =20 /* Can't lease without MODESET */ @@ -529,10 +529,10 @@ int drm_mode_create_lease_ioctl(struct drm_device *de= v, } =20 /* Allocate a file descriptor for the lease */ - fd =3D get_unused_fd_flags(cl->flags & (O_CLOEXEC | O_NONBLOCK)); - if (fd < 0) { + fd =3D fd_prepare(cl->flags & (O_CLOEXEC | O_NONBLOCK)); + if (IS_ERR(fd)) { idr_destroy(&leases); - ret =3D fd; + ret =3D PTR_ERR(fd); goto out_lessor; } =20 @@ -543,7 +543,7 @@ int drm_mode_create_lease_ioctl(struct drm_device *dev, if (IS_ERR(lessee)) { ret =3D PTR_ERR(lessee); idr_destroy(&leases); - goto out_leases; + goto out_lessor; } =20 /* Clone the lessor file to create a new file for us */ @@ -562,12 +562,13 @@ int drm_mode_create_lease_ioctl(struct drm_device *de= v, lessee_priv->authenticated =3D 1; =20 /* Pass fd back to userspace */ - drm_dbg_lease(dev, "Returning fd %d id %d\n", fd, lessee->lessee_id); - cl->fd =3D fd; + drm_dbg_lease(dev, "Returning fd %d id %d\n", fd_prepare_fd(fd), + lessee->lessee_id); + cl->fd =3D fd_prepare_fd(fd); cl->lessee_id =3D lessee->lessee_id; =20 /* Hook up the fd */ - fd_install(fd, lessee_file); + fd_stage(fd, lessee_file); =20 drm_master_put(&lessor); drm_dbg_lease(dev, "drm_mode_create_lease_ioctl succeeded\n"); @@ -576,9 +577,6 @@ int drm_mode_create_lease_ioctl(struct drm_device *dev, out_lessee: drm_master_put(&lessee); =20 -out_leases: - put_unused_fd(fd); - out_lessor: drm_master_put(&lessor); drm_dbg_lease(dev, "drm_mode_create_lease_ioctl failed: %d\n", ret); diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c index 9b44c78cd77f..e33d84ac7256 100644 --- a/drivers/gpu/drm/drm_prime.c +++ b/drivers/gpu/drm/drm_prime.c @@ -513,19 +513,16 @@ int drm_gem_prime_handle_to_fd(struct drm_device *dev, int *prime_fd) { struct dma_buf *dmabuf; - int fd =3D get_unused_fd_flags(flags); + const struct fd_slot *fd =3D fd_prepare(flags); =20 - if (fd < 0) - return fd; + if (IS_ERR(fd)) + return PTR_ERR(fd); =20 dmabuf =3D drm_gem_prime_handle_to_dmabuf(dev, file_priv, handle, flags); - if (IS_ERR(dmabuf)) { - put_unused_fd(fd); + if (IS_ERR(dmabuf)) return PTR_ERR(dmabuf); - } =20 - fd_install(fd, dmabuf->file); - *prime_fd =3D fd; + *prime_fd =3D fd_stage(fd, dmabuf->file); return 0; } EXPORT_SYMBOL(drm_gem_prime_handle_to_fd); diff --git a/drivers/gpu/drm/drm_syncobj.c b/drivers/gpu/drm/drm_syncobj.c index 2fa170a29a62..621858b6ac43 100644 --- a/drivers/gpu/drm/drm_syncobj.c +++ b/drivers/gpu/drm/drm_syncobj.c @@ -663,25 +663,14 @@ static const struct file_operations drm_syncobj_file_= fops =3D { */ int drm_syncobj_get_fd(struct drm_syncobj *syncobj, int *p_fd) { - struct file *file; - int fd; - - fd =3D get_unused_fd_flags(O_CLOEXEC); - if (fd < 0) - return fd; - - file =3D anon_inode_getfile("syncobj_file", - &drm_syncobj_file_fops, - syncobj, 0); - if (IS_ERR(file)) { - put_unused_fd(fd); - return PTR_ERR(file); - } + FD_PREPARE(fdf, O_CLOEXEC, + anon_inode_getfile("syncobj_file", &drm_syncobj_file_fops, + syncobj, 0)); + if (IS_ERR(fdf)) + return PTR_ERR(fdf); =20 drm_syncobj_get(syncobj); - fd_install(fd, file); - - *p_fd =3D fd; + *p_fd =3D fd_prepare_fd(fdf); return 0; } EXPORT_SYMBOL(drm_syncobj_get_fd); @@ -762,31 +751,24 @@ static int drm_syncobj_export_sync_file(struct drm_fi= le *file_private, int ret; struct dma_fence *fence; struct sync_file *sync_file; - int fd =3D get_unused_fd_flags(O_CLOEXEC); + const struct fd_slot *fd =3D fd_prepare(O_CLOEXEC); =20 - if (fd < 0) - return fd; + if (IS_ERR(fd)) + return PTR_ERR(fd); =20 ret =3D drm_syncobj_find_fence(file_private, handle, point, 0, &fence); if (ret) - goto err_put_fd; + return ret; =20 sync_file =3D sync_file_create(fence); =20 dma_fence_put(fence); =20 - if (!sync_file) { - ret =3D -EINVAL; - goto err_put_fd; - } - - fd_install(fd, sync_file->file); + if (!sync_file) + return -EINVAL; =20 - *p_fd =3D fd; + *p_fd =3D fd_stage(fd, sync_file->file); return 0; -err_put_fd: - put_unused_fd(fd); - return ret; } /** * drm_syncobj_open - initializes syncobj file-private structures at devno= de open time --=20 2.53.0 From nobody Fri Sep 25 07:56:54 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 3724F49EC5F; Tue, 15 Sep 2026 11:36:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472215; cv=none; b=boAFGXKGNjdI/bWxZ5eTozob2AkgB7uLj8hjwBCrGeAxOZW6SO22GtgZbw5C+tHhF5FmiBMq6QZtKtDbbRYuEmqqAgiDlW30EfQfoCGLgPz079SP1KnsNOlP9RsaeXJYK3oudbk6K1AgQKgb8q4DSiMokxFG+xx6yqlN4bIycQA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472215; c=relaxed/simple; bh=ufNESbgGG96SdhrvZQNvdMYhyiyG0BhLW+Tl/xqdcT0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=XmgmejoPqSz3xbh+CNp2Kc7yigxvkqkXBXt1w/hme1gfuvQdgdsjA1ca4hvIP/Y0yYWnhFxcfr4osDf3UQwmUrrJLKl4WLJWgqY7JidwSlJVVE4LaTkjXMCtr8hbWv7BvnPxbymVe2HrdQTKZBxJziCNXxt1SrmNIQnqI1kGTD8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=EXI8vF2M; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="EXI8vF2M" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 730581F000FF; Tue, 15 Sep 2026 11:36:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789472213; bh=6e1PB4CQNzedeHCycAL44Td/hQEl2CX/iFm1Iur71xE=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=EXI8vF2Mi2qQql8uoPNVMR9Vjgp88ee0ybxkHsj+i1EcfZwKRf7jQAqrx5XocwZ5u bXuB/2sL89kC6PNZZE/dhnoh6Kr65fNehf5/WE+WzUeV5/pclzQoq/bonRzBcg9E7+ NfoFoguGthxJQGC332DYQsb5ljWYLD+kEUw/Pee+5M/7Dg2ZiE3sQd1cKKv890ucDD /r0vRvig6oqwgwA6dJ/z5P48MPdRVZFrQKEwVGkp3Sgwz1v5wVDwGFDqx3GUFssAgt DN89k/PZlDz7rh5/WFfNs5IypEAhalKV3Vwaa2jbU2stx2+1M+fSysP8b+juFLIlZq jL2puXhM2BB9Q== From: Christian Brauner Date: Tue, 15 Sep 2026 13:31:29 +0200 Subject: [PATCH RFC POC 43/50] drm/amdgpu: stop unwinding the fence descriptor by hand Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260915-work-fd-reserve-unify-folded-v1-43-4d5217d6b246@kernel.org> References: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> In-Reply-To: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> To: Linus Torvalds Cc: Alexander Viro , Jann Horn , Jan Kara , Ingo Molnar , Peter Zijlstra , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Oleg Nesterov , linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, Jens Axboe , io-uring@vger.kernel.org, netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, bpf@vger.kernel.org, David Airlie , virtualization@lists.linux.dev, kvm@vger.kernel.org, kexec@lists.infradead.org, linux-hyperv@vger.kernel.org, "Christian Brauner (Amutable)" X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=openpgp-sha256; l=1456; i=brauner@kernel.org; h=from:subject:message-id; bh=ufNESbgGG96SdhrvZQNvdMYhyiyG0BhLW+Tl/xqdcT0=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWSt1Kk/up3zrbpgwjWhoti6iGnTuBPttKJTrrTH/TR99 na/1fRNHaUsDGJcDLJiiiwO7Sbhcst5KjYbZWrAzGFlAhnCwMUpABMRM2D4n28sFLhN/8+GKPvC voCqx/oLuw/JH2VIEPq49KPjCV75pwz/41f1ZW/e/L95zZs5+aVvD0z0YZjxyGRy0d0flus809L W8wMA X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Rely on the fd exit path machinery. Signed-off-by: Christian Brauner (Amutable) --- drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/a= mdgpu/amdgpu_cs.c index 03b41f803520..e5c0f7201cea 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c @@ -1581,7 +1581,8 @@ int amdgpu_cs_fence_to_handle_ioctl(struct drm_device= *dev, void *data, struct dma_fence *fence; struct drm_syncobj *syncobj; struct sync_file *sync_file; - int fd, r; + const struct fd_slot *fd; + int r; =20 fence =3D amdgpu_cs_get_fence(adev, filp, &info->in.fence); if (IS_ERR(fence)) @@ -1610,21 +1611,18 @@ int amdgpu_cs_fence_to_handle_ioctl(struct drm_devi= ce *dev, void *data, return r; =20 case AMDGPU_FENCE_TO_HANDLE_GET_SYNC_FILE_FD: - fd =3D get_unused_fd_flags(O_CLOEXEC); - if (fd < 0) { + fd =3D fd_prepare(O_CLOEXEC); + if (IS_ERR(fd)) { dma_fence_put(fence); - return fd; + return PTR_ERR(fd); } =20 sync_file =3D sync_file_create(fence); dma_fence_put(fence); - if (!sync_file) { - put_unused_fd(fd); + if (!sync_file) return -ENOMEM; - } =20 - fd_install(fd, sync_file->file); - info->out.handle =3D fd; + info->out.handle =3D fd_stage(fd, sync_file->file); return 0; =20 default: --=20 2.53.0 From nobody Fri Sep 25 07:56:54 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 C1C104A9D5C; Tue, 15 Sep 2026 11:37:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472223; cv=none; b=sZ8jWEn6YX7E+c/toL/J4VwmTQa8rZMbTpk9wQHxYYebJhDXIpmk0u9EzGCoNw9c5aWlMz6s+U6iM7gjC2+1afJB3C9/vPpw2gM1wgo/ZmnOCItkpGVqteoqZh+6ird9si/7nHEZCamsNB5Cocp4kqYuTrB6IftP8zXOcW9ZThk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472223; c=relaxed/simple; bh=WG8U461FL48WyesDf7+OQN8njA3nXiC/HvwYW8sZuPs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=it/f+AX6b6T2EFPwC7dEtyM3801iOT+3yGeIw3i5hUz8HteknTVgmpN0W2J/Bnb0YaMj3WzV4xF2m3sLnplY/C34gXG02BROXLHtGc2FoNGrrNrh3TVElfrSqAtfzSEga0UZ6sDSOe1lj8UvKaiyRzIl9ZKtr8+QtzGR40O7dok= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=hJcbb+ve; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="hJcbb+ve" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 28C811F00893; Tue, 15 Sep 2026 11:36:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789472221; bh=vNAyMtfXPrvlDMBwu/W4OdplmCeF+Bx8YXtsYm6LQAM=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=hJcbb+ve+d0nQ+lyOtzlz+UYbr/gC7seiGRVtM9hr3qhRy0SP4rtTxf+61fJV6HZZ LW8RS1sK7opxRgNB4vdONobXBpXD+8GA3HqD2ByRAw16fqkTwu9j8tnAJddGmb7PLP uAm06SirtIHb9CCSMDYGUJRVhcFsQ8v4/IdM2Y5J83ZMffAgWUfRu60wVT+I3rLxob Mi3XVumaSCaqqvXwhpB/3c9gXctwqH2urcLOWEF/YPHWIZ1DoeXtnc71XLjr6mUjdh GfPZGsugN7/T7eQDGipHgpsCZ2aT0QgMaxK1TaXJWBPrJ+seh1rFblIFb7+Y//Ecs/ SAX3DixdA32jQ== From: Christian Brauner Date: Tue, 15 Sep 2026 13:31:30 +0200 Subject: [PATCH RFC POC 44/50] drm/etnaviv: install the out-fence descriptor when the ioctl returns Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260915-work-fd-reserve-unify-folded-v1-44-4d5217d6b246@kernel.org> References: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> In-Reply-To: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> To: Linus Torvalds Cc: Alexander Viro , Jann Horn , Jan Kara , Ingo Molnar , Peter Zijlstra , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Oleg Nesterov , linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, Jens Axboe , io-uring@vger.kernel.org, netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, bpf@vger.kernel.org, David Airlie , virtualization@lists.linux.dev, kvm@vger.kernel.org, kexec@lists.infradead.org, linux-hyperv@vger.kernel.org, "Christian Brauner (Amutable)" X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=openpgp-sha256; l=1875; i=brauner@kernel.org; h=from:subject:message-id; bh=WG8U461FL48WyesDf7+OQN8njA3nXiC/HvwYW8sZuPs=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWSt1Km/q3LcYfWGcx8fpJwoLZDaNd0oa+00ldguK1cb6 asTWTUPdJSyMIhxMciKKbI4tJuEyy3nqdhslKkBM4eVCWQIAxenAEyEn5Hhf8CmHl/lhwWpt/aY /5Pr3xCoq1J+5FT33kNKDsks7ZtPZjMy7JT6oyr93P+B4L/VWRcU9j8zmrNg9ut3r3TNptlZWIi 5MgAA X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Rely on the fd exit path machinery. Signed-off-by: Christian Brauner (Amutable) --- drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c b/drivers/gpu/drm= /etnaviv/etnaviv_gem_submit.c index 1a77a09b3377..174f1d66d9ad 100644 --- a/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c +++ b/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c @@ -420,7 +420,7 @@ int etnaviv_ioctl_gem_submit(struct drm_device *dev, vo= id *data, struct etnaviv_gpu *gpu; struct sync_file *sync_file =3D NULL; struct ww_acquire_ctx ticket; - int out_fence_fd =3D -1; + const struct fd_slot *out_fence_fd =3D NULL; struct pid *pid =3D get_pid(task_pid(current)); void *stream; int ret; @@ -504,9 +504,9 @@ int etnaviv_ioctl_gem_submit(struct drm_device *dev, vo= id *data, } =20 if (args->flags & ETNA_SUBMIT_FENCE_FD_OUT) { - out_fence_fd =3D get_unused_fd_flags(O_CLOEXEC); - if (out_fence_fd < 0) { - ret =3D out_fence_fd; + out_fence_fd =3D fd_prepare(O_CLOEXEC); + if (IS_ERR(out_fence_fd)) { + ret =3D PTR_ERR(out_fence_fd); goto err_submit_cmds; } } @@ -607,10 +607,10 @@ int etnaviv_ioctl_gem_submit(struct drm_device *dev, = void *data, */ goto err_submit_put; } - fd_install(out_fence_fd, sync_file->file); + fd_stage(out_fence_fd, sync_file->file); } =20 - args->fence_fd =3D out_fence_fd; + args->fence_fd =3D out_fence_fd ? fd_prepare_fd(out_fence_fd) : -1; args->fence =3D submit->out_fence_id; =20 err_submit_job: @@ -623,8 +623,6 @@ int etnaviv_ioctl_gem_submit(struct drm_device *dev, vo= id *data, ww_acquire_fini(&ticket); =20 err_submit_cmds: - if (ret && (out_fence_fd >=3D 0)) - put_unused_fd(out_fence_fd); kvfree(stream); kvfree(bos); kvfree(relocs); --=20 2.53.0 From nobody Fri Sep 25 07:56:54 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 D63974A9D71; Tue, 15 Sep 2026 11:37:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472231; cv=none; b=h8gk64vs0k16w7K5Ht5FYY1t6bgNqZedL2hsUz9qxszmr7NWloVqJkHebhP2f4ouD/zTc5aiXaL6jwlA7fVIKgSF3X6k2CHiF+YFtw+KCVVEsukFk8WCZn1Us/U6loHz1QJeQCFAmSlTys018PoTULIYL1gUjaa0u/jmJLYs3lo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472231; c=relaxed/simple; bh=ydrjF0IvCagPMk+8W3Lo5F+Om/GvHyzFN7KTNwOeZ+c=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ZfAphqqhxgavVw9mGRB5AjFOpovN6cEU+H4mJwc5m70NiB+bgLkPKt4hZgac2GVcUdBndrykWENMtP2VHzbMY/cEBsPGsCMsdl7ogCtgXWS/nzfiAk1JfbzXwVQ98jqg53nDL58sSVVEoDHDsnxgjpAbsqFx4AbkoNPqfT7DMPk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=oOCbPxoT; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="oOCbPxoT" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3D6561F000FF; Tue, 15 Sep 2026 11:37:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789472229; bh=xKFkiCa0hlTe3sMnpSzoSnXToiZbVbh61g+KJO9ieuc=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=oOCbPxoTA5tRVDE1SDW2p9tC0NlFv3Be5GpoNWhYmURnweQxEsEdX5T61GQni5xDr dB8oKq6yW0o0+gkex/ln8ORrTi4m/ksGAeRyzNp36yZlNMlPyIA0cXetpfDQyX5Jlw kUeKik4FTXQWhScuFLMluxrSG6c9A9ZCbrTYp9zYSiEAOHtRRYECmeCyootOfrgsFF 4aVzqXKYOQKlcIlDUd5HFPC99RpSLMKbQX+NeTk8Ib6ernTnIZhKKs5s66GAw9HT8a aS1v8S5YrjxrTs7D5UvVddV+Ou7n/rKAkdnUoUpvZBcB6uDYitfeHcIW+Z9u4N80Fg U5N4JdROMjYmQ== From: Christian Brauner Date: Tue, 15 Sep 2026 13:31:31 +0200 Subject: [PATCH RFC POC 45/50] accel/habanalabs: stop putting the dma-buf descriptor back on failure Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260915-work-fd-reserve-unify-folded-v1-45-4d5217d6b246@kernel.org> References: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> In-Reply-To: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> To: Linus Torvalds Cc: Alexander Viro , Jann Horn , Jan Kara , Ingo Molnar , Peter Zijlstra , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Oleg Nesterov , linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, Jens Axboe , io-uring@vger.kernel.org, netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, bpf@vger.kernel.org, David Airlie , virtualization@lists.linux.dev, kvm@vger.kernel.org, kexec@lists.infradead.org, linux-hyperv@vger.kernel.org, "Christian Brauner (Amutable)" X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=openpgp-sha256; l=1297; i=brauner@kernel.org; h=from:subject:message-id; bh=ydrjF0IvCagPMk+8W3Lo5F+Om/GvHyzFN7KTNwOeZ+c=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWSt1Kn/suYdZ5X5676SLT84zbaJW7EmM036Hiq6ZOOqB ZPZLiWKdJSyMIhxMciKKbI4tJuEyy3nqdhslKkBM4eVCWQIAxenAExEfjfD/8KDx3tMQu5s8Nvq pTQrXEN8zcGDu7l3Sq29EHzMOo0/S5yR4VJD+//LnadWytZe1frxs+H8kb1LmHzvH1hrULDM+7H 3NRYA X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Rely on the fd exit path machinery. Signed-off-by: Christian Brauner (Amutable) --- drivers/accel/habanalabs/common/memory.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/drivers/accel/habanalabs/common/memory.c b/drivers/accel/haban= alabs/common/memory.c index 361cff577381..1559442cd56f 100644 --- a/drivers/accel/habanalabs/common/memory.c +++ b/drivers/accel/habanalabs/common/memory.c @@ -1861,11 +1861,13 @@ static int export_dmabuf(struct hl_ctx *ctx, { DEFINE_DMA_BUF_EXPORT_INFO(exp_info); struct hl_device *hdev =3D ctx->hdev; - CLASS(get_unused_fd, fd)(flags); + const struct fd_slot *fd =3D fd_prepare(flags); =20 - if (fd < 0) { - dev_err(hdev->dev, "failed to get a file descriptor for a dma-buf, %d\n"= , fd); - return fd; + if (IS_ERR(fd)) { + int rc =3D PTR_ERR(fd); + + dev_err(hdev->dev, "failed to get a file descriptor for a dma-buf, %d\n"= , rc); + return rc; } =20 exp_info.ops =3D &habanalabs_dmabuf_ops; @@ -1889,8 +1891,7 @@ static int export_dmabuf(struct hl_ctx *ctx, */ get_file(ctx->hpriv->file_priv->filp); =20 - *dmabuf_fd =3D fd; - fd_install(take_fd(fd), hl_dmabuf->dmabuf->file); + *dmabuf_fd =3D fd_stage(fd, hl_dmabuf->dmabuf->file); =20 return 0; } --=20 2.53.0 From nobody Fri Sep 25 07:56:54 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 171264AA02E; Tue, 15 Sep 2026 11:37:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472239; cv=none; b=OQegR7QcAad3T5ukfGq4RLPt4bLTMrpAqPPcIBOU5x1nMhsCaH9cQ4nNgkbhW64ybTiI7FDul1WIchcF8M3lcbbBvrgzW6nL3nbaooWlyFUZgJDXv6NHHUwcEe7cvqsrLrL3Mn/vMdyEoQ3B3L/X0DODg5RONwa6aDlvxt/GRVU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472239; c=relaxed/simple; bh=njDuxDGw0hmgU8wKPypyXyk5GfJpiYpSpC9eP8wkYpU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=j/fLtnVMjuEA1f2Pb0qUlABDUz/7rgf7qDE+CHMw+YrNv5rnS9mnjvw9UZta5lLiW1rCkyHwFLi1BNBlsXrQHXkyFi1DwBJBd5Yok3dOrXRhLEZpUfKUhyBQ3SLPVQmiHA+gC2H32GWXUPRLiUikATBjw6IIoE124av32HCLYs4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=a6dDn4u7; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="a6dDn4u7" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0A48B1F0089B; Tue, 15 Sep 2026 11:37:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789472237; bh=BqXm1gwNkPuV8t/s5aBHvxXoZQi1gmoyMrWOmcTh+e0=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=a6dDn4u7UHWeS4oTPwJxZY/4MEQxfhe+w1dKAeLobwNA3kw8GA3R9jRM2UR2mitay 53rP31LX9IqiX4KyqJPeG5/A7Wk+vS/URJ+UIVi9s1V2CPS0HR+hZ4KD6LOwLi84oS QHwPtObpcQ5V14Eq0QEfaz7SuQthG9rIDnYNoZNXfjPTl3loRHMdpOz24R20W3G90W UlZUihfBsJUGHcwdaoYH/9Wk5PPbgvkC3G4N/+PjxTb+vMzH1dM6mnf2s5E522jH4C ipwBTphCPJfK0gAPAR1mBJJ0lQjIBDvfQG7LHcMtNeNhxBkuWpXGTndvfVHeezP+yl SKtsU9/kk2SGQ== From: Christian Brauner Date: Tue, 15 Sep 2026 13:31:32 +0200 Subject: [PATCH RFC POC 46/50] xen/gntdev-dmabuf: stop putting the descriptor back on failure Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260915-work-fd-reserve-unify-folded-v1-46-4d5217d6b246@kernel.org> References: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> In-Reply-To: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> To: Linus Torvalds Cc: Alexander Viro , Jann Horn , Jan Kara , Ingo Molnar , Peter Zijlstra , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Oleg Nesterov , linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, Jens Axboe , io-uring@vger.kernel.org, netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, bpf@vger.kernel.org, David Airlie , virtualization@lists.linux.dev, kvm@vger.kernel.org, kexec@lists.infradead.org, linux-hyperv@vger.kernel.org, "Christian Brauner (Amutable)" X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=openpgp-sha256; l=1632; i=brauner@kernel.org; h=from:subject:message-id; bh=njDuxDGw0hmgU8wKPypyXyk5GfJpiYpSpC9eP8wkYpU=; b=kA0DAAoWkcYbwGV43KIByyZiAGqpLH/I6D6Uv1WDf9ilssavQSoU/hfbYczV5DbAAkrVEcQbC Yh1BAAWCgAdFiEEQIc0Vx6nDHizMmkokcYbwGV43KIFAmqpLH8ACgkQkcYbwGV43KLDpAD/YSHF Q2prY93oobCwIjSF/SfO7Zal68tdHzxKNHmWJJEA/R/JD6+ZeSXqBuxwWtOWojlugYUiab/9tAe INmLXFesK X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Rely on the fd exit path machinery. Signed-off-by: Christian Brauner (Amutable) --- drivers/xen/gntdev-dmabuf.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/drivers/xen/gntdev-dmabuf.c b/drivers/xen/gntdev-dmabuf.c index 83b0df460894..a3ecc7c83974 100644 --- a/drivers/xen/gntdev-dmabuf.c +++ b/drivers/xen/gntdev-dmabuf.c @@ -357,10 +357,10 @@ static int dmabuf_exp_from_pages(struct gntdev_dmabuf= _export_args *args) { DEFINE_DMA_BUF_EXPORT_INFO(exp_info); struct gntdev_dmabuf *gntdev_dmabuf __free(kfree) =3D NULL; - CLASS(get_unused_fd, ret)(O_CLOEXEC); + const struct fd_slot *fd =3D fd_prepare(O_CLOEXEC); =20 - if (ret < 0) - return ret; + if (IS_ERR(fd)) + return PTR_ERR(fd); =20 gntdev_dmabuf =3D kzalloc_obj(*gntdev_dmabuf); if (!gntdev_dmabuf) @@ -388,17 +388,17 @@ static int dmabuf_exp_from_pages(struct gntdev_dmabuf= _export_args *args) if (IS_ERR(gntdev_dmabuf->dmabuf)) return PTR_ERR(gntdev_dmabuf->dmabuf); =20 - gntdev_dmabuf->fd =3D ret; - args->fd =3D ret; + gntdev_dmabuf->fd =3D fd_prepare_fd(fd); + args->fd =3D fd_prepare_fd(fd); =20 - pr_debug("Exporting DMA buffer with fd %d\n", ret); + pr_debug("Exporting DMA buffer with fd %d\n", fd_prepare_fd(fd)); =20 get_file(gntdev_dmabuf->priv->filp); mutex_lock(&args->dmabuf_priv->lock); list_add(&gntdev_dmabuf->next, &args->dmabuf_priv->exp_list); mutex_unlock(&args->dmabuf_priv->lock); =20 - fd_install(take_fd(ret), no_free_ptr(gntdev_dmabuf)->dmabuf->file); + fd_stage(fd, no_free_ptr(gntdev_dmabuf)->dmabuf->file); return 0; } =20 --=20 2.53.0 From nobody Fri Sep 25 07:56:54 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 D41C84A99B5; Tue, 15 Sep 2026 11:37:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472247; cv=none; b=TZgtWrrL9G3+QpgeTl/FOtVoyhU4UQR/cyDrmWdNfjWIB406QgaRUS5Cxk8qbIx1msTZxjAw4M6tl9xBNkK4hBYIY5y9lvz2m7vVgSadv94bI6J7bamc8E6QHyOfY+2/M+TmAgyQogoQAWrIOX6c2VLw+Q85GRspygkivnoDWKQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472247; c=relaxed/simple; bh=RM8/Ryi0JBjisB2tI5DXR2rE8sCF/AliS5Zp4F8Qhf4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ZBnbdVmJPjljXcFp5EZleZLrC6d74vzyd0hjzJNjYgyYBWnbqRK7Hbqpms0R+m9Q5rRgEx8GSOvizqbmixYPKc4iGxrQtXFHN6RzhOa1w7joNwHjYxQfll3boc/ZrhJXJpz+2gbhRdFG2zXUKiWqbbQ51KrtEot380IxKyGQFd0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=fNFTQOJL; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="fNFTQOJL" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0EE621F00893; Tue, 15 Sep 2026 11:37:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789472245; bh=mjqLYqkFC5yCbrRzMMvOpmvK8b+wb1Az5sELRN6Iqmw=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=fNFTQOJL+iGGO+zzzm7cDe+/taoDcFY7fewDCdDuBMLNk844/5YTOXExel7EKsF9S oLRnzjguOrHBG/PK7ZC549dR4lB6cSOioaIssgENRRB/BPi7+UG74t/yS8GmkCNH9C SYkWW/2u8YiYHbyNYlVSLFpnBvaUvCIp4Mwu/abM5lLuo8GHPpD/0L9dCr6/bh0kxz Ano4WmSOQb609KJxhLhb4QylzFqFY4npF26OT03shrB8BqGetnHALS1L68dHSQxDHf lkgeVcI6ujFF+0WS99WYyuepbVTQzAmtrQq19Z8PUhZtIGApiugszVbmJFY6aacriE TeUsi9M9eNUTQ== From: Christian Brauner Date: Tue, 15 Sep 2026 13:31:33 +0200 Subject: [PATCH RFC POC 47/50] iio: buffer: install the buffer descriptor when the ioctl returns Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260915-work-fd-reserve-unify-folded-v1-47-4d5217d6b246@kernel.org> References: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> In-Reply-To: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> To: Linus Torvalds Cc: Alexander Viro , Jann Horn , Jan Kara , Ingo Molnar , Peter Zijlstra , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Oleg Nesterov , linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, Jens Axboe , io-uring@vger.kernel.org, netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, bpf@vger.kernel.org, David Airlie , virtualization@lists.linux.dev, kvm@vger.kernel.org, kexec@lists.infradead.org, linux-hyperv@vger.kernel.org, "Christian Brauner (Amutable)" X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=openpgp-sha256; l=1959; i=brauner@kernel.org; h=from:subject:message-id; bh=RM8/Ryi0JBjisB2tI5DXR2rE8sCF/AliS5Zp4F8Qhf4=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWSt1KkPFJZ6IZfMtyJ0UsaFFiuPoGWsPxtn3v1o+e3z3 stfX0943lHKwiDGxSArpsji0G4SLrecp2KzUaYGzBxWJpAhDFycAjCR6LMM/yNudM+8naelq7Sn g+X00Zpv+usvL13mfINZZtGLrdYV3KkMfzjPLfxTceTH7fV1ATe3FQTfd1Vd7vTqOWPz3spdkTu WLmIFAA== X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Rely on the fd exit path machinery. Signed-off-by: Christian Brauner (Amutable) --- drivers/iio/industrialio-buffer.c | 26 +++++++++----------------- 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/drivers/iio/industrialio-buffer.c b/drivers/iio/industrialio-b= uffer.c index 2c9ec93dff47..9fb15bf82d0a 100644 --- a/drivers/iio/industrialio-buffer.c +++ b/drivers/iio/industrialio-buffer.c @@ -2041,7 +2041,7 @@ static long iio_device_buffer_getfd(struct iio_dev *i= ndio_dev, unsigned long arg int __user *ival =3D (int __user *)arg; struct iio_dev_buffer_pair *ib; struct iio_buffer *buffer; - int fd, idx, ret; + int idx, ret, fdno; =20 if (copy_from_user(&idx, ival, sizeof(idx))) return -EFAULT; @@ -2067,26 +2067,18 @@ static long iio_device_buffer_getfd(struct iio_dev = *indio_dev, unsigned long arg ib->indio_dev =3D indio_dev; ib->buffer =3D buffer; =20 - fd =3D anon_inode_getfd("iio:buffer", &iio_buffer_chrdev_fileops, - ib, O_RDWR | O_CLOEXEC); - if (fd < 0) { - ret =3D fd; + FD_PREPARE(fdf, O_RDWR | O_CLOEXEC, + anon_inode_getfile("iio:buffer", &iio_buffer_chrdev_fileops, + ib, O_RDWR | O_CLOEXEC)); + if (IS_ERR(fdf)) { + ret =3D PTR_ERR(fdf); goto error_free_ib; } =20 - if (copy_to_user(ival, &fd, sizeof(fd))) { - /* - * "Leak" the fd, as there's not much we can do about this - * anyway. 'fd' might have been closed already, as - * anon_inode_getfd() called fd_install() on it, which made - * it reachable by userland. - * - * Instead of allowing a malicious user to play tricks with - * us, rely on the process exit path to do any necessary - * cleanup, as in releasing the file, if still needed. - */ + fdno =3D fd_prepare_fd(fdf); + /* The staged file is dropped with its descriptor if this faults. */ + if (copy_to_user(ival, &fdno, sizeof(fdno))) return -EFAULT; - } =20 return 0; =20 --=20 2.53.0 From nobody Fri Sep 25 07:56:54 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 8B5C44A99B5; Tue, 15 Sep 2026 11:37:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472254; cv=none; b=Y/ZgMMHdTpFf/bbl3jp8HJxF58rdmRe1wcs1gBeukBUcRkQnhHBEgGbjoM9qWBw6Sx2V61IM8P7eSc0XP3wdV5ZooXKVaIVs6rqhrkOM41hEWvVtZWfEJk+TJ6sc036XYJzFVw16BBUSAWHb3B0ojESK8FFElzNHX7I9NgwKKSw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472254; c=relaxed/simple; bh=cqNOp0aS6I05gELpjlHXd0owI5nLbJqswEU8UWMTx0A=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=SGcqhBWfmQ/1jcl9pI1uzSoEXhjiksx6be7XdSbRQSJkNIX63Z3gVLVLwGW+vpFgkdFk3qHefNZSL8TJuFcvSMf8sCHIoQui2Q4TuOigiPRhrU+Sm8wdSATZg26DXepli8qOFN83ZpW4OWrAtl7hLK3FnhcJ7k/FMprvu4Cvc3A= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=KqnWgCCB; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="KqnWgCCB" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 022161F000FF; Tue, 15 Sep 2026 11:37:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789472253; bh=43PF/RCUOZQkJsOOgjTj3NZfqo5RZrpEBnO0+rNiFJE=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=KqnWgCCBBHbflkUyPO4GlX+NqrkQFoLbpdeV95+70PxGxWdRlCZK2hEFg7AKpGM8d P+sDlo6n6p/oD4DHtw5k4ao1CCny987weMHVwVi57TIzGmedW26EG1RySUo7EUC3wL govHdLEbUVf9mmDt8elYfT7Db4xTVjDVamv4EuP8wsrMfCbgWeOAVYswLv5gav0BOT MlginGpeWoN48Ny0LTtfFlqXOFFO5u4nlES7nGcrAPFHjrQQttsk0uwSQM7UkTulFT MHFUk3iByhyEoh4VP3/GmREzjD3XQ75V+DK8eWFkJXVQmcZAGfPHvBT+mosXjqMwpA YKgxCV7My/uOw== From: Christian Brauner Date: Tue, 15 Sep 2026 13:31:34 +0200 Subject: [PATCH RFC POC 48/50] misc: fastrpc: install the dma-buf descriptor when the ioctl returns Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260915-work-fd-reserve-unify-folded-v1-48-4d5217d6b246@kernel.org> References: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> In-Reply-To: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> To: Linus Torvalds Cc: Alexander Viro , Jann Horn , Jan Kara , Ingo Molnar , Peter Zijlstra , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Oleg Nesterov , linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, Jens Axboe , io-uring@vger.kernel.org, netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, bpf@vger.kernel.org, David Airlie , virtualization@lists.linux.dev, kvm@vger.kernel.org, kexec@lists.infradead.org, linux-hyperv@vger.kernel.org, "Christian Brauner (Amutable)" X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=openpgp-sha256; l=1831; i=brauner@kernel.org; h=from:subject:message-id; bh=cqNOp0aS6I05gELpjlHXd0owI5nLbJqswEU8UWMTx0A=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWSt1KkPYaw+MXnFd73DKesXPFlfMXNFNsPLRZf+RF2XY bp6P+0Kb0cpC4MYF4OsmCKLQ7tJuNxynorNRpkaMHNYmUCGMHBxCsBETGQYGSZ8vdT+NFe0bk0l +55pTDcfSvjMedPirtK/tvj3rIZKzuUM/8x33i1095DRM+a7Hu9qcGFp07anFQ2bOM4tOR05Zb0 HOzMA X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Rely on the fd exit path machinery. Signed-off-by: Christian Brauner (Amutable) --- drivers/misc/fastrpc.c | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/drivers/misc/fastrpc.c b/drivers/misc/fastrpc.c index 90fd669636ec..24b84019bbd7 100644 --- a/drivers/misc/fastrpc.c +++ b/drivers/misc/fastrpc.c @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include @@ -1804,6 +1805,7 @@ static int fastrpc_dmabuf_alloc(struct fastrpc_user *= fl, char __user *argp) DEFINE_DMA_BUF_EXPORT_INFO(exp_info); struct fastrpc_buf *buf =3D NULL; int err; + const struct fd_slot *fd; =20 if (copy_from_user(&bp, argp, sizeof(bp))) return -EFAULT; @@ -1822,23 +1824,16 @@ static int fastrpc_dmabuf_alloc(struct fastrpc_user= *fl, char __user *argp) return err; } =20 - bp.fd =3D dma_buf_fd(buf->dmabuf, O_ACCMODE); - if (bp.fd < 0) { + fd =3D fd_prepare(O_ACCMODE); + if (IS_ERR(fd)) { dma_buf_put(buf->dmabuf); return -EINVAL; } + bp.fd =3D fd_stage(fd, buf->dmabuf->file); =20 - if (copy_to_user(argp, &bp, sizeof(bp))) { - /* - * The usercopy failed, but we can't do much about it, as - * dma_buf_fd() already called fd_install() and made the - * file descriptor accessible for the current process. It - * might already be closed and dmabuf no longer valid when - * we reach this point. Therefore "leak" the fd and rely on - * the process exit path to do any required cleanup. - */ + /* The staged file is dropped with its descriptor if this faults. */ + if (copy_to_user(argp, &bp, sizeof(bp))) return -EFAULT; - } =20 return 0; } --=20 2.53.0 From nobody Fri Sep 25 07:56:54 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 CFF2E4A99B5; Tue, 15 Sep 2026 11:37:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472263; cv=none; b=Jm0miXCRDXqzvEML82FcFSQu+fV0XgXxaecrTZlNO5oGqxQHyIW33UBCo22gIM04+M/EEFp/BX15zpGtPQSM6ttsjk0J3zWHBtuHoGOwzKQDQ21gPa1IDa6NqyMoUSV2HcYXIQQH6xHcBmRp6aY5K7helPB1seq6oY1QGCZPVY0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472263; c=relaxed/simple; bh=Tx0MTQ1YnVtsCJithyQQ1YlkyHM6SB+QGz8po6KWPTc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ow3rGa0cUOUL44cQX/2/NQN3CcVVbKE5c/8unYHPFkck3IG+UAA/OMNBK5wFKFHPydAkpEjoGLry0DarkMxA2hpPZxSSjxQYtWpS6tslgp3EJmCSRbahZMMA2/nk4zZTJz18FD5U6d3u2GVFyvFThgane5J2q21epHyJe5r0fcY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=SMo47o/J; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="SMo47o/J" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 00B071F00893; Tue, 15 Sep 2026 11:37:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789472261; bh=tjgNPx3x7WII2tr/AwvmAnEJWXGOM0OeaxbIcUanKyI=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=SMo47o/JPxKGY6qTNLRWBziEbn+58IX3nPctPMC7Rjv/4Cm+o+BJijIJnYVe8zJNi wtm2ogfTwLSXwVXiRa8BwU676bAhTFIUDdSLL7QWmD6wZs73V9DyEUOfRDrJ+IY403 kqv0bmOC18w9ruJeugOg/OVAFQjR9gpxqiygmBT/TwoeVymZyVDEbKq6Hd3l29gwkE 6gMLb1D7frbGbL+XuuTzjEeBT25eZX3KvVOEPtQdK5AuDh5R02exf0Wm9bz+fe67Iz hw49+A+yqFYEMWzyNlTUmA/r+VKXbFFAqeFAkxdiB9zM9A5cJNU9ykZ66qrgX/f5g4 5B2mHT5wBqVHQ== From: Christian Brauner Date: Tue, 15 Sep 2026 13:31:35 +0200 Subject: [PATCH RFC POC 49/50] iommufd: stop putting descriptors back on failure Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260915-work-fd-reserve-unify-folded-v1-49-4d5217d6b246@kernel.org> References: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> In-Reply-To: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> To: Linus Torvalds Cc: Alexander Viro , Jann Horn , Jan Kara , Ingo Molnar , Peter Zijlstra , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Oleg Nesterov , linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, Jens Axboe , io-uring@vger.kernel.org, netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, bpf@vger.kernel.org, David Airlie , virtualization@lists.linux.dev, kvm@vger.kernel.org, kexec@lists.infradead.org, linux-hyperv@vger.kernel.org, "Christian Brauner (Amutable)" X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=openpgp-sha256; l=3656; i=brauner@kernel.org; h=from:subject:message-id; bh=Tx0MTQ1YnVtsCJithyQQ1YlkyHM6SB+QGz8po6KWPTc=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWSt1Kk3WbDjFvN29pT3Xq7896z8vX2FtjvvefB1xQfue XsWsk4o7yhlYRDjYpAVU2RxaDcJl1vOU7HZKFMDZg4rE8gQBi5OAZiI3CuGf/rLHM5NDdh5MSei 56otb6TCFq/HRZ/fcG4J0t5of2Rr5hxGhp4HVV1b2aIEtkx5uGOb3IS1967+fbb6v6rTAdk7ocz G3mwA X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Rely on the fd exit path machinery. Signed-off-by: Christian Brauner (Amutable) --- drivers/iommu/iommufd/eventq.c | 39 +++++++++++++++++---------------------- 1 file changed, 17 insertions(+), 22 deletions(-) diff --git a/drivers/iommu/iommufd/eventq.c b/drivers/iommu/iommufd/eventq.c index 747dd5155121..f5fdc6cdf0a1 100644 --- a/drivers/iommu/iommufd/eventq.c +++ b/drivers/iommu/iommufd/eventq.c @@ -412,9 +412,9 @@ static int iommufd_eventq_fops_release(struct inode *in= ode, struct file *filep) .release =3D iommufd_eventq_fops_release, \ }) =20 -static int iommufd_eventq_init(struct iommufd_eventq *eventq, char *name, - struct iommufd_ctx *ictx, - const struct file_operations *fops) +static const struct fd_slot *iommufd_eventq_init(struct iommufd_eventq *ev= entq, char *name, + struct iommufd_ctx *ictx, + const struct file_operations *fops) { struct file *filep; =20 @@ -425,14 +425,14 @@ static int iommufd_eventq_init(struct iommufd_eventq = *eventq, char *name, /* The filep is fput() by the core code during failure */ filep =3D anon_inode_getfile(name, fops, eventq, O_RDWR); if (IS_ERR(filep)) - return PTR_ERR(filep); + return ERR_CAST(filep); =20 eventq->ictx =3D ictx; iommufd_ctx_get(eventq->ictx); eventq->filep =3D filep; refcount_inc(&eventq->obj.users); =20 - return get_unused_fd_flags(O_CLOEXEC); + return fd_prepare(O_CLOEXEC); } =20 static const struct file_operations iommufd_fault_fops =3D @@ -442,7 +442,7 @@ int iommufd_fault_alloc(struct iommufd_ucmd *ucmd) { struct iommu_fault_alloc *cmd =3D ucmd->cmd; struct iommufd_fault *fault; - int fdno; + const struct fd_slot *fdno; int rc; =20 if (cmd->flags) @@ -458,22 +458,19 @@ int iommufd_fault_alloc(struct iommufd_ucmd *ucmd) =20 fdno =3D iommufd_eventq_init(&fault->common, "[iommufd-pgfault]", ucmd->ictx, &iommufd_fault_fops); - if (fdno < 0) - return fdno; + if (IS_ERR(fdno)) + return PTR_ERR(fdno); =20 cmd->out_fault_id =3D fault->common.obj.id; - cmd->out_fault_fd =3D fdno; + cmd->out_fault_fd =3D fd_prepare_fd(fdno); =20 rc =3D iommufd_ucmd_respond(ucmd, sizeof(*cmd)); if (rc) - goto out_put_fdno; + return rc; =20 - fd_install(fdno, fault->common.filep); + fd_stage(fdno, fault->common.filep); =20 return 0; -out_put_fdno: - put_unused_fd(fdno); - return rc; } =20 int iommufd_fault_iopf_handler(struct iopf_group *group) @@ -506,7 +503,7 @@ int iommufd_veventq_alloc(struct iommufd_ucmd *ucmd) struct iommu_veventq_alloc *cmd =3D ucmd->cmd; struct iommufd_veventq *veventq; struct iommufd_viommu *viommu; - int fdno; + const struct fd_slot *fdno; int rc; =20 if (cmd->flags || cmd->__reserved || @@ -543,24 +540,22 @@ int iommufd_veventq_alloc(struct iommufd_ucmd *ucmd) =20 fdno =3D iommufd_eventq_init(&veventq->common, "[iommufd-viommu-event]", ucmd->ictx, &iommufd_veventq_fops); - if (fdno < 0) { - rc =3D fdno; + if (IS_ERR(fdno)) { + rc =3D PTR_ERR(fdno); goto out_abort; } =20 cmd->out_veventq_id =3D veventq->common.obj.id; - cmd->out_veventq_fd =3D fdno; + cmd->out_veventq_fd =3D fd_prepare_fd(fdno); =20 rc =3D iommufd_ucmd_respond(ucmd, sizeof(*cmd)); if (rc) - goto out_put_fdno; + goto out_abort; =20 iommufd_object_finalize(ucmd->ictx, &veventq->common.obj); - fd_install(fdno, veventq->common.filep); + fd_stage(fdno, veventq->common.filep); goto out_unlock_veventqs; =20 -out_put_fdno: - put_unused_fd(fdno); out_abort: iommufd_object_abort_and_destroy(ucmd->ictx, &veventq->common.obj); out_unlock_veventqs: --=20 2.53.0 From nobody Fri Sep 25 07:56:54 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 E33354AA1C9; Tue, 15 Sep 2026 11:37:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472272; cv=none; b=Bmi1QF0kGmP9EWutiRQzW3rbXH0WkHqv4z0fW7v6QafB7vc3Q8ew9aq1DCz0hfqAkMBp+QOYw3S3Jv23pN0sVZNnLPk29TSwk2RMN51vZ1a4SDpHPQm96SV//xDM2k8AULAtQ53xJSIHRwdM4jH/biN0qDZb2rAQhA9V/ck8vkY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789472272; c=relaxed/simple; bh=SzeXPqGJtllJZEGwqHGcwxzZWYTunmeJfrbckytXGkI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=hAmzsmQHbiXSBSUSw4WoHKrV+SZJ/Tv1qNl6BFZpxOKMVuREZL0BU9W219DwbKcmjNFn4/yAOLd4FAS7M7vTeJ33mJZsSaqdtp4CFP2p8qd+iI5H5wd767bBpEomv6qRWhrqtJXDxQKqFepvelXGLbuoriS49Sc1DzQ+jMBtiLo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=nIsDG6ms; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="nIsDG6ms" Received: by smtp.kernel.org (Postfix) with ESMTPSA id DDE2E1F00898; Tue, 15 Sep 2026 11:37:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789472269; bh=GNDTkXQI7mGdcVaT7SDrw9M8MIqod2XUSoHG2zw3J2w=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=nIsDG6msZxm9ifdIIaNBb4DSvDwZjxBexDpBy0k5+c0EEQRfRNHCnvgHTIY4Q0gZ4 5Y4GAqy+82PffLbcvJlnpDdJKam2a1RZ/lmTtWzv5yc2Qa3CGs1EC2lgotUwdrCtPN R+e8tN55H2q/lzjefH/7MqxCwUMd/aRzXVOqaq/JIPnIQz/fh1lk4mDieRcetKm0Vz We6QD5SZZpeWs1skjtjC95uTXtri2f8p0027MOwC2PJ2AtBz1eyxEa8oFwDdJ/4IbQ 1oi4l5RBwZ4QhEmCd9i4/Ab6QCou55Lo2D/xSrTRR5npBOhYvLPf8mp8Z+7okOyPo6 hMky5BV0f8Xcg== From: Christian Brauner Date: Tue, 15 Sep 2026 13:31:36 +0200 Subject: [PATCH RFC POC 50/50] Drivers: hv: mshv: stop putting descriptors back on failure Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260915-work-fd-reserve-unify-folded-v1-50-4d5217d6b246@kernel.org> References: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> In-Reply-To: <20260915-work-fd-reserve-unify-folded-v1-0-4d5217d6b246@kernel.org> To: Linus Torvalds Cc: Alexander Viro , Jann Horn , Jan Kara , Ingo Molnar , Peter Zijlstra , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Oleg Nesterov , linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, Jens Axboe , io-uring@vger.kernel.org, netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, bpf@vger.kernel.org, David Airlie , virtualization@lists.linux.dev, kvm@vger.kernel.org, kexec@lists.infradead.org, linux-hyperv@vger.kernel.org, "Christian Brauner (Amutable)" X-Mailer: b4 0.17-dev-db0b7 X-Developer-Signature: v=1; a=openpgp-sha256; l=3018; i=brauner@kernel.org; h=from:subject:message-id; bh=SzeXPqGJtllJZEGwqHGcwxzZWYTunmeJfrbckytXGkI=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWSt1KmPkjZIUeG9e+1R07epv8QvrSgMsrt/1D2tpUnF+ Ty/n9jUjlIWBjEuBlkxRRaHdpNwueU8FZuNMjVg5rAygQxh4OIUgIlo3mb4Hx4+8+W/E5svyCgt bpvwatmUgujlCXflfc2DLyvdmH/HYCPDH44Jiw0OZie7VZtm8ZzaXLrdzmx2uNpNg59n94iEL7/ iyAIA X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Rely on the fd exit path machinery. Signed-off-by: Christian Brauner (Amutable) --- drivers/hv/mshv_root_main.c | 27 +++++++-------------------- drivers/hv/mshv_vtl_main.c | 20 +++++--------------- 2 files changed, 12 insertions(+), 35 deletions(-) diff --git a/drivers/hv/mshv_root_main.c b/drivers/hv/mshv_root_main.c index cc2cfce2aefd..c95cee0bae85 100644 --- a/drivers/hv/mshv_root_main.c +++ b/drivers/hv/mshv_root_main.c @@ -1072,8 +1072,6 @@ mshv_partition_ioctl_create_vp(struct mshv_partition = *partition, struct mshv_vp *vp; struct page *intercept_msg_page, *register_page, *ghcb_page; struct hv_stats_page *stats_pages[2]; - struct file *file; - int fd; long ret; =20 if (copy_from_user(&args, arg, sizeof(args))) @@ -1148,19 +1146,14 @@ mshv_partition_ioctl_create_vp(struct mshv_partitio= n *partition, if (ret) goto put_partition; =20 - fd =3D get_unused_fd_flags(O_RDWR | O_CLOEXEC); - if (fd < 0) { - ret =3D fd; + FD_PREPARE(fdf, O_RDWR | O_CLOEXEC, + anon_inode_getfile("mshv_vp", &mshv_vp_fops, vp, + O_RDWR | O_CLOEXEC)); + if (IS_ERR(fdf)) { + ret =3D PTR_ERR(fdf); goto remove_debugfs_vp; } =20 - file =3D anon_inode_getfile("mshv_vp", &mshv_vp_fops, vp, - O_RDWR | O_CLOEXEC); - if (IS_ERR(file)) { - ret =3D PTR_ERR(file); - goto put_unused_vp_fd; - } - /* already exclusive with the partition mutex for all ioctls */ partition->pt_vp_count++; /* @@ -1171,17 +1164,11 @@ mshv_partition_ioctl_create_vp(struct mshv_partitio= n *partition, */ smp_store_release(&partition->pt_vp_array[args.vp_index], vp); =20 - /* - * fd_install() is the userspace-visibility commit point. Must be the - * last operation that can fail or be observed. - */ - fd_install(fd, file); - ret =3D fd; + /* The syscall exit installs the file; nothing after this can fail. */ + ret =3D fd_prepare_fd(fdf); =20 goto out; =20 -put_unused_vp_fd: - put_unused_fd(fd); remove_debugfs_vp: mshv_debugfs_vp_remove(vp); put_partition: diff --git a/drivers/hv/mshv_vtl_main.c b/drivers/hv/mshv_vtl_main.c index 6e3c11c68171..f14203d76da1 100644 --- a/drivers/hv/mshv_vtl_main.c +++ b/drivers/hv/mshv_vtl_main.c @@ -114,29 +114,19 @@ static long mshv_ioctl_create_vtl(void __user *user_arg, struct device *module_dev) { struct mshv_vtl *vtl; - struct file *file; - int fd; =20 vtl =3D kzalloc_obj(*vtl); if (!vtl) return -ENOMEM; =20 - fd =3D get_unused_fd_flags(O_CLOEXEC); - if (fd < 0) { - kfree(vtl); - return fd; - } - file =3D anon_inode_getfile("mshv_vtl", &mshv_vtl_fops, - vtl, O_RDWR); - if (IS_ERR(file)) { - put_unused_fd(fd); + FD_PREPARE(fdf, O_CLOEXEC, + anon_inode_getfile("mshv_vtl", &mshv_vtl_fops, vtl, O_RDWR)); + if (IS_ERR(fdf)) { kfree(vtl); - return PTR_ERR(file); + return PTR_ERR(fdf); } vtl->module_dev =3D module_dev; - fd_install(fd, file); - - return fd; + return fd_prepare_fd(fdf); } =20 static long --=20 2.53.0