diff options
author | Alexey Dobriyan <adobriyan@gmail.com> | 2019-05-14 18:44:37 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2019-05-14 22:52:50 -0400 |
commit | d53ddd0181d1c284c28c0d70a3d7039db41c6f7e (patch) | |
tree | 9c7845ae24e6235ed6bb7a054bf2c619e51aed6a | |
parent | b028fb612849add771679c1b99a50d99264c9632 (diff) |
fs/exec.c: move ->recursion_depth out of critical sections
->recursion_depth is changed only by current, therefore decrementing can
be done without taking any locks.
Link: http://lkml.kernel.org/r/20190417213150.GA26474@avx2
Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
Reviewed-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r-- | fs/exec.c | 4 |
1 files changed, 3 insertions, 1 deletions
@@ -1652,11 +1652,13 @@ int search_binary_handler(struct linux_binprm *bprm) | |||
1652 | if (!try_module_get(fmt->module)) | 1652 | if (!try_module_get(fmt->module)) |
1653 | continue; | 1653 | continue; |
1654 | read_unlock(&binfmt_lock); | 1654 | read_unlock(&binfmt_lock); |
1655 | |||
1655 | bprm->recursion_depth++; | 1656 | bprm->recursion_depth++; |
1656 | retval = fmt->load_binary(bprm); | 1657 | retval = fmt->load_binary(bprm); |
1658 | bprm->recursion_depth--; | ||
1659 | |||
1657 | read_lock(&binfmt_lock); | 1660 | read_lock(&binfmt_lock); |
1658 | put_binfmt(fmt); | 1661 | put_binfmt(fmt); |
1659 | bprm->recursion_depth--; | ||
1660 | if (retval < 0 && !bprm->mm) { | 1662 | if (retval < 0 && !bprm->mm) { |
1661 | /* we got to flush_old_exec() and failed after it */ | 1663 | /* we got to flush_old_exec() and failed after it */ |
1662 | read_unlock(&binfmt_lock); | 1664 | read_unlock(&binfmt_lock); |