summaryrefslogtreecommitdiffstats
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
parent92d21ac74a9e3c09b0b01c764e530657e4c85c49 (diff)
parent1d661bf5327a2c059ec967f850e89362e637f4e6 (diff)
downloadlinux-54f54496779661678d906b57e4cba48239ab7c9b.tar.gz
linux-54f54496779661678d906b57e4cba48239ab7c9b.tar.bz2
linux-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);
/*