mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 19:56:18 +00:00
check_unsafe_exec() doesn't care about signal handlers sharing
... since we'll unshare sighand anyway Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
498052bba5
commit
f1191b50ec
1 changed files with 2 additions and 5 deletions
|
@ -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…
Reference in a new issue