aboutsummaryrefslogtreecommitdiffstats
path: root/fs/orangefs
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2016-02-16 20:25:19 -0500
committerMike Marshall <hubcap@omnibond.com>2016-03-25 22:30:54 -0400
commit177f8fc491e230c2e7a3ac7d5626dd6f3d94e9f2 (patch)
tree459a9dbb6a8a61ab18fd522d701eb6ad27f5b09d /fs/orangefs
parent7df240d771862c31f869d6b9024c1942c1f01521 (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.c12
-rw-r--r--fs/orangefs/orangefs-kernel.h1
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,
652static loff_t orangefs_file_llseek(struct file *file, loff_t offset, int origin) 652static 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