aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2016-07-13 17:01:34 +0200
committerThomas Gleixner <tglx@linutronix.de>2016-07-13 17:01:51 +0200
commit54f54496779661678d906b57e4cba48239ab7c9b (patch)
treefeb06330bfa37391a5502e8dc6dfdd58b46b56fb /fs
parentLinux 4.7-rc7 (diff)
parentclocksource/drivers/time-armada-370-xp: Fix return value check (diff)
downloadlinux-dev-54f54496779661678d906b57e4cba48239ab7c9b.tar.xz
linux-dev-54f54496779661678d906b57e4cba48239ab7c9b.zip
Merge branch 'timers/core' into smp/hotplug to pick up dependencies
Diffstat (limited to 'fs')
-rw-r--r--fs/timerfd.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/fs/timerfd.c b/fs/timerfd.c
index 053818dd6c18..9ae4abb4110b 100644
--- a/fs/timerfd.c
+++ b/fs/timerfd.c
@@ -390,6 +390,11 @@ SYSCALL_DEFINE2(timerfd_create, int, clockid, int, flags)
clockid != CLOCK_BOOTTIME_ALARM))
return -EINVAL;
+ if (!capable(CAP_WAKE_ALARM) &&
+ (clockid == CLOCK_REALTIME_ALARM ||
+ clockid == CLOCK_BOOTTIME_ALARM))
+ return -EPERM;
+
ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
if (!ctx)
return -ENOMEM;
@@ -433,6 +438,11 @@ static int do_timerfd_settime(int ufd, int flags,
return ret;
ctx = f.file->private_data;
+ if (!capable(CAP_WAKE_ALARM) && isalarm(ctx)) {
+ fdput(f);
+ return -EPERM;
+ }
+
timerfd_setup_cancel(ctx, flags);
/*