diff options
Diffstat (limited to 'security')
-rw-r--r-- | security/apparmor/domain.c | 4 | ||||
-rw-r--r-- | security/apparmor/file.c | 4 | ||||
-rw-r--r-- | security/apparmor/lsm.c | 6 | ||||
-rw-r--r-- | security/commoncap.c | 2 | ||||
-rw-r--r-- | security/integrity/ima/ima_api.c | 6 | ||||
-rw-r--r-- | security/integrity/ima/ima_crypto.c | 2 | ||||
-rw-r--r-- | security/integrity/ima/ima_main.c | 7 | ||||
-rw-r--r-- | security/integrity/ima/ima_policy.c | 11 | ||||
-rw-r--r-- | security/integrity/ima/ima_queue.c | 3 | ||||
-rw-r--r-- | security/selinux/avc.c | 19 | ||||
-rw-r--r-- | security/selinux/hooks.c | 10 | ||||
-rw-r--r-- | security/selinux/selinuxfs.c | 20 | ||||
-rw-r--r-- | security/smack/smack_lsm.c | 14 | ||||
-rw-r--r-- | security/tomoyo/securityfs_if.c | 2 |
14 files changed, 47 insertions, 63 deletions
diff --git a/security/apparmor/domain.c b/security/apparmor/domain.c index 60f0c76a27d3..859abdaac1ea 100644 --- a/security/apparmor/domain.c +++ b/security/apparmor/domain.c | |||
@@ -349,8 +349,8 @@ int apparmor_bprm_set_creds(struct linux_binprm *bprm) | |||
349 | unsigned int state; | 349 | unsigned int state; |
350 | struct file_perms perms = {}; | 350 | struct file_perms perms = {}; |
351 | struct path_cond cond = { | 351 | struct path_cond cond = { |
352 | bprm->file->f_path.dentry->d_inode->i_uid, | 352 | file_inode(bprm->file)->i_uid, |
353 | bprm->file->f_path.dentry->d_inode->i_mode | 353 | file_inode(bprm->file)->i_mode |
354 | }; | 354 | }; |
355 | const char *name = NULL, *target = NULL, *info = NULL; | 355 | const char *name = NULL, *target = NULL, *info = NULL; |
356 | int error = cap_bprm_set_creds(bprm); | 356 | int error = cap_bprm_set_creds(bprm); |
diff --git a/security/apparmor/file.c b/security/apparmor/file.c index cd21ec5b90af..fdaa50cb1876 100644 --- a/security/apparmor/file.c +++ b/security/apparmor/file.c | |||
@@ -449,8 +449,8 @@ int aa_file_perm(int op, struct aa_profile *profile, struct file *file, | |||
449 | u32 request) | 449 | u32 request) |
450 | { | 450 | { |
451 | struct path_cond cond = { | 451 | struct path_cond cond = { |
452 | .uid = file->f_path.dentry->d_inode->i_uid, | 452 | .uid = file_inode(file)->i_uid, |
453 | .mode = file->f_path.dentry->d_inode->i_mode | 453 | .mode = file_inode(file)->i_mode |
454 | }; | 454 | }; |
455 | 455 | ||
456 | return aa_path_perm(op, profile, &file->f_path, PATH_DELEGATE_DELETED, | 456 | return aa_path_perm(op, profile, &file->f_path, PATH_DELEGATE_DELETED, |
diff --git a/security/apparmor/lsm.c b/security/apparmor/lsm.c index 8c2a7f6b35e2..b21830eced41 100644 --- a/security/apparmor/lsm.c +++ b/security/apparmor/lsm.c | |||
@@ -379,7 +379,7 @@ static int apparmor_file_open(struct file *file, const struct cred *cred) | |||
379 | struct aa_profile *profile; | 379 | struct aa_profile *profile; |
380 | int error = 0; | 380 | int error = 0; |
381 | 381 | ||
382 | if (!mediated_filesystem(file->f_path.dentry->d_inode)) | 382 | if (!mediated_filesystem(file_inode(file))) |
383 | return 0; | 383 | return 0; |
384 | 384 | ||
385 | /* If in exec, permission is handled by bprm hooks. | 385 | /* If in exec, permission is handled by bprm hooks. |
@@ -394,7 +394,7 @@ static int apparmor_file_open(struct file *file, const struct cred *cred) | |||
394 | 394 | ||
395 | profile = aa_cred_profile(cred); | 395 | profile = aa_cred_profile(cred); |
396 | if (!unconfined(profile)) { | 396 | if (!unconfined(profile)) { |
397 | struct inode *inode = file->f_path.dentry->d_inode; | 397 | struct inode *inode = file_inode(file); |
398 | struct path_cond cond = { inode->i_uid, inode->i_mode }; | 398 | struct path_cond cond = { inode->i_uid, inode->i_mode }; |
399 | 399 | ||
400 | error = aa_path_perm(OP_OPEN, profile, &file->f_path, 0, | 400 | error = aa_path_perm(OP_OPEN, profile, &file->f_path, 0, |
@@ -432,7 +432,7 @@ static int common_file_perm(int op, struct file *file, u32 mask) | |||
432 | BUG_ON(!fprofile); | 432 | BUG_ON(!fprofile); |
433 | 433 | ||
434 | if (!file->f_path.mnt || | 434 | if (!file->f_path.mnt || |
435 | !mediated_filesystem(file->f_path.dentry->d_inode)) | 435 | !mediated_filesystem(file_inode(file))) |
436 | return 0; | 436 | return 0; |
437 | 437 | ||
438 | profile = __aa_current_profile(); | 438 | profile = __aa_current_profile(); |
diff --git a/security/commoncap.c b/security/commoncap.c index 7ee08c756d6b..c44b6fe6648e 100644 --- a/security/commoncap.c +++ b/security/commoncap.c | |||
@@ -440,7 +440,7 @@ static int get_file_caps(struct linux_binprm *bprm, bool *effective, bool *has_c | |||
440 | if (!file_caps_enabled) | 440 | if (!file_caps_enabled) |
441 | return 0; | 441 | return 0; |
442 | 442 | ||
443 | if (bprm->file->f_vfsmnt->mnt_flags & MNT_NOSUID) | 443 | if (bprm->file->f_path.mnt->mnt_flags & MNT_NOSUID) |
444 | return 0; | 444 | return 0; |
445 | 445 | ||
446 | dentry = dget(bprm->file->f_dentry); | 446 | dentry = dget(bprm->file->f_dentry); |
diff --git a/security/integrity/ima/ima_api.c b/security/integrity/ima/ima_api.c index d9030b29d84d..1c03e8f1e0e1 100644 --- a/security/integrity/ima/ima_api.c +++ b/security/integrity/ima/ima_api.c | |||
@@ -140,12 +140,12 @@ int ima_must_measure(struct inode *inode, int mask, int function) | |||
140 | int ima_collect_measurement(struct integrity_iint_cache *iint, | 140 | int ima_collect_measurement(struct integrity_iint_cache *iint, |
141 | struct file *file) | 141 | struct file *file) |
142 | { | 142 | { |
143 | struct inode *inode = file->f_dentry->d_inode; | 143 | struct inode *inode = file_inode(file); |
144 | const char *filename = file->f_dentry->d_name.name; | 144 | const char *filename = file->f_dentry->d_name.name; |
145 | int result = 0; | 145 | int result = 0; |
146 | 146 | ||
147 | if (!(iint->flags & IMA_COLLECTED)) { | 147 | if (!(iint->flags & IMA_COLLECTED)) { |
148 | u64 i_version = file->f_dentry->d_inode->i_version; | 148 | u64 i_version = file_inode(file)->i_version; |
149 | 149 | ||
150 | iint->ima_xattr.type = IMA_XATTR_DIGEST; | 150 | iint->ima_xattr.type = IMA_XATTR_DIGEST; |
151 | result = ima_calc_file_hash(file, iint->ima_xattr.digest); | 151 | result = ima_calc_file_hash(file, iint->ima_xattr.digest); |
@@ -182,7 +182,7 @@ void ima_store_measurement(struct integrity_iint_cache *iint, | |||
182 | const char *op = "add_template_measure"; | 182 | const char *op = "add_template_measure"; |
183 | const char *audit_cause = "ENOMEM"; | 183 | const char *audit_cause = "ENOMEM"; |
184 | int result = -ENOMEM; | 184 | int result = -ENOMEM; |
185 | struct inode *inode = file->f_dentry->d_inode; | 185 | struct inode *inode = file_inode(file); |
186 | struct ima_template_entry *entry; | 186 | struct ima_template_entry *entry; |
187 | int violation = 0; | 187 | int violation = 0; |
188 | 188 | ||
diff --git a/security/integrity/ima/ima_crypto.c b/security/integrity/ima/ima_crypto.c index b691e0f3830c..a02e0791cf15 100644 --- a/security/integrity/ima/ima_crypto.c +++ b/security/integrity/ima/ima_crypto.c | |||
@@ -66,7 +66,7 @@ int ima_calc_file_hash(struct file *file, char *digest) | |||
66 | file->f_mode |= FMODE_READ; | 66 | file->f_mode |= FMODE_READ; |
67 | read = 1; | 67 | read = 1; |
68 | } | 68 | } |
69 | i_size = i_size_read(file->f_dentry->d_inode); | 69 | i_size = i_size_read(file_inode(file)); |
70 | while (offset < i_size) { | 70 | while (offset < i_size) { |
71 | int rbuf_len; | 71 | int rbuf_len; |
72 | 72 | ||
diff --git a/security/integrity/ima/ima_main.c b/security/integrity/ima/ima_main.c index 5127afcc4b89..3b3b7e6bf8da 100644 --- a/security/integrity/ima/ima_main.c +++ b/security/integrity/ima/ima_main.c | |||
@@ -126,7 +126,7 @@ static void ima_check_last_writer(struct integrity_iint_cache *iint, | |||
126 | */ | 126 | */ |
127 | void ima_file_free(struct file *file) | 127 | void ima_file_free(struct file *file) |
128 | { | 128 | { |
129 | struct inode *inode = file->f_dentry->d_inode; | 129 | struct inode *inode = file_inode(file); |
130 | struct integrity_iint_cache *iint; | 130 | struct integrity_iint_cache *iint; |
131 | 131 | ||
132 | if (!iint_initialized || !S_ISREG(inode->i_mode)) | 132 | if (!iint_initialized || !S_ISREG(inode->i_mode)) |
@@ -142,7 +142,7 @@ void ima_file_free(struct file *file) | |||
142 | static int process_measurement(struct file *file, const char *filename, | 142 | static int process_measurement(struct file *file, const char *filename, |
143 | int mask, int function) | 143 | int mask, int function) |
144 | { | 144 | { |
145 | struct inode *inode = file->f_dentry->d_inode; | 145 | struct inode *inode = file_inode(file); |
146 | struct integrity_iint_cache *iint; | 146 | struct integrity_iint_cache *iint; |
147 | char *pathbuf = NULL; | 147 | char *pathbuf = NULL; |
148 | const char *pathname = NULL; | 148 | const char *pathname = NULL; |
@@ -284,7 +284,8 @@ int ima_module_check(struct file *file) | |||
284 | { | 284 | { |
285 | if (!file) { | 285 | if (!file) { |
286 | #ifndef CONFIG_MODULE_SIG_FORCE | 286 | #ifndef CONFIG_MODULE_SIG_FORCE |
287 | if (ima_appraise & IMA_APPRAISE_MODULES) | 287 | if ((ima_appraise & IMA_APPRAISE_MODULES) && |
288 | (ima_appraise & IMA_APPRAISE_ENFORCE)) | ||
288 | return -EACCES; /* INTEGRITY_UNKNOWN */ | 289 | return -EACCES; /* INTEGRITY_UNKNOWN */ |
289 | #endif | 290 | #endif |
290 | return 0; /* We rely on module signature checking */ | 291 | return 0; /* We rely on module signature checking */ |
diff --git a/security/integrity/ima/ima_policy.c b/security/integrity/ima/ima_policy.c index b27535a13a79..399433ad614e 100644 --- a/security/integrity/ima/ima_policy.c +++ b/security/integrity/ima/ima_policy.c | |||
@@ -176,7 +176,7 @@ static bool ima_match_rules(struct ima_rule_entry *rule, | |||
176 | && rule->fsmagic != inode->i_sb->s_magic) | 176 | && rule->fsmagic != inode->i_sb->s_magic) |
177 | return false; | 177 | return false; |
178 | if ((rule->flags & IMA_FSUUID) && | 178 | if ((rule->flags & IMA_FSUUID) && |
179 | memcmp(rule->fsuuid, inode->i_sb->s_uuid, sizeof(rule->fsuuid))) | 179 | memcmp(rule->fsuuid, inode->i_sb->s_uuid, sizeof(rule->fsuuid))) |
180 | return false; | 180 | return false; |
181 | if ((rule->flags & IMA_UID) && !uid_eq(rule->uid, cred->uid)) | 181 | if ((rule->flags & IMA_UID) && !uid_eq(rule->uid, cred->uid)) |
182 | return false; | 182 | return false; |
@@ -530,14 +530,15 @@ static int ima_parse_rule(char *rule, struct ima_rule_entry *entry) | |||
530 | ima_log_string(ab, "fsuuid", args[0].from); | 530 | ima_log_string(ab, "fsuuid", args[0].from); |
531 | 531 | ||
532 | if (memchr_inv(entry->fsuuid, 0x00, | 532 | if (memchr_inv(entry->fsuuid, 0x00, |
533 | sizeof(entry->fsuuid))) { | 533 | sizeof(entry->fsuuid))) { |
534 | result = -EINVAL; | 534 | result = -EINVAL; |
535 | break; | 535 | break; |
536 | } | 536 | } |
537 | 537 | ||
538 | part_pack_uuid(args[0].from, entry->fsuuid); | 538 | result = blk_part_pack_uuid(args[0].from, |
539 | entry->flags |= IMA_FSUUID; | 539 | entry->fsuuid); |
540 | result = 0; | 540 | if (!result) |
541 | entry->flags |= IMA_FSUUID; | ||
541 | break; | 542 | break; |
542 | case Opt_uid: | 543 | case Opt_uid: |
543 | ima_log_string(ab, "uid", args[0].from); | 544 | ima_log_string(ab, "uid", args[0].from); |
diff --git a/security/integrity/ima/ima_queue.c b/security/integrity/ima/ima_queue.c index 55a6271bce7a..ff63fe00c195 100644 --- a/security/integrity/ima/ima_queue.c +++ b/security/integrity/ima/ima_queue.c | |||
@@ -45,12 +45,11 @@ static struct ima_queue_entry *ima_lookup_digest_entry(u8 *digest_value) | |||
45 | { | 45 | { |
46 | struct ima_queue_entry *qe, *ret = NULL; | 46 | struct ima_queue_entry *qe, *ret = NULL; |
47 | unsigned int key; | 47 | unsigned int key; |
48 | struct hlist_node *pos; | ||
49 | int rc; | 48 | int rc; |
50 | 49 | ||
51 | key = ima_hash_key(digest_value); | 50 | key = ima_hash_key(digest_value); |
52 | rcu_read_lock(); | 51 | rcu_read_lock(); |
53 | hlist_for_each_entry_rcu(qe, pos, &ima_htable.queue[key], hnext) { | 52 | hlist_for_each_entry_rcu(qe, &ima_htable.queue[key], hnext) { |
54 | rc = memcmp(qe->entry->digest, digest_value, IMA_DIGEST_SIZE); | 53 | rc = memcmp(qe->entry->digest, digest_value, IMA_DIGEST_SIZE); |
55 | if (rc == 0) { | 54 | if (rc == 0) { |
56 | ret = qe; | 55 | ret = qe; |
diff --git a/security/selinux/avc.c b/security/selinux/avc.c index 4d3fab47e643..dad36a6ab45f 100644 --- a/security/selinux/avc.c +++ b/security/selinux/avc.c | |||
@@ -188,11 +188,9 @@ int avc_get_hash_stats(char *page) | |||
188 | for (i = 0; i < AVC_CACHE_SLOTS; i++) { | 188 | for (i = 0; i < AVC_CACHE_SLOTS; i++) { |
189 | head = &avc_cache.slots[i]; | 189 | head = &avc_cache.slots[i]; |
190 | if (!hlist_empty(head)) { | 190 | if (!hlist_empty(head)) { |
191 | struct hlist_node *next; | ||
192 | |||
193 | slots_used++; | 191 | slots_used++; |
194 | chain_len = 0; | 192 | chain_len = 0; |
195 | hlist_for_each_entry_rcu(node, next, head, list) | 193 | hlist_for_each_entry_rcu(node, head, list) |
196 | chain_len++; | 194 | chain_len++; |
197 | if (chain_len > max_chain_len) | 195 | if (chain_len > max_chain_len) |
198 | max_chain_len = chain_len; | 196 | max_chain_len = chain_len; |
@@ -241,7 +239,6 @@ static inline int avc_reclaim_node(void) | |||
241 | int hvalue, try, ecx; | 239 | int hvalue, try, ecx; |
242 | unsigned long flags; | 240 | unsigned long flags; |
243 | struct hlist_head *head; | 241 | struct hlist_head *head; |
244 | struct hlist_node *next; | ||
245 | spinlock_t *lock; | 242 | spinlock_t *lock; |
246 | 243 | ||
247 | for (try = 0, ecx = 0; try < AVC_CACHE_SLOTS; try++) { | 244 | for (try = 0, ecx = 0; try < AVC_CACHE_SLOTS; try++) { |
@@ -253,7 +250,7 @@ static inline int avc_reclaim_node(void) | |||
253 | continue; | 250 | continue; |
254 | 251 | ||
255 | rcu_read_lock(); | 252 | rcu_read_lock(); |
256 | hlist_for_each_entry(node, next, head, list) { | 253 | hlist_for_each_entry(node, head, list) { |
257 | avc_node_delete(node); | 254 | avc_node_delete(node); |
258 | avc_cache_stats_incr(reclaims); | 255 | avc_cache_stats_incr(reclaims); |
259 | ecx++; | 256 | ecx++; |
@@ -301,11 +298,10 @@ static inline struct avc_node *avc_search_node(u32 ssid, u32 tsid, u16 tclass) | |||
301 | struct avc_node *node, *ret = NULL; | 298 | struct avc_node *node, *ret = NULL; |
302 | int hvalue; | 299 | int hvalue; |
303 | struct hlist_head *head; | 300 | struct hlist_head *head; |
304 | struct hlist_node *next; | ||
305 | 301 | ||
306 | hvalue = avc_hash(ssid, tsid, tclass); | 302 | hvalue = avc_hash(ssid, tsid, tclass); |
307 | head = &avc_cache.slots[hvalue]; | 303 | head = &avc_cache.slots[hvalue]; |
308 | hlist_for_each_entry_rcu(node, next, head, list) { | 304 | hlist_for_each_entry_rcu(node, head, list) { |
309 | if (ssid == node->ae.ssid && | 305 | if (ssid == node->ae.ssid && |
310 | tclass == node->ae.tclass && | 306 | tclass == node->ae.tclass && |
311 | tsid == node->ae.tsid) { | 307 | tsid == node->ae.tsid) { |
@@ -394,7 +390,6 @@ static struct avc_node *avc_insert(u32 ssid, u32 tsid, u16 tclass, struct av_dec | |||
394 | node = avc_alloc_node(); | 390 | node = avc_alloc_node(); |
395 | if (node) { | 391 | if (node) { |
396 | struct hlist_head *head; | 392 | struct hlist_head *head; |
397 | struct hlist_node *next; | ||
398 | spinlock_t *lock; | 393 | spinlock_t *lock; |
399 | 394 | ||
400 | hvalue = avc_hash(ssid, tsid, tclass); | 395 | hvalue = avc_hash(ssid, tsid, tclass); |
@@ -404,7 +399,7 @@ static struct avc_node *avc_insert(u32 ssid, u32 tsid, u16 tclass, struct av_dec | |||
404 | lock = &avc_cache.slots_lock[hvalue]; | 399 | lock = &avc_cache.slots_lock[hvalue]; |
405 | 400 | ||
406 | spin_lock_irqsave(lock, flag); | 401 | spin_lock_irqsave(lock, flag); |
407 | hlist_for_each_entry(pos, next, head, list) { | 402 | hlist_for_each_entry(pos, head, list) { |
408 | if (pos->ae.ssid == ssid && | 403 | if (pos->ae.ssid == ssid && |
409 | pos->ae.tsid == tsid && | 404 | pos->ae.tsid == tsid && |
410 | pos->ae.tclass == tclass) { | 405 | pos->ae.tclass == tclass) { |
@@ -541,7 +536,6 @@ static int avc_update_node(u32 event, u32 perms, u32 ssid, u32 tsid, u16 tclass, | |||
541 | unsigned long flag; | 536 | unsigned long flag; |
542 | struct avc_node *pos, *node, *orig = NULL; | 537 | struct avc_node *pos, *node, *orig = NULL; |
543 | struct hlist_head *head; | 538 | struct hlist_head *head; |
544 | struct hlist_node *next; | ||
545 | spinlock_t *lock; | 539 | spinlock_t *lock; |
546 | 540 | ||
547 | node = avc_alloc_node(); | 541 | node = avc_alloc_node(); |
@@ -558,7 +552,7 @@ static int avc_update_node(u32 event, u32 perms, u32 ssid, u32 tsid, u16 tclass, | |||
558 | 552 | ||
559 | spin_lock_irqsave(lock, flag); | 553 | spin_lock_irqsave(lock, flag); |
560 | 554 | ||
561 | hlist_for_each_entry(pos, next, head, list) { | 555 | hlist_for_each_entry(pos, head, list) { |
562 | if (ssid == pos->ae.ssid && | 556 | if (ssid == pos->ae.ssid && |
563 | tsid == pos->ae.tsid && | 557 | tsid == pos->ae.tsid && |
564 | tclass == pos->ae.tclass && | 558 | tclass == pos->ae.tclass && |
@@ -614,7 +608,6 @@ out: | |||
614 | static void avc_flush(void) | 608 | static void avc_flush(void) |
615 | { | 609 | { |
616 | struct hlist_head *head; | 610 | struct hlist_head *head; |
617 | struct hlist_node *next; | ||
618 | struct avc_node *node; | 611 | struct avc_node *node; |
619 | spinlock_t *lock; | 612 | spinlock_t *lock; |
620 | unsigned long flag; | 613 | unsigned long flag; |
@@ -630,7 +623,7 @@ static void avc_flush(void) | |||
630 | * prevent RCU grace periods from ending. | 623 | * prevent RCU grace periods from ending. |
631 | */ | 624 | */ |
632 | rcu_read_lock(); | 625 | rcu_read_lock(); |
633 | hlist_for_each_entry(node, next, head, list) | 626 | hlist_for_each_entry(node, head, list) |
634 | avc_node_delete(node); | 627 | avc_node_delete(node); |
635 | rcu_read_unlock(); | 628 | rcu_read_unlock(); |
636 | spin_unlock_irqrestore(lock, flag); | 629 | spin_unlock_irqrestore(lock, flag); |
diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index ef26e9611ffb..84b591711eec 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(); |
@@ -3218,7 +3218,7 @@ static int selinux_file_open(struct file *file, const struct cred *cred) | |||
3218 | struct inode_security_struct *isec; | 3218 | struct inode_security_struct *isec; |
3219 | 3219 | ||
3220 | fsec = file->f_security; | 3220 | fsec = file->f_security; |
3221 | isec = file->f_path.dentry->d_inode->i_security; | 3221 | isec = file_inode(file)->i_security; |
3222 | /* | 3222 | /* |
3223 | * Save inode label and policy sequence number | 3223 | * Save inode label and policy sequence number |
3224 | * at open-time so that selinux_file_permission | 3224 | * at open-time so that selinux_file_permission |
diff --git a/security/selinux/selinuxfs.c b/security/selinux/selinuxfs.c index 3a6e8731646c..ff427733c290 100644 --- a/security/selinux/selinuxfs.c +++ b/security/selinux/selinuxfs.c | |||
@@ -202,7 +202,7 @@ static ssize_t sel_read_handle_unknown(struct file *filp, char __user *buf, | |||
202 | { | 202 | { |
203 | char tmpbuf[TMPBUFLEN]; | 203 | char tmpbuf[TMPBUFLEN]; |
204 | ssize_t length; | 204 | ssize_t length; |
205 | ino_t ino = filp->f_path.dentry->d_inode->i_ino; | 205 | ino_t ino = file_inode(filp)->i_ino; |
206 | int handle_unknown = (ino == SEL_REJECT_UNKNOWN) ? | 206 | int handle_unknown = (ino == SEL_REJECT_UNKNOWN) ? |
207 | security_get_reject_unknown() : !security_get_allow_unknown(); | 207 | security_get_reject_unknown() : !security_get_allow_unknown(); |
208 | 208 | ||
@@ -671,7 +671,7 @@ static ssize_t (*write_op[])(struct file *, char *, size_t) = { | |||
671 | 671 | ||
672 | static ssize_t selinux_transaction_write(struct file *file, const char __user *buf, size_t size, loff_t *pos) | 672 | static ssize_t selinux_transaction_write(struct file *file, const char __user *buf, size_t size, loff_t *pos) |
673 | { | 673 | { |
674 | ino_t ino = file->f_path.dentry->d_inode->i_ino; | 674 | ino_t ino = file_inode(file)->i_ino; |
675 | char *data; | 675 | char *data; |
676 | ssize_t rv; | 676 | ssize_t rv; |
677 | 677 | ||
@@ -1042,8 +1042,7 @@ static ssize_t sel_read_bool(struct file *filep, char __user *buf, | |||
1042 | ssize_t length; | 1042 | ssize_t length; |
1043 | ssize_t ret; | 1043 | ssize_t ret; |
1044 | int cur_enforcing; | 1044 | int cur_enforcing; |
1045 | struct inode *inode = filep->f_path.dentry->d_inode; | 1045 | unsigned index = file_inode(filep)->i_ino & SEL_INO_MASK; |
1046 | unsigned index = inode->i_ino & SEL_INO_MASK; | ||
1047 | const char *name = filep->f_path.dentry->d_name.name; | 1046 | const char *name = filep->f_path.dentry->d_name.name; |
1048 | 1047 | ||
1049 | mutex_lock(&sel_mutex); | 1048 | mutex_lock(&sel_mutex); |
@@ -1077,8 +1076,7 @@ static ssize_t sel_write_bool(struct file *filep, const char __user *buf, | |||
1077 | char *page = NULL; | 1076 | char *page = NULL; |
1078 | ssize_t length; | 1077 | ssize_t length; |
1079 | int new_value; | 1078 | int new_value; |
1080 | struct inode *inode = filep->f_path.dentry->d_inode; | 1079 | unsigned index = file_inode(filep)->i_ino & SEL_INO_MASK; |
1081 | unsigned index = inode->i_ino & SEL_INO_MASK; | ||
1082 | const char *name = filep->f_path.dentry->d_name.name; | 1080 | const char *name = filep->f_path.dentry->d_name.name; |
1083 | 1081 | ||
1084 | mutex_lock(&sel_mutex); | 1082 | mutex_lock(&sel_mutex); |
@@ -1486,13 +1484,11 @@ static int sel_make_avc_files(struct dentry *dir) | |||
1486 | static ssize_t sel_read_initcon(struct file *file, char __user *buf, | 1484 | static ssize_t sel_read_initcon(struct file *file, char __user *buf, |
1487 | size_t count, loff_t *ppos) | 1485 | size_t count, loff_t *ppos) |
1488 | { | 1486 | { |
1489 | struct inode *inode; | ||
1490 | char *con; | 1487 | char *con; |
1491 | u32 sid, len; | 1488 | u32 sid, len; |
1492 | ssize_t ret; | 1489 | ssize_t ret; |
1493 | 1490 | ||
1494 | inode = file->f_path.dentry->d_inode; | 1491 | sid = file_inode(file)->i_ino&SEL_INO_MASK; |
1495 | sid = inode->i_ino&SEL_INO_MASK; | ||
1496 | ret = security_sid_to_context(sid, &con, &len); | 1492 | ret = security_sid_to_context(sid, &con, &len); |
1497 | if (ret) | 1493 | if (ret) |
1498 | return ret; | 1494 | return ret; |
@@ -1553,7 +1549,7 @@ static inline u32 sel_ino_to_perm(unsigned long ino) | |||
1553 | static ssize_t sel_read_class(struct file *file, char __user *buf, | 1549 | static ssize_t sel_read_class(struct file *file, char __user *buf, |
1554 | size_t count, loff_t *ppos) | 1550 | size_t count, loff_t *ppos) |
1555 | { | 1551 | { |
1556 | unsigned long ino = file->f_path.dentry->d_inode->i_ino; | 1552 | unsigned long ino = file_inode(file)->i_ino; |
1557 | char res[TMPBUFLEN]; | 1553 | char res[TMPBUFLEN]; |
1558 | ssize_t len = snprintf(res, sizeof(res), "%d", sel_ino_to_class(ino)); | 1554 | ssize_t len = snprintf(res, sizeof(res), "%d", sel_ino_to_class(ino)); |
1559 | return simple_read_from_buffer(buf, count, ppos, res, len); | 1555 | return simple_read_from_buffer(buf, count, ppos, res, len); |
@@ -1567,7 +1563,7 @@ static const struct file_operations sel_class_ops = { | |||
1567 | static ssize_t sel_read_perm(struct file *file, char __user *buf, | 1563 | static ssize_t sel_read_perm(struct file *file, char __user *buf, |
1568 | size_t count, loff_t *ppos) | 1564 | size_t count, loff_t *ppos) |
1569 | { | 1565 | { |
1570 | unsigned long ino = file->f_path.dentry->d_inode->i_ino; | 1566 | unsigned long ino = file_inode(file)->i_ino; |
1571 | char res[TMPBUFLEN]; | 1567 | char res[TMPBUFLEN]; |
1572 | ssize_t len = snprintf(res, sizeof(res), "%d", sel_ino_to_perm(ino)); | 1568 | ssize_t len = snprintf(res, sizeof(res), "%d", sel_ino_to_perm(ino)); |
1573 | return simple_read_from_buffer(buf, count, ppos, res, len); | 1569 | return simple_read_from_buffer(buf, count, ppos, res, len); |
@@ -1584,7 +1580,7 @@ static ssize_t sel_read_policycap(struct file *file, char __user *buf, | |||
1584 | int value; | 1580 | int value; |
1585 | char tmpbuf[TMPBUFLEN]; | 1581 | char tmpbuf[TMPBUFLEN]; |
1586 | ssize_t length; | 1582 | ssize_t length; |
1587 | unsigned long i_ino = file->f_path.dentry->d_inode->i_ino; | 1583 | unsigned long i_ino = file_inode(file)->i_ino; |
1588 | 1584 | ||
1589 | value = security_policycap_supported(i_ino & SEL_INO_MASK); | 1585 | value = security_policycap_supported(i_ino & SEL_INO_MASK); |
1590 | length = scnprintf(tmpbuf, TMPBUFLEN, "%d", value); | 1586 | length = scnprintf(tmpbuf, TMPBUFLEN, "%d", value); |
diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c index 38be92ce901e..fa64740abb59 100644 --- a/security/smack/smack_lsm.c +++ b/security/smack/smack_lsm.c | |||
@@ -456,7 +456,7 @@ static int smack_sb_umount(struct vfsmount *mnt, int flags) | |||
456 | */ | 456 | */ |
457 | static int smack_bprm_set_creds(struct linux_binprm *bprm) | 457 | static int smack_bprm_set_creds(struct linux_binprm *bprm) |
458 | { | 458 | { |
459 | struct inode *inode = bprm->file->f_path.dentry->d_inode; | 459 | struct inode *inode = file_inode(bprm->file); |
460 | struct task_smack *bsp = bprm->cred->security; | 460 | struct task_smack *bsp = bprm->cred->security; |
461 | struct inode_smack *isp; | 461 | struct inode_smack *isp; |
462 | int rc; | 462 | int rc; |
@@ -1187,21 +1187,15 @@ static int smack_mmap_file(struct file *file, | |||
1187 | char *msmack; | 1187 | char *msmack; |
1188 | char *osmack; | 1188 | char *osmack; |
1189 | struct inode_smack *isp; | 1189 | struct inode_smack *isp; |
1190 | struct dentry *dp; | ||
1191 | int may; | 1190 | int may; |
1192 | int mmay; | 1191 | int mmay; |
1193 | int tmay; | 1192 | int tmay; |
1194 | int rc; | 1193 | int rc; |
1195 | 1194 | ||
1196 | if (file == NULL || file->f_dentry == NULL) | 1195 | if (file == NULL) |
1197 | return 0; | ||
1198 | |||
1199 | dp = file->f_dentry; | ||
1200 | |||
1201 | if (dp->d_inode == NULL) | ||
1202 | return 0; | 1196 | return 0; |
1203 | 1197 | ||
1204 | isp = dp->d_inode->i_security; | 1198 | isp = file_inode(file)->i_security; |
1205 | if (isp->smk_mmap == NULL) | 1199 | if (isp->smk_mmap == NULL) |
1206 | return 0; | 1200 | return 0; |
1207 | msmack = isp->smk_mmap; | 1201 | msmack = isp->smk_mmap; |
@@ -1359,7 +1353,7 @@ static int smack_file_receive(struct file *file) | |||
1359 | */ | 1353 | */ |
1360 | static int smack_file_open(struct file *file, const struct cred *cred) | 1354 | static int smack_file_open(struct file *file, const struct cred *cred) |
1361 | { | 1355 | { |
1362 | struct inode_smack *isp = file->f_path.dentry->d_inode->i_security; | 1356 | struct inode_smack *isp = file_inode(file)->i_security; |
1363 | 1357 | ||
1364 | file->f_security = isp->smk_inode; | 1358 | file->f_security = isp->smk_inode; |
1365 | 1359 | ||
diff --git a/security/tomoyo/securityfs_if.c b/security/tomoyo/securityfs_if.c index 8592f2fc6ebb..fcf32783b66b 100644 --- a/security/tomoyo/securityfs_if.c +++ b/security/tomoyo/securityfs_if.c | |||
@@ -135,7 +135,7 @@ static const struct file_operations tomoyo_self_operations = { | |||
135 | */ | 135 | */ |
136 | static int tomoyo_open(struct inode *inode, struct file *file) | 136 | static int tomoyo_open(struct inode *inode, struct file *file) |
137 | { | 137 | { |
138 | const int key = ((u8 *) file->f_path.dentry->d_inode->i_private) | 138 | const int key = ((u8 *) file_inode(file)->i_private) |
139 | - ((u8 *) NULL); | 139 | - ((u8 *) NULL); |
140 | return tomoyo_open_control(key, file); | 140 | return tomoyo_open_control(key, file); |
141 | } | 141 | } |