* [RFC][PATCH 1/2 v2] proc: Relax /proc/<tid>/timerslack_ns capability requirements
@ 2016-07-15 17:24 John Stultz
2016-07-15 17:24 ` [RFC][PATCH 2/2 v2] security: Add task_settimerslack LSM hook John Stultz
` (2 more replies)
0 siblings, 3 replies; 11+ messages in thread
From: John Stultz @ 2016-07-15 17:24 UTC (permalink / raw)
To: lkml
Cc: John Stultz, Kees Cook, Serge E. Hallyn, Andrew Morton,
Thomas Gleixner, Arjan van de Ven, Oren Laadan, Ruchi Kandoi,
Rom Lemarchand, Todd Kjos, Colin Cross, Nick Kralevich,
Dmitry Shmidt, Elliott Hughes, Android Kernel Team
When an interface to allow a task to change another tasks
timerslack was first proposed, it was suggested that something
greater then CAP_SYS_NICE would be needed, as a task could be
delayed further then what normally could be done with nice
adjustments.
So CAP_SYS_PTRACE was adopted instead for what became the
/proc/<tid>/timerslack_ns interface. However, for Android (where
this feature originates), giving the system_server
CAP_SYS_PTRACE would allow it to observe and modify all tasks
memory. This is considered too high a privilege level for only
needing to change the timerslack.
After some discussion, it was realized that a CAP_SYS_NICE
process can set a task as SCHED_FIFO, so they could fork some
spinning processes and set them all SCHED_FIFO 99, in effect
delaying all other tasks for an infinite amount of time.
So as a CAP_SYS_NICE task can already cause trouble for other
tasks, using it as a required capability for accessing and
modifying /proc/<tid>/timerslack_ns seems sufficient.
Thus, this patch loosens the capability requirements to
CAP_SYS_NICE and removes CAP_SYS_PTRACE, simplifying some
of the code flow as well.
This is technically an ABI change, but as the feature just
landed in 4.6, I suspect no one is yet using it.
Cc: Kees Cook <keescook@chromium.org>
Cc: "Serge E. Hallyn" <serge@hallyn.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
CC: Arjan van de Ven <arjan@linux.intel.com>
Cc: Oren Laadan <orenl@cellrox.com>
Cc: Ruchi Kandoi <kandoiruchi@google.com>
Cc: Rom Lemarchand <romlem@android.com>
Cc: Todd Kjos <tkjos@google.com>
Cc: Colin Cross <ccross@android.com>
Cc: Nick Kralevich <nnk@google.com>
Cc: Dmitry Shmidt <dimitrysh@google.com>
Cc: Elliott Hughes <enh@google.com>
Cc: Android Kernel Team <kernel-team@android.com>
Signed-off-by: John Stultz <john.stultz@linaro.org>
---
v2: Removed CAP_SYS_PTRACE check and simplified code flow
fs/proc/base.c | 33 ++++++++++++++++-----------------
1 file changed, 16 insertions(+), 17 deletions(-)
diff --git a/fs/proc/base.c b/fs/proc/base.c
index a11eb71..8f4f8d7 100644
--- a/fs/proc/base.c
+++ b/fs/proc/base.c
@@ -2277,19 +2277,19 @@ static ssize_t timerslack_ns_write(struct file *file, const char __user *buf,
if (err < 0)
return err;
+ if (!capable(CAP_SYS_NICE))
+ return -EPERM;
+
p = get_proc_task(inode);
if (!p)
return -ESRCH;
- if (ptrace_may_access(p, PTRACE_MODE_ATTACH_FSCREDS)) {
- task_lock(p);
- if (slack_ns == 0)
- p->timer_slack_ns = p->default_timer_slack_ns;
- else
- p->timer_slack_ns = slack_ns;
- task_unlock(p);
- } else
- count = -EPERM;
+ task_lock(p);
+ if (slack_ns == 0)
+ p->timer_slack_ns = p->default_timer_slack_ns;
+ else
+ p->timer_slack_ns = slack_ns;
+ task_unlock(p);
put_task_struct(p);
@@ -2300,22 +2300,21 @@ static int timerslack_ns_show(struct seq_file *m, void *v)
{
struct inode *inode = m->private;
struct task_struct *p;
- int err = 0;
+
+ if (!capable(CAP_SYS_NICE))
+ return -EPERM;
p = get_proc_task(inode);
if (!p)
return -ESRCH;
- if (ptrace_may_access(p, PTRACE_MODE_ATTACH_FSCREDS)) {
- task_lock(p);
- seq_printf(m, "%llu\n", p->timer_slack_ns);
- task_unlock(p);
- } else
- err = -EPERM;
+ task_lock(p);
+ seq_printf(m, "%llu\n", p->timer_slack_ns);
+ task_unlock(p);
put_task_struct(p);
- return err;
+ return 0;
}
static int timerslack_ns_open(struct inode *inode, struct file *filp)
--
1.9.1
^ permalink raw reply [flat|nested] 11+ messages in thread
* [RFC][PATCH 2/2 v2] security: Add task_settimerslack LSM hook
2016-07-15 17:24 [RFC][PATCH 1/2 v2] proc: Relax /proc/<tid>/timerslack_ns capability requirements John Stultz
@ 2016-07-15 17:24 ` John Stultz
2016-07-15 17:51 ` Nick Kralevich
2016-07-15 17:51 ` [RFC][PATCH 1/2 v2] proc: Relax /proc/<tid>/timerslack_ns capability requirements Nick Kralevich
2016-07-15 19:55 ` Nick Kralevich
2 siblings, 1 reply; 11+ messages in thread
From: John Stultz @ 2016-07-15 17:24 UTC (permalink / raw)
To: lkml
Cc: John Stultz, Kees Cook, Serge E. Hallyn, Andrew Morton,
Thomas Gleixner, Arjan van de Ven, Oren Laadan, Ruchi Kandoi,
Rom Lemarchand, Todd Kjos, Colin Cross, Nick Kralevich,
Dmitry Shmidt, Elliott Hughes, Android Kernel Team
As requested, this patch implements a task_settimerslack LSM hook
so that the /proc/<tid>/timerslack_ns interface can have finer
grained security policies applied to it.
Don't really know what I'm doing here, so close review would be
appreciated!
Cc: Kees Cook <keescook@chromium.org>
Cc: "Serge E. Hallyn" <serge@hallyn.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
CC: Arjan van de Ven <arjan@linux.intel.com>
Cc: Oren Laadan <orenl@cellrox.com>
Cc: Ruchi Kandoi <kandoiruchi@google.com>
Cc: Rom Lemarchand <romlem@android.com>
Cc: Todd Kjos <tkjos@google.com>
Cc: Colin Cross <ccross@android.com>
Cc: Nick Kralevich <nnk@google.com>
Cc: Dmitry Shmidt <dimitrysh@google.com>
Cc: Elliott Hughes <enh@google.com>
Cc: Android Kernel Team <kernel-team@android.com>
Signed-off-by: John Stultz <john.stultz@linaro.org>
---
v2: Initial swing at adding LSM hook
fs/proc/base.c | 7 +++++++
include/linux/lsm_hooks.h | 7 +++++++
include/linux/security.h | 6 ++++++
security/security.c | 7 +++++++
security/selinux/hooks.c | 6 ++++++
5 files changed, 33 insertions(+)
diff --git a/fs/proc/base.c b/fs/proc/base.c
index 8f4f8d7..7f10b37 100644
--- a/fs/proc/base.c
+++ b/fs/proc/base.c
@@ -2284,6 +2284,12 @@ static ssize_t timerslack_ns_write(struct file *file, const char __user *buf,
if (!p)
return -ESRCH;
+ err = security_task_settimerslack(current, slack_ns);
+ if (err) {
+ count = err;
+ goto out;
+ }
+
task_lock(p);
if (slack_ns == 0)
p->timer_slack_ns = p->default_timer_slack_ns;
@@ -2291,6 +2297,7 @@ static ssize_t timerslack_ns_write(struct file *file, const char __user *buf,
p->timer_slack_ns = slack_ns;
task_unlock(p);
+out:
put_task_struct(p);
return count;
diff --git a/include/linux/lsm_hooks.h b/include/linux/lsm_hooks.h
index 7ae3976..ed546c4 100644
--- a/include/linux/lsm_hooks.h
+++ b/include/linux/lsm_hooks.h
@@ -627,6 +627,11 @@
* Check permission before moving memory owned by process @p.
* @p contains the task_struct for process.
* Return 0 if permission is granted.
+ * @task_settimerslack:
+ * Check permission before setting timerslack value of @p to @slack.
+ * @p contains the task_struct of a process.
+ * @slack contains the new slack value.
+ * Return 0 if permission is granted.
* @task_kill:
* Check permission before sending signal @sig to @p. @info can be NULL,
* the constant 1, or a pointer to a siginfo structure. If @info is 1 or
@@ -1473,6 +1478,7 @@ union security_list_options {
int (*task_setscheduler)(struct task_struct *p);
int (*task_getscheduler)(struct task_struct *p);
int (*task_movememory)(struct task_struct *p);
+ int (*task_settimerslack)(struct task_struct *p, u64 slack);
int (*task_kill)(struct task_struct *p, struct siginfo *info,
int sig, u32 secid);
int (*task_wait)(struct task_struct *p);
@@ -1732,6 +1738,7 @@ struct security_hook_heads {
struct list_head task_setscheduler;
struct list_head task_getscheduler;
struct list_head task_movememory;
+ struct list_head task_settimerslack;
struct list_head task_kill;
struct list_head task_wait;
struct list_head task_prctl;
diff --git a/include/linux/security.h b/include/linux/security.h
index 14df373..1736e2b 100644
--- a/include/linux/security.h
+++ b/include/linux/security.h
@@ -325,6 +325,7 @@ int security_task_setrlimit(struct task_struct *p, unsigned int resource,
int security_task_setscheduler(struct task_struct *p);
int security_task_getscheduler(struct task_struct *p);
int security_task_movememory(struct task_struct *p);
+int security_task_settimerslack(struct task_struct *p, u64 slack);
int security_task_kill(struct task_struct *p, struct siginfo *info,
int sig, u32 secid);
int security_task_wait(struct task_struct *p);
@@ -950,6 +951,11 @@ static inline int security_task_movememory(struct task_struct *p)
return 0;
}
+static inline int security_task_settimerslack(struct task_struct *p, u64 slack)
+{
+ return 0;
+}
+
static inline int security_task_kill(struct task_struct *p,
struct siginfo *info, int sig,
u32 secid)
diff --git a/security/security.c b/security/security.c
index 7095693..45f15cb 100644
--- a/security/security.c
+++ b/security/security.c
@@ -977,6 +977,11 @@ int security_task_movememory(struct task_struct *p)
return call_int_hook(task_movememory, 0, p);
}
+int security_task_settimerslack(struct task_struct *p, u64 slack)
+{
+ return call_int_hook(task_settimerslack, 0, p, slack);
+}
+
int security_task_kill(struct task_struct *p, struct siginfo *info,
int sig, u32 secid)
{
@@ -1720,6 +1725,8 @@ struct security_hook_heads security_hook_heads = {
LIST_HEAD_INIT(security_hook_heads.task_getscheduler),
.task_movememory =
LIST_HEAD_INIT(security_hook_heads.task_movememory),
+ .task_settimerslack =
+ LIST_HEAD_INIT(security_hook_heads.task_settimerslack),
.task_kill = LIST_HEAD_INIT(security_hook_heads.task_kill),
.task_wait = LIST_HEAD_INIT(security_hook_heads.task_wait),
.task_prctl = LIST_HEAD_INIT(security_hook_heads.task_prctl),
diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
index a86d537..e7c04322 100644
--- a/security/selinux/hooks.c
+++ b/security/selinux/hooks.c
@@ -3849,6 +3849,11 @@ static int selinux_task_movememory(struct task_struct *p)
return current_has_perm(p, PROCESS__SETSCHED);
}
+static int selinux_task_settimerslack(struct task_struct *p, u64 slack)
+{
+ return current_has_perm(p, PROCESS__SETSCHED);
+}
+
static int selinux_task_kill(struct task_struct *p, struct siginfo *info,
int sig, u32 secid)
{
@@ -6092,6 +6097,7 @@ static struct security_hook_list selinux_hooks[] = {
LSM_HOOK_INIT(task_setscheduler, selinux_task_setscheduler),
LSM_HOOK_INIT(task_getscheduler, selinux_task_getscheduler),
LSM_HOOK_INIT(task_movememory, selinux_task_movememory),
+ LSM_HOOK_INIT(task_settimerslack, selinux_task_settimerslack),
LSM_HOOK_INIT(task_kill, selinux_task_kill),
LSM_HOOK_INIT(task_wait, selinux_task_wait),
LSM_HOOK_INIT(task_to_inode, selinux_task_to_inode),
--
1.9.1
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [RFC][PATCH 1/2 v2] proc: Relax /proc/<tid>/timerslack_ns capability requirements
2016-07-15 17:24 [RFC][PATCH 1/2 v2] proc: Relax /proc/<tid>/timerslack_ns capability requirements John Stultz
2016-07-15 17:24 ` [RFC][PATCH 2/2 v2] security: Add task_settimerslack LSM hook John Stultz
@ 2016-07-15 17:51 ` Nick Kralevich
2016-07-15 18:42 ` John Stultz
2016-07-15 19:55 ` Nick Kralevich
2 siblings, 1 reply; 11+ messages in thread
From: Nick Kralevich @ 2016-07-15 17:51 UTC (permalink / raw)
To: John Stultz
Cc: lkml, Kees Cook, Serge E. Hallyn, Andrew Morton, Thomas Gleixner,
Arjan van de Ven, Oren Laadan, Ruchi Kandoi, Rom Lemarchand,
Todd Kjos, Colin Cross, Dmitry Shmidt, Elliott Hughes,
Android Kernel Team, linux-security-module, SELinux
On Fri, Jul 15, 2016 at 10:24 AM, John Stultz <john.stultz@linaro.org> wrote:
> When an interface to allow a task to change another tasks
> timerslack was first proposed, it was suggested that something
> greater then CAP_SYS_NICE would be needed, as a task could be
> delayed further then what normally could be done with nice
> adjustments.
>
> So CAP_SYS_PTRACE was adopted instead for what became the
> /proc/<tid>/timerslack_ns interface. However, for Android (where
> this feature originates), giving the system_server
> CAP_SYS_PTRACE would allow it to observe and modify all tasks
> memory. This is considered too high a privilege level for only
> needing to change the timerslack.
>
> After some discussion, it was realized that a CAP_SYS_NICE
> process can set a task as SCHED_FIFO, so they could fork some
> spinning processes and set them all SCHED_FIFO 99, in effect
> delaying all other tasks for an infinite amount of time.
>
> So as a CAP_SYS_NICE task can already cause trouble for other
> tasks, using it as a required capability for accessing and
> modifying /proc/<tid>/timerslack_ns seems sufficient.
>
> Thus, this patch loosens the capability requirements to
> CAP_SYS_NICE and removes CAP_SYS_PTRACE, simplifying some
> of the code flow as well.
>
> This is technically an ABI change, but as the feature just
> landed in 4.6, I suspect no one is yet using it.
>
> Cc: Kees Cook <keescook@chromium.org>
> Cc: "Serge E. Hallyn" <serge@hallyn.com>
> Cc: Andrew Morton <akpm@linux-foundation.org>
> Cc: Thomas Gleixner <tglx@linutronix.de>
> CC: Arjan van de Ven <arjan@linux.intel.com>
> Cc: Oren Laadan <orenl@cellrox.com>
> Cc: Ruchi Kandoi <kandoiruchi@google.com>
> Cc: Rom Lemarchand <romlem@android.com>
> Cc: Todd Kjos <tkjos@google.com>
> Cc: Colin Cross <ccross@android.com>
> Cc: Nick Kralevich <nnk@google.com>
> Cc: Dmitry Shmidt <dimitrysh@google.com>
> Cc: Elliott Hughes <enh@google.com>
> Cc: Android Kernel Team <kernel-team@android.com>
> Signed-off-by: John Stultz <john.stultz@linaro.org>
> ---
> v2: Removed CAP_SYS_PTRACE check and simplified code flow
>
> fs/proc/base.c | 33 ++++++++++++++++-----------------
> 1 file changed, 16 insertions(+), 17 deletions(-)
>
> diff --git a/fs/proc/base.c b/fs/proc/base.c
> index a11eb71..8f4f8d7 100644
> --- a/fs/proc/base.c
> +++ b/fs/proc/base.c
> @@ -2277,19 +2277,19 @@ static ssize_t timerslack_ns_write(struct file *file, const char __user *buf,
> if (err < 0)
> return err;
>
> + if (!capable(CAP_SYS_NICE))
> + return -EPERM;
> +
Since you're going the LSM route (from your second patch of this
series), the capability check above should be moved to the LSM hook in
security/commoncap.c. Only one security call to
security_task_settimerslack is needed, which will cover the standard
capabilities check as well as the SELinux check.
> p = get_proc_task(inode);
> if (!p)
> return -ESRCH;
>
Per your patch #2, you'd call security_task_settimerslack here. This
would call into the capability LSM hook you added in
security/commoncap.c
> - if (ptrace_may_access(p, PTRACE_MODE_ATTACH_FSCREDS)) {
> - task_lock(p);
> - if (slack_ns == 0)
> - p->timer_slack_ns = p->default_timer_slack_ns;
> - else
> - p->timer_slack_ns = slack_ns;
> - task_unlock(p);
> - } else
> - count = -EPERM;
> + task_lock(p);
> + if (slack_ns == 0)
> + p->timer_slack_ns = p->default_timer_slack_ns;
> + else
> + p->timer_slack_ns = slack_ns;
> + task_unlock(p);
>
> put_task_struct(p);
>
> @@ -2300,22 +2300,21 @@ static int timerslack_ns_show(struct seq_file *m, void *v)
> {
> struct inode *inode = m->private;
> struct task_struct *p;
> - int err = 0;
> +
> + if (!capable(CAP_SYS_NICE))
> + return -EPERM;
>
> p = get_proc_task(inode);
> if (!p)
> return -ESRCH;
>
> - if (ptrace_may_access(p, PTRACE_MODE_ATTACH_FSCREDS)) {
> - task_lock(p);
> - seq_printf(m, "%llu\n", p->timer_slack_ns);
> - task_unlock(p);
> - } else
> - err = -EPERM;
> + task_lock(p);
> + seq_printf(m, "%llu\n", p->timer_slack_ns);
> + task_unlock(p);
>
> put_task_struct(p);
>
> - return err;
> + return 0;
> }
>
> static int timerslack_ns_open(struct inode *inode, struct file *filp)
> --
> 1.9.1
>
--
Nick Kralevich | Android Security | nnk@google.com | 650.214.4037
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [RFC][PATCH 2/2 v2] security: Add task_settimerslack LSM hook
2016-07-15 17:24 ` [RFC][PATCH 2/2 v2] security: Add task_settimerslack LSM hook John Stultz
@ 2016-07-15 17:51 ` Nick Kralevich
2016-07-15 18:10 ` John Stultz
0 siblings, 1 reply; 11+ messages in thread
From: Nick Kralevich @ 2016-07-15 17:51 UTC (permalink / raw)
To: John Stultz
Cc: lkml, Kees Cook, Serge E. Hallyn, Andrew Morton, Thomas Gleixner,
Arjan van de Ven, Oren Laadan, Ruchi Kandoi, Rom Lemarchand,
Todd Kjos, Colin Cross, Dmitry Shmidt, Elliott Hughes,
Android Kernel Team, linux-security-module, SELinux
On Fri, Jul 15, 2016 at 10:24 AM, John Stultz <john.stultz@linaro.org> wrote:
> As requested, this patch implements a task_settimerslack LSM hook
> so that the /proc/<tid>/timerslack_ns interface can have finer
> grained security policies applied to it.
>
> Don't really know what I'm doing here, so close review would be
> appreciated!
>
> Cc: Kees Cook <keescook@chromium.org>
> Cc: "Serge E. Hallyn" <serge@hallyn.com>
> Cc: Andrew Morton <akpm@linux-foundation.org>
> Cc: Thomas Gleixner <tglx@linutronix.de>
> CC: Arjan van de Ven <arjan@linux.intel.com>
> Cc: Oren Laadan <orenl@cellrox.com>
> Cc: Ruchi Kandoi <kandoiruchi@google.com>
> Cc: Rom Lemarchand <romlem@android.com>
> Cc: Todd Kjos <tkjos@google.com>
> Cc: Colin Cross <ccross@android.com>
> Cc: Nick Kralevich <nnk@google.com>
> Cc: Dmitry Shmidt <dimitrysh@google.com>
> Cc: Elliott Hughes <enh@google.com>
> Cc: Android Kernel Team <kernel-team@android.com>
> Signed-off-by: John Stultz <john.stultz@linaro.org>
> ---
> v2: Initial swing at adding LSM hook
>
> fs/proc/base.c | 7 +++++++
> include/linux/lsm_hooks.h | 7 +++++++
> include/linux/security.h | 6 ++++++
> security/security.c | 7 +++++++
> security/selinux/hooks.c | 6 ++++++
> 5 files changed, 33 insertions(+)
>
> diff --git a/fs/proc/base.c b/fs/proc/base.c
> index 8f4f8d7..7f10b37 100644
> --- a/fs/proc/base.c
> +++ b/fs/proc/base.c
> @@ -2284,6 +2284,12 @@ static ssize_t timerslack_ns_write(struct file *file, const char __user *buf,
> if (!p)
> return -ESRCH;
>
> + err = security_task_settimerslack(current, slack_ns);
The first argument should be "p", not "current". "p" is the target
process you're trying to adjust.
> + if (err) {
> + count = err;
> + goto out;
> + }
> +
> task_lock(p);
> if (slack_ns == 0)
> p->timer_slack_ns = p->default_timer_slack_ns;
> @@ -2291,6 +2297,7 @@ static ssize_t timerslack_ns_write(struct file *file, const char __user *buf,
> p->timer_slack_ns = slack_ns;
> task_unlock(p);
>
> +out:
> put_task_struct(p);
>
> return count;
> diff --git a/include/linux/lsm_hooks.h b/include/linux/lsm_hooks.h
> index 7ae3976..ed546c4 100644
> --- a/include/linux/lsm_hooks.h
> +++ b/include/linux/lsm_hooks.h
> @@ -627,6 +627,11 @@
> * Check permission before moving memory owned by process @p.
> * @p contains the task_struct for process.
> * Return 0 if permission is granted.
> + * @task_settimerslack:
> + * Check permission before setting timerslack value of @p to @slack.
> + * @p contains the task_struct of a process.
> + * @slack contains the new slack value.
> + * Return 0 if permission is granted.
> * @task_kill:
> * Check permission before sending signal @sig to @p. @info can be NULL,
> * the constant 1, or a pointer to a siginfo structure. If @info is 1 or
> @@ -1473,6 +1478,7 @@ union security_list_options {
> int (*task_setscheduler)(struct task_struct *p);
> int (*task_getscheduler)(struct task_struct *p);
> int (*task_movememory)(struct task_struct *p);
> + int (*task_settimerslack)(struct task_struct *p, u64 slack);
> int (*task_kill)(struct task_struct *p, struct siginfo *info,
> int sig, u32 secid);
> int (*task_wait)(struct task_struct *p);
> @@ -1732,6 +1738,7 @@ struct security_hook_heads {
> struct list_head task_setscheduler;
> struct list_head task_getscheduler;
> struct list_head task_movememory;
> + struct list_head task_settimerslack;
> struct list_head task_kill;
> struct list_head task_wait;
> struct list_head task_prctl;
> diff --git a/include/linux/security.h b/include/linux/security.h
> index 14df373..1736e2b 100644
> --- a/include/linux/security.h
> +++ b/include/linux/security.h
> @@ -325,6 +325,7 @@ int security_task_setrlimit(struct task_struct *p, unsigned int resource,
> int security_task_setscheduler(struct task_struct *p);
> int security_task_getscheduler(struct task_struct *p);
> int security_task_movememory(struct task_struct *p);
> +int security_task_settimerslack(struct task_struct *p, u64 slack);
> int security_task_kill(struct task_struct *p, struct siginfo *info,
> int sig, u32 secid);
> int security_task_wait(struct task_struct *p);
> @@ -950,6 +951,11 @@ static inline int security_task_movememory(struct task_struct *p)
> return 0;
> }
>
> +static inline int security_task_settimerslack(struct task_struct *p, u64 slack)
> +{
> + return 0;
> +}
> +
> static inline int security_task_kill(struct task_struct *p,
> struct siginfo *info, int sig,
> u32 secid)
> diff --git a/security/security.c b/security/security.c
> index 7095693..45f15cb 100644
> --- a/security/security.c
> +++ b/security/security.c
> @@ -977,6 +977,11 @@ int security_task_movememory(struct task_struct *p)
> return call_int_hook(task_movememory, 0, p);
> }
>
> +int security_task_settimerslack(struct task_struct *p, u64 slack)
> +{
> + return call_int_hook(task_settimerslack, 0, p, slack);
> +}
> +
> int security_task_kill(struct task_struct *p, struct siginfo *info,
> int sig, u32 secid)
> {
> @@ -1720,6 +1725,8 @@ struct security_hook_heads security_hook_heads = {
> LIST_HEAD_INIT(security_hook_heads.task_getscheduler),
> .task_movememory =
> LIST_HEAD_INIT(security_hook_heads.task_movememory),
> + .task_settimerslack =
> + LIST_HEAD_INIT(security_hook_heads.task_settimerslack),
> .task_kill = LIST_HEAD_INIT(security_hook_heads.task_kill),
> .task_wait = LIST_HEAD_INIT(security_hook_heads.task_wait),
> .task_prctl = LIST_HEAD_INIT(security_hook_heads.task_prctl),
> diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
> index a86d537..e7c04322 100644
> --- a/security/selinux/hooks.c
> +++ b/security/selinux/hooks.c
> @@ -3849,6 +3849,11 @@ static int selinux_task_movememory(struct task_struct *p)
> return current_has_perm(p, PROCESS__SETSCHED);
> }
>
> +static int selinux_task_settimerslack(struct task_struct *p, u64 slack)
> +{
> + return current_has_perm(p, PROCESS__SETSCHED);
> +}
> +
> static int selinux_task_kill(struct task_struct *p, struct siginfo *info,
> int sig, u32 secid)
> {
> @@ -6092,6 +6097,7 @@ static struct security_hook_list selinux_hooks[] = {
> LSM_HOOK_INIT(task_setscheduler, selinux_task_setscheduler),
> LSM_HOOK_INIT(task_getscheduler, selinux_task_getscheduler),
> LSM_HOOK_INIT(task_movememory, selinux_task_movememory),
> + LSM_HOOK_INIT(task_settimerslack, selinux_task_settimerslack),
> LSM_HOOK_INIT(task_kill, selinux_task_kill),
> LSM_HOOK_INIT(task_wait, selinux_task_wait),
> LSM_HOOK_INIT(task_to_inode, selinux_task_to_inode),
> --
> 1.9.1
>
--
Nick Kralevich | Android Security | nnk@google.com | 650.214.4037
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [RFC][PATCH 2/2 v2] security: Add task_settimerslack LSM hook
2016-07-15 17:51 ` Nick Kralevich
@ 2016-07-15 18:10 ` John Stultz
0 siblings, 0 replies; 11+ messages in thread
From: John Stultz @ 2016-07-15 18:10 UTC (permalink / raw)
To: Nick Kralevich
Cc: lkml, Kees Cook, Serge E. Hallyn, Andrew Morton, Thomas Gleixner,
Arjan van de Ven, Oren Laadan, Ruchi Kandoi, Rom Lemarchand,
Todd Kjos, Colin Cross, Dmitry Shmidt, Elliott Hughes,
Android Kernel Team, LSM List, SELinux
On Fri, Jul 15, 2016 at 10:51 AM, Nick Kralevich <nnk@google.com> wrote:
> On Fri, Jul 15, 2016 at 10:24 AM, John Stultz <john.stultz@linaro.org> wrote:
>> As requested, this patch implements a task_settimerslack LSM hook
>> so that the /proc/<tid>/timerslack_ns interface can have finer
>> grained security policies applied to it.
>>
>> Don't really know what I'm doing here, so close review would be
>> appreciated!
>>
>> Cc: Kees Cook <keescook@chromium.org>
>> Cc: "Serge E. Hallyn" <serge@hallyn.com>
>> Cc: Andrew Morton <akpm@linux-foundation.org>
>> Cc: Thomas Gleixner <tglx@linutronix.de>
>> CC: Arjan van de Ven <arjan@linux.intel.com>
>> Cc: Oren Laadan <orenl@cellrox.com>
>> Cc: Ruchi Kandoi <kandoiruchi@google.com>
>> Cc: Rom Lemarchand <romlem@android.com>
>> Cc: Todd Kjos <tkjos@google.com>
>> Cc: Colin Cross <ccross@android.com>
>> Cc: Nick Kralevich <nnk@google.com>
>> Cc: Dmitry Shmidt <dimitrysh@google.com>
>> Cc: Elliott Hughes <enh@google.com>
>> Cc: Android Kernel Team <kernel-team@android.com>
>> Signed-off-by: John Stultz <john.stultz@linaro.org>
>> ---
>> v2: Initial swing at adding LSM hook
>>
>> fs/proc/base.c | 7 +++++++
>> include/linux/lsm_hooks.h | 7 +++++++
>> include/linux/security.h | 6 ++++++
>> security/security.c | 7 +++++++
>> security/selinux/hooks.c | 6 ++++++
>> 5 files changed, 33 insertions(+)
>>
>> diff --git a/fs/proc/base.c b/fs/proc/base.c
>> index 8f4f8d7..7f10b37 100644
>> --- a/fs/proc/base.c
>> +++ b/fs/proc/base.c
>> @@ -2284,6 +2284,12 @@ static ssize_t timerslack_ns_write(struct file *file, const char __user *buf,
>> if (!p)
>> return -ESRCH;
>>
>> + err = security_task_settimerslack(current, slack_ns);
>
> The first argument should be "p", not "current". "p" is the target
> process you're trying to adjust.
Ah, yes. Thanks. Clearly I don't know what I'm doing here. :)
-john
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [RFC][PATCH 1/2 v2] proc: Relax /proc/<tid>/timerslack_ns capability requirements
2016-07-15 17:51 ` [RFC][PATCH 1/2 v2] proc: Relax /proc/<tid>/timerslack_ns capability requirements Nick Kralevich
@ 2016-07-15 18:42 ` John Stultz
2016-07-15 18:56 ` Kees Cook
0 siblings, 1 reply; 11+ messages in thread
From: John Stultz @ 2016-07-15 18:42 UTC (permalink / raw)
To: Nick Kralevich
Cc: lkml, Kees Cook, Serge E. Hallyn, Andrew Morton, Thomas Gleixner,
Arjan van de Ven, Oren Laadan, Ruchi Kandoi, Rom Lemarchand,
Todd Kjos, Colin Cross, Dmitry Shmidt, Elliott Hughes,
Android Kernel Team, LSM List, SELinux
On Fri, Jul 15, 2016 at 10:51 AM, Nick Kralevich <nnk@google.com> wrote:
> On Fri, Jul 15, 2016 at 10:24 AM, John Stultz <john.stultz@linaro.org> wrote:
>> + if (!capable(CAP_SYS_NICE))
>> + return -EPERM;
>> +
>
> Since you're going the LSM route (from your second patch of this
Well, you suggested it, so I sent out an RFC. I'm not married to it yet. :)
> series), the capability check above should be moved to the LSM hook in
> security/commoncap.c. Only one security call to
> security_task_settimerslack is needed, which will cover the standard
> capabilities check as well as the SELinux check.
Huh. Ok. I was looking at the implementation of nice(), which does:
if (increment < 0 && !can_nice(current, nice))
return -EPERM;
retval = security_task_setnice(current, nice);
if (retval)
...
Which made it seem like standard checks are done first, then finer
grain lsm checks second.
(...and now you can guess where my accidental "current" usage in the
next patch came from :)
>
>> p = get_proc_task(inode);
>> if (!p)
>> return -ESRCH;
>>
>
> Per your patch #2, you'd call security_task_settimerslack here. This
> would call into the capability LSM hook you added in
> security/commoncap.c
Though I was hoping to keep the CAP_SYS_PTRACE -> CAP_SYS_NICE change
first, then add the LSM hooks, as it makes the needed ABI change more
obvious. I worry swapping it around with the LSM hook being added
first makes it significantly less obvious, as (at least for me) the
security_task_* functions get indirect and difficult to follow quickly
("wait, why are we checking SETSCHED for nice?").
A side curiosity: why does "git grep PROCESS__SETSCHED" miss the
definition? Is the av_permissions.h file somehow caught by .gitignore?
thanks
-john
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [RFC][PATCH 1/2 v2] proc: Relax /proc/<tid>/timerslack_ns capability requirements
2016-07-15 18:42 ` John Stultz
@ 2016-07-15 18:56 ` Kees Cook
2016-07-15 20:17 ` Casey Schaufler
0 siblings, 1 reply; 11+ messages in thread
From: Kees Cook @ 2016-07-15 18:56 UTC (permalink / raw)
To: John Stultz, James Morris, Casey Schaufler
Cc: Nick Kralevich, lkml, Serge E. Hallyn, Andrew Morton,
Thomas Gleixner, Arjan van de Ven, Oren Laadan, Ruchi Kandoi,
Rom Lemarchand, Todd Kjos, Colin Cross, Dmitry Shmidt,
Elliott Hughes, Android Kernel Team, LSM List, SELinux
On Fri, Jul 15, 2016 at 11:42 AM, John Stultz <john.stultz@linaro.org> wrote:
> On Fri, Jul 15, 2016 at 10:51 AM, Nick Kralevich <nnk@google.com> wrote:
>> On Fri, Jul 15, 2016 at 10:24 AM, John Stultz <john.stultz@linaro.org> wrote:
>>> + if (!capable(CAP_SYS_NICE))
>>> + return -EPERM;
>>> +
>>
>> Since you're going the LSM route (from your second patch of this
>
> Well, you suggested it, so I sent out an RFC. I'm not married to it yet. :)
>
>
>> series), the capability check above should be moved to the LSM hook in
>> security/commoncap.c. Only one security call to
>> security_task_settimerslack is needed, which will cover the standard
>> capabilities check as well as the SELinux check.
>
> Huh. Ok. I was looking at the implementation of nice(), which does:
>
> if (increment < 0 && !can_nice(current, nice))
> return -EPERM;
> retval = security_task_setnice(current, nice);
> if (retval)
> ...
>
> Which made it seem like standard checks are done first, then finer
> grain lsm checks second.
I'm on the fence about this: it can be argued that if it's a cap check
it should live in the commoncap.c checks, but most of our cap checks
for these kinds of access controls are directly in the function, prior
the the security_* calls. I've added James and Casey who may have a
more well constructed rationale for doing this one way or the other.
> (...and now you can guess where my accidental "current" usage in the
> next patch came from :)
>
>
>>
>>> p = get_proc_task(inode);
>>> if (!p)
>>> return -ESRCH;
>>>
>>
>> Per your patch #2, you'd call security_task_settimerslack here. This
>> would call into the capability LSM hook you added in
>> security/commoncap.c
>
> Though I was hoping to keep the CAP_SYS_PTRACE -> CAP_SYS_NICE change
> first, then add the LSM hooks, as it makes the needed ABI change more
> obvious. I worry swapping it around with the LSM hook being added
> first makes it significantly less obvious, as (at least for me) the
> security_task_* functions get indirect and difficult to follow quickly
> ("wait, why are we checking SETSCHED for nice?").
>
> A side curiosity: why does "git grep PROCESS__SETSCHED" miss the
> definition? Is the av_permissions.h file somehow caught by .gitignore?
>
> thanks
> -john
-Kees
--
Kees Cook
Chrome OS & Brillo Security
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [RFC][PATCH 1/2 v2] proc: Relax /proc/<tid>/timerslack_ns capability requirements
2016-07-15 17:24 [RFC][PATCH 1/2 v2] proc: Relax /proc/<tid>/timerslack_ns capability requirements John Stultz
2016-07-15 17:24 ` [RFC][PATCH 2/2 v2] security: Add task_settimerslack LSM hook John Stultz
2016-07-15 17:51 ` [RFC][PATCH 1/2 v2] proc: Relax /proc/<tid>/timerslack_ns capability requirements Nick Kralevich
@ 2016-07-15 19:55 ` Nick Kralevich
2016-07-15 20:03 ` John Stultz
2 siblings, 1 reply; 11+ messages in thread
From: Nick Kralevich @ 2016-07-15 19:55 UTC (permalink / raw)
To: John Stultz
Cc: lkml, Kees Cook, Serge E. Hallyn, Andrew Morton, Thomas Gleixner,
Arjan van de Ven, Oren Laadan, Ruchi Kandoi, Rom Lemarchand,
Todd Kjos, Colin Cross, Dmitry Shmidt, Elliott Hughes,
Android Kernel Team, linux-security-module, SELinux
On Fri, Jul 15, 2016 at 10:24 AM, John Stultz <john.stultz@linaro.org> wrote:
> When an interface to allow a task to change another tasks
> timerslack was first proposed, it was suggested that something
> greater then CAP_SYS_NICE would be needed, as a task could be
> delayed further then what normally could be done with nice
> adjustments.
>
> So CAP_SYS_PTRACE was adopted instead for what became the
> /proc/<tid>/timerslack_ns interface. However, for Android (where
> this feature originates), giving the system_server
> CAP_SYS_PTRACE would allow it to observe and modify all tasks
> memory. This is considered too high a privilege level for only
> needing to change the timerslack.
>
> After some discussion, it was realized that a CAP_SYS_NICE
> process can set a task as SCHED_FIFO, so they could fork some
> spinning processes and set them all SCHED_FIFO 99, in effect
> delaying all other tasks for an infinite amount of time.
>
> So as a CAP_SYS_NICE task can already cause trouble for other
> tasks, using it as a required capability for accessing and
> modifying /proc/<tid>/timerslack_ns seems sufficient.
>
> Thus, this patch loosens the capability requirements to
> CAP_SYS_NICE and removes CAP_SYS_PTRACE, simplifying some
> of the code flow as well.
>
> This is technically an ABI change, but as the feature just
> landed in 4.6, I suspect no one is yet using it.
>
> Cc: Kees Cook <keescook@chromium.org>
> Cc: "Serge E. Hallyn" <serge@hallyn.com>
> Cc: Andrew Morton <akpm@linux-foundation.org>
> Cc: Thomas Gleixner <tglx@linutronix.de>
> CC: Arjan van de Ven <arjan@linux.intel.com>
> Cc: Oren Laadan <orenl@cellrox.com>
> Cc: Ruchi Kandoi <kandoiruchi@google.com>
> Cc: Rom Lemarchand <romlem@android.com>
> Cc: Todd Kjos <tkjos@google.com>
> Cc: Colin Cross <ccross@android.com>
> Cc: Nick Kralevich <nnk@google.com>
> Cc: Dmitry Shmidt <dimitrysh@google.com>
> Cc: Elliott Hughes <enh@google.com>
> Cc: Android Kernel Team <kernel-team@android.com>
> Signed-off-by: John Stultz <john.stultz@linaro.org>
> ---
> v2: Removed CAP_SYS_PTRACE check and simplified code flow
>
> fs/proc/base.c | 33 ++++++++++++++++-----------------
> 1 file changed, 16 insertions(+), 17 deletions(-)
>
> diff --git a/fs/proc/base.c b/fs/proc/base.c
> index a11eb71..8f4f8d7 100644
> --- a/fs/proc/base.c
> +++ b/fs/proc/base.c
> @@ -2277,19 +2277,19 @@ static ssize_t timerslack_ns_write(struct file *file, const char __user *buf,
> if (err < 0)
> return err;
>
> + if (!capable(CAP_SYS_NICE))
> + return -EPERM;
> +
> p = get_proc_task(inode);
> if (!p)
> return -ESRCH;
The capable(CAP_SYS_NICE) permission check should be moved to this
point, since it doesn't make sense to return EPERM if the task
structure doesn't exist.
>
> - if (ptrace_may_access(p, PTRACE_MODE_ATTACH_FSCREDS)) {
> - task_lock(p);
> - if (slack_ns == 0)
> - p->timer_slack_ns = p->default_timer_slack_ns;
> - else
> - p->timer_slack_ns = slack_ns;
> - task_unlock(p);
> - } else
> - count = -EPERM;
> + task_lock(p);
> + if (slack_ns == 0)
> + p->timer_slack_ns = p->default_timer_slack_ns;
> + else
> + p->timer_slack_ns = slack_ns;
> + task_unlock(p);
>
> put_task_struct(p);
>
> @@ -2300,22 +2300,21 @@ static int timerslack_ns_show(struct seq_file *m, void *v)
> {
> struct inode *inode = m->private;
> struct task_struct *p;
> - int err = 0;
> +
> + if (!capable(CAP_SYS_NICE))
> + return -EPERM;
This should also have a similar LSM check for reads. For the SELinux
implementation, this can map to the PROCESS__GETSCHED permission.
security/selinux/hooks.c:
static int selinux_task_gettimerslack(struct task_struct *p)
{
return current_has_perm(p, PROCESS__GETSCHED);
}
>
> p = get_proc_task(inode);
> if (!p)
> return -ESRCH;
As above, recommend moving the capable(CAP_SYS_NICE) check to this point.
>
> - if (ptrace_may_access(p, PTRACE_MODE_ATTACH_FSCREDS)) {
> - task_lock(p);
> - seq_printf(m, "%llu\n", p->timer_slack_ns);
> - task_unlock(p);
> - } else
> - err = -EPERM;
> + task_lock(p);
> + seq_printf(m, "%llu\n", p->timer_slack_ns);
> + task_unlock(p);
>
> put_task_struct(p);
>
> - return err;
> + return 0;
> }
>
> static int timerslack_ns_open(struct inode *inode, struct file *filp)
> --
> 1.9.1
>
--
Nick Kralevich | Android Security | nnk@google.com | 650.214.4037
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [RFC][PATCH 1/2 v2] proc: Relax /proc/<tid>/timerslack_ns capability requirements
2016-07-15 19:55 ` Nick Kralevich
@ 2016-07-15 20:03 ` John Stultz
2016-07-15 20:20 ` Nick Kralevich
0 siblings, 1 reply; 11+ messages in thread
From: John Stultz @ 2016-07-15 20:03 UTC (permalink / raw)
To: Nick Kralevich
Cc: lkml, Kees Cook, Serge E. Hallyn, Andrew Morton, Thomas Gleixner,
Arjan van de Ven, Oren Laadan, Ruchi Kandoi, Rom Lemarchand,
Todd Kjos, Colin Cross, Dmitry Shmidt, Elliott Hughes,
Android Kernel Team, LSM List, SELinux
On Fri, Jul 15, 2016 at 12:55 PM, Nick Kralevich <nnk@google.com> wrote:
> On Fri, Jul 15, 2016 at 10:24 AM, John Stultz <john.stultz@linaro.org> wrote:
>> + if (!capable(CAP_SYS_NICE))
>> + return -EPERM;
>> +
>> p = get_proc_task(inode);
>> if (!p)
>> return -ESRCH;
>
> The capable(CAP_SYS_NICE) permission check should be moved to this
> point, since it doesn't make sense to return EPERM if the task
> structure doesn't exist.
Ok. Will move it.
>> @@ -2300,22 +2300,21 @@ static int timerslack_ns_show(struct seq_file *m, void *v)
>> {
>> struct inode *inode = m->private;
>> struct task_struct *p;
>> - int err = 0;
>> +
>> + if (!capable(CAP_SYS_NICE))
>> + return -EPERM;
>
> This should also have a similar LSM check for reads. For the SELinux
> implementation, this can map to the PROCESS__GETSCHED permission.
Ok. I'll wire that in as well.
Would adding both selinux_task_get and set methods in the same patch
be ok? Or would folks prefer they be split into two?
Thanks for the feedback!
-john
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [RFC][PATCH 1/2 v2] proc: Relax /proc/<tid>/timerslack_ns capability requirements
2016-07-15 18:56 ` Kees Cook
@ 2016-07-15 20:17 ` Casey Schaufler
0 siblings, 0 replies; 11+ messages in thread
From: Casey Schaufler @ 2016-07-15 20:17 UTC (permalink / raw)
To: Kees Cook, John Stultz, James Morris
Cc: Nick Kralevich, lkml, Serge E. Hallyn, Andrew Morton,
Thomas Gleixner, Arjan van de Ven, Oren Laadan, Ruchi Kandoi,
Rom Lemarchand, Todd Kjos, Colin Cross, Dmitry Shmidt,
Elliott Hughes, Android Kernel Team, LSM List, SELinux
On 7/15/2016 11:56 AM, Kees Cook wrote:
> On Fri, Jul 15, 2016 at 11:42 AM, John Stultz <john.stultz@linaro.org> wrote:
>> On Fri, Jul 15, 2016 at 10:51 AM, Nick Kralevich <nnk@google.com> wrote:
>>> On Fri, Jul 15, 2016 at 10:24 AM, John Stultz <john.stultz@linaro.org> wrote:
>>>> + if (!capable(CAP_SYS_NICE))
>>>> + return -EPERM;
>>>> +
>>> Since you're going the LSM route (from your second patch of this
>> Well, you suggested it, so I sent out an RFC. I'm not married to it yet. :)
>>
>>
>>> series), the capability check above should be moved to the LSM hook in
>>> security/commoncap.c. Only one security call to
>>> security_task_settimerslack is needed, which will cover the standard
>>> capabilities check as well as the SELinux check.
>> Huh. Ok. I was looking at the implementation of nice(), which does:
>>
>> if (increment < 0 && !can_nice(current, nice))
>> return -EPERM;
>> retval = security_task_setnice(current, nice);
>> if (retval)
>> ...
>>
>> Which made it seem like standard checks are done first, then finer
>> grain lsm checks second.
> I'm on the fence about this: it can be argued that if it's a cap check
> it should live in the commoncap.c checks, but most of our cap checks
> for these kinds of access controls are directly in the function, prior
> the the security_* calls. I've added James and Casey who may have a
> more well constructed rationale for doing this one way or the other.
Let's say that at some point in the future someone wanted to replace
POSIX capabilities with some other privilege scheme[1]. Having as much
of the capability checking hooked in via the LSM infrastructure would
be a big help. On the other hand, there's a lot to be said for locality
of reference, and having the capability check off in another place may
make it harder to understand what's going on.
I don't object to either approach. If I have a recommendation it's to
put it in commoncap.c and hook it in on the off chance that the capability
model will implode after the next round of "improvements". Or if someone
comes up with a really spiffy alternative.
[1] Some years ago I offered to make a proposal for a customizable
privilege scheme, but failed to deliver. Could it be as simple
as providing a replacement for commoncap.c? I don't think so,
because the cap calls are not positioned generically, they are
placed based on the assumptions of the capability mechanism.
On the other hand, A little hard work goes a long way to fixing
that sort of problem.
>
>> (...and now you can guess where my accidental "current" usage in the
>> next patch came from :)
>>
>>
>>>> p = get_proc_task(inode);
>>>> if (!p)
>>>> return -ESRCH;
>>>>
>>> Per your patch #2, you'd call security_task_settimerslack here. This
>>> would call into the capability LSM hook you added in
>>> security/commoncap.c
>> Though I was hoping to keep the CAP_SYS_PTRACE -> CAP_SYS_NICE change
>> first, then add the LSM hooks, as it makes the needed ABI change more
>> obvious. I worry swapping it around with the LSM hook being added
>> first makes it significantly less obvious, as (at least for me) the
>> security_task_* functions get indirect and difficult to follow quickly
>> ("wait, why are we checking SETSCHED for nice?").
>>
>> A side curiosity: why does "git grep PROCESS__SETSCHED" miss the
>> definition? Is the av_permissions.h file somehow caught by .gitignore?
>>
>> thanks
>> -john
> -Kees
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [RFC][PATCH 1/2 v2] proc: Relax /proc/<tid>/timerslack_ns capability requirements
2016-07-15 20:03 ` John Stultz
@ 2016-07-15 20:20 ` Nick Kralevich
0 siblings, 0 replies; 11+ messages in thread
From: Nick Kralevich @ 2016-07-15 20:20 UTC (permalink / raw)
To: John Stultz
Cc: lkml, Kees Cook, Serge E. Hallyn, Andrew Morton, Thomas Gleixner,
Arjan van de Ven, Oren Laadan, Ruchi Kandoi, Rom Lemarchand,
Todd Kjos, Colin Cross, Dmitry Shmidt, Elliott Hughes,
Android Kernel Team, LSM List, SELinux
On Fri, Jul 15, 2016 at 1:03 PM, John Stultz <john.stultz@linaro.org> wrote:
> On Fri, Jul 15, 2016 at 12:55 PM, Nick Kralevich <nnk@google.com> wrote:
>> This should also have a similar LSM check for reads. For the SELinux
>> implementation, this can map to the PROCESS__GETSCHED permission.
>
> Ok. I'll wire that in as well.
>
> Would adding both selinux_task_get and set methods in the same patch
> be ok? Or would folks prefer they be split into two?
I would prefer 1 patch.
--
Nick Kralevich | Android Security | nnk@google.com | 650.214.4037
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2016-07-15 20:20 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-07-15 17:24 [RFC][PATCH 1/2 v2] proc: Relax /proc/<tid>/timerslack_ns capability requirements John Stultz
2016-07-15 17:24 ` [RFC][PATCH 2/2 v2] security: Add task_settimerslack LSM hook John Stultz
2016-07-15 17:51 ` Nick Kralevich
2016-07-15 18:10 ` John Stultz
2016-07-15 17:51 ` [RFC][PATCH 1/2 v2] proc: Relax /proc/<tid>/timerslack_ns capability requirements Nick Kralevich
2016-07-15 18:42 ` John Stultz
2016-07-15 18:56 ` Kees Cook
2016-07-15 20:17 ` Casey Schaufler
2016-07-15 19:55 ` Nick Kralevich
2016-07-15 20:03 ` John Stultz
2016-07-15 20:20 ` Nick Kralevich
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®