diff options
author | Jeremy Allison <jra@samba.org> | 2020-11-10 10:18:18 -0800 |
---|---|---|
committer | Karolin Seeger <kseeger@samba.org> | 2020-11-19 12:38:34 +0000 |
commit | 49710332b5937bb7490db87b803faeaf8ca5190b (patch) | |
tree | fafdac602fa0389bbc559e82f39245c419e891a4 | |
parent | 09da9690e9359a5236e87b82903b46c683ae7afc (diff) | |
download | samba-49710332b5937bb7490db87b803faeaf8ca5190b.tar.gz |
s3: modules: gluster. Fix the error I made in preventing talloc leaks from a function.
file_lines_parse() plays horrible tricks with
the passed-in talloc pointers and the hierarcy
which makes freeing hard to get right.
As we know mem_ctx is freed by the caller, after
calling file_lines_parse don't free on exit and let the caller
handle it. This violates good Samba coding practice
but we know we're not leaking here.
BUG: https://bugzilla.samba.org/show_bug.cgi?id=14486
Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Guenther Deschner <gd@samba.org>
Autobuild-User(master): Günther Deschner <gd@samba.org>
Autobuild-Date(master): Wed Nov 11 15:02:27 UTC 2020 on sn-devel-184
(cherry picked from commit 457b49c67803dd95abc8502c2a410fac273f6fba)
Autobuild-User(v4-11-test): Karolin Seeger <kseeger@samba.org>
Autobuild-Date(v4-11-test): Thu Nov 19 12:38:34 UTC 2020 on sn-devel-184
-rw-r--r-- | source3/modules/vfs_glusterfs.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/source3/modules/vfs_glusterfs.c b/source3/modules/vfs_glusterfs.c index 747176ecebb..190235cf8ae 100644 --- a/source3/modules/vfs_glusterfs.c +++ b/source3/modules/vfs_glusterfs.c @@ -315,15 +315,25 @@ static int check_for_write_behind_translator(TALLOC_CTX *mem_ctx, return -1; } + /* + * file_lines_parse() plays horrible tricks with + * the passed-in talloc pointers and the hierarcy + * which makes freeing hard to get right. + * + * As we know mem_ctx is freed by the caller, after + * this point don't free on exit and let the caller + * handle it. This violates good Samba coding practice + * but we know we're not leaking here. + */ + lines = file_lines_parse(buf, newlen, &numlines, mem_ctx); if (lines == NULL || numlines <= 0) { - TALLOC_FREE(option); - TALLOC_FREE(buf); return -1; } + /* On success, buf is now a talloc child of lines !! */ for (i=0; i < numlines; i++) { if (strequal(lines[i], option)) { @@ -338,15 +348,9 @@ static int check_for_write_behind_translator(TALLOC_CTX *mem_ctx, "Please check the vfs_glusterfs(8) manpage for " "further details.\n", volume); - TALLOC_FREE(lines); - TALLOC_FREE(option); - TALLOC_FREE(buf); return -1; } - TALLOC_FREE(lines); - TALLOC_FREE(option); - TALLOC_FREE(buf); return 0; } |