mirror of
https://github.com/torvalds/linux.git
synced 2026-06-02 11:33:28 +02:00
smack: always "instantiate" inode in smack_inode_init_security()
If memory allocation for the SMACK64TRANSMUTE xattr value fails in smack_inode_init_security(), the SMK_INODE_INSTANT flag is not set in (struct inode_smack *issp)->smk_flags, leaving the inode as not "instantiated". It does not matter if fs frees the inode after failed smack_inode_init_security() call, but there is no guarantee for this. To be safe, mark the inode as "instantiated", even if allocation of xattr values fails. Signed-off-by: Konstantin Andreev <andreev@swemel.ru> Signed-off-by: Casey Schaufler <casey@schaufler-ca.com>
This commit is contained in:
parent
8e5d9f916a
commit
69204f6cdb
|
|
@ -1015,6 +1015,8 @@ static int smack_inode_init_security(struct inode *inode, struct inode *dir,
|
|||
struct task_smack *tsp = smack_cred(current_cred());
|
||||
struct inode_smack * const issp = smack_inode(inode);
|
||||
struct smack_known *dsp = smk_of_inode(dir);
|
||||
int rc = 0;
|
||||
int transflag = 0;
|
||||
bool trans_cred;
|
||||
bool trans_rule;
|
||||
|
||||
|
|
@ -1043,18 +1045,20 @@ static int smack_inode_init_security(struct inode *inode, struct inode *dir,
|
|||
issp->smk_inode = dsp;
|
||||
|
||||
if (S_ISDIR(inode->i_mode)) {
|
||||
issp->smk_flags |= SMK_INODE_TRANSMUTE;
|
||||
transflag = SMK_INODE_TRANSMUTE;
|
||||
|
||||
if (xattr_dupval(xattrs, xattr_count,
|
||||
XATTR_SMACK_TRANSMUTE,
|
||||
TRANS_TRUE,
|
||||
TRANS_TRUE_SIZE
|
||||
))
|
||||
return -ENOMEM;
|
||||
rc = -ENOMEM;
|
||||
}
|
||||
}
|
||||
|
||||
issp->smk_flags |= SMK_INODE_INSTANT;
|
||||
issp->smk_flags |= (SMK_INODE_INSTANT | transflag);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
return xattr_dupval(xattrs, xattr_count,
|
||||
XATTR_SMACK_SUFFIX,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user