summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKrutika Dhananjay <kdhananj@redhat.com>2015-01-02 12:28:12 +0530
committerRaghavendra Bhat <raghavendra@redhat.com>2015-01-08 21:00:40 -0800
commit0664e74d86db2fd9a476241fdeacce840897d111 (patch)
tree78aea439aa3a6a8e0786371c9ec49392c260c4ff
parent419015d5f61c9d9dcd93f9dda3f7b66f735ded83 (diff)
features/uss: Perform NULL check on @name in svc_getxattr
Backport of: http://review.gluster.org/9378 LISTXATTR fop is internally converted into a GETXATTR with the "name" parameter set to NULL. In svc_getxattr(), a listxattr was causing a crash because of a NULL pointer dereference on @name. FIX: Add the necessary NULL check. Change-Id: Ifb4ca2a45ecc78c384e92822403eaf2f1b573798 BUG: 1180070 Signed-off-by: Krutika Dhananjay <kdhananj@redhat.com> Reviewed-on: http://review.gluster.org/9417 Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Raghavendra Bhat <raghavendra@redhat.com>
-rw-r--r--tests/bugs/bug-1178079.t24
-rw-r--r--xlators/features/snapview-client/src/snapview-client.c5
2 files changed, 28 insertions, 1 deletions
diff --git a/tests/bugs/bug-1178079.t b/tests/bugs/bug-1178079.t
new file mode 100644
index 0000000..3ee4f73
--- /dev/null
+++ b/tests/bugs/bug-1178079.t
@@ -0,0 +1,24 @@
+#!/bin/bash
+
+. $(dirname $0)/../include.rc
+. $(dirname $0)/../volume.rc
+
+cleanup;
+
+#Create a volume
+TEST glusterd;
+TEST pidof glusterd;
+TEST $CLI volume info;
+
+TEST $CLI volume create $V0 replica 2 $H0:$B0/${V0}{1..2};
+TEST $CLI volume start $V0;
+
+TEST $CLI volume set $V0 features.uss on;
+
+TEST glusterfs -s $H0 --volfile-id $V0 $M0;
+
+TEST touch $M0/file;
+
+TEST getfattr -d -m . -e hex $M0/file;
+
+cleanup;
diff --git a/xlators/features/snapview-client/src/snapview-client.c b/xlators/features/snapview-client/src/snapview-client.c
index ad50563..58f566e 100644
--- a/xlators/features/snapview-client/src/snapview-client.c
+++ b/xlators/features/snapview-client/src/snapview-client.c
@@ -791,6 +791,9 @@ svc_getxattr (call_frame_t *frame, xlator_t *this, loc_t *loc, const char *name,
* If the name variable matches this key then we have
* to send back .snaps as the real filename.
*/
+ if (!name)
+ goto stack_wind;
+
sscanf (name, "%[^:]:%[^@]", attrname, attrval);
strcat (attrname, ":");
@@ -818,7 +821,7 @@ svc_getxattr (call_frame_t *frame, xlator_t *this, loc_t *loc, const char *name,
goto out;
}
}
-
+stack_wind:
SVC_GET_SUBVOL_FROM_CTX (this, op_ret, op_errno, inode_type, ret,
loc->inode, subvolume, out);