summaryrefslogtreecommitdiff
path: root/source3
diff options
context:
space:
mode:
authorVandana Rungta <vrungta@amazon.com>2018-05-08 11:27:47 -0700
committerKarolin Seeger <kseeger@samba.org>2018-05-17 18:18:42 +0200
commit4dc19aced2c2d5b44a4c89e64c0445953911e917 (patch)
tree12fc56096dcd6ddd6243a65a006641ae9dc1d4fb /source3
parent91edd9c30f2545519844e3413e43626b3ca0c321 (diff)
downloadsamba-4dc19aced2c2d5b44a4c89e64c0445953911e917.tar.gz
s3: VFS: Fix memory leak in vfs_ceph.
Centralize error handling. https://bugzilla.samba.org/show_bug.cgi?id=13424 Signed-off-by: Vandana Rungta <vrungta@amazon.com> Reviewed-by: Jeremy Allison <jra@samba.org> Reviewed-by: David Disseldorp <ddiss@samba.org> Autobuild-User(master): Jeremy Allison <jra@samba.org> Autobuild-Date(master): Wed May 9 04:28:11 CEST 2018 on sn-devel-144 (cherry picked from commit 4e78aeedb8329953df83fc7f2c191b2c97a051d0) Autobuild-User(v4-7-test): Karolin Seeger <kseeger@samba.org> Autobuild-Date(v4-7-test): Thu May 17 18:18:42 CEST 2018 on sn-devel-144
Diffstat (limited to 'source3')
-rw-r--r--source3/modules/vfs_ceph.c21
1 files changed, 11 insertions, 10 deletions
diff --git a/source3/modules/vfs_ceph.c b/source3/modules/vfs_ceph.c
index a27b76293f5..9f752837a6a 100644
--- a/source3/modules/vfs_ceph.c
+++ b/source3/modules/vfs_ceph.c
@@ -1355,30 +1355,31 @@ static struct smb_filename *cephwrap_realpath(struct vfs_handle_struct *handle,
TALLOC_CTX *ctx,
const struct smb_filename *smb_fname)
{
- char *result;
+ char *result = NULL;
const char *path = smb_fname->base_name;
size_t len = strlen(path);
struct smb_filename *result_fname = NULL;
+ int r = -1;
- result = SMB_MALLOC_ARRAY(char, PATH_MAX+1);
if (len && (path[0] == '/')) {
- int r = asprintf(&result, "%s", path);
- if (r < 0) return NULL;
+ r = asprintf(&result, "%s", path);
} else if ((len >= 2) && (path[0] == '.') && (path[1] == '/')) {
if (len == 2) {
- int r = asprintf(&result, "%s",
+ r = asprintf(&result, "%s",
handle->conn->connectpath);
- if (r < 0) return NULL;
} else {
- int r = asprintf(&result, "%s/%s",
+ r = asprintf(&result, "%s/%s",
handle->conn->connectpath, &path[2]);
- if (r < 0) return NULL;
}
} else {
- int r = asprintf(&result, "%s/%s",
+ r = asprintf(&result, "%s/%s",
handle->conn->connectpath, path);
- if (r < 0) return NULL;
}
+
+ if (r < 0) {
+ return NULL;
+ }
+
DBG_DEBUG("[CEPH] realpath(%p, %s) = %s\n", handle, path, result);
result_fname = synthetic_smb_fname(ctx,
result,