Skip to content

Commit

Permalink
xattr: Constify ->name member of "struct xattr".
Browse files Browse the repository at this point in the history
Since everybody sets kstrdup()ed constant string to "struct xattr"->name but
nobody modifies "struct xattr"->name , we can omit kstrdup() and its failure
checking by constifying ->name member of "struct xattr".

Signed-off-by: Tetsuo Handa <[email protected]>
Reviewed-by: Joel Becker <[email protected]> [ocfs2]
Acked-by: Serge E. Hallyn <[email protected]>
Acked-by: Casey Schaufler <[email protected]>
Acked-by: Mimi Zohar <[email protected]>
Reviewed-by: Paul Moore <[email protected]>
Tested-by: Paul Moore <[email protected]>
Acked-by: Eric Paris <[email protected]>
Signed-off-by: James Morris <[email protected]>
  • Loading branch information
Tetsuo Handa authored and James Morris committed Jul 25, 2013
1 parent be0306b commit 9548906
Show file tree
Hide file tree
Showing 9 changed files with 21 additions and 31 deletions.
2 changes: 1 addition & 1 deletion fs/ocfs2/xattr.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ enum ocfs2_xattr_type {

struct ocfs2_security_xattr_info {
int enable;
char *name;
const char *name;
void *value;
size_t value_len;
};
Expand Down
8 changes: 4 additions & 4 deletions include/linux/security.h
Original file line number Diff line number Diff line change
Expand Up @@ -1492,7 +1492,7 @@ struct security_operations {
int (*inode_alloc_security) (struct inode *inode);
void (*inode_free_security) (struct inode *inode);
int (*inode_init_security) (struct inode *inode, struct inode *dir,
const struct qstr *qstr, char **name,
const struct qstr *qstr, const char **name,
void **value, size_t *len);
int (*inode_create) (struct inode *dir,
struct dentry *dentry, umode_t mode);
Expand Down Expand Up @@ -1770,7 +1770,7 @@ int security_inode_init_security(struct inode *inode, struct inode *dir,
const struct qstr *qstr,
initxattrs initxattrs, void *fs_data);
int security_old_inode_init_security(struct inode *inode, struct inode *dir,
const struct qstr *qstr, char **name,
const struct qstr *qstr, const char **name,
void **value, size_t *len);
int security_inode_create(struct inode *dir, struct dentry *dentry, umode_t mode);
int security_inode_link(struct dentry *old_dentry, struct inode *dir,
Expand Down Expand Up @@ -2094,8 +2094,8 @@ static inline int security_inode_init_security(struct inode *inode,
static inline int security_old_inode_init_security(struct inode *inode,
struct inode *dir,
const struct qstr *qstr,
char **name, void **value,
size_t *len)
const char **name,
void **value, size_t *len)
{
return -EOPNOTSUPP;
}
Expand Down
2 changes: 1 addition & 1 deletion include/linux/xattr.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ struct xattr_handler {
};

struct xattr {
char *name;
const char *name;
void *value;
size_t value_len;
};
Expand Down
2 changes: 1 addition & 1 deletion include/uapi/linux/reiserfs_xattr.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ struct reiserfs_xattr_header {
};

struct reiserfs_security_handle {
char *name;
const char *name;
void *value;
size_t length;
};
Expand Down
2 changes: 1 addition & 1 deletion security/capability.c
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ static void cap_inode_free_security(struct inode *inode)
}

static int cap_inode_init_security(struct inode *inode, struct inode *dir,
const struct qstr *qstr, char **name,
const struct qstr *qstr, const char **name,
void **value, size_t *len)
{
return -EOPNOTSUPP;
Expand Down
2 changes: 1 addition & 1 deletion security/integrity/evm/evm_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -418,7 +418,7 @@ int evm_inode_init_security(struct inode *inode,

evm_xattr->value = xattr_data;
evm_xattr->value_len = sizeof(*xattr_data);
evm_xattr->name = kstrdup(XATTR_EVM_SUFFIX, GFP_NOFS);
evm_xattr->name = XATTR_EVM_SUFFIX;
return 0;
out:
kfree(xattr_data);
Expand Down
8 changes: 3 additions & 5 deletions security/security.c
Original file line number Diff line number Diff line change
Expand Up @@ -348,10 +348,10 @@ int security_inode_init_security(struct inode *inode, struct inode *dir,
if (unlikely(IS_PRIVATE(inode)))
return 0;

memset(new_xattrs, 0, sizeof new_xattrs);
if (!initxattrs)
return security_ops->inode_init_security(inode, dir, qstr,
NULL, NULL, NULL);
memset(new_xattrs, 0, sizeof(new_xattrs));
lsm_xattr = new_xattrs;
ret = security_ops->inode_init_security(inode, dir, qstr,
&lsm_xattr->name,
Expand All @@ -366,16 +366,14 @@ int security_inode_init_security(struct inode *inode, struct inode *dir,
goto out;
ret = initxattrs(inode, new_xattrs, fs_data);
out:
for (xattr = new_xattrs; xattr->name != NULL; xattr++) {
kfree(xattr->name);
for (xattr = new_xattrs; xattr->value != NULL; xattr++)
kfree(xattr->value);
}
return (ret == -EOPNOTSUPP) ? 0 : ret;
}
EXPORT_SYMBOL(security_inode_init_security);

int security_old_inode_init_security(struct inode *inode, struct inode *dir,
const struct qstr *qstr, char **name,
const struct qstr *qstr, const char **name,
void **value, size_t *len)
{
if (unlikely(IS_PRIVATE(inode)))
Expand Down
17 changes: 6 additions & 11 deletions security/selinux/hooks.c
Original file line number Diff line number Diff line change
Expand Up @@ -2587,15 +2587,16 @@ static int selinux_dentry_init_security(struct dentry *dentry, int mode,
}

static int selinux_inode_init_security(struct inode *inode, struct inode *dir,
const struct qstr *qstr, char **name,
const struct qstr *qstr,
const char **name,
void **value, size_t *len)
{
const struct task_security_struct *tsec = current_security();
struct inode_security_struct *dsec;
struct superblock_security_struct *sbsec;
u32 sid, newsid, clen;
int rc;
char *namep = NULL, *context;
char *context;

dsec = dir->i_security;
sbsec = dir->i_sb->s_security;
Expand Down Expand Up @@ -2631,19 +2632,13 @@ static int selinux_inode_init_security(struct inode *inode, struct inode *dir,
if (!ss_initialized || !(sbsec->flags & SE_SBLABELSUPP))
return -EOPNOTSUPP;

if (name) {
namep = kstrdup(XATTR_SELINUX_SUFFIX, GFP_NOFS);
if (!namep)
return -ENOMEM;
*name = namep;
}
if (name)
*name = XATTR_SELINUX_SUFFIX;

if (value && len) {
rc = security_sid_to_context_force(newsid, &context, &clen);
if (rc) {
kfree(namep);
if (rc)
return rc;
}
*value = context;
*len = clen;
}
Expand Down
9 changes: 3 additions & 6 deletions security/smack/smack_lsm.c
Original file line number Diff line number Diff line change
Expand Up @@ -582,7 +582,7 @@ static void smack_inode_free_security(struct inode *inode)
* Returns 0 if it all works out, -ENOMEM if there's no memory
*/
static int smack_inode_init_security(struct inode *inode, struct inode *dir,
const struct qstr *qstr, char **name,
const struct qstr *qstr, const char **name,
void **value, size_t *len)
{
struct inode_smack *issp = inode->i_security;
Expand All @@ -591,11 +591,8 @@ static int smack_inode_init_security(struct inode *inode, struct inode *dir,
char *dsp = smk_of_inode(dir);
int may;

if (name) {
*name = kstrdup(XATTR_SMACK_SUFFIX, GFP_NOFS);
if (*name == NULL)
return -ENOMEM;
}
if (name)
*name = XATTR_SMACK_SUFFIX;

if (value) {
rcu_read_lock();
Expand Down

0 comments on commit 9548906

Please sign in to comment.