diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-12-10 17:40:21 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-12-10 17:40:21 -0500 |
| commit | f4fd2c5b6f691ff71614acbc28461b3c1488c81b (patch) | |
| tree | 7f0141d303ba548bfa221f178e580f68e84303de | |
| parent | 711a49a07f84f914aac26a52143f6e7526571143 (diff) | |
| parent | 85f334666a771680472722eee43ae0fc8730a619 (diff) | |
Merge branch 'to-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/frob/linux-2.6-roland
* 'to-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/frob/linux-2.6-roland:
tracehook: exec double-reporting fix
| -rw-r--r-- | fs/exec.c | 10 |
1 files changed, 9 insertions, 1 deletions
| @@ -1159,6 +1159,7 @@ EXPORT_SYMBOL(remove_arg_zero); | |||
| 1159 | */ | 1159 | */ |
| 1160 | int search_binary_handler(struct linux_binprm *bprm,struct pt_regs *regs) | 1160 | int search_binary_handler(struct linux_binprm *bprm,struct pt_regs *regs) |
| 1161 | { | 1161 | { |
| 1162 | unsigned int depth = bprm->recursion_depth; | ||
| 1162 | int try,retval; | 1163 | int try,retval; |
| 1163 | struct linux_binfmt *fmt; | 1164 | struct linux_binfmt *fmt; |
| 1164 | #ifdef __alpha__ | 1165 | #ifdef __alpha__ |
| @@ -1219,8 +1220,15 @@ int search_binary_handler(struct linux_binprm *bprm,struct pt_regs *regs) | |||
| 1219 | continue; | 1220 | continue; |
| 1220 | read_unlock(&binfmt_lock); | 1221 | read_unlock(&binfmt_lock); |
| 1221 | retval = fn(bprm, regs); | 1222 | retval = fn(bprm, regs); |
| 1223 | /* | ||
| 1224 | * Restore the depth counter to its starting value | ||
| 1225 | * in this call, so we don't have to rely on every | ||
| 1226 | * load_binary function to restore it on return. | ||
| 1227 | */ | ||
| 1228 | bprm->recursion_depth = depth; | ||
| 1222 | if (retval >= 0) { | 1229 | if (retval >= 0) { |
| 1223 | tracehook_report_exec(fmt, bprm, regs); | 1230 | if (depth == 0) |
| 1231 | tracehook_report_exec(fmt, bprm, regs); | ||
| 1224 | put_binfmt(fmt); | 1232 | put_binfmt(fmt); |
| 1225 | allow_write_access(bprm->file); | 1233 | allow_write_access(bprm->file); |
| 1226 | if (bprm->file) | 1234 | if (bprm->file) |
