md-cache: avoid checking the xattr value buffer with string functions.
xattrs may very well contain binary, non-text data with leading 0 values. Using strcmp for checking empty values is not the appropriate thing to do: In the best case, it might treat a binary xattr value starting with 0 from being cached (and hence also from being reported back with xattr). In the worst case, we might read beyond the end of a data blob that does contain any zero byte. We fix this by checking the length of the data blob and checking the first byte against 0 if the length is one. Signed-off-by: Guenther Deschner <gd@samba.org> Pair-Programmed-With: Michael Adam <obnox@samba.org> Change-Id: If723c465a630b8a37b6be58782a2724df7ac6b11 BUG: 1476324 Reviewed-on: https://review.gluster.org/17910 Reviewed-by: Michael Adam <obnox@samba.org> Smoke: Gluster Build System <jenkins@build.gluster.org> Reviewed-by: Poornima G <pgurusid@redhat.com> Tested-by: Poornima G <pgurusid@redhat.com> CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
This commit is contained in:
parent
e5db980504
commit
ab4ffdac9d
27
tests/bugs/md-cache/bug-1476324.t
Normal file
27
tests/bugs/md-cache/bug-1476324.t
Normal file
@ -0,0 +1,27 @@
|
||||
#!/bin/bash
|
||||
|
||||
. $(dirname $0)/../../include.rc
|
||||
. $(dirname $0)/../../volume.rc
|
||||
|
||||
cleanup;
|
||||
|
||||
TEST glusterd;
|
||||
|
||||
TEST $CLI volume create $V0 $H0:$B0/${V0}{1,2,3};
|
||||
|
||||
TEST $CLI volume start $V0
|
||||
|
||||
TEST $CLI volume set $V0 performance.md-cache-timeout 600
|
||||
TEST $CLI volume set $V0 performance.cache-samba-metadata on
|
||||
|
||||
TEST glusterfs --volfile-id=/$V0 --volfile-server=$H0 $M0
|
||||
|
||||
TEST touch $M0/file1
|
||||
|
||||
TEST "setfattr -n user.DOSATTRIB -v 0sAAOW $M0/file1"
|
||||
TEST "getfattr -n user.DOSATTRIB $M0/file1 -e base64 | grep -q 0sAAOW"
|
||||
|
||||
TEST "setfattr -n user.DOSATTRIB -v 0x00ff $M0/file1"
|
||||
TEST "getfattr -n user.DOSATTRIB $M0/file1 -e hex | grep -q 0x00ff"
|
||||
|
||||
cleanup;
|
@ -633,7 +633,7 @@ updatefn(dict_t *dict, char *key, data_t *value, void *data)
|
||||
* not update their cache if the value of a xattr is a 0 byte
|
||||
* data (i.e. "").
|
||||
*/
|
||||
if (!strcmp (value->data, ""))
|
||||
if (value->len == 1 && value->data[0] == '\0')
|
||||
continue;
|
||||
|
||||
if (dict_set(u->dict, key, value) < 0) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user