aboutsummaryrefslogtreecommitdiffstats
path: root/fs/signalfd.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/signalfd.c')
-rw-r--r--fs/signalfd.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/fs/signalfd.c b/fs/signalfd.c
index 7ae2a574cb25..9f35a37173de 100644
--- a/fs/signalfd.c
+++ b/fs/signalfd.c
@@ -269,12 +269,13 @@ SYSCALL_DEFINE4(signalfd4, int, ufd, sigset_t __user *, user_mask,
269 if (ufd < 0) 269 if (ufd < 0)
270 kfree(ctx); 270 kfree(ctx);
271 } else { 271 } else {
272 struct file *file = fget(ufd); 272 int fput_needed;
273 struct file *file = fget_light(ufd, &fput_needed);
273 if (!file) 274 if (!file)
274 return -EBADF; 275 return -EBADF;
275 ctx = file->private_data; 276 ctx = file->private_data;
276 if (file->f_op != &signalfd_fops) { 277 if (file->f_op != &signalfd_fops) {
277 fput(file); 278 fput_light(file, fput_needed);
278 return -EINVAL; 279 return -EINVAL;
279 } 280 }
280 spin_lock_irq(&current->sighand->siglock); 281 spin_lock_irq(&current->sighand->siglock);
@@ -282,7 +283,7 @@ SYSCALL_DEFINE4(signalfd4, int, ufd, sigset_t __user *, user_mask,
282 spin_unlock_irq(&current->sighand->siglock); 283 spin_unlock_irq(&current->sighand->siglock);
283 284
284 wake_up(&current->sighand->signalfd_wqh); 285 wake_up(&current->sighand->signalfd_wqh);
285 fput(file); 286 fput_light(file, fput_needed);
286 } 287 }
287 288
288 return ufd; 289 return ufd;