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".
Unified · Split
| @@ -32,7 +32,7 @@ enum ocfs2_xattr_type { · 31 unmodified lines | ||
| 32 | 32 | |
| 33 | 33 | struct ocfs2_security_xattr_info { |
| 34 | 34 | int enable; |
| 35 | − char *name; | |
| 35 | + const char *name; | |
| 36 | 36 | void *value; |
| 37 | 37 | size_t value_len; |
| 38 | 38 | }; |
| @@ -1492,7 +1492,7 @@ struct security_operations { · 1491 unmodified lines | ||
| 1492 | 1492 | int (*inode_alloc_security) (struct inode *inode); |
| 1493 | 1493 | void (*inode_free_security) (struct inode *inode); |
| 1494 | 1494 | int (*inode_init_security) (struct inode *inode, struct inode *dir, |
| 1495 | − const struct qstr *qstr, char **name, | |
| 1495 | + const struct qstr *qstr, const char **name, | |
| 1496 | 1496 | void **value, size_t *len); |
| 1497 | 1497 | int (*inode_create) (struct inode *dir, |
| 1498 | 1498 | struct dentry *dentry, umode_t mode); |
| @@ -1770,7 +1770,7 @@ int security_inode_init_security(struct inode *inode, struct inode *dir, · 271 unmodified lines | ||
| 1770 | 1770 | const struct qstr *qstr, |
| 1771 | 1771 | initxattrs initxattrs, void *fs_data); |
| 1772 | 1772 | int security_old_inode_init_security(struct inode *inode, struct inode *dir, |
| 1773 | − const struct qstr *qstr, char **name, | |
| 1773 | + const struct qstr *qstr, const char **name, | |
| 1774 | 1774 | void **value, size_t *len); |
| 1775 | 1775 | int security_inode_create(struct inode *dir, struct dentry *dentry, umode_t mode); |
| 1776 | 1776 | int security_inode_link(struct dentry *old_dentry, struct inode *dir, |
| @@ -2094,8 +2094,8 @@ static inline int security_inode_init_security(struct inode *inode, · 317 unmodified lines | ||
| 2094 | 2094 | static inline int security_old_inode_init_security(struct inode *inode, |
| 2095 | 2095 | struct inode *dir, |
| 2096 | 2096 | const struct qstr *qstr, |
| 2097 | − char **name, void **value, | |
| 2098 | − size_t *len) | |
| 2097 | + const char **name, | |
| 2098 | + void **value, size_t *len) | |
| 2099 | 2099 | { |
| 2100 | 2100 | return -EOPNOTSUPP; |
| 2101 | 2101 | } |
| @@ -31,7 +31,7 @@ struct xattr_handler { · 30 unmodified lines | ||
| 31 | 31 | }; |
| 32 | 32 | |
| 33 | 33 | struct xattr { |
| 34 | − char *name; | |
| 34 | + const char *name; | |
| 35 | 35 | void *value; |
| 36 | 36 | size_t value_len; |
| 37 | 37 | }; |
| @@ -16,7 +16,7 @@ struct reiserfs_xattr_header { · 15 unmodified lines | ||
| 16 | 16 | }; |
| 17 | 17 | |
| 18 | 18 | struct reiserfs_security_handle { |
| 19 | − char *name; | |
| 19 | + const char *name; | |
| 20 | 20 | void *value; |
| 21 | 21 | size_t length; |
| 22 | 22 | }; |
| @@ -129,7 +129,7 @@ static void cap_inode_free_security(struct inode *inode) · 128 unmodified lines | ||
| 129 | 129 | } |
| 130 | 130 | |
| 131 | 131 | static int cap_inode_init_security(struct inode *inode, struct inode *dir, |
| 132 | − const struct qstr *qstr, char **name, | |
| 132 | + const struct qstr *qstr, const char **name, | |
| 133 | 133 | void **value, size_t *len) |
| 134 | 134 | { |
| 135 | 135 | return -EOPNOTSUPP; |
| @@ -418,7 +418,7 @@ int evm_inode_init_security(struct inode *inode, · 417 unmodified lines | ||
| 418 | 418 | |
| 419 | 419 | evm_xattr->value = xattr_data; |
| 420 | 420 | evm_xattr->value_len = sizeof(*xattr_data); |
| 421 | − evm_xattr->name = kstrdup(XATTR_EVM_SUFFIX, GFP_NOFS); | |
| 421 | + evm_xattr->name = XATTR_EVM_SUFFIX; | |
| 422 | 422 | return 0; |
| 423 | 423 | out: |
| 424 | 424 | kfree(xattr_data); |
| @@ -348,10 +348,10 @@ int security_inode_init_security(struct inode *inode, struct inode *dir, · 347 unmodified lines | ||
| 348 | 348 | if (unlikely(IS_PRIVATE(inode))) |
| 349 | 349 | return 0; |
| 350 | 350 | |
| 351 | − memset(new_xattrs, 0, sizeof new_xattrs); | |
| 352 | 351 | if (!initxattrs) |
| 353 | 352 | return security_ops->inode_init_security(inode, dir, qstr, |
| 354 | 353 | NULL, NULL, NULL); |
| 354 | + memset(new_xattrs, 0, sizeof(new_xattrs)); | |
| 355 | 355 | lsm_xattr = new_xattrs; |
| 356 | 356 | ret = security_ops->inode_init_security(inode, dir, qstr, |
| 357 | 357 | &lsm_xattr->name, |
| @@ -366,16 +366,14 @@ int security_inode_init_security(struct inode *inode, struct inode *dir, · 8 unmodified lines | ||
| 366 | 366 | goto out; |
| 367 | 367 | ret = initxattrs(inode, new_xattrs, fs_data); |
| 368 | 368 | out: |
| 369 | − for (xattr = new_xattrs; xattr->name != NULL; xattr++) { | |
| 370 | − kfree(xattr->name); | |
| 369 | + for (xattr = new_xattrs; xattr->value != NULL; xattr++) | |
| 371 | 370 | kfree(xattr->value); |
| 372 | − } | |
| 373 | 371 | return (ret == -EOPNOTSUPP) ? 0 : ret; |
| 374 | 372 | } |
| 375 | 373 | EXPORT_SYMBOL(security_inode_init_security); |
| 376 | 374 | |
| 377 | 375 | int security_old_inode_init_security(struct inode *inode, struct inode *dir, |
| 378 | − const struct qstr *qstr, char **name, | |
| 376 | + const struct qstr *qstr, const char **name, | |
| 379 | 377 | void **value, size_t *len) |
| 380 | 378 | { |
| 381 | 379 | if (unlikely(IS_PRIVATE(inode))) |
| @@ -2587,7 +2587,8 @@ static int selinux_dentry_init_security(struct dentry *dentry, int mode, · 2586 unmodified lines | ||
| 2587 | 2587 | } |
| 2588 | 2588 | |
| 2589 | 2589 | static int selinux_inode_init_security(struct inode *inode, struct inode *dir, |
| 2590 | − const struct qstr *qstr, char **name, | |
| 2590 | + const struct qstr *qstr, | |
| 2591 | + const char **name, | |
| 2591 | 2592 | void **value, size_t *len) |
| 2592 | 2593 | { |
| 2593 | 2594 | const struct task_security_struct *tsec = current_security(); |
| @@ -2595,7 +2596,7 @@ static int selinux_inode_init_security(struct inode *inode, struct inode *dir, · 1 unmodified line | ||
| 2595 | 2596 | struct superblock_security_struct *sbsec; |
| 2596 | 2597 | u32 sid, newsid, clen; |
| 2597 | 2598 | int rc; |
| 2598 | − char *namep = NULL, *context; | |
| 2599 | + char *context; | |
| 2599 | 2600 | |
| 2600 | 2601 | dsec = dir->i_security; |
| 2601 | 2602 | sbsec = dir->i_sb->s_security; |
| @@ -2631,19 +2632,13 @@ static int selinux_inode_init_security(struct inode *inode, struct inode *dir, · 29 unmodified lines | ||
| 2631 | 2632 | if (!ss_initialized || !(sbsec->flags & SE_SBLABELSUPP)) |
| 2632 | 2633 | return -EOPNOTSUPP; |
| 2633 | 2634 | |
| 2634 | − if (name) { | |
| 2635 | − namep = kstrdup(XATTR_SELINUX_SUFFIX, GFP_NOFS); | |
| 2636 | − if (!namep) | |
| 2637 | − return -ENOMEM; | |
| 2638 | − *name = namep; | |
| 2639 | − } | |
| 2635 | + if (name) | |
| 2636 | + *name = XATTR_SELINUX_SUFFIX; | |
| 2640 | 2637 | |
| 2641 | 2638 | if (value && len) { |
| 2642 | 2639 | rc = security_sid_to_context_force(newsid, &context, &clen); |
| 2643 | − if (rc) { | |
| 2644 | − kfree(namep); | |
| 2640 | + if (rc) | |
| 2645 | 2641 | return rc; |
| 2646 | − } | |
| 2647 | 2642 | *value = context; |
| 2648 | 2643 | *len = clen; |
| 2649 | 2644 | } |
| @@ -582,7 +582,7 @@ static void smack_inode_free_security(struct inode *inode) · 581 unmodified lines | ||
| 582 | 582 | * Returns 0 if it all works out, -ENOMEM if there's no memory |
| 583 | 583 | */ |
| 584 | 584 | static int smack_inode_init_security(struct inode *inode, struct inode *dir, |
| 585 | − const struct qstr *qstr, char **name, | |
| 585 | + const struct qstr *qstr, const char **name, | |
| 586 | 586 | void **value, size_t *len) |
| 587 | 587 | { |
| 588 | 588 | struct inode_smack *issp = inode->i_security; |
| @@ -591,11 +591,8 @@ static int smack_inode_init_security(struct inode *inode, struct inode *dir, · 2 unmodified lines | ||
| 591 | 591 | char *dsp = smk_of_inode(dir); |
| 592 | 592 | int may; |
| 593 | 593 | |
| 594 | − if (name) { | |
| 595 | − *name = kstrdup(XATTR_SMACK_SUFFIX, GFP_NOFS); | |
| 596 | − if (*name == NULL) | |
| 597 | − return -ENOMEM; | |
| 598 | − } | |
| 594 | + if (name) | |
| 595 | + *name = XATTR_SMACK_SUFFIX; | |
| 599 | 596 | |
| 600 | 597 | if (value) { |
| 601 | 598 | rcu_read_lock(); |