procfs: add smack subdir to attrs
Back in 2007 I made what turned out to be a rather serious mistake in the implementation of the Smack security module. The SELinux module used an interface in /proc to manipulate the security context on processes. Rather than use a similar interface, I used the same interface. The AppArmor team did likewise. Now /proc/.../attr/current will tell you the security "context" of the process, but it will be different depending on the security module you're using. This patch provides a subdirectory in /proc/.../attr for Smack. Smack user space can use the "current" file in this subdirectory and never have to worry about getting SELinux attributes by mistake. Programs that use the old interface will continue to work (or fail, as the case may be) as before. The proposed S.A.R.A security module is dependent on the mechanism to create its own attr subdirectory. The original implementation is by Kees Cook. Signed-off-by: Casey Schaufler <casey@schaufler-ca.com> Reviewed-by: Kees Cook <keescook@chromium.org> Signed-off-by: Kees Cook <keescook@chromium.org>
This commit is contained in:
committed by
Kees Cook
parent
d117a154e6
commit
6d9c939dbe
@@ -1485,14 +1485,30 @@ void security_d_instantiate(struct dentry *dentry, struct inode *inode)
|
||||
}
|
||||
EXPORT_SYMBOL(security_d_instantiate);
|
||||
|
||||
int security_getprocattr(struct task_struct *p, char *name, char **value)
|
||||
int security_getprocattr(struct task_struct *p, const char *lsm, char *name,
|
||||
char **value)
|
||||
{
|
||||
return call_int_hook(getprocattr, -EINVAL, p, name, value);
|
||||
struct security_hook_list *hp;
|
||||
|
||||
hlist_for_each_entry(hp, &security_hook_heads.getprocattr, list) {
|
||||
if (lsm != NULL && strcmp(lsm, hp->lsm))
|
||||
continue;
|
||||
return hp->hook.getprocattr(p, name, value);
|
||||
}
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
int security_setprocattr(const char *name, void *value, size_t size)
|
||||
int security_setprocattr(const char *lsm, const char *name, void *value,
|
||||
size_t size)
|
||||
{
|
||||
return call_int_hook(setprocattr, -EINVAL, name, value, size);
|
||||
struct security_hook_list *hp;
|
||||
|
||||
hlist_for_each_entry(hp, &security_hook_heads.setprocattr, list) {
|
||||
if (lsm != NULL && strcmp(lsm, hp->lsm))
|
||||
continue;
|
||||
return hp->hook.setprocattr(name, value, size);
|
||||
}
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
int security_netlink_send(struct sock *sk, struct sk_buff *skb)
|
||||
|
||||
Reference in New Issue
Block a user