diff options
author | Rasmus Villemoes <linux@rasmusvillemoes.dk> | 2020-01-15 19:41:50 +0100 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2020-01-22 15:28:14 +0100 |
commit | 0ff0e95e9909e6ddefc8caa3948f20c0cb3dd6fb (patch) | |
tree | 6b864b64404dd7ee79b31d5e7130787eb5479ef7 /drivers/base/devtmpfs.c | |
parent | devtmpfs: fix theoretical stale pointer deref in devtmpfsd() (diff) | |
download | linux-0ff0e95e9909e6ddefc8caa3948f20c0cb3dd6fb.tar.xz linux-0ff0e95e9909e6ddefc8caa3948f20c0cb3dd6fb.zip |
devtmpfs: factor out setup part of devtmpfsd()
Factor out the setup part of devtmpfsd() to make it a bit easier to
see that we always call setup_done() exactly once (provided of course
the kthread is succesfully created).
Signed-off-by: Rasmus Villemoes <linux@rasmusvillemoes.dk>
Link: https://lore.kernel.org/r/20200115184154.3492-3-linux@rasmusvillemoes.dk
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/base/devtmpfs.c')
-rw-r--r-- | drivers/base/devtmpfs.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/drivers/base/devtmpfs.c b/drivers/base/devtmpfs.c index ccb046fe12b7..963889331bb4 100644 --- a/drivers/base/devtmpfs.c +++ b/drivers/base/devtmpfs.c @@ -388,7 +388,7 @@ static int handle(const char *name, umode_t mode, kuid_t uid, kgid_t gid, return handle_remove(name, dev); } -static int devtmpfsd(void *p) +static int devtmpfs_setup(void *p) { int err; @@ -400,7 +400,18 @@ static int devtmpfsd(void *p) goto out; ksys_chdir("/.."); /* will traverse into overmounted root */ ksys_chroot("."); +out: + *(int *)p = err; complete(&setup_done); + return err; +} + +static int devtmpfsd(void *p) +{ + int err = devtmpfs_setup(p); + + if (err) + return err; while (1) { spin_lock(&req_lock); while (requests) { @@ -421,10 +432,6 @@ static int devtmpfsd(void *p) schedule(); } return 0; -out: - *(int *)p = err; - complete(&setup_done); - return err; } /* |