Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f1191b50 authored by Al Viro's avatar Al Viro
Browse files

check_unsafe_exec() doesn't care about signal handlers sharing



... since we'll unshare sighand anyway

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 498052bb
Loading
Loading
Loading
Loading
+2 −5
Original line number Original line Diff line number Diff line
@@ -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)