diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2015-04-26 18:48:49 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-04-26 20:22:07 -0400 |
commit | 9ec3a646fe09970f801ab15e0f1694060b9f19af (patch) | |
tree | 697058ca7e1671eda180a3ccc62445686fbc1a31 /security/security.c | |
parent | c8b3fd0ce313443731e8fd6d5a541085eb465f99 (diff) | |
parent | 3cab989afd8d8d1bc3d99fef0e7ed87c31e7b647 (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
Pull fourth vfs update from Al Viro:
"d_inode() annotations from David Howells (sat in for-next since before
the beginning of merge window) + four assorted fixes"
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs:
RCU pathwalk breakage when running into a symlink overmounting something
fix I_DIO_WAKEUP definition
direct-io: only inc/dec inode->i_dio_count for file systems
fs/9p: fix readdir()
VFS: assorted d_backing_inode() annotations
VFS: fs/inode.c helpers: d_inode() annotations
VFS: fs/cachefiles: d_backing_inode() annotations
VFS: fs library helpers: d_inode() annotations
VFS: assorted weird filesystems: d_inode() annotations
VFS: normal filesystems (and lustre): d_inode() annotations
VFS: security/: d_inode() annotations
VFS: security/: d_backing_inode() annotations
VFS: net/: d_inode() annotations
VFS: net/unix: d_backing_inode() annotations
VFS: kernel/: d_inode() annotations
VFS: audit: d_backing_inode() annotations
VFS: Fix up some ->d_inode accesses in the chelsio driver
VFS: Cachefiles should perform fs modifications on the top layer only
VFS: AF_UNIX sockets should call mknod on the top layer only
Diffstat (limited to 'security/security.c')
-rw-r--r-- | security/security.c | 50 |
1 files changed, 25 insertions, 25 deletions
diff --git a/security/security.c b/security/security.c index 730ac65a5737..8e9b1f4b9b45 100644 --- a/security/security.c +++ b/security/security.c | |||
@@ -410,7 +410,7 @@ EXPORT_SYMBOL(security_old_inode_init_security); | |||
410 | int security_path_mknod(struct path *dir, struct dentry *dentry, umode_t mode, | 410 | int security_path_mknod(struct path *dir, struct dentry *dentry, umode_t mode, |
411 | unsigned int dev) | 411 | unsigned int dev) |
412 | { | 412 | { |
413 | if (unlikely(IS_PRIVATE(dir->dentry->d_inode))) | 413 | if (unlikely(IS_PRIVATE(d_backing_inode(dir->dentry)))) |
414 | return 0; | 414 | return 0; |
415 | return security_ops->path_mknod(dir, dentry, mode, dev); | 415 | return security_ops->path_mknod(dir, dentry, mode, dev); |
416 | } | 416 | } |
@@ -418,7 +418,7 @@ EXPORT_SYMBOL(security_path_mknod); | |||
418 | 418 | ||
419 | int security_path_mkdir(struct path *dir, struct dentry *dentry, umode_t mode) | 419 | int security_path_mkdir(struct path *dir, struct dentry *dentry, umode_t mode) |
420 | { | 420 | { |
421 | if (unlikely(IS_PRIVATE(dir->dentry->d_inode))) | 421 | if (unlikely(IS_PRIVATE(d_backing_inode(dir->dentry)))) |
422 | return 0; | 422 | return 0; |
423 | return security_ops->path_mkdir(dir, dentry, mode); | 423 | return security_ops->path_mkdir(dir, dentry, mode); |
424 | } | 424 | } |
@@ -426,14 +426,14 @@ EXPORT_SYMBOL(security_path_mkdir); | |||
426 | 426 | ||
427 | int security_path_rmdir(struct path *dir, struct dentry *dentry) | 427 | int security_path_rmdir(struct path *dir, struct dentry *dentry) |
428 | { | 428 | { |
429 | if (unlikely(IS_PRIVATE(dir->dentry->d_inode))) | 429 | if (unlikely(IS_PRIVATE(d_backing_inode(dir->dentry)))) |
430 | return 0; | 430 | return 0; |
431 | return security_ops->path_rmdir(dir, dentry); | 431 | return security_ops->path_rmdir(dir, dentry); |
432 | } | 432 | } |
433 | 433 | ||
434 | int security_path_unlink(struct path *dir, struct dentry *dentry) | 434 | int security_path_unlink(struct path *dir, struct dentry *dentry) |
435 | { | 435 | { |
436 | if (unlikely(IS_PRIVATE(dir->dentry->d_inode))) | 436 | if (unlikely(IS_PRIVATE(d_backing_inode(dir->dentry)))) |
437 | return 0; | 437 | return 0; |
438 | return security_ops->path_unlink(dir, dentry); | 438 | return security_ops->path_unlink(dir, dentry); |
439 | } | 439 | } |
@@ -442,7 +442,7 @@ EXPORT_SYMBOL(security_path_unlink); | |||
442 | int security_path_symlink(struct path *dir, struct dentry *dentry, | 442 | int security_path_symlink(struct path *dir, struct dentry *dentry, |
443 | const char *old_name) | 443 | const char *old_name) |
444 | { | 444 | { |
445 | if (unlikely(IS_PRIVATE(dir->dentry->d_inode))) | 445 | if (unlikely(IS_PRIVATE(d_backing_inode(dir->dentry)))) |
446 | return 0; | 446 | return 0; |
447 | return security_ops->path_symlink(dir, dentry, old_name); | 447 | return security_ops->path_symlink(dir, dentry, old_name); |
448 | } | 448 | } |
@@ -450,7 +450,7 @@ int security_path_symlink(struct path *dir, struct dentry *dentry, | |||
450 | int security_path_link(struct dentry *old_dentry, struct path *new_dir, | 450 | int security_path_link(struct dentry *old_dentry, struct path *new_dir, |
451 | struct dentry *new_dentry) | 451 | struct dentry *new_dentry) |
452 | { | 452 | { |
453 | if (unlikely(IS_PRIVATE(old_dentry->d_inode))) | 453 | if (unlikely(IS_PRIVATE(d_backing_inode(old_dentry)))) |
454 | return 0; | 454 | return 0; |
455 | return security_ops->path_link(old_dentry, new_dir, new_dentry); | 455 | return security_ops->path_link(old_dentry, new_dir, new_dentry); |
456 | } | 456 | } |
@@ -459,8 +459,8 @@ int security_path_rename(struct path *old_dir, struct dentry *old_dentry, | |||
459 | struct path *new_dir, struct dentry *new_dentry, | 459 | struct path *new_dir, struct dentry *new_dentry, |
460 | unsigned int flags) | 460 | unsigned int flags) |
461 | { | 461 | { |
462 | if (unlikely(IS_PRIVATE(old_dentry->d_inode) || | 462 | if (unlikely(IS_PRIVATE(d_backing_inode(old_dentry)) || |
463 | (new_dentry->d_inode && IS_PRIVATE(new_dentry->d_inode)))) | 463 | (d_is_positive(new_dentry) && IS_PRIVATE(d_backing_inode(new_dentry))))) |
464 | return 0; | 464 | return 0; |
465 | 465 | ||
466 | if (flags & RENAME_EXCHANGE) { | 466 | if (flags & RENAME_EXCHANGE) { |
@@ -477,21 +477,21 @@ EXPORT_SYMBOL(security_path_rename); | |||
477 | 477 | ||
478 | int security_path_truncate(struct path *path) | 478 | int security_path_truncate(struct path *path) |
479 | { | 479 | { |
480 | if (unlikely(IS_PRIVATE(path->dentry->d_inode))) | 480 | if (unlikely(IS_PRIVATE(d_backing_inode(path->dentry)))) |
481 | return 0; | 481 | return 0; |
482 | return security_ops->path_truncate(path); | 482 | return security_ops->path_truncate(path); |
483 | } | 483 | } |
484 | 484 | ||
485 | int security_path_chmod(struct path *path, umode_t mode) | 485 | int security_path_chmod(struct path *path, umode_t mode) |
486 | { | 486 | { |
487 | if (unlikely(IS_PRIVATE(path->dentry->d_inode))) | 487 | if (unlikely(IS_PRIVATE(d_backing_inode(path->dentry)))) |
488 | return 0; | 488 | return 0; |
489 | return security_ops->path_chmod(path, mode); | 489 | return security_ops->path_chmod(path, mode); |
490 | } | 490 | } |
491 | 491 | ||
492 | int security_path_chown(struct path *path, kuid_t uid, kgid_t gid) | 492 | int security_path_chown(struct path *path, kuid_t uid, kgid_t gid) |
493 | { | 493 | { |
494 | if (unlikely(IS_PRIVATE(path->dentry->d_inode))) | 494 | if (unlikely(IS_PRIVATE(d_backing_inode(path->dentry)))) |
495 | return 0; | 495 | return 0; |
496 | return security_ops->path_chown(path, uid, gid); | 496 | return security_ops->path_chown(path, uid, gid); |
497 | } | 497 | } |
@@ -513,14 +513,14 @@ EXPORT_SYMBOL_GPL(security_inode_create); | |||
513 | int security_inode_link(struct dentry *old_dentry, struct inode *dir, | 513 | int security_inode_link(struct dentry *old_dentry, struct inode *dir, |
514 | struct dentry *new_dentry) | 514 | struct dentry *new_dentry) |
515 | { | 515 | { |
516 | if (unlikely(IS_PRIVATE(old_dentry->d_inode))) | 516 | if (unlikely(IS_PRIVATE(d_backing_inode(old_dentry)))) |
517 | return 0; | 517 | return 0; |
518 | return security_ops->inode_link(old_dentry, dir, new_dentry); | 518 | return security_ops->inode_link(old_dentry, dir, new_dentry); |
519 | } | 519 | } |
520 | 520 | ||
521 | int security_inode_unlink(struct inode *dir, struct dentry *dentry) | 521 | int security_inode_unlink(struct inode *dir, struct dentry *dentry) |
522 | { | 522 | { |
523 | if (unlikely(IS_PRIVATE(dentry->d_inode))) | 523 | if (unlikely(IS_PRIVATE(d_backing_inode(dentry)))) |
524 | return 0; | 524 | return 0; |
525 | return security_ops->inode_unlink(dir, dentry); | 525 | return security_ops->inode_unlink(dir, dentry); |
526 | } | 526 | } |
@@ -543,7 +543,7 @@ EXPORT_SYMBOL_GPL(security_inode_mkdir); | |||
543 | 543 | ||
544 | int security_inode_rmdir(struct inode *dir, struct dentry *dentry) | 544 | int security_inode_rmdir(struct inode *dir, struct dentry *dentry) |
545 | { | 545 | { |
546 | if (unlikely(IS_PRIVATE(dentry->d_inode))) | 546 | if (unlikely(IS_PRIVATE(d_backing_inode(dentry)))) |
547 | return 0; | 547 | return 0; |
548 | return security_ops->inode_rmdir(dir, dentry); | 548 | return security_ops->inode_rmdir(dir, dentry); |
549 | } | 549 | } |
@@ -559,8 +559,8 @@ int security_inode_rename(struct inode *old_dir, struct dentry *old_dentry, | |||
559 | struct inode *new_dir, struct dentry *new_dentry, | 559 | struct inode *new_dir, struct dentry *new_dentry, |
560 | unsigned int flags) | 560 | unsigned int flags) |
561 | { | 561 | { |
562 | if (unlikely(IS_PRIVATE(old_dentry->d_inode) || | 562 | if (unlikely(IS_PRIVATE(d_backing_inode(old_dentry)) || |
563 | (new_dentry->d_inode && IS_PRIVATE(new_dentry->d_inode)))) | 563 | (d_is_positive(new_dentry) && IS_PRIVATE(d_backing_inode(new_dentry))))) |
564 | return 0; | 564 | return 0; |
565 | 565 | ||
566 | if (flags & RENAME_EXCHANGE) { | 566 | if (flags & RENAME_EXCHANGE) { |
@@ -576,14 +576,14 @@ int security_inode_rename(struct inode *old_dir, struct dentry *old_dentry, | |||
576 | 576 | ||
577 | int security_inode_readlink(struct dentry *dentry) | 577 | int security_inode_readlink(struct dentry *dentry) |
578 | { | 578 | { |
579 | if (unlikely(IS_PRIVATE(dentry->d_inode))) | 579 | if (unlikely(IS_PRIVATE(d_backing_inode(dentry)))) |
580 | return 0; | 580 | return 0; |
581 | return security_ops->inode_readlink(dentry); | 581 | return security_ops->inode_readlink(dentry); |
582 | } | 582 | } |
583 | 583 | ||
584 | int security_inode_follow_link(struct dentry *dentry, struct nameidata *nd) | 584 | int security_inode_follow_link(struct dentry *dentry, struct nameidata *nd) |
585 | { | 585 | { |
586 | if (unlikely(IS_PRIVATE(dentry->d_inode))) | 586 | if (unlikely(IS_PRIVATE(d_backing_inode(dentry)))) |
587 | return 0; | 587 | return 0; |
588 | return security_ops->inode_follow_link(dentry, nd); | 588 | return security_ops->inode_follow_link(dentry, nd); |
589 | } | 589 | } |
@@ -599,7 +599,7 @@ int security_inode_setattr(struct dentry *dentry, struct iattr *attr) | |||
599 | { | 599 | { |
600 | int ret; | 600 | int ret; |
601 | 601 | ||
602 | if (unlikely(IS_PRIVATE(dentry->d_inode))) | 602 | if (unlikely(IS_PRIVATE(d_backing_inode(dentry)))) |
603 | return 0; | 603 | return 0; |
604 | ret = security_ops->inode_setattr(dentry, attr); | 604 | ret = security_ops->inode_setattr(dentry, attr); |
605 | if (ret) | 605 | if (ret) |
@@ -610,7 +610,7 @@ EXPORT_SYMBOL_GPL(security_inode_setattr); | |||
610 | 610 | ||
611 | int security_inode_getattr(const struct path *path) | 611 | int security_inode_getattr(const struct path *path) |
612 | { | 612 | { |
613 | if (unlikely(IS_PRIVATE(path->dentry->d_inode))) | 613 | if (unlikely(IS_PRIVATE(d_backing_inode(path->dentry)))) |
614 | return 0; | 614 | return 0; |
615 | return security_ops->inode_getattr(path); | 615 | return security_ops->inode_getattr(path); |
616 | } | 616 | } |
@@ -620,7 +620,7 @@ int security_inode_setxattr(struct dentry *dentry, const char *name, | |||
620 | { | 620 | { |
621 | int ret; | 621 | int ret; |
622 | 622 | ||
623 | if (unlikely(IS_PRIVATE(dentry->d_inode))) | 623 | if (unlikely(IS_PRIVATE(d_backing_inode(dentry)))) |
624 | return 0; | 624 | return 0; |
625 | ret = security_ops->inode_setxattr(dentry, name, value, size, flags); | 625 | ret = security_ops->inode_setxattr(dentry, name, value, size, flags); |
626 | if (ret) | 626 | if (ret) |
@@ -634,7 +634,7 @@ int security_inode_setxattr(struct dentry *dentry, const char *name, | |||
634 | void security_inode_post_setxattr(struct dentry *dentry, const char *name, | 634 | void security_inode_post_setxattr(struct dentry *dentry, const char *name, |
635 | const void *value, size_t size, int flags) | 635 | const void *value, size_t size, int flags) |
636 | { | 636 | { |
637 | if (unlikely(IS_PRIVATE(dentry->d_inode))) | 637 | if (unlikely(IS_PRIVATE(d_backing_inode(dentry)))) |
638 | return; | 638 | return; |
639 | security_ops->inode_post_setxattr(dentry, name, value, size, flags); | 639 | security_ops->inode_post_setxattr(dentry, name, value, size, flags); |
640 | evm_inode_post_setxattr(dentry, name, value, size); | 640 | evm_inode_post_setxattr(dentry, name, value, size); |
@@ -642,14 +642,14 @@ void security_inode_post_setxattr(struct dentry *dentry, const char *name, | |||
642 | 642 | ||
643 | int security_inode_getxattr(struct dentry *dentry, const char *name) | 643 | int security_inode_getxattr(struct dentry *dentry, const char *name) |
644 | { | 644 | { |
645 | if (unlikely(IS_PRIVATE(dentry->d_inode))) | 645 | if (unlikely(IS_PRIVATE(d_backing_inode(dentry)))) |
646 | return 0; | 646 | return 0; |
647 | return security_ops->inode_getxattr(dentry, name); | 647 | return security_ops->inode_getxattr(dentry, name); |
648 | } | 648 | } |
649 | 649 | ||
650 | int security_inode_listxattr(struct dentry *dentry) | 650 | int security_inode_listxattr(struct dentry *dentry) |
651 | { | 651 | { |
652 | if (unlikely(IS_PRIVATE(dentry->d_inode))) | 652 | if (unlikely(IS_PRIVATE(d_backing_inode(dentry)))) |
653 | return 0; | 653 | return 0; |
654 | return security_ops->inode_listxattr(dentry); | 654 | return security_ops->inode_listxattr(dentry); |
655 | } | 655 | } |
@@ -658,7 +658,7 @@ int security_inode_removexattr(struct dentry *dentry, const char *name) | |||
658 | { | 658 | { |
659 | int ret; | 659 | int ret; |
660 | 660 | ||
661 | if (unlikely(IS_PRIVATE(dentry->d_inode))) | 661 | if (unlikely(IS_PRIVATE(d_backing_inode(dentry)))) |
662 | return 0; | 662 | return 0; |
663 | ret = security_ops->inode_removexattr(dentry, name); | 663 | ret = security_ops->inode_removexattr(dentry, name); |
664 | if (ret) | 664 | if (ret) |