diff options
Diffstat (limited to 'security/selinux/hooks.c')
-rw-r--r-- | security/selinux/hooks.c | 19 |
1 files changed, 5 insertions, 14 deletions
diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index ef26e9611ffb..2fa28c88900c 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c | |||
@@ -1528,7 +1528,7 @@ static int file_has_perm(const struct cred *cred, | |||
1528 | u32 av) | 1528 | u32 av) |
1529 | { | 1529 | { |
1530 | struct file_security_struct *fsec = file->f_security; | 1530 | struct file_security_struct *fsec = file->f_security; |
1531 | struct inode *inode = file->f_path.dentry->d_inode; | 1531 | struct inode *inode = file_inode(file); |
1532 | struct common_audit_data ad; | 1532 | struct common_audit_data ad; |
1533 | u32 sid = cred_sid(cred); | 1533 | u32 sid = cred_sid(cred); |
1534 | int rc; | 1534 | int rc; |
@@ -1957,7 +1957,7 @@ static int selinux_bprm_set_creds(struct linux_binprm *bprm) | |||
1957 | struct task_security_struct *new_tsec; | 1957 | struct task_security_struct *new_tsec; |
1958 | struct inode_security_struct *isec; | 1958 | struct inode_security_struct *isec; |
1959 | struct common_audit_data ad; | 1959 | struct common_audit_data ad; |
1960 | struct inode *inode = bprm->file->f_path.dentry->d_inode; | 1960 | struct inode *inode = file_inode(bprm->file); |
1961 | int rc; | 1961 | int rc; |
1962 | 1962 | ||
1963 | rc = cap_bprm_set_creds(bprm); | 1963 | rc = cap_bprm_set_creds(bprm); |
@@ -2929,7 +2929,7 @@ static void selinux_inode_getsecid(const struct inode *inode, u32 *secid) | |||
2929 | static int selinux_revalidate_file_permission(struct file *file, int mask) | 2929 | static int selinux_revalidate_file_permission(struct file *file, int mask) |
2930 | { | 2930 | { |
2931 | const struct cred *cred = current_cred(); | 2931 | const struct cred *cred = current_cred(); |
2932 | struct inode *inode = file->f_path.dentry->d_inode; | 2932 | struct inode *inode = file_inode(file); |
2933 | 2933 | ||
2934 | /* file_mask_to_av won't add FILE__WRITE if MAY_APPEND is set */ | 2934 | /* file_mask_to_av won't add FILE__WRITE if MAY_APPEND is set */ |
2935 | if ((file->f_flags & O_APPEND) && (mask & MAY_WRITE)) | 2935 | if ((file->f_flags & O_APPEND) && (mask & MAY_WRITE)) |
@@ -2941,7 +2941,7 @@ static int selinux_revalidate_file_permission(struct file *file, int mask) | |||
2941 | 2941 | ||
2942 | static int selinux_file_permission(struct file *file, int mask) | 2942 | static int selinux_file_permission(struct file *file, int mask) |
2943 | { | 2943 | { |
2944 | struct inode *inode = file->f_path.dentry->d_inode; | 2944 | struct inode *inode = file_inode(file); |
2945 | struct file_security_struct *fsec = file->f_security; | 2945 | struct file_security_struct *fsec = file->f_security; |
2946 | struct inode_security_struct *isec = inode->i_security; | 2946 | struct inode_security_struct *isec = inode->i_security; |
2947 | u32 sid = current_sid(); | 2947 | u32 sid = current_sid(); |
@@ -3135,11 +3135,6 @@ static int selinux_file_fcntl(struct file *file, unsigned int cmd, | |||
3135 | 3135 | ||
3136 | switch (cmd) { | 3136 | switch (cmd) { |
3137 | case F_SETFL: | 3137 | case F_SETFL: |
3138 | if (!file->f_path.dentry || !file->f_path.dentry->d_inode) { | ||
3139 | err = -EINVAL; | ||
3140 | break; | ||
3141 | } | ||
3142 | |||
3143 | if ((file->f_flags & O_APPEND) && !(arg & O_APPEND)) { | 3138 | if ((file->f_flags & O_APPEND) && !(arg & O_APPEND)) { |
3144 | err = file_has_perm(cred, file, FILE__WRITE); | 3139 | err = file_has_perm(cred, file, FILE__WRITE); |
3145 | break; | 3140 | break; |
@@ -3162,10 +3157,6 @@ static int selinux_file_fcntl(struct file *file, unsigned int cmd, | |||
3162 | case F_SETLK64: | 3157 | case F_SETLK64: |
3163 | case F_SETLKW64: | 3158 | case F_SETLKW64: |
3164 | #endif | 3159 | #endif |
3165 | if (!file->f_path.dentry || !file->f_path.dentry->d_inode) { | ||
3166 | err = -EINVAL; | ||
3167 | break; | ||
3168 | } | ||
3169 | err = file_has_perm(cred, file, FILE__LOCK); | 3160 | err = file_has_perm(cred, file, FILE__LOCK); |
3170 | break; | 3161 | break; |
3171 | } | 3162 | } |
@@ -3218,7 +3209,7 @@ static int selinux_file_open(struct file *file, const struct cred *cred) | |||
3218 | struct inode_security_struct *isec; | 3209 | struct inode_security_struct *isec; |
3219 | 3210 | ||
3220 | fsec = file->f_security; | 3211 | fsec = file->f_security; |
3221 | isec = file->f_path.dentry->d_inode->i_security; | 3212 | isec = file_inode(file)->i_security; |
3222 | /* | 3213 | /* |
3223 | * Save inode label and policy sequence number | 3214 | * Save inode label and policy sequence number |
3224 | * at open-time so that selinux_file_permission | 3215 | * at open-time so that selinux_file_permission |