diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2016-02-16 20:25:19 -0500 |
---|---|---|
committer | Mike Marshall <hubcap@omnibond.com> | 2016-03-25 22:30:54 -0400 |
commit | 177f8fc491e230c2e7a3ac7d5626dd6f3d94e9f2 (patch) | |
tree | 459a9dbb6a8a61ab18fd522d701eb6ad27f5b09d /fs/orangefs | |
parent | 7df240d771862c31f869d6b9024c1942c1f01521 (diff) |
orangefs: sanitize ->llseek()
a) open files can't have NULL inodes
b) it's SEEK_END, not ORANGEFS_SEEK_END; no need to get cute.
c) make_bad_inode() on lseek()?
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Mike Marshall <hubcap@omnibond.com>
Diffstat (limited to 'fs/orangefs')
-rw-r--r-- | fs/orangefs/file.c | 12 | ||||
-rw-r--r-- | fs/orangefs/orangefs-kernel.h | 1 |
2 files changed, 3 insertions, 10 deletions
diff --git a/fs/orangefs/file.c b/fs/orangefs/file.c index 63e6a10ab13d..cb6a164b2718 100644 --- a/fs/orangefs/file.c +++ b/fs/orangefs/file.c | |||
@@ -652,14 +652,9 @@ static int orangefs_fsync(struct file *file, | |||
652 | static loff_t orangefs_file_llseek(struct file *file, loff_t offset, int origin) | 652 | static loff_t orangefs_file_llseek(struct file *file, loff_t offset, int origin) |
653 | { | 653 | { |
654 | int ret = -EINVAL; | 654 | int ret = -EINVAL; |
655 | struct inode *inode = file->f_path.dentry->d_inode; | 655 | struct inode *inode = file_inode(file); |
656 | 656 | ||
657 | if (!inode) { | 657 | if (origin == SEEK_END) { |
658 | gossip_err("orangefs_file_llseek: invalid inode (NULL)\n"); | ||
659 | return ret; | ||
660 | } | ||
661 | |||
662 | if (origin == ORANGEFS_SEEK_END) { | ||
663 | /* | 658 | /* |
664 | * revalidate the inode's file size. | 659 | * revalidate the inode's file size. |
665 | * NOTE: We are only interested in file size here, | 660 | * NOTE: We are only interested in file size here, |
@@ -674,7 +669,6 @@ static loff_t orangefs_file_llseek(struct file *file, loff_t offset, int origin) | |||
674 | __FILE__, | 669 | __FILE__, |
675 | __func__, | 670 | __func__, |
676 | __LINE__); | 671 | __LINE__); |
677 | orangefs_make_bad_inode(inode); | ||
678 | return ret; | 672 | return ret; |
679 | } | 673 | } |
680 | } | 674 | } |
@@ -684,7 +678,7 @@ static loff_t orangefs_file_llseek(struct file *file, loff_t offset, int origin) | |||
684 | " | inode size is %lu\n", | 678 | " | inode size is %lu\n", |
685 | (long)offset, | 679 | (long)offset, |
686 | origin, | 680 | origin, |
687 | (unsigned long)file->f_path.dentry->d_inode->i_size); | 681 | (unsigned long)i_size_read(inode)); |
688 | 682 | ||
689 | return generic_file_llseek(file, offset, origin); | 683 | return generic_file_llseek(file, offset, origin); |
690 | } | 684 | } |
diff --git a/fs/orangefs/orangefs-kernel.h b/fs/orangefs/orangefs-kernel.h index 5832168106de..db258d2ccc6a 100644 --- a/fs/orangefs/orangefs-kernel.h +++ b/fs/orangefs/orangefs-kernel.h | |||
@@ -70,7 +70,6 @@ | |||
70 | #define ORANGEFS_DEVREQ_MAGIC 0x20030529 | 70 | #define ORANGEFS_DEVREQ_MAGIC 0x20030529 |
71 | #define ORANGEFS_LINK_MAX 0x000000FF | 71 | #define ORANGEFS_LINK_MAX 0x000000FF |
72 | #define ORANGEFS_PURGE_RETRY_COUNT 0x00000005 | 72 | #define ORANGEFS_PURGE_RETRY_COUNT 0x00000005 |
73 | #define ORANGEFS_SEEK_END 0x00000002 | ||
74 | #define ORANGEFS_MAX_NUM_OPTIONS 0x00000004 | 73 | #define ORANGEFS_MAX_NUM_OPTIONS 0x00000004 |
75 | #define ORANGEFS_MAX_MOUNT_OPT_LEN 0x00000080 | 74 | #define ORANGEFS_MAX_MOUNT_OPT_LEN 0x00000080 |
76 | #define ORANGEFS_MAX_FSKEY_LEN 64 | 75 | #define ORANGEFS_MAX_FSKEY_LEN 64 |