From e73db5e7fe1dba5a071725ef3480a4a1d5c7bef7 Mon Sep 17 00:00:00 2001 From: vmallika Date: Sun, 12 Jul 2015 21:03:54 +0530 Subject: quota/marker: fix mem-leak in marker Free local in error paths Change-Id: I76f69e7d746af8eedea34354ff5a6bf50234e50e BUG: 1207735 Signed-off-by: vmallika Reviewed-on: http://review.gluster.org/11617 Tested-by: NetBSD Build System Tested-by: Gluster Build System Reviewed-by: Raghavendra G --- xlators/features/marker/src/marker.c | 81 ++++++++++++++---------------------- 1 file changed, 32 insertions(+), 49 deletions(-) (limited to 'xlators/features/marker/src/marker.c') diff --git a/xlators/features/marker/src/marker.c b/xlators/features/marker/src/marker.c index 4494595cc39..e8a8eeab6e4 100644 --- a/xlators/features/marker/src/marker.c +++ b/xlators/features/marker/src/marker.c @@ -338,10 +338,6 @@ marker_getxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret, int32_t op_errno, dict_t *dict, dict_t *xdata) { - marker_local_t *local = NULL; - local = frame->local; - - if (cookie) { gf_log (this->name, GF_LOG_DEBUG, "Filtering the quota extended attributes"); @@ -367,9 +363,7 @@ marker_getxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this, marker_filter_internal_xattrs (frame->this, dict); } - frame->local = NULL; - STACK_UNWIND_STRICT (getxattr, frame, op_ret, op_errno, dict, xdata); - marker_local_unref (local); + MARKER_STACK_UNWIND (getxattr, frame, op_ret, op_errno, dict, xdata); return 0; } @@ -417,9 +411,7 @@ marker_getxattr (call_frame_t *frame, xlator_t *this, loc_t *loc, return 0; out: - frame->local = NULL; - STACK_UNWIND_STRICT (getxattr, frame, -1, ENOMEM, NULL, NULL); - marker_local_unref (local); + MARKER_STACK_UNWIND (getxattr, frame, -1, ENOMEM, NULL, NULL); return 0; } @@ -656,8 +648,9 @@ wind: return 0; err: - STACK_UNWIND_STRICT (mkdir, frame, -1, ENOMEM, NULL, + MARKER_STACK_UNWIND (mkdir, frame, -1, ENOMEM, NULL, NULL, NULL, NULL, NULL); + return 0; } @@ -730,7 +723,7 @@ wind: fd, xdata); return 0; err: - STACK_UNWIND_STRICT (create, frame, -1, ENOMEM, NULL, NULL, NULL, NULL, + MARKER_STACK_UNWIND (create, frame, -1, ENOMEM, NULL, NULL, NULL, NULL, NULL, NULL); return 0; @@ -806,7 +799,7 @@ wind: flags, iobref, xdata); return 0; err: - STACK_UNWIND_STRICT (writev, frame, -1, ENOMEM, NULL, NULL, NULL); + MARKER_STACK_UNWIND (writev, frame, -1, ENOMEM, NULL, NULL, NULL); return 0; } @@ -874,7 +867,7 @@ wind: FIRST_CHILD(this)->fops->rmdir, loc, flags, xdata); return 0; err: - STACK_UNWIND_STRICT (rmdir, frame, -1, ENOMEM, NULL, NULL, NULL); + MARKER_STACK_UNWIND (rmdir, frame, -1, ENOMEM, NULL, NULL, NULL); return 0; } @@ -953,9 +946,7 @@ unlink_wind: FIRST_CHILD(this)->fops->unlink, loc, xflag, xdata); return 0; err: - frame->local = NULL; - STACK_UNWIND_STRICT (unlink, frame, -1, ENOMEM, NULL, NULL, NULL); - marker_local_unref (local); + MARKER_STACK_UNWIND (unlink, frame, -1, ENOMEM, NULL, NULL, NULL); return 0; } @@ -1029,7 +1020,7 @@ wind: FIRST_CHILD(this)->fops->link, oldloc, newloc, xdata); return 0; err: - STACK_UNWIND_STRICT (link, frame, -1, ENOMEM, NULL, NULL, NULL, NULL, + MARKER_STACK_UNWIND (link, frame, -1, ENOMEM, NULL, NULL, NULL, NULL, NULL); return 0; @@ -1611,8 +1602,9 @@ rename_wind: return 0; err: - STACK_UNWIND_STRICT (rename, frame, -1, ENOMEM, NULL, + MARKER_STACK_UNWIND (rename, frame, -1, ENOMEM, NULL, NULL, NULL, NULL, NULL, NULL); + marker_local_unref (oplocal); return 0; } @@ -1681,7 +1673,7 @@ wind: FIRST_CHILD(this)->fops->truncate, loc, offset, xdata); return 0; err: - STACK_UNWIND_STRICT (truncate, frame, -1, ENOMEM, NULL, NULL, NULL); + MARKER_STACK_UNWIND (truncate, frame, -1, ENOMEM, NULL, NULL, NULL); return 0; } @@ -1749,7 +1741,7 @@ wind: FIRST_CHILD(this)->fops->ftruncate, fd, offset, xdata); return 0; err: - STACK_UNWIND_STRICT (ftruncate, frame, -1, ENOMEM, NULL, NULL, NULL); + MARKER_STACK_UNWIND (ftruncate, frame, -1, ENOMEM, NULL, NULL, NULL); return 0; } @@ -1823,8 +1815,9 @@ wind: xdata); return 0; err: - STACK_UNWIND_STRICT (symlink, frame, -1, ENOMEM, NULL, + MARKER_STACK_UNWIND (symlink, frame, -1, ENOMEM, NULL, NULL, NULL, NULL, NULL); + return 0; } @@ -1899,8 +1892,9 @@ wind: xdata); return 0; err: - STACK_UNWIND_STRICT (mknod, frame, -1, ENOMEM, NULL, + MARKER_STACK_UNWIND (mknod, frame, -1, ENOMEM, NULL, NULL, NULL, NULL, NULL); + return 0; } @@ -1968,7 +1962,7 @@ wind: xdata); return 0; err: - STACK_UNWIND_STRICT (fallocate, frame, -1, ENOMEM, NULL, NULL, NULL); + MARKER_STACK_UNWIND (fallocate, frame, -1, ENOMEM, NULL, NULL, NULL); return 0; } @@ -2036,7 +2030,7 @@ wind: FIRST_CHILD(this)->fops->discard, fd, offset, len, xdata); return 0; err: - STACK_UNWIND_STRICT (discard, frame, -1, ENOMEM, NULL, NULL, NULL); + MARKER_STACK_UNWIND (discard, frame, -1, ENOMEM, NULL, NULL, NULL); return 0; } @@ -2103,7 +2097,7 @@ wind: FIRST_CHILD(this)->fops->zerofill, fd, offset, len, xdata); return 0; err: - STACK_UNWIND_STRICT (zerofill, frame, -1, ENOMEM, NULL, NULL, NULL); + MARKER_STACK_UNWIND (zerofill, frame, -1, ENOMEM, NULL, NULL, NULL); return 0; } @@ -2224,16 +2218,11 @@ quota_xattr_cleaner_cbk (int ret, call_frame_t *frame, void *args) dict_t *xdata = args; int op_ret = -1; int op_errno = 0; - marker_local_t *local = NULL; - - local = frame->local; - frame->local = NULL; op_ret = (ret < 0)? -1: 0; op_errno = -ret; - STACK_UNWIND_STRICT (setxattr, frame, op_ret, op_errno, xdata); - marker_local_unref (local); + MARKER_STACK_UNWIND (setxattr, frame, op_ret, op_errno, xdata); return ret; } @@ -2307,11 +2296,9 @@ marker_do_xattr_cleanup (call_frame_t *frame, xlator_t *this, dict_t *xdata, ret = 0; out: - if (ret) { - frame->local = NULL; - STACK_UNWIND_STRICT (setxattr, frame, -1, ENOMEM, xdata); - marker_local_unref (local); - } + if (ret) + MARKER_STACK_UNWIND (setxattr, frame, -1, ENOMEM, xdata); + return ret; } @@ -2366,7 +2353,7 @@ wind: FIRST_CHILD(this)->fops->setxattr, loc, dict, flags, xdata); return 0; err: - STACK_UNWIND_STRICT (setxattr, frame, -1, op_errno, NULL); + MARKER_STACK_UNWIND (setxattr, frame, -1, op_errno, NULL); return 0; } @@ -2433,7 +2420,7 @@ wind: FIRST_CHILD(this)->fops->fsetxattr, fd, dict, flags, xdata); return 0; err: - STACK_UNWIND_STRICT (fsetxattr, frame, -1, ENOMEM, NULL); + MARKER_STACK_UNWIND (fsetxattr, frame, -1, ENOMEM, NULL); return 0; } @@ -2499,7 +2486,7 @@ wind: FIRST_CHILD (this)->fops->fsetattr, fd, stbuf, valid, xdata); return 0; err: - STACK_UNWIND_STRICT (fsetattr, frame, -1, ENOMEM, NULL, NULL, NULL); + MARKER_STACK_UNWIND (fsetattr, frame, -1, ENOMEM, NULL, NULL, NULL); return 0; } @@ -2566,7 +2553,7 @@ wind: FIRST_CHILD (this)->fops->setattr, loc, stbuf, valid, xdata); return 0; err: - STACK_UNWIND_STRICT (setattr, frame, -1, ENOMEM, NULL, NULL, NULL); + MARKER_STACK_UNWIND (setattr, frame, -1, ENOMEM, NULL, NULL, NULL); return 0; } @@ -2631,7 +2618,7 @@ wind: FIRST_CHILD(this)->fops->removexattr, loc, name, xdata); return 0; err: - STACK_UNWIND_STRICT (removexattr, frame, -1, ENOMEM, NULL); + MARKER_STACK_UNWIND (removexattr, frame, -1, ENOMEM, NULL); return 0; } @@ -2741,7 +2728,7 @@ wind: return 0; err: - STACK_UNWIND_STRICT (lookup, frame, -1, ENOMEM, NULL, NULL, NULL, NULL); + MARKER_STACK_UNWIND (lookup, frame, -1, ENOMEM, NULL, NULL, NULL, NULL); if (xattr_req) dict_unref (xattr_req); @@ -2853,11 +2840,7 @@ marker_readdirp_cbk (call_frame_t *frame, void *cookie, xlator_t *this, } unwind: - local = frame->local; - frame->local = NULL; - - STACK_UNWIND_STRICT (readdirp, frame, op_ret, op_errno, entries, xdata); - marker_local_unref (local); + MARKER_STACK_UNWIND (readdirp, frame, op_ret, op_errno, entries, xdata); return 0; } @@ -2901,7 +2884,7 @@ marker_readdirp (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size, dict_unref (dict); return 0; unwind: - STACK_UNWIND_STRICT (readdirp, frame, -1, ENOMEM, NULL, NULL); + MARKER_STACK_UNWIND (readdirp, frame, -1, ENOMEM, NULL, NULL); return 0; } -- cgit