diff options
author | Dave Kleikamp <shaggy@austin.ibm.com> | 2005-09-01 09:05:39 -0500 |
---|---|---|
committer | Dave Kleikamp <shaggy@austin.ibm.com> | 2005-09-01 09:05:39 -0500 |
commit | 1d15b10f95d4c4295a0f2288c7be7b6a005490da (patch) | |
tree | 7fe1dccc9e6676d7d83421fc42ea9d1a9e16318c /fs/jfs/xattr.c | |
parent | 4f4b401bfaa97edbea41a1fcab794148e7ac0421 (diff) |
JFS: Implement jfs_init_security
This atomically initializes the security xattr when an object is created
Signed-off-by: Dave Kleikamp <shaggy@austin.ibm.com>
Diffstat (limited to 'fs/jfs/xattr.c')
-rw-r--r-- | fs/jfs/xattr.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/fs/jfs/xattr.c b/fs/jfs/xattr.c index 35674b2a0e6c..23aa5066b5a4 100644 --- a/fs/jfs/xattr.c +++ b/fs/jfs/xattr.c @@ -21,6 +21,7 @@ #include <linux/xattr.h> #include <linux/posix_acl_xattr.h> #include <linux/quotaops.h> +#include <linux/security.h> #include "jfs_incore.h" #include "jfs_superblock.h" #include "jfs_dmap.h" @@ -1148,3 +1149,38 @@ int jfs_removexattr(struct dentry *dentry, const char *name) return rc; } + +#ifdef CONFIG_JFS_SECURITY +int jfs_init_security(tid_t tid, struct inode *inode, struct inode *dir) +{ + int rc; + size_t len; + void *value; + char *suffix; + char *name; + + rc = security_inode_init_security(inode, dir, &suffix, &value, &len); + if (rc) { + if (rc == -EOPNOTSUPP) + return 0; + return rc; + } + name = kmalloc(XATTR_SECURITY_PREFIX_LEN + 1 + strlen(suffix), + GFP_NOFS); + if (!name) { + rc = -ENOMEM; + goto kmalloc_failed; + } + strcpy(name, XATTR_SECURITY_PREFIX); + strcpy(name + XATTR_SECURITY_PREFIX_LEN, suffix); + + rc = __jfs_setxattr(tid, inode, name, value, len, 0); + + kfree(name); +kmalloc_failed: + kfree(suffix); + kfree(value); + + return rc; +} +#endif |