diff options
Diffstat (limited to 'fs/open.c')
-rw-r--r-- | fs/open.c | 12 |
1 files changed, 11 insertions, 1 deletions
@@ -27,6 +27,7 @@ | |||
27 | #include <linux/pagemap.h> | 27 | #include <linux/pagemap.h> |
28 | #include <linux/syscalls.h> | 28 | #include <linux/syscalls.h> |
29 | #include <linux/rcupdate.h> | 29 | #include <linux/rcupdate.h> |
30 | #include <linux/audit.h> | ||
30 | 31 | ||
31 | #include <asm/unistd.h> | 32 | #include <asm/unistd.h> |
32 | 33 | ||
@@ -626,6 +627,8 @@ asmlinkage long sys_fchmod(unsigned int fd, mode_t mode) | |||
626 | dentry = file->f_dentry; | 627 | dentry = file->f_dentry; |
627 | inode = dentry->d_inode; | 628 | inode = dentry->d_inode; |
628 | 629 | ||
630 | audit_inode(NULL, inode, 0); | ||
631 | |||
629 | err = -EROFS; | 632 | err = -EROFS; |
630 | if (IS_RDONLY(inode)) | 633 | if (IS_RDONLY(inode)) |
631 | goto out_putf; | 634 | goto out_putf; |
@@ -775,7 +778,10 @@ asmlinkage long sys_fchown(unsigned int fd, uid_t user, gid_t group) | |||
775 | 778 | ||
776 | file = fget(fd); | 779 | file = fget(fd); |
777 | if (file) { | 780 | if (file) { |
778 | error = chown_common(file->f_dentry, user, group); | 781 | struct dentry * dentry; |
782 | dentry = file->f_dentry; | ||
783 | audit_inode(NULL, dentry->d_inode, 0); | ||
784 | error = chown_common(dentry, user, group); | ||
779 | fput(file); | 785 | fput(file); |
780 | } | 786 | } |
781 | return error; | 787 | return error; |
@@ -890,6 +896,10 @@ EXPORT_SYMBOL(filp_open); | |||
890 | * a fully instantiated struct file to the caller. | 896 | * a fully instantiated struct file to the caller. |
891 | * This function is meant to be called from within a filesystem's | 897 | * This function is meant to be called from within a filesystem's |
892 | * lookup method. | 898 | * lookup method. |
899 | * Beware of calling it for non-regular files! Those ->open methods might block | ||
900 | * (e.g. in fifo_open), leaving you with parent locked (and in case of fifo, | ||
901 | * leading to a deadlock, as nobody can open that fifo anymore, because | ||
902 | * another process to open fifo will block on locked parent when doing lookup). | ||
893 | * Note that in case of error, nd->intent.open.file is destroyed, but the | 903 | * Note that in case of error, nd->intent.open.file is destroyed, but the |
894 | * path information remains valid. | 904 | * path information remains valid. |
895 | * If the open callback is set to NULL, then the standard f_op->open() | 905 | * If the open callback is set to NULL, then the standard f_op->open() |