From: Christian Brauner <brauner@kernel.org>
To: linux-fsdevel@vger.kernel.org
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
Jann Horn <jannh@google.com>, Josef Bacik <josef@toxicpanda.com>,
Chris Mason <mason@kernel.org>, Jeff Layton <jlayton@kernel.org>,
NeilBrown <neil@brown.name>, Eric Dumazet <edumazet@kernel.org>,
Thomas Gleixner <tglx@kernel.org>,
Al Viro <viro@zeniv.linux.org.uk>,
Jonathan Corbet <corbet@lwn.net>, Christoph Hellwig <hch@lst.de>,
Greg Kroah-Hartman <gregkh@suse.de>,
Joel Granados <joel.granados@kernel.org>,
Kees Cook <kees@kernel.org>, Jan Kara <jack@suse.cz>,
Jan Kara <jack@suse.com>,
linux-kernel@vger.kernel.org, linux-nfs@vger.kernel.org,
linux-acpi@vger.kernel.org, linux-kselftest@vger.kernel.org,
linux-s390@vger.kernel.org, linux-scsi@vger.kernel.org,
linux-um@lists.infradead.org, linux-wireless@vger.kernel.org,
linuxppc-dev@lists.ozlabs.org, netdev@vger.kernel.org,
ntfs3@lists.linux.dev, platform-driver-x86@vger.kernel.org,
coreteam@netfilter.org, kexec@lists.infradead.org,
linux-pci@vger.kernel.org, linux-sound@vger.kernel.org,
netfilter-devel@vger.kernel.org, dri-devel@lists.freedesktop.org,
ibm-acpi-devel@lists.sourceforge.net,
jfs-discussion@lists.sourceforge.net,
linux-alpha@vger.kernel.org,
linux-arm-kernel@lists.infradead.org, linux-cifs@vger.kernel.org,
linux-fbdev@vger.kernel.org, linux-hwmon@vger.kernel.org,
linux-mm@kvack.org, linux-sh@vger.kernel.org,
linux-usb@vger.kernel.org, samba-technical@lists.samba.org,
sparclinux@vger.kernel.org, linux-m68k@lists.linux-m68k.org,
linux-doc@vger.kernel.org, linux-serial@vger.kernel.org,
linux-atm-general@lists.sourceforge.net,
Takashi Iwai <tiwai@suse.de>,
linux-input@vger.kernel.org, linux-raid@vger.kernel.org,
linux-ext4@vger.kernel.org, linux-modules@vger.kernel.org,
linux-debuggers@vger.kernel.org,
"Christian Brauner (Amutable)" <brauner@kernel.org>,
Chuck Lever <cel@kernel.org>
Subject: [PATCH RESEND v2 00/23] proc: let procfs own the data path (Part 2/7)
Date: Wed, 4 Nov 2026 20:29:18 +0100 [thread overview]
Message-ID: <20261104-work-procfs-core-v2-0-76ace653a773@kernel.org> (raw)
In-Reply-To: <20261104-work-procfs-v2-0-b45cd5789ac5@brauner>
Part 2/7 of "proc: move procfs to what kernfs does", on top of part 1:
https://patch.msgid.link/20261104-work-procfs-v2-0-b45cd5789ac5@brauner
remove_proc_entry() waits until every call into the entry has returned.
A seq_file entry wait across seq_read_iter() including the copy to
userspace. Non-seq_file entries wait across ->proc_read(),
->proc_write() and ->proc_ioctl(), which copy to and from userspace
as well.
A reader or writer can abuse a page fault to make copy take as long as
it wants. For example, by using userfaultfd or by punching holes into a
memfd over and over. And callers of remove_proc_entry() like to hold
locks while they wait. For instance, addrconf holds RTNL when it removes
/proc/net/dev_snmp6/<dev> and xt_hashlimit holds hashlimit_mutex which
is shared by all network namespaces.
There was a hackish and very narrow AI solution to a small part of this
bug class which was sent off-list. In essence, it used a second
buffering mechanism on top of seqfiles which was really nasty. It also
didn't address any of the non-seqfile users.
If we want to get rid of the this whole bug class we need a bigger
hammer. That means reworking how procfs handles data. So I tried to work
through all of that.
This changes procfs so the entry's code only ever runs with the entry
pinned and never touches userspace memory. This is the core procfs
change required for this. The entries themselves are converted in four
series on top of it. The are independent of each other. The last series
drops all __user methods.
* seq_file reads
procfs owns the seq_file and only calls into the entry with it pinned.
An entry declares its seq_operations, or just a show function, and the
size of its private state in struct proc_ops. procfs opens and frees
the seq_file and reads and seeks through seq_file directly.
->proc_open() and ->proc_release() only deal with whatever the entry
needs on top of that. proc_create_seq() and friends already keep the
seq_operations in the entry so they're switched over in one go here.
That covers most of /proc/net.
The open coded single_open() and seq_open() users that don't do
anything else are converted with a coccinelle script. A nice side
effect is that opening one of these entries no longer allocates a
pde_opener as they have no ->proc_release() of their own anymore.
* Writes
procfs copies in what is written before it pins the entry and hands
the entry a NUL-terminated kernel copy through ->proc_write_buf().
The copy is capped at PAGE_SIZE - 1 bytes unless the entry asks for
more in ->proc_write_size.
Entries that take binary data in pieces (the PCI config space, ALSA's
data entries, cio_ignore and the rtas flash files) ask for
PROC_ENTRY_SHORT_WRITES and their writes come up short.
Since procfs copies in the whole write first, a write that is too
large or whose buffer can't be read fails before the entry's own
checks now.
* Reads that don't go through seq_file
An entry fills a kernel buffer in ->proc_read_buf(), procfs copies
that to userspace after unpinning the entry and only moves the
position if that copy worked, like kernfs_file_read_iter().
The buffer is a page unless the entry asks for more in
->proc_read_size, and like with kernfs a larger read comes up short.
Entries whose readers want all of a large file in one read,
/proc/vmcore, /proc/config.gz and ALSA's data entries, ask for
PROC_ENTRY_FULL_READS and procfs fills their reads in pieces. These
entries are read through ->read_iter() now, so sendfile() and splice()
work for them.
* ioctls
The command number doesn't reliably say what an ioctl copies. The PCI
ioctls aren't encoded at all, i8k's encode the wrong sizes and esas2r
uses a range of plain numbers.
So an entry lists its commands in ->proc_ioctl_args with what goes in
and what comes back out. That works like DRM's ioctl tables.
procfs copies the argument in before it pins the entry, calls
->proc_ioctl_buf() with that copy and copies it back out after
unpinning the entry.
A command that isn't in the table fails with -ENOTTY. 32-bit tasks go
through the same table, so the compat hooks go away.
* permanent entries
Entries that are never removed, kcore, kmsg and the kpage files, keep
reading straight into userspace. The last series gives them
file_operations of their own and takes the __user methods out of
struct proc_ops altogether.
* mmap()
procfs pins the entry around ->proc_mmap() and then wraps the
vm_operations of the mapping the way kernfs does. So the entry's
->fault(), ->page_mkwrite(), ->access() and ->open() run pinned as
well.
Removing the entry unmaps the mappings in its own address space, like
kernfs does, and a fault into one of them is SIGBUS from then on.
A file that maps through another address space, /proc/bus/pci through
the one of /dev/mem, keeps its mappings like a sysfs resource file
does. The entry's vm_operations live in its open node. vmcore's
mappings of the old memory no longer outlive fadump releasing it.
* Poll
An entry with a ->proc_poll() used to sleep its pollers on a wait
queue of its own and procfs only pinned the entry around the call.
The poller stays on that queue after the call, so after
remove_proc_entry() ran ->proc_release() on the still open file and
the owner freed the queue with the rest.
sunrpc kept the queue of its channel files in the per-namespace
cache_detail, so a poll() across the end of the namespace was a
use-after-free. md works around the same thing at unload by waking
its pollers in a loop until nobody is left.
Make procfs own the wait queue. It lives in the open node,
proc_reg_poll() does the poll_wait() on it before it calls the
method. The owner wakes the pollers with proc_poll_notify(), and a
poll of a removed entry reports EPOLLERR | EPOLLPRI.
The seven pollable entries in the tree move over in the conversion
series.
The last series takes the poll_table away from ->proc_poll() once
nothing needs it anymore.
* Lockdep
The pin is a read lock to lockdep and a removal takes the write side
around waiting for the last user, the way kernfs annotates its active
reference.
A method that takes a lock while pinned and a removal under that lock
is the deadlock xt_recent had, and lockdep reports it now instead of a
reviewer having to find it.
The class is per kind of entry, keyed on the seq_operations or
proc_ops the entries of a kind share, and per registration site for
the entries that only share a show function, like sysfs keys per
attribute.
On a KASAN and lockdep kernel the reader selftest fails without the
series and passes with it, and the mapped-entry selftest, run against
a virtio-rng device in a VM, fails without the mmap patch and passes
with it. The other proc selftests behave the same with and without the
series and so do the entries converted here that I could get at in a
VM.
Signed-off-by: Christian Brauner (Amutable) <brauner@kernel.org>
---
Changes in v2:
- the open files of an entry live in an open node that only entries with
a release or mmap hook get, a removal waits with wait_var_event(), the
readdir cursor is shared with sysctl
- procfs pins the entry around the vm_operations of its mappings and
unmaps a removed entry's own address space like kernfs does, with a
selftest; a file that maps through another address space,
/proc/bus/pci through the one of /dev/mem, keeps its mappings like a
sysfs resource file; vmcore's mappings of the old memory no longer
outlive fadump releasing it
- lockdep checks the pin
- procfs owns the wait queue of an entry with a ->proc_poll(), the
conversions are in the area series
- the seq_file runs the entry's own ->next() and ->show() with procfs's
->start() and ->stop() around them instead of a wrapper per record,
which cost up to 24% on /proc/vmstat, and the ERR_PTR(-EIO) sentinel
is gone
- ioctls that only pass a value no longer copy to a NULL pointer
(-EFAULT on csky), and registration also refuses a
->proc_compat_ioctl() next to ->proc_ioctl_buf()
- rebased onto v7.4-rc1
- Link to v1: https://patch.msgid.link/20261102-work-procfs-core-v1-0-75df35e4f8b8@kernel.org
---
Christian Brauner (23):
proc: drop the compat file operations
proc: add pde_pin() and pde_unpin()
proc: share the readdir cursor with sysctl
proc: wait for the last user of an entry with wait_var_event()
proc: keep the open files of an entry in an open node
proc: make room for more entry flags
proc: let procfs own the seq_file of seq_file entries
proc: let procfs own the seq_file of proc_create_seq() and friends
proc: let procfs own the seq_file of DEFINE_PROC_SHOW_ATTRIBUTE() files
treewide: let procfs own the seq_file of simple proc entries
selftests/proc: check that a faulting reader doesn't hold up removal
seq_file: add seq_preallocate()
proc: let procfs own the seq_file of /proc/stat
proc: let procfs copy in writes before pinning the entry
proc: copy in writes to the network namespace entries before pinning
proc: let procfs copy out reads that don't go through seq_file
fs/proc/vmcore: let procfs copy out reads
proc: let procfs copy ioctl arguments in and out
proc: pin the entry around the vm_operations of its mappings
selftests/proc: check that a mapped entry can be removed
proc: let lockdep check the pin
proc: own the wait queue of an entry with a ->proc_poll()
Documentation: seq_file: describe how a /proc file uses seq_file
Documentation/filesystems/seq_file.rst | 42 +-
arch/alpha/kernel/srm_env.c | 10 +-
arch/arm/mm/alignment.c | 10 +-
arch/powerpc/kernel/rtas-proc.c | 50 +-
arch/powerpc/platforms/pseries/lpar.c | 20 +-
arch/powerpc/platforms/pseries/lparcfg.c | 10 +-
arch/sh/mm/alignment.c | 10 +-
arch/sparc/kernel/led.c | 10 +-
arch/um/kernel/exitcode.c | 10 +-
drivers/acpi/proc.c | 12 +-
drivers/hwmon/dell-smm-hwmon.c | 10 +-
drivers/input/input.c | 24 +-
drivers/macintosh/via-pmu.c | 10 +-
drivers/net/wireless/intel/ipw2x00/libipw_module.c | 10 +-
drivers/platform/x86/lenovo/thinkpad_acpi.c | 10 +-
drivers/platform/x86/toshiba_acpi.c | 40 +-
drivers/pnp/pnpbios/proc.c | 10 +-
drivers/s390/block/dasd_proc.c | 10 +-
drivers/s390/cio/blacklist.c | 13 +-
drivers/scsi/scsi_devinfo.c | 10 +-
drivers/scsi/scsi_proc.c | 21 +-
drivers/usb/gadget/function/rndis.c | 10 +-
drivers/video/fbdev/via/viafbdev.c | 70 +--
fs/jfs/jfs_debug.c | 10 +-
fs/ntfs3/super.c | 20 +-
fs/proc/cpuinfo.c | 10 +-
fs/proc/generic.c | 261 ++++++---
fs/proc/inode.c | 652 ++++++++++++++++-----
fs/proc/internal.h | 146 ++++-
fs/proc/proc_net.c | 72 +--
fs/proc/proc_sysctl.c | 45 +-
fs/proc/stat.c | 6 +-
fs/proc/vmcore.c | 14 +-
fs/seq_file.c | 36 +-
fs/smb/client/cifs_debug.c | 79 +--
fs/smb/client/dfs_cache.c | 10 +-
include/linux/proc_fs.h | 159 ++++-
include/linux/seq_file.h | 11 +-
kernel/irq/proc.c | 30 +-
kernel/latencytop.c | 10 +-
lib/dynamic_debug.c | 6 +-
mm/slab_common.c | 10 +-
net/core/pktgen.c | 30 +-
net/sunrpc/stats.c | 10 +-
tools/testing/selftests/proc/.gitignore | 2 +
tools/testing/selftests/proc/Makefile | 2 +
tools/testing/selftests/proc/proc-remove-mapped.c | 160 +++++
.../selftests/proc/proc-remove-slow-reader.c | 133 +++++
48 files changed, 1440 insertions(+), 916 deletions(-)
---
base-commit: 6628e7d4c6b25c8d18f1345e3a20d21829aae7e4
change-id: 20261101-work-procfs-core-8fa4a4f412cf
prerequisite-change-id: 20261101-work-procfs-bugfixes-054d00028491:v2
prerequisite-patch-id: a81e8b894107e48d607f8257d2c9f56e0dd6f400
prerequisite-patch-id: 7edf7ca7ecd32c9e09085e4b65922af10097beaa
prerequisite-patch-id: 81f6893f79b4236637675553298a6f2892b603f3
prerequisite-patch-id: 598c2b1a389f47adcac88ebcf1c9f74e2511fbab
prerequisite-patch-id: 6f5a2172dacc5ff2491fa9832c48ccd0e1ce1eda
prerequisite-patch-id: 8947af6490288e4e2a3b2bf8844a974bedb1d975
prerequisite-patch-id: 8cbe756286fd95967d31b0c46cacfeb05f0a2c6b
prerequisite-patch-id: 3fa159f2b6ccd0ac51a2662e4eec5587ec18de89
prerequisite-patch-id: bfb4e4ffe9631cb58015fefe6bd3698cd53e2244
prerequisite-patch-id: 56ff6667a57a962264c07c0227c61aa2f1f4c22c
prerequisite-patch-id: bc506323e29944ec0c29eae84950c706a8592042
prerequisite-patch-id: 326c0ebb5accf0f40cbee1323fb4c3378f5be154
prerequisite-patch-id: d6eaf7690a54a0dfda7500936a048b769fa265dd
prerequisite-patch-id: 7c7b2535642b4d388e13eab518cbe0f9550eb1e6
prerequisite-patch-id: 0474af12959624910718795bf86684383664c685
prerequisite-patch-id: f6d4191e23c22e2d2cc90cc5d04781f913e98a8e
prerequisite-patch-id: b0031a7c4855b7ec38259c59f30f65101a8fc4b5
prerequisite-patch-id: 0b7f226abf2b9ff41873a1aa55cf97747647d56b
prerequisite-patch-id: f63e345f897619af54813958046617c655fb7daf
prerequisite-patch-id: c0e21e762a2960e3324c5ab04634a7035e515fa6
prerequisite-patch-id: fd59c71eadd8f39c58b3baea93567bc093bc9b0e
prerequisite-patch-id: 5d52cc8a5c73e4c5ba16b8e24f51408c17583bf9
prerequisite-patch-id: 1f9179284e2f3314d4b46ac5e989089a21c7576c
prerequisite-patch-id: 10397bbf696bee16dc71eb79fff6c5e73842bcbc
prerequisite-patch-id: 9b44279dcf08912238d2f6438a3328a778a79a0c
prerequisite-patch-id: 16854b621a3a71dfc365aaf7abaa7f65adfe9f7e
prerequisite-patch-id: ca42eea21fae1fd1cd3518ab057c74b61ffd68fe
prerequisite-patch-id: 23255dc2be76b0479c083dbd4c897bfbb533aed5
prerequisite-patch-id: 82129c687ebf0a41b369893b92f2c038420ab801
prerequisite-patch-id: 56ad57a99a5bda075a9f4e844368974296744934
prerequisite-patch-id: 288b3cbaa11e01a778cc3d7beb6c0549aacf59f2
prerequisite-patch-id: a163b1549608652bfa5bd9ff93efa55b541010c4
prerequisite-patch-id: 43b92dfc1a98fbf0d14597a3e3ae99972844773b
prerequisite-patch-id: 19c12bc6e3fbed35acc1f657196b1a997f48cdfe
prerequisite-patch-id: 5800c3076694bad719954b2ad4d7448c6e013bfd
prerequisite-patch-id: 2a2f63d8843b159594b9eee6ddea028ce76a6270
prerequisite-patch-id: 40a1951d57906c4a1b98a4bd96a814b80339b9c5
prerequisite-patch-id: e2141077e69f20a2b27fab69c8d61d0686682f53
prerequisite-patch-id: c4d6018c26c40dc549d88330d23ce48f872c2b7f
prerequisite-patch-id: 6de8ec17746031bc6d1d9ac262c5be0f905fcd79
prerequisite-patch-id: b87bcb167884605bff1fd0f2ed8a88942d07efd5
prerequisite-patch-id: cfa9a8b4c67e20cfd22d77035bfd21ee96ab3298
prerequisite-patch-id: abf3482ed2399b7b2e1ee72e937af05bb9200667
prerequisite-patch-id: 02c175b2dee565a85b3308ecf2ec8e3c9a029e0f
prerequisite-patch-id: d58c239fba616b366a725de6acba3f88734156d0
prerequisite-patch-id: dbe02fe3f784776fda5e7ae99f077bef0cd4b48d
prerequisite-patch-id: 53edc9a95afff57c4acba40095a8054924261ea2
prerequisite-patch-id: 5348d8957eb7eae7430ca8b101aa84ce77d3aa4f
prerequisite-patch-id: 36c96d781e2dd80b20932667bbe6e7fd14976069
prerequisite-patch-id: efeb2d6f7df71d5dede2c1d12fe999a28e38aab9
prerequisite-patch-id: 17f95c7fdf0bdc7c8aaaf7883bff1dcc19a0f529
next prev parent reply other threads:[~2026-11-04 19:29 UTC|newest]
Thread overview: 171+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-04 19:04 [PATCH RESEND v2 0/7] proc: move procfs to what kernfs does Christian Brauner
2026-11-04 19:05 ` [PATCH RESEND v2 00/51] proc: fix a few old bugs in /proc handlers (Part 1/7) Christian Brauner
2026-11-04 19:06 ` [PATCH RESEND v2 01/51] alloc_tag: don't remove /proc/allocinfo under the codetag module lock Christian Brauner
2026-11-04 19:16 ` [PATCH RESEND v2 02/51] scsi: esas2r: don't copy kernel pointers out in EXPRESS_IOCTL_GET_MOD_INFO Christian Brauner
2026-11-04 19:16 ` [PATCH RESEND v2 03/51] ALSA: cs46xx: hand the region to the region proc files Christian Brauner
2026-11-04 19:16 ` [PATCH RESEND v2 04/51] PNP: isapnp: don't go on when isapnp_cfg_begin() fails Christian Brauner
2026-11-04 19:17 ` [PATCH RESEND v2 05/51] xtensa: simdisk: remove the proc entry before the disk Christian Brauner
2026-11-04 19:17 ` [PATCH RESEND v2 06/51] powerpc/pseries: put the node that the ofdt property commands look up Christian Brauner
2026-11-04 19:17 ` [PATCH RESEND v2 07/51] lockd: don't hand out the terminator of nlm_end_grace Christian Brauner
2026-11-04 19:17 ` [PATCH RESEND v2 08/51] powerpc/pseries/lparcfg: don't drop the last byte of a write Christian Brauner
2026-11-04 19:18 ` [PATCH RESEND v2 09/51] profiling: report it when /proc/profile can't be created Christian Brauner
2026-11-04 19:18 ` [PATCH RESEND v2 10/51] zorro: size the proc files like what they serve Christian Brauner
2026-11-04 19:18 ` [PATCH RESEND v2 11/51] sparc: led: consume the whole write Christian Brauner
2026-11-04 19:18 ` [PATCH RESEND v2 12/51] powerpc/rtas: consume the whole write to /proc/powerpc/rtas/progress Christian Brauner
2026-11-04 19:19 ` [PATCH RESEND v2 13/51] sched/psi: don't drop the last byte of a trigger write Christian Brauner
2026-11-04 19:19 ` [PATCH RESEND v2 14/51] proc: sysctl: don't stop readdir at an entry that is being unregistered Christian Brauner
2026-11-04 19:19 ` [PATCH RESEND v2 15/51] PCI/proc: don't truncate the position of config space accesses Christian Brauner
2026-11-04 19:19 ` [PATCH RESEND v2 16/51] PNP: isapnp: don't read past the end of the buffer on a large pread() Christian Brauner
2026-11-04 19:20 ` [PATCH RESEND v2 17/51] s390/dasd: don't look in front of the buffer on an empty write Christian Brauner
2026-11-04 19:20 ` [PATCH RESEND v2 18/51] platform/x86: toshiba_acpi: reject malformed brightness and fan writes Christian Brauner
2026-11-04 19:20 ` [PATCH RESEND v2 19/51] xtensa: simdisk: don't read the file name without the lock Christian Brauner
2026-11-04 19:20 ` [PATCH RESEND v2 20/51] powerpc/rtas_flash: don't read past the validate message Christian Brauner
2026-11-04 19:21 ` [PATCH RESEND v2 21/51] powerpc/rtasd: zero the error log buffer Christian Brauner
2026-11-04 19:21 ` [PATCH RESEND v2 22/51] ALSA: info: don't write past the end of a data entry Christian Brauner
2026-11-04 19:21 ` [PATCH RESEND v2 23/51] scsi: BusLogic: don't return 0 from writes to the proc file Christian Brauner
2026-11-04 19:21 ` [PATCH RESEND v2 24/51] scsi: ips: " Christian Brauner
2026-11-04 19:22 ` [PATCH RESEND v2 25/51] wifi: libipw: don't return 0 from writes to debug_level Christian Brauner
2026-11-04 19:22 ` [PATCH RESEND v2 26/51] scsi: core: NUL-terminate what is written to the host proc files Christian Brauner
2026-11-04 19:22 ` [PATCH RESEND v2 27/51] um: NUL-terminate what is written to /proc/exitcode Christian Brauner
2026-11-04 19:22 ` [PATCH RESEND v2 28/51] ntfs3: don't warn when a huge label is written Christian Brauner
2026-11-04 19:23 ` [PATCH RESEND v2 29/51] proc: don't walk through a non-directory when resolving a name Christian Brauner
2026-11-04 19:23 ` [PATCH RESEND v2 30/51] net: pktgen: reject device names with a '/' Christian Brauner
2026-11-04 19:23 ` [PATCH RESEND v2 31/51] proc: don't WARN about a name that is already registered Christian Brauner
2026-11-04 19:23 ` [PATCH RESEND v2 32/51] proc: resume readdir after the last name it returned Christian Brauner
2026-11-04 19:24 ` [PATCH RESEND v2 33/51] selftests/proc: check a /proc listing while entries come and go Christian Brauner
2026-11-04 19:24 ` [PATCH RESEND v2 34/51] proc: let proc_remove() remove the entry it was given Christian Brauner
2026-11-04 19:24 ` [PATCH RESEND v2 35/51] proc: warn about entries left in /proc/net of a dying namespace Christian Brauner
2026-11-04 19:24 ` [PATCH RESEND v2 36/51] proc: don't let NOMMU map procfs files Christian Brauner
2026-11-04 19:25 ` [PATCH RESEND v2 37/51] proc/vmcore: don't let vmcore_cleanup() run twice at once Christian Brauner
2026-11-04 19:25 ` [PATCH RESEND v2 38/51] powerpc/crash_dump: check ioremap_cache() in copy_oldmem_page() Christian Brauner
2026-11-04 19:25 ` [PATCH RESEND v2 39/51] powerpc/crash_dump: recover from a machine check " Christian Brauner
2026-11-04 19:25 ` [PATCH RESEND v2 40/51] sunrpc: make queue_wait a global wait queue again Christian Brauner
2026-11-04 19:26 ` [PATCH RESEND v2 41/51] scsi: esas2r: bound the lengths of the HBA, SMP and firmware ioctls Christian Brauner
2026-11-04 19:26 ` [PATCH RESEND v2 42/51] powerpc/pseries: bound the lengths in the ofdt property parser Christian Brauner
2026-11-04 19:26 ` [PATCH RESEND v2 43/51] powerpc/pseries/lparcfg: return h_get_ppp()'s status as a long Christian Brauner
2026-11-04 19:26 ` [PATCH RESEND v2 44/51] proc: sysctl: resume readdir after the last name it returned Christian Brauner
2026-11-04 19:27 ` [PATCH RESEND v2 45/51] selftests/proc: check a sysctl listing while entries come and go Christian Brauner
2026-11-04 19:27 ` [PATCH RESEND v2 46/51] proc: sysctl: copy to and from userspace without holding the table Christian Brauner
2026-11-04 19:27 ` [PATCH RESEND v2 47/51] proc: sysctl: look at the table under sysctl_lock when creating an inode Christian Brauner
2026-11-04 19:27 ` [PATCH RESEND v2 48/51] proc: sysctl: don't hold the tables while readdir copies to userspace Christian Brauner
2026-11-04 19:27 ` [PATCH RESEND v2 49/51] selftests/proc: check that faulting sysctl accesses don't hold up removal Christian Brauner
2026-11-04 19:28 ` [PATCH RESEND v2 50/51] proc: don't pin a symlink's entry while readlink() copies it out Christian Brauner
2026-11-04 19:28 ` [PATCH RESEND v2 51/51] selftests/proc: check that a faulting readlink() doesn't hold up removal Christian Brauner
2026-11-04 19:29 ` Christian Brauner [this message]
2026-11-04 19:29 ` [PATCH RESEND v2 01/23] proc: drop the compat file operations Christian Brauner
2026-11-04 19:29 ` [PATCH RESEND v2 02/23] proc: add pde_pin() and pde_unpin() Christian Brauner
2026-11-04 19:30 ` [PATCH RESEND v2 03/23] proc: share the readdir cursor with sysctl Christian Brauner
2026-11-04 19:30 ` [PATCH RESEND v2 04/23] proc: wait for the last user of an entry with wait_var_event() Christian Brauner
2026-11-04 19:30 ` [PATCH RESEND v2 05/23] proc: keep the open files of an entry in an open node Christian Brauner
2026-11-04 19:30 ` [PATCH RESEND v2 06/23] proc: make room for more entry flags Christian Brauner
2026-11-04 19:30 ` [PATCH RESEND v2 07/23] proc: let procfs own the seq_file of seq_file entries Christian Brauner
2026-11-04 19:31 ` [PATCH RESEND v2 08/23] proc: let procfs own the seq_file of proc_create_seq() and friends Christian Brauner
2026-11-04 19:31 ` [PATCH RESEND v2 09/23] proc: let procfs own the seq_file of DEFINE_PROC_SHOW_ATTRIBUTE() files Christian Brauner
2026-11-04 19:31 ` [PATCH RESEND v2 10/23] treewide: let procfs own the seq_file of simple proc entries Christian Brauner
2026-11-04 19:31 ` [PATCH RESEND v2 11/23] selftests/proc: check that a faulting reader doesn't hold up removal Christian Brauner
2026-11-04 19:32 ` [PATCH RESEND v2 12/23] seq_file: add seq_preallocate() Christian Brauner
2026-11-04 19:32 ` [PATCH RESEND v2 13/23] proc: let procfs own the seq_file of /proc/stat Christian Brauner
2026-11-04 19:32 ` [PATCH RESEND v2 14/23] proc: let procfs copy in writes before pinning the entry Christian Brauner
2026-11-04 19:32 ` [PATCH RESEND v2 15/23] proc: copy in writes to the network namespace entries before pinning Christian Brauner
2026-11-04 19:33 ` [PATCH RESEND v2 16/23] proc: let procfs copy out reads that don't go through seq_file Christian Brauner
2026-11-04 19:33 ` [PATCH RESEND v2 17/23] fs/proc/vmcore: let procfs copy out reads Christian Brauner
2026-11-04 19:33 ` [PATCH RESEND v2 18/23] proc: let procfs copy ioctl arguments in and out Christian Brauner
2026-11-04 19:33 ` [PATCH RESEND v2 19/23] proc: pin the entry around the vm_operations of its mappings Christian Brauner
2026-11-04 19:34 ` [PATCH RESEND v2 20/23] selftests/proc: check that a mapped entry can be removed Christian Brauner
2026-11-04 19:34 ` [PATCH RESEND v2 21/23] proc: let lockdep check the pin Christian Brauner
2026-11-04 19:34 ` [PATCH RESEND v2 22/23] proc: own the wait queue of an entry with a ->proc_poll() Christian Brauner
2026-11-04 19:34 ` [PATCH RESEND v2 23/23] Documentation: seq_file: describe how a /proc file uses seq_file Christian Brauner
2026-11-04 19:35 ` [PATCH RESEND v2 00/23] proc: convert the arch and platform entries (Part 3/7) Christian Brauner
2026-11-04 19:35 ` [PATCH RESEND v2 01/23] alpha: srm_env: let procfs copy in writes Christian Brauner
2026-11-04 19:36 ` [PATCH RESEND v2 02/23] ARM: alignment: " Christian Brauner
2026-11-04 19:36 ` [PATCH RESEND v2 03/23] ARM: atags: let procfs copy out reads of /proc/atags Christian Brauner
2026-11-04 19:36 ` [PATCH RESEND v2 04/23] m68k/bootinfo: let procfs copy out reads of /proc/bootinfo Christian Brauner
2026-11-04 19:36 ` [PATCH RESEND v2 05/23] powerpc/rtas: let procfs copy in writes Christian Brauner
2026-11-04 19:37 ` [PATCH RESEND v2 06/23] powerpc/rtas: let procfs copy out reads Christian Brauner
2026-11-04 19:37 ` [PATCH RESEND v2 07/23] powerpc/rtasd: let procfs own the wait queue of the rtas error log Christian Brauner
2026-11-04 19:37 ` [PATCH RESEND v2 08/23] powerpc/pseries: let procfs copy in writes Christian Brauner
2026-11-04 19:37 ` [PATCH RESEND v2 09/23] powerpc/procfs: let procfs copy out reads of /proc/powerpc/systemcfg Christian Brauner
2026-11-04 19:38 ` [PATCH RESEND v2 10/23] sh: alignment: let procfs copy in writes Christian Brauner
2026-11-04 19:38 ` [PATCH RESEND v2 11/23] sparc: led: " Christian Brauner
2026-11-04 19:38 ` [PATCH RESEND v2 12/23] um: " Christian Brauner
2026-11-04 19:38 ` [PATCH RESEND v2 13/23] x86/mtrr: let procfs own the seq_file of /proc/mtrr Christian Brauner
2026-11-04 19:39 ` [PATCH RESEND v2 14/23] x86/mtrr: let procfs copy in writes to /proc/mtrr Christian Brauner
2026-11-04 19:39 ` [PATCH RESEND v2 15/23] x86/mtrr: let procfs copy the ioctl arguments of /proc/mtrr Christian Brauner
2026-11-04 19:39 ` [PATCH RESEND v2 16/23] xtensa: simdisk: let procfs copy in writes Christian Brauner
2026-11-04 19:39 ` [PATCH RESEND v2 17/23] xtensa: simdisk: let procfs copy out reads Christian Brauner
2026-11-04 19:40 ` [PATCH RESEND v2 18/23] ACPI: proc: let procfs copy in writes to /proc/acpi/wakeup Christian Brauner
2026-11-04 19:40 ` [PATCH RESEND v2 19/23] macintosh/via-pmu: let procfs copy in writes to the options file Christian Brauner
2026-11-04 19:40 ` [PATCH RESEND v2 20/23] platform/x86: thinkpad_acpi: let procfs copy in writes Christian Brauner
2026-11-04 19:40 ` [PATCH RESEND v2 21/23] platform/x86: toshiba_acpi: " Christian Brauner
2026-11-04 19:41 ` [PATCH RESEND v2 22/23] PNP: pnpbios: " Christian Brauner
2026-11-04 19:41 ` [PATCH RESEND v2 23/23] PNP: isapnp: let procfs copy out reads Christian Brauner
2026-11-04 19:42 ` [PATCH RESEND v2 00/26] proc: convert the driver entries (Part 4/7) Christian Brauner
2026-11-04 19:42 ` [PATCH RESEND v2 01/26] nubus: let procfs own the seq_file of the resource files Christian Brauner
2026-11-04 19:42 ` [PATCH RESEND v2 02/26] zorro: let procfs copy out reads Christian Brauner
2026-11-04 19:42 ` [PATCH RESEND v2 03/26] PCI/proc: let procfs copy in config space writes Christian Brauner
2026-11-04 19:43 ` [PATCH RESEND v2 04/26] PCI/proc: let procfs copy out config space reads Christian Brauner
2026-11-04 19:43 ` [PATCH RESEND v2 05/26] PCI/proc: let procfs handle the ioctls Christian Brauner
2026-11-04 19:43 ` [PATCH RESEND v2 06/26] md: let procfs own the seq_file of /proc/mdstat Christian Brauner
2026-11-04 19:43 ` [PATCH RESEND v2 07/26] md: let procfs own the wait queue " Christian Brauner
2026-11-04 19:44 ` [PATCH RESEND v2 08/26] s390/dasd: let procfs copy in writes to /proc/dasd/statistics Christian Brauner
2026-11-04 19:44 ` [PATCH RESEND v2 09/26] s390/cio: let procfs copy in writes Christian Brauner
2026-11-04 19:44 ` [PATCH RESEND v2 10/26] scsi: let procfs own the seq_file of the host files Christian Brauner
2026-11-04 19:44 ` [PATCH RESEND v2 11/26] scsi: core: let procfs copy in writes Christian Brauner
2026-11-04 19:45 ` [PATCH RESEND v2 12/26] selftests/proc: check that a faulting writer doesn't hold up removal Christian Brauner
2026-11-04 19:45 ` [PATCH RESEND v2 13/26] scsi: sg: let procfs own the seq_file of allow_dio and def_reserved_size Christian Brauner
2026-11-04 19:45 ` [PATCH RESEND v2 14/26] scsi: sg: let procfs copy in writes Christian Brauner
2026-11-04 19:45 ` [PATCH RESEND v2 15/26] scsi: esas2r: let procfs copy the ioctl argument of the ATTONode file Christian Brauner
2026-11-04 19:46 ` [PATCH RESEND v2 16/26] hwmon: (dell-smm) let procfs copy the i8k ioctl arguments Christian Brauner
2026-11-04 19:46 ` [PATCH RESEND v2 17/26] fbdev: viafb: let procfs copy in writes Christian Brauner
2026-11-04 19:46 ` [PATCH RESEND v2 18/26] usb: gadget: function: rndis: " Christian Brauner
2026-11-04 19:46 ` [PATCH RESEND v2 19/26] wifi: ipw2x00: let procfs copy in writes to the debug level Christian Brauner
2026-11-04 19:47 ` [PATCH RESEND v2 20/26] tty: sysrq: let procfs copy in writes to /proc/sysrq-trigger Christian Brauner
2026-11-04 19:47 ` [PATCH RESEND v2 21/26] Input: let procfs own the wait queue of /proc/bus/input/devices Christian Brauner
2026-11-04 19:47 ` [PATCH RESEND v2 22/26] ALSA: info: let procfs own the seq_file of text entries Christian Brauner
2026-11-04 19:47 ` [PATCH RESEND v2 23/26] ALSA: info: let procfs copy in writes Christian Brauner
2026-11-04 19:48 ` [PATCH RESEND v2 24/26] ALSA: info: let procfs copy out reads of data entries Christian Brauner
2026-11-04 19:48 ` [PATCH RESEND v2 25/26] ALSA: info: drop the ioctl hook " Christian Brauner
2026-11-04 19:48 ` [PATCH RESEND v2 26/26] ALSA: info: drop the poll_table from the info entry poll op Christian Brauner
2026-11-04 19:49 ` [PATCH RESEND v2 00/30] proc: convert the fs, kernel and mm entries (Part 5/7) Christian Brauner
2026-11-04 19:49 ` [PATCH RESEND v2 01/30] jbd2: let procfs own the seq_file of the info file Christian Brauner
2026-11-04 19:50 ` [PATCH RESEND v2 02/30] jfs: let procfs copy in writes to the loglevel file Christian Brauner
2026-11-04 19:50 ` [PATCH RESEND v2 03/30] lockd: let procfs copy in writes to nlm_end_grace Christian Brauner
2026-11-04 19:50 ` [PATCH RESEND v2 04/30] lockd: let procfs copy out reads of nlm_end_grace Christian Brauner
2026-11-04 19:50 ` [PATCH RESEND v2 05/30] nfsd: factor out setting up the exports seq_file Christian Brauner
2026-11-04 19:51 ` [PATCH RESEND v2 06/30] nfsd: let procfs own the seq_file of /proc/fs/nfs/exports Christian Brauner
2026-11-04 19:51 ` [PATCH RESEND v2 07/30] ntfs3: let procfs copy in writes to the label file Christian Brauner
2026-11-04 19:51 ` [PATCH RESEND v2 08/30] smb: client: let procfs own the seq_file of the smbdirect files Christian Brauner
2026-11-04 19:51 ` [PATCH RESEND v2 09/30] smb: client: let procfs copy in writes Christian Brauner
2026-11-04 19:52 ` [PATCH RESEND v2 10/30] genirq/proc: let procfs copy in the affinity masks Christian Brauner
2026-11-04 19:52 ` [PATCH RESEND v2 11/30] latencytop: let procfs copy in writes to /proc/latency_stats Christian Brauner
2026-11-04 19:52 ` [PATCH RESEND v2 12/30] locking/lockdep: let procfs own the seq_file of /proc/lock_stat Christian Brauner
2026-11-04 19:52 ` [PATCH RESEND v2 13/30] locking/lockdep: let procfs copy in writes to /proc/lock_stat Christian Brauner
2026-11-04 19:53 ` [PATCH RESEND v2 14/30] profiling: let procfs copy in writes to /proc/profile Christian Brauner
2026-11-04 19:53 ` [PATCH RESEND v2 15/30] profiling: let procfs copy out reads of /proc/profile Christian Brauner
2026-11-04 19:53 ` [PATCH RESEND v2 16/30] profiling: mark /proc/profile permanent Christian Brauner
2026-11-04 19:53 ` [PATCH RESEND v2 17/30] sched/psi: let procfs own the seq_file of the pressure files Christian Brauner
2026-11-04 19:54 ` [PATCH RESEND v2 18/30] sched/psi: let procfs copy in trigger writes Christian Brauner
2026-11-04 19:54 ` [PATCH RESEND v2 19/30] sched/psi: mark the pressure files permanent Christian Brauner
2026-11-04 19:54 ` [PATCH RESEND v2 20/30] sched/psi: let procfs own the wait queue of the pressure files Christian Brauner
2026-11-04 19:54 ` [PATCH RESEND v2 21/30] kallsyms: let procfs own the seq_file of /proc/kallsyms Christian Brauner
2026-11-04 19:55 ` [PATCH RESEND v2 22/30] module: procfs: let procfs own the seq_file of /proc/modules Christian Brauner
2026-11-04 19:55 ` [PATCH RESEND v2 23/30] dyndbg: let procfs copy in writes to /proc/dynamic_debug/control Christian Brauner
2026-11-04 19:55 ` [PATCH RESEND v2 24/30] ipc: let procfs own the seq_file of the sysvipc files Christian Brauner
2026-11-04 19:55 ` [PATCH RESEND v2 25/30] alloc_tag: let procfs own the seq_file of /proc/allocinfo Christian Brauner
2026-11-04 19:56 ` [PATCH RESEND v2 26/30] alloc_tag: let procfs copy the ioctl arguments " Christian Brauner
2026-11-04 19:56 ` [PATCH RESEND v2 27/30] mm/swapfile: let procfs own the seq_file of /proc/swaps Christian Brauner
2026-11-04 19:56 ` [PATCH RESEND v2 28/30] mm/swapfile: let procfs own the wait queue " Christian Brauner
2026-11-04 19:56 ` [PATCH RESEND v2 29/30] kernel/configs: let procfs copy out reads of /proc/config.gz Christian Brauner
2026-11-04 19:57 ` [PATCH RESEND v2 30/30] selftests/proc: check that unloading configs doesn't wait for a reader Christian Brauner
2026-11-04 20:05 ` [PATCH RESEND v2 00/30] proc: convert the fs, kernel and mm entries (Part 5/7) Linus Torvalds
2026-11-04 19:57 ` [PATCH RESEND v2 00/13] proc: convert the net entries and the kfifo samples (Part 6/7) Christian Brauner
2026-11-04 19:57 ` [PATCH RESEND v2 01/13] atm: let procfs copy out reads of the device files Christian Brauner
2026-11-04 19:58 ` [PATCH RESEND v2 02/13] l2tp: let procfs own the seq_file of /proc/net/pppol2tp Christian Brauner
2026-11-04 19:58 ` [PATCH RESEND v2 03/13] net: pktgen: let procfs copy in commands Christian Brauner
2026-11-04 19:58 ` [PATCH RESEND v2 04/13] netfilter: xt_recent: let procfs own the seq_file Christian Brauner
2026-11-04 19:58 ` [PATCH RESEND v2 05/13] netfilter: xt_recent: let procfs copy in writes Christian Brauner
2026-11-04 19:59 ` [PATCH RESEND v2 06/13] SUNRPC: let procfs own the seq_file of the cache content file Christian Brauner
2026-11-04 19:59 ` [PATCH RESEND v2 07/13] SUNRPC: let procfs copy in writes Christian Brauner
2026-11-04 19:59 ` [PATCH RESEND v2 08/13] SUNRPC: let procfs copy out reads Christian Brauner
2026-11-04 21:13 ` [PATCH RESEND v2 09/13] SUNRPC: drop the ioctl of the procfs channel files Christian Brauner
2026-11-04 21:13 ` [PATCH RESEND v2 10/13] SUNRPC: let procfs own the wait queue " Christian Brauner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261104-work-procfs-core-v2-0-76ace653a773@kernel.org \
--to=brauner@kernel.org \
--cc=cel@kernel.org \
--cc=corbet@lwn.net \
--cc=coreteam@netfilter.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=edumazet@kernel.org \
--cc=gregkh@suse.de \
--cc=hch@lst.de \
--cc=ibm-acpi-devel@lists.sourceforge.net \
--cc=jack@suse.com \
--cc=jack@suse.cz \
--cc=jannh@google.com \
--cc=jfs-discussion@lists.sourceforge.net \
--cc=jlayton@kernel.org \
--cc=joel.granados@kernel.org \
--cc=josef@toxicpanda.com \
--cc=kees@kernel.org \
--cc=kexec@lists.infradead.org \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-alpha@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-atm-general@lists.sourceforge.net \
--cc=linux-cifs@vger.kernel.org \
--cc=linux-debuggers@vger.kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-ext4@vger.kernel.org \
--cc=linux-fbdev@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-hwmon@vger.kernel.org \
--cc=linux-input@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=linux-m68k@lists.linux-m68k.org \
--cc=linux-mm@kvack.org \
--cc=linux-modules@vger.kernel.org \
--cc=linux-nfs@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=linux-raid@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=linux-serial@vger.kernel.org \
--cc=linux-sh@vger.kernel.org \
--cc=linux-sound@vger.kernel.org \
--cc=linux-um@lists.infradead.org \
--cc=linux-usb@vger.kernel.org \
--cc=linux-wireless@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=mason@kernel.org \
--cc=neil@brown.name \
--cc=netdev@vger.kernel.org \
--cc=netfilter-devel@vger.kernel.org \
--cc=ntfs3@lists.linux.dev \
--cc=platform-driver-x86@vger.kernel.org \
--cc=samba-technical@lists.samba.org \
--cc=sparclinux@vger.kernel.org \
--cc=tglx@kernel.org \
--cc=tiwai@suse.de \
--cc=torvalds@linux-foundation.org \
--cc=viro@zeniv.linux.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox