The code is unused since commit 98e20e5e13d2 ("bpfilter: remove bpfilter"),
remove it.
Signed-off-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de>
---
include/linux/usermode_driver.h | 19 ----
kernel/Makefile | 1 -
kernel/bpf/preload/Kconfig | 4 -
kernel/usermode_driver.c | 191 ----------------------------------------
4 files changed, 215 deletions(-)
diff --git a/include/linux/usermode_driver.h b/include/linux/usermode_driver.h
deleted file mode 100644
index ad970416260dd208b43098e17df9ad49b4da7693..0000000000000000000000000000000000000000
--- a/include/linux/usermode_driver.h
+++ /dev/null
@@ -1,19 +0,0 @@
-#ifndef __LINUX_USERMODE_DRIVER_H__
-#define __LINUX_USERMODE_DRIVER_H__
-
-#include <linux/umh.h>
-#include <linux/path.h>
-
-struct umd_info {
- const char *driver_name;
- struct file *pipe_to_umh;
- struct file *pipe_from_umh;
- struct path wd;
- struct pid *tgid;
-};
-int umd_load_blob(struct umd_info *info, const void *data, size_t len);
-int umd_unload_blob(struct umd_info *info);
-int fork_usermode_driver(struct umd_info *info);
-void umd_cleanup_helper(struct umd_info *info);
-
-#endif /* __LINUX_USERMODE_DRIVER_H__ */
diff --git a/kernel/Makefile b/kernel/Makefile
index 32e80dd626af07d0c43290e3f5c64af5bff07b51..4332de7ffdee40f6a1cf77ff4b422b51142838e9 100644
--- a/kernel/Makefile
+++ b/kernel/Makefile
@@ -12,7 +12,6 @@ obj-y = fork.o exec_domain.o panic.o \
notifier.o ksysfs.o cred.o reboot.o \
async.o range.o smpboot.o ucount.o regset.o ksyms_common.o
-obj-$(CONFIG_USERMODE_DRIVER) += usermode_driver.o
obj-$(CONFIG_MULTIUSER) += groups.o
obj-$(CONFIG_VHOST_TASK) += vhost_task.o
diff --git a/kernel/bpf/preload/Kconfig b/kernel/bpf/preload/Kconfig
index f9b11d01c3b50d4e98a33c686b55015766d17902..aef7b0bc96d6113dbca7ab4b9510c3dcf39a97f4 100644
--- a/kernel/bpf/preload/Kconfig
+++ b/kernel/bpf/preload/Kconfig
@@ -1,8 +1,4 @@
# SPDX-License-Identifier: GPL-2.0-only
-config USERMODE_DRIVER
- bool
- default n
-
menuconfig BPF_PRELOAD
bool "Preload BPF file system with kernel specific program and map iterators"
depends on BPF
diff --git a/kernel/usermode_driver.c b/kernel/usermode_driver.c
deleted file mode 100644
index 8303f4c7ca714a0aa96aeec4be8c8423ce8a200d..0000000000000000000000000000000000000000
--- a/kernel/usermode_driver.c
+++ /dev/null
@@ -1,191 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * umd - User mode driver support
- */
-#include <linux/shmem_fs.h>
-#include <linux/pipe_fs_i.h>
-#include <linux/mount.h>
-#include <linux/fs_struct.h>
-#include <linux/task_work.h>
-#include <linux/usermode_driver.h>
-
-static struct vfsmount *blob_to_mnt(const void *data, size_t len, const char *name)
-{
- struct file_system_type *type;
- struct vfsmount *mnt;
- struct file *file;
- ssize_t written;
- loff_t pos = 0;
-
- type = get_fs_type("tmpfs");
- if (!type)
- return ERR_PTR(-ENODEV);
-
- mnt = kern_mount(type);
- put_filesystem(type);
- if (IS_ERR(mnt))
- return mnt;
-
- file = file_open_root_mnt(mnt, name, O_CREAT | O_WRONLY, 0700);
- if (IS_ERR(file)) {
- kern_unmount(mnt);
- return ERR_CAST(file);
- }
-
- written = kernel_write(file, data, len, &pos);
- if (written != len) {
- int err = written;
- if (err >= 0)
- err = -ENOMEM;
- filp_close(file, NULL);
- kern_unmount(mnt);
- return ERR_PTR(err);
- }
-
- fput(file);
-
- /* Flush delayed fput so exec can open the file read-only */
- flush_delayed_fput();
- task_work_run();
- return mnt;
-}
-
-/**
- * umd_load_blob - Remember a blob of bytes for fork_usermode_driver
- * @info: information about usermode driver
- * @data: a blob of bytes that can be executed as a file
- * @len: The lentgh of the blob
- *
- */
-int umd_load_blob(struct umd_info *info, const void *data, size_t len)
-{
- struct vfsmount *mnt;
-
- if (WARN_ON_ONCE(info->wd.dentry || info->wd.mnt))
- return -EBUSY;
-
- mnt = blob_to_mnt(data, len, info->driver_name);
- if (IS_ERR(mnt))
- return PTR_ERR(mnt);
-
- info->wd.mnt = mnt;
- info->wd.dentry = mnt->mnt_root;
- return 0;
-}
-EXPORT_SYMBOL_GPL(umd_load_blob);
-
-/**
- * umd_unload_blob - Disassociate @info from a previously loaded blob
- * @info: information about usermode driver
- *
- */
-int umd_unload_blob(struct umd_info *info)
-{
- if (WARN_ON_ONCE(!info->wd.mnt ||
- !info->wd.dentry ||
- info->wd.mnt->mnt_root != info->wd.dentry))
- return -EINVAL;
-
- kern_unmount(info->wd.mnt);
- info->wd.mnt = NULL;
- info->wd.dentry = NULL;
- return 0;
-}
-EXPORT_SYMBOL_GPL(umd_unload_blob);
-
-static int umd_setup(struct subprocess_info *info, struct cred *new)
-{
- struct umd_info *umd_info = info->data;
- struct file *from_umh[2];
- struct file *to_umh[2];
- int err;
-
- /* create pipe to send data to umh */
- err = create_pipe_files(to_umh, 0);
- if (err)
- return err;
- err = replace_fd(0, to_umh[0], 0);
- fput(to_umh[0]);
- if (err < 0) {
- fput(to_umh[1]);
- return err;
- }
-
- /* create pipe to receive data from umh */
- err = create_pipe_files(from_umh, 0);
- if (err) {
- fput(to_umh[1]);
- replace_fd(0, NULL, 0);
- return err;
- }
- err = replace_fd(1, from_umh[1], 0);
- fput(from_umh[1]);
- if (err < 0) {
- fput(to_umh[1]);
- replace_fd(0, NULL, 0);
- fput(from_umh[0]);
- return err;
- }
-
- set_fs_pwd(current->fs, &umd_info->wd);
- umd_info->pipe_to_umh = to_umh[1];
- umd_info->pipe_from_umh = from_umh[0];
- umd_info->tgid = get_pid(task_tgid(current));
- return 0;
-}
-
-static void umd_cleanup(struct subprocess_info *info)
-{
- struct umd_info *umd_info = info->data;
-
- /* cleanup if umh_setup() was successful but exec failed */
- if (info->retval)
- umd_cleanup_helper(umd_info);
-}
-
-/**
- * umd_cleanup_helper - release the resources which were allocated in umd_setup
- * @info: information about usermode driver
- */
-void umd_cleanup_helper(struct umd_info *info)
-{
- fput(info->pipe_to_umh);
- fput(info->pipe_from_umh);
- put_pid(info->tgid);
- info->tgid = NULL;
-}
-EXPORT_SYMBOL_GPL(umd_cleanup_helper);
-
-/**
- * fork_usermode_driver - fork a usermode driver
- * @info: information about usermode driver (shouldn't be NULL)
- *
- * Returns either negative error or zero which indicates success in
- * executing a usermode driver. In such case 'struct umd_info *info'
- * is populated with two pipes and a tgid of the process. The caller is
- * responsible for health check of the user process, killing it via
- * tgid, and closing the pipes when user process is no longer needed.
- */
-int fork_usermode_driver(struct umd_info *info)
-{
- struct subprocess_info *sub_info;
- const char *argv[] = { info->driver_name, NULL };
- int err;
-
- if (WARN_ON_ONCE(info->tgid))
- return -EBUSY;
-
- err = -ENOMEM;
- sub_info = call_usermodehelper_setup(info->driver_name,
- (char **)argv, NULL, GFP_KERNEL,
- umd_setup, umd_cleanup, info);
- if (!sub_info)
- goto out;
-
- err = call_usermodehelper_exec(sub_info, UMH_WAIT_EXEC);
-out:
- return err;
-}
-EXPORT_SYMBOL_GPL(fork_usermode_driver);
-
-
--
2.50.1
On Mon, Jul 21, 2025 at 11:04:42AM +0200, Thomas Weißschuh wrote: > The code is unused since commit 98e20e5e13d2 ("bpfilter: remove bpfilter"), Overly long commit message here. > remove it. Otherwise looks good: Reviewed-by: Christoph Hellwig <hch@lst.de>
On Tue, Jul 22, 2025 at 08:34:11AM +0200, Christoph Hellwig wrote: > On Mon, Jul 21, 2025 at 11:04:42AM +0200, Thomas Weißschuh wrote: > > The code is unused since commit 98e20e5e13d2 ("bpfilter: remove bpfilter"), > > Overly long commit message here. > > > remove it. > > Otherwise looks good: > > Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Christian Brauner <brauner@kernel.org>
On Wed, Jul 23, 2025 at 5:49 AM Christian Brauner <brauner@kernel.org> wrote: > > On Tue, Jul 22, 2025 at 08:34:11AM +0200, Christoph Hellwig wrote: > > On Mon, Jul 21, 2025 at 11:04:42AM +0200, Thomas Weißschuh wrote: > > > The code is unused since commit 98e20e5e13d2 ("bpfilter: remove bpfilter"), > > > > Overly long commit message here. > > > > > remove it. > > > > Otherwise looks good: > > > > Reviewed-by: Christoph Hellwig <hch@lst.de> > > Reviewed-by: Christian Brauner <brauner@kernel.org> Fair enough. Democracy wins. Will apply once I'm back from pto.
On Wed, Jul 23, 2025 at 10:27:42AM -0600, Alexei Starovoitov wrote: > On Wed, Jul 23, 2025 at 5:49 AM Christian Brauner <brauner@kernel.org> wrote: > > > > On Tue, Jul 22, 2025 at 08:34:11AM +0200, Christoph Hellwig wrote: > > > On Mon, Jul 21, 2025 at 11:04:42AM +0200, Thomas Weißschuh wrote: > > > > The code is unused since commit 98e20e5e13d2 ("bpfilter: remove bpfilter"), > > > > > > Overly long commit message here. > > > > > > > remove it. > > > > > > Otherwise looks good: > > > > > > Reviewed-by: Christoph Hellwig <hch@lst.de> > > > > Reviewed-by: Christian Brauner <brauner@kernel.org> > > Fair enough. Democracy wins. > Will apply once I'm back from pto. Fwiw, I honestly don't care that much. I think the removal makes sense precisely because having unused code is usually not a good idea. If you really want that infra you can always reintroduce it once someone actually ends up using it.
On Tue, Jul 22, 2025 at 08:34:11AM +0200, Christoph Hellwig wrote: > On Mon, Jul 21, 2025 at 11:04:42AM +0200, Thomas Weißschuh wrote: > > The code is unused since commit 98e20e5e13d2 ("bpfilter: remove bpfilter"), > > Overly long commit message here. 75 characters are allowed, no? > > remove it. > > Otherwise looks good: > > Reviewed-by: Christoph Hellwig <hch@lst.de> Thanks!
On Wed, Jul 23, 2025 at 09:01:16AM +0200, Thomas Weißschuh wrote: > On Tue, Jul 22, 2025 at 08:34:11AM +0200, Christoph Hellwig wrote: > > On Mon, Jul 21, 2025 at 11:04:42AM +0200, Thomas Weißschuh wrote: > > > The code is unused since commit 98e20e5e13d2 ("bpfilter: remove bpfilter"), > > > > Overly long commit message here. > > 75 characters are allowed, no? 73.
On Thu, Jul 24, 2025 at 09:29:18AM +0200, Christoph Hellwig wrote: > On Wed, Jul 23, 2025 at 09:01:16AM +0200, Thomas Weißschuh wrote: > > On Tue, Jul 22, 2025 at 08:34:11AM +0200, Christoph Hellwig wrote: > > > On Mon, Jul 21, 2025 at 11:04:42AM +0200, Thomas Weißschuh wrote: > > > > The code is unused since commit 98e20e5e13d2 ("bpfilter: remove bpfilter"), > > > > > > Overly long commit message here. > > > > 75 characters are allowed, no? > > 73. Documentation/process/submitting-patches.rst: The canonical patch message body contains the following: (...) - The body of the explanation, line wrapped at 75 columns, which will be copied to the permanent changelog to describe this patch. scripts/checkpatch.pl: # Check for line lengths > 75 in commit log, warn once if ($in_commit_log && !$commit_log_long_line && length($line) > 75 && (...)) { WARN("COMMIT_LOG_LONG_LINE", "Prefer a maximum 75 chars per line (possible unwrapped commit description?)\n" . $herecurr); $commit_log_long_line = 1; } What am I missing?
On Thu, Jul 24, 2025 at 10:38:19AM +0200, Thomas Weißschuh wrote: > Documentation/process/submitting-patches.rst: > > The canonical patch message body contains the following: > > (...) > > - The body of the explanation, line wrapped at 75 columns, which will > be copied to the permanent changelog to describe this patch. Hmm, weird. I always through we stuck to the usual email length, because in the end that's what commit messages actually are. But I guess I was wrong, at least since people added this.
On Mon, Jul 21, 2025 at 2:05 AM Thomas Weißschuh <thomas.weissschuh@linutronix.de> wrote: > > The code is unused since commit 98e20e5e13d2 ("bpfilter: remove bpfilter"), > remove it. Correct, but we have plans to use it. Since it's not causing any problems we prefer to keep it to avoid reverting the removal later.
On Mon, Jul 21, 2025 at 08:51:22AM -0700, Alexei Starovoitov wrote: > On Mon, Jul 21, 2025 at 2:05 AM Thomas Weißschuh > <thomas.weissschuh@linutronix.de> wrote: > > > > The code is unused since commit 98e20e5e13d2 ("bpfilter: remove bpfilter"), > > remove it. > > Correct, but we have plans to use it. > Since it's not causing any problems we prefer to keep it > to avoid reverting the removal later. Plans to eventually use something are no reason to keep code that's been unused for almost 2 years around. Unless the removal would conflict with currently queued up in linux-next code it is always better to just drop it and reinstate it when (or rather usually IFF) it is used again.
Christoph Hellwig <hch@lst.de> writes: > On Mon, Jul 21, 2025 at 08:51:22AM -0700, Alexei Starovoitov wrote: >> On Mon, Jul 21, 2025 at 2:05 AM Thomas Weißschuh >> <thomas.weissschuh@linutronix.de> wrote: >> > >> > The code is unused since commit 98e20e5e13d2 ("bpfilter: remove bpfilter"), >> > remove it. >> >> Correct, but we have plans to use it. >> Since it's not causing any problems we prefer to keep it >> to avoid reverting the removal later. > > Plans to eventually use something are no reason to keep code that's been > unused for almost 2 years around. Unless the removal would conflict with > currently queued up in linux-next code it is always better to just drop > it and reinstate it when (or rather usually IFF) it is used again. I wonder if those are the same plans that existed in June of 2020 when I split out the usermode driver code from user mode helper? As far as I know this code has never been seriously used, so I am in favor of simplifying the maintenance burden. Acked-by: "Eric W. Biederman" <ebiederm@xmission.com> Eric
© 2016 - 2025 Red Hat, Inc.