diff options
author | Raghavendra Bhat <raghavendra@redhat.com> | 2012-07-09 01:58:30 +0530 |
---|---|---|
committer | Anand Avati <avati@redhat.com> | 2012-07-11 22:26:51 -0700 |
commit | 1ef9a920c1735865bce77ba8c93756e85c47f272 (patch) | |
tree | e5ad407f614cfc0e51fdb91a46cc2c7e6ec73911 /xlators/storage/posix/src/posix-helpers.c | |
parent | b1a5fa55695f497952264e35a9c8eb2bbf1ec4c3 (diff) |
storage/posix: handle getxattr failures gracefully
Use proper variable types for getting return value of getxattr calls,
which otherwise can lead to segfaulting of processes or page allocation
failures in the kernel.
Change-Id: I62ab5d6c378447090c19846f03298c3afc8863ba
BUG: 838195
Signed-off-by: Raghavendra Bhat <raghavendra@redhat.com>
Reviewed-on: http://review.gluster.com/3640
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Niels de Vos <ndevos@redhat.com>
Reviewed-by: Anand Avati <avati@redhat.com>
Diffstat (limited to 'xlators/storage/posix/src/posix-helpers.c')
-rw-r--r-- | xlators/storage/posix/src/posix-helpers.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/xlators/storage/posix/src/posix-helpers.c b/xlators/storage/posix/src/posix-helpers.c index 6a9333a0112..46bb6ea59c2 100644 --- a/xlators/storage/posix/src/posix-helpers.c +++ b/xlators/storage/posix/src/posix-helpers.c @@ -214,16 +214,25 @@ _posix_xattr_get_set (dict_t *xattr_req, if (!value) return; - sys_lgetxattr (filler->real_path, key, value, + ret = sys_lgetxattr (filler->real_path, key, value, xattr_size); + if (ret <= 0) { + gf_log (filler->this->name, GF_LOG_WARNING, + "getxattr failed. path: %s, key: %s", + filler->real_path, key); + GF_FREE (value); + return; + } value[xattr_size] = '\0'; ret = dict_set_bin (filler->xattr, key, value, xattr_size); - if (ret < 0) + if (ret < 0) { gf_log (filler->this->name, GF_LOG_DEBUG, "dict set failed. path: %s, key: %s", filler->real_path, key); + GF_FREE (value); + } } } out: |