aboutsummaryrefslogtreecommitdiffstats
path: root/security/security.c
diff options
context:
space:
mode:
Diffstat (limited to 'security/security.c')
-rw-r--r--security/security.c39
1 files changed, 36 insertions, 3 deletions
diff --git a/security/security.c b/security/security.c
index 4ba6d4cc061..3464d58a576 100644
--- a/security/security.c
+++ b/security/security.c
@@ -18,6 +18,8 @@
18#include <linux/security.h> 18#include <linux/security.h>
19#include <linux/ima.h> 19#include <linux/ima.h>
20 20
21#define MAX_LSM_XATTR 1
22
21/* Boot-time LSM user choice */ 23/* Boot-time LSM user choice */
22static __initdata char chosen_lsm[SECURITY_NAME_MAX + 1] = 24static __initdata char chosen_lsm[SECURITY_NAME_MAX + 1] =
23 CONFIG_DEFAULT_SECURITY; 25 CONFIG_DEFAULT_SECURITY;
@@ -339,15 +341,46 @@ void security_inode_free(struct inode *inode)
339} 341}
340 342
341int security_inode_init_security(struct inode *inode, struct inode *dir, 343int security_inode_init_security(struct inode *inode, struct inode *dir,
342 const struct qstr *qstr, char **name, 344 const struct qstr *qstr,
343 void **value, size_t *len) 345 const initxattrs initxattrs, void *fs_data)
346{
347 struct xattr new_xattrs[MAX_LSM_XATTR + 1];
348 struct xattr *lsm_xattr;
349 int ret;
350
351 if (unlikely(IS_PRIVATE(inode)))
352 return -EOPNOTSUPP;
353
354 memset(new_xattrs, 0, sizeof new_xattrs);
355 if (!initxattrs)
356 return security_ops->inode_init_security(inode, dir, qstr,
357 NULL, NULL, NULL);
358 lsm_xattr = new_xattrs;
359 ret = security_ops->inode_init_security(inode, dir, qstr,
360 &lsm_xattr->name,
361 &lsm_xattr->value,
362 &lsm_xattr->value_len);
363 if (ret)
364 goto out;
365 ret = initxattrs(inode, new_xattrs, fs_data);
366out:
367 kfree(lsm_xattr->name);
368 kfree(lsm_xattr->value);
369
370 return (ret == -EOPNOTSUPP) ? 0 : ret;
371}
372EXPORT_SYMBOL(security_inode_init_security);
373
374int security_old_inode_init_security(struct inode *inode, struct inode *dir,
375 const struct qstr *qstr, char **name,
376 void **value, size_t *len)
344{ 377{
345 if (unlikely(IS_PRIVATE(inode))) 378 if (unlikely(IS_PRIVATE(inode)))
346 return -EOPNOTSUPP; 379 return -EOPNOTSUPP;
347 return security_ops->inode_init_security(inode, dir, qstr, name, value, 380 return security_ops->inode_init_security(inode, dir, qstr, name, value,
348 len); 381 len);
349} 382}
350EXPORT_SYMBOL(security_inode_init_security); 383EXPORT_SYMBOL(security_old_inode_init_security);
351 384
352#ifdef CONFIG_SECURITY_PATH 385#ifdef CONFIG_SECURITY_PATH
353int security_path_mknod(struct path *dir, struct dentry *dentry, int mode, 386int security_path_mknod(struct path *dir, struct dentry *dentry, int mode,