Loading fs/signalfd.c +4 −3 Original line number Original line Diff line number Diff line Loading @@ -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(¤t->sighand->siglock); spin_lock_irq(¤t->sighand->siglock); Loading @@ -282,7 +283,7 @@ SYSCALL_DEFINE4(signalfd4, int, ufd, sigset_t __user *, user_mask, spin_unlock_irq(¤t->sighand->siglock); spin_unlock_irq(¤t->sighand->siglock); wake_up(¤t->sighand->signalfd_wqh); wake_up(¤t->sighand->signalfd_wqh); fput(file); fput_light(file, fput_needed); } } return ufd; return ufd; Loading Loading
fs/signalfd.c +4 −3 Original line number Original line Diff line number Diff line Loading @@ -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(¤t->sighand->siglock); spin_lock_irq(¤t->sighand->siglock); Loading @@ -282,7 +283,7 @@ SYSCALL_DEFINE4(signalfd4, int, ufd, sigset_t __user *, user_mask, spin_unlock_irq(¤t->sighand->siglock); spin_unlock_irq(¤t->sighand->siglock); wake_up(¤t->sighand->signalfd_wqh); wake_up(¤t->sighand->signalfd_wqh); fput(file); fput_light(file, fput_needed); } } return ufd; return ufd; Loading