Loading fs/exec.c +2 −5 Original line number Original line Diff line number Diff line Loading @@ -1060,23 +1060,20 @@ int check_unsafe_exec(struct linux_binprm *bprm) { { struct task_struct *p = current, *t; struct task_struct *p = current, *t; unsigned long flags; unsigned long flags; unsigned n_fs, n_sighand; unsigned n_fs; int res = 0; int res = 0; bprm->unsafe = tracehook_unsafe_exec(p); bprm->unsafe = tracehook_unsafe_exec(p); n_fs = 1; n_fs = 1; n_sighand = 1; write_lock(&p->fs->lock); write_lock(&p->fs->lock); lock_task_sighand(p, &flags); lock_task_sighand(p, &flags); for (t = next_thread(p); t != p; t = next_thread(t)) { for (t = next_thread(p); t != p; t = next_thread(t)) { if (t->fs == p->fs) if (t->fs == p->fs) n_fs++; n_fs++; n_sighand++; } } if (p->fs->users > n_fs || if (p->fs->users > n_fs) { atomic_read(&p->sighand->count) > n_sighand) { bprm->unsafe |= LSM_UNSAFE_SHARE; bprm->unsafe |= LSM_UNSAFE_SHARE; } else { } else { if (p->fs->in_exec) if (p->fs->in_exec) Loading Loading
fs/exec.c +2 −5 Original line number Original line Diff line number Diff line Loading @@ -1060,23 +1060,20 @@ int check_unsafe_exec(struct linux_binprm *bprm) { { struct task_struct *p = current, *t; struct task_struct *p = current, *t; unsigned long flags; unsigned long flags; unsigned n_fs, n_sighand; unsigned n_fs; int res = 0; int res = 0; bprm->unsafe = tracehook_unsafe_exec(p); bprm->unsafe = tracehook_unsafe_exec(p); n_fs = 1; n_fs = 1; n_sighand = 1; write_lock(&p->fs->lock); write_lock(&p->fs->lock); lock_task_sighand(p, &flags); lock_task_sighand(p, &flags); for (t = next_thread(p); t != p; t = next_thread(t)) { for (t = next_thread(p); t != p; t = next_thread(t)) { if (t->fs == p->fs) if (t->fs == p->fs) n_fs++; n_fs++; n_sighand++; } } if (p->fs->users > n_fs || if (p->fs->users > n_fs) { atomic_read(&p->sighand->count) > n_sighand) { bprm->unsafe |= LSM_UNSAFE_SHARE; bprm->unsafe |= LSM_UNSAFE_SHARE; } else { } else { if (p->fs->in_exec) if (p->fs->in_exec) Loading