umd: Remove exit_umh
authorEric W. Biederman <ebiederm@xmission.com>
Thu, 25 Jun 2020 22:40:40 +0000 (17:40 -0500)
committerEric W. Biederman <ebiederm@xmission.com>
Tue, 7 Jul 2020 16:58:59 +0000 (11:58 -0500)
The bpfilter code no longer uses the umd_info.cleanup callback.  This
callback is what exit_umh exists to call.  So remove exit_umh and all
of it's associated booking.

v1: https://lkml.kernel.org/r/87bll6dlte.fsf_-_@x220.int.ebiederm.org
v2: https://lkml.kernel.org/r/87y2o53abg.fsf_-_@x220.int.ebiederm.org
Link: https://lkml.kernel.org/r/20200702164140.4468-15-ebiederm@xmission.com
Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Acked-by: Alexei Starovoitov <ast@kernel.org>
Tested-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
include/linux/sched.h
include/linux/usermode_driver.h
kernel/exit.c
kernel/usermode_driver.c

index 59d1e92..edb2020 100644 (file)
@@ -1511,7 +1511,6 @@ extern struct pid *cad_pid;
 #define PF_KTHREAD             0x00200000      /* I am a kernel thread */
 #define PF_RANDOMIZE           0x00400000      /* Randomize virtual address space */
 #define PF_SWAPWRITE           0x00800000      /* Allowed to write to swap */
-#define PF_UMH                 0x02000000      /* I'm an Usermodehelper process */
 #define PF_NO_SETAFFINITY      0x04000000      /* Userland is not allowed to meddle with cpus_mask */
 #define PF_MCE_EARLY           0x08000000      /* Early kill for mce process policy */
 #define PF_MEMALLOC_NOCMA      0x10000000      /* All allocation request will have _GFP_MOVABLE cleared */
index 45adbff..073a9e0 100644 (file)
@@ -4,26 +4,10 @@
 #include <linux/umh.h>
 #include <linux/path.h>
 
-#ifdef CONFIG_BPFILTER
-void __exit_umh(struct task_struct *tsk);
-
-static inline void exit_umh(struct task_struct *tsk)
-{
-       if (unlikely(tsk->flags & PF_UMH))
-               __exit_umh(tsk);
-}
-#else
-static inline void exit_umh(struct task_struct *tsk)
-{
-}
-#endif
-
 struct umd_info {
        const char *driver_name;
        struct file *pipe_to_umh;
        struct file *pipe_from_umh;
-       struct list_head list;
-       void (*cleanup)(struct umd_info *info);
        struct path wd;
        struct pid *tgid;
 };
index dee246c..39226a0 100644 (file)
@@ -63,7 +63,6 @@
 #include <linux/random.h>
 #include <linux/rcuwait.h>
 #include <linux/compat.h>
-#include <linux/usermode_driver.h>
 
 #include <linux/uaccess.h>
 #include <asm/unistd.h>
@@ -805,8 +804,6 @@ void __noreturn do_exit(long code)
        exit_task_namespaces(tsk);
        exit_task_work(tsk);
        exit_thread(tsk);
-       if (group_dead)
-               exit_umh(tsk);
 
        /*
         * Flush inherited counters to the parent - before the parent
index f77f8d7..cd136f8 100644 (file)
@@ -9,9 +9,6 @@
 #include <linux/task_work.h>
 #include <linux/usermode_driver.h>
 
-static LIST_HEAD(umh_list);
-static DEFINE_MUTEX(umh_list_lock);
-
 static struct vfsmount *blob_to_mnt(const void *data, size_t len, const char *name)
 {
        struct file_system_type *type;
@@ -134,7 +131,6 @@ static int umd_setup(struct subprocess_info *info, struct cred *new)
        umd_info->pipe_to_umh = to_umh[1];
        umd_info->pipe_from_umh = from_umh[0];
        umd_info->tgid = get_pid(task_tgid(current));
-       current->flags |= PF_UMH;
        return 0;
 }
 
@@ -182,11 +178,6 @@ int fork_usermode_driver(struct umd_info *info)
                goto out;
 
        err = call_usermodehelper_exec(sub_info, UMH_WAIT_EXEC);
-       if (!err) {
-               mutex_lock(&umh_list_lock);
-               list_add(&info->list, &umh_list);
-               mutex_unlock(&umh_list_lock);
-       }
 out:
        if (argv)
                argv_free(argv);
@@ -194,23 +185,4 @@ out:
 }
 EXPORT_SYMBOL_GPL(fork_usermode_driver);
 
-void __exit_umh(struct task_struct *tsk)
-{
-       struct umd_info *info;
-       struct pid *tgid = task_tgid(tsk);
-
-       mutex_lock(&umh_list_lock);
-       list_for_each_entry(info, &umh_list, list) {
-               if (info->tgid == tgid) {
-                       list_del(&info->list);
-                       mutex_unlock(&umh_list_lock);
-                       goto out;
-               }
-       }
-       mutex_unlock(&umh_list_lock);
-       return;
-out:
-       if (info->cleanup)
-               info->cleanup(info);
-}