Commit d53ddd01 authored by Alexey Dobriyan's avatar Alexey Dobriyan Committed by Linus Torvalds

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@avx2Signed-off-by: default avatarAlexey Dobriyan <adobriyan@gmail.com>
Reviewed-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent b028fb61
...@@ -1652,11 +1652,13 @@ int search_binary_handler(struct linux_binprm *bprm) ...@@ -1652,11 +1652,13 @@ int search_binary_handler(struct linux_binprm *bprm)
if (!try_module_get(fmt->module)) if (!try_module_get(fmt->module))
continue; continue;
read_unlock(&binfmt_lock); read_unlock(&binfmt_lock);
bprm->recursion_depth++; bprm->recursion_depth++;
retval = fmt->load_binary(bprm); retval = fmt->load_binary(bprm);
bprm->recursion_depth--;
read_lock(&binfmt_lock); read_lock(&binfmt_lock);
put_binfmt(fmt); put_binfmt(fmt);
bprm->recursion_depth--;
if (retval < 0 && !bprm->mm) { if (retval < 0 && !bprm->mm) {
/* we got to flush_old_exec() and failed after it */ /* we got to flush_old_exec() and failed after it */
read_unlock(&binfmt_lock); read_unlock(&binfmt_lock);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment