--- zzzz-none-000/linux-2.6.32.61/fs/exec.c 2013-06-10 09:43:48.000000000 +0000 +++ virian-300e-630/linux-2.6.32.61/fs/exec.c 2013-10-15 13:06:25.000000000 +0000 @@ -1296,6 +1296,10 @@ if (retval) return retval; + /* kernel module loader fixup */ + /* so we don't try to load run modprobe in kernel space. */ + set_fs(USER_DS); + retval = audit_bprm(bprm); if (retval) return retval; @@ -1312,6 +1316,11 @@ read_unlock(&binfmt_lock); bprm->recursion_depth = depth + 1; retval = fn(bprm, regs); + /* + * Restore the depth counter to its starting value + * in this call, so we don't have to rely on every + * load_binary function to restore it on return. + */ bprm->recursion_depth = depth; if (retval >= 0) { if (depth == 0) @@ -1368,6 +1377,26 @@ bool clear_in_exec; int retval; + /*--------------------------------------------------------------------------------------*\ + * AVM Process Check Debug Code + \*--------------------------------------------------------------------------------------*/ +#if 0 + printk(KERN_ERR "[%s] %s(pid:%d): exec: '%s' ", __FUNCTION__, current->comm, current->pid, filename); + { char __user *__user *p = argv; + while(p && *p) { + char __user * pp; + if (get_user(pp, p)) + break; + if(pp == 0) + break; + printk("'%s' ", pp); + p++; + } + } + printk("\n"); +#endif + + retval = unshare_files(&displaced); if (retval) goto out_ret;