Commit 1e39f384bb01 ("evm: fix build problems") makes the stub version of security_old_inode_init_security() return 0 when CONFIG_SECURITY is not set. But that makes callers such as reiserfs_security_init() assume that security_old_inode_init_security() has set name, value, and len arguments properly - but security_old_inode_init_security() left them uninitialized which then results in interesting failures. Revert security_old_inode_init_security() to the old behavior of returning EOPNOTSUPP since both callers (reiserfs and ocfs2) handle this just fine. [ Also fixed the S_PRIVATE(inode) case of the actual non-stub security_old_inode_init_security() function to return EOPNOTSUPP for the same reason, as pointed out by Mimi Zohar. It got incorrectly changed to match the new function in commit fb88c2b6cbb1: "evm: fix security/security_old_init_security return code". - Linus ]
Unified · Split
| @@ -2056,7 +2056,7 @@ static inline int security_old_inode_init_security(struct inode *inode, · 2055 unmodified lines | |||
| 2056 | char **name, void **value, | 2056 | char **name, void **value, |
| 2057 | size_t *len) | 2057 | size_t *len) |
| 2058 | { | 2058 | { |
| 2059 | return 0; | 2059 | return -EOPNOTSUPP; |
| 2060 | } | 2060 | } |
| 2061 | 2061 | ||
| 2062 | static inline int security_inode_create(struct inode *dir, | 2062 | static inline int security_inode_create(struct inode *dir, |
| @@ -381,7 +381,7 @@ int security_old_inode_init_security(struct inode *inode, struct inode *dir, · 380 unmodified lines | |||
| 381 | void **value, size_t *len) | 381 | void **value, size_t *len) |
| 382 | { | 382 | { |
| 383 | if (unlikely(IS_PRIVATE(inode))) | 383 | if (unlikely(IS_PRIVATE(inode))) |
| 384 | return 0; | 384 | return -EOPNOTSUPP; |
| 385 | return security_ops->inode_init_security(inode, dir, qstr, name, value, | 385 | return security_ops->inode_init_security(inode, dir, qstr, name, value, |
| 386 | len); | 386 | len); |
| 387 | } | 387 | } |