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

Commit 20ba5d73 authored by Al Viro's avatar Al Viro
Browse files

switch signalfd4() to fget_light/fput_light



Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 545ec2c7
Loading
Loading
Loading
Loading
+4 −3
Original line number Original line Diff line number Diff line
@@ -269,12 +269,13 @@ SYSCALL_DEFINE4(signalfd4, int, ufd, sigset_t __user *, user_mask,
		if (ufd < 0)
		if (ufd < 0)
			kfree(ctx);
			kfree(ctx);
	} else {
	} else {
		struct file *file = fget(ufd);
		int fput_needed;
		struct file *file = fget_light(ufd, &fput_needed);
		if (!file)
		if (!file)
			return -EBADF;
			return -EBADF;
		ctx = file->private_data;
		ctx = file->private_data;
		if (file->f_op != &signalfd_fops) {
		if (file->f_op != &signalfd_fops) {
			fput(file);
			fput_light(file, fput_needed);
			return -EINVAL;
			return -EINVAL;
		}
		}
		spin_lock_irq(&current->sighand->siglock);
		spin_lock_irq(&current->sighand->siglock);
@@ -282,7 +283,7 @@ SYSCALL_DEFINE4(signalfd4, int, ufd, sigset_t __user *, user_mask,
		spin_unlock_irq(&current->sighand->siglock);
		spin_unlock_irq(&current->sighand->siglock);


		wake_up(&current->sighand->signalfd_wqh);
		wake_up(&current->sighand->signalfd_wqh);
		fput(file);
		fput_light(file, fput_needed);
	}
	}


	return ufd;
	return ufd;