diff options
Diffstat (limited to 'security/security.c')
-rw-r--r-- | security/security.c | 29 |
1 files changed, 25 insertions, 4 deletions
diff --git a/security/security.c b/security/security.c index 709569305d32..c4bb47db30ee 100644 --- a/security/security.c +++ b/security/security.c | |||
@@ -700,18 +700,39 @@ int security_inode_killpriv(struct dentry *dentry) | |||
700 | 700 | ||
701 | int security_inode_getsecurity(struct inode *inode, const char *name, void **buffer, bool alloc) | 701 | int security_inode_getsecurity(struct inode *inode, const char *name, void **buffer, bool alloc) |
702 | { | 702 | { |
703 | struct security_hook_list *hp; | ||
704 | int rc; | ||
705 | |||
703 | if (unlikely(IS_PRIVATE(inode))) | 706 | if (unlikely(IS_PRIVATE(inode))) |
704 | return -EOPNOTSUPP; | 707 | return -EOPNOTSUPP; |
705 | return call_int_hook(inode_getsecurity, -EOPNOTSUPP, inode, name, | 708 | /* |
706 | buffer, alloc); | 709 | * Only one module will provide an attribute with a given name. |
710 | */ | ||
711 | list_for_each_entry(hp, &security_hook_heads.inode_getsecurity, list) { | ||
712 | rc = hp->hook.inode_getsecurity(inode, name, buffer, alloc); | ||
713 | if (rc != -EOPNOTSUPP) | ||
714 | return rc; | ||
715 | } | ||
716 | return -EOPNOTSUPP; | ||
707 | } | 717 | } |
708 | 718 | ||
709 | int security_inode_setsecurity(struct inode *inode, const char *name, const void *value, size_t size, int flags) | 719 | int security_inode_setsecurity(struct inode *inode, const char *name, const void *value, size_t size, int flags) |
710 | { | 720 | { |
721 | struct security_hook_list *hp; | ||
722 | int rc; | ||
723 | |||
711 | if (unlikely(IS_PRIVATE(inode))) | 724 | if (unlikely(IS_PRIVATE(inode))) |
712 | return -EOPNOTSUPP; | 725 | return -EOPNOTSUPP; |
713 | return call_int_hook(inode_setsecurity, -EOPNOTSUPP, inode, name, | 726 | /* |
714 | value, size, flags); | 727 | * Only one module will provide an attribute with a given name. |
728 | */ | ||
729 | list_for_each_entry(hp, &security_hook_heads.inode_setsecurity, list) { | ||
730 | rc = hp->hook.inode_setsecurity(inode, name, value, size, | ||
731 | flags); | ||
732 | if (rc != -EOPNOTSUPP) | ||
733 | return rc; | ||
734 | } | ||
735 | return -EOPNOTSUPP; | ||
715 | } | 736 | } |
716 | 737 | ||
717 | int security_inode_listsecurity(struct inode *inode, char *buffer, size_t buffer_size) | 738 | int security_inode_listsecurity(struct inode *inode, char *buffer, size_t buffer_size) |