aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTiger Yang <tiger.yang@oracle.com>2008-11-02 06:04:21 -0500
committerMark Fasheh <mfasheh@suse.com>2008-11-10 12:51:47 -0500
commit6c1e183e12dbd78a897a859f13220406296fee31 (patch)
treec57a634cae86c83db4e3067af8ccf83805d2bf90
parentde29c08528bae45e3fa1171d190f1340e37e0f70 (diff)
ocfs2: Check search result in ocfs2_xattr_block_get()
ocfs2_xattr_block_get() calls ocfs2_xattr_search() to find an external xattr, but doesn't check the search result that is passed back via struct ocfs2_xattr_search. Add a check for search result, and pass back -ENODATA if the xattr search failed. This avoids a later NULL pointer error. Signed-off-by: Tiger Yang <tiger.yang@oracle.com> Signed-off-by: Mark Fasheh <mfasheh@suse.com>
-rw-r--r--fs/ocfs2/xattr.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/fs/ocfs2/xattr.c b/fs/ocfs2/xattr.c
index 70baffeb1812..054e2efb0b7e 100644
--- a/fs/ocfs2/xattr.c
+++ b/fs/ocfs2/xattr.c
@@ -777,6 +777,11 @@ static int ocfs2_xattr_block_get(struct inode *inode,
777 goto cleanup; 777 goto cleanup;
778 } 778 }
779 779
780 if (xs->not_found) {
781 ret = -ENODATA;
782 goto cleanup;
783 }
784
780 xb = (struct ocfs2_xattr_block *)xs->xattr_bh->b_data; 785 xb = (struct ocfs2_xattr_block *)xs->xattr_bh->b_data;
781 size = le64_to_cpu(xs->here->xe_value_size); 786 size = le64_to_cpu(xs->here->xe_value_size);
782 if (buffer) { 787 if (buffer) {
@@ -860,7 +865,7 @@ static int ocfs2_xattr_get(struct inode *inode,
860 down_read(&oi->ip_xattr_sem); 865 down_read(&oi->ip_xattr_sem);
861 ret = ocfs2_xattr_ibody_get(inode, name_index, name, buffer, 866 ret = ocfs2_xattr_ibody_get(inode, name_index, name, buffer,
862 buffer_size, &xis); 867 buffer_size, &xis);
863 if (ret == -ENODATA) 868 if (ret == -ENODATA && di->i_xattr_loc)
864 ret = ocfs2_xattr_block_get(inode, name_index, name, buffer, 869 ret = ocfs2_xattr_block_get(inode, name_index, name, buffer,
865 buffer_size, &xbs); 870 buffer_size, &xbs);
866 up_read(&oi->ip_xattr_sem); 871 up_read(&oi->ip_xattr_sem);