summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/modules/vfs_shadow_copy2.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/source3/modules/vfs_shadow_copy2.c b/source3/modules/vfs_shadow_copy2.c
index 93330f4b50..e3c3f9f3a0 100644
--- a/source3/modules/vfs_shadow_copy2.c
+++ b/source3/modules/vfs_shadow_copy2.c
@@ -684,7 +684,7 @@ static char *shadow_copy2_realpath(vfs_handle_struct *handle,
static const char *shadow_copy2_connectpath(struct vfs_handle_struct *handle,
const char *fname)
{
- TALLOC_CTX *tmp_ctx = talloc_stackframe();
+ TALLOC_CTX *tmp_ctx;
const char *snapdir, *baseoffset, *basedir, *gmt_start;
size_t baselen;
char *ret;
@@ -695,7 +695,14 @@ static const char *shadow_copy2_connectpath(struct vfs_handle_struct *handle,
return handle->conn->connectpath;
}
- fname = shadow_copy2_normalise_path(talloc_tos(), fname, gmt_start);
+ /*
+ * We have to create a real temporary context because we have
+ * to put our result on talloc_tos(). Thus we can't use a
+ * talloc_stackframe() here.
+ */
+ tmp_ctx = talloc_new(talloc_tos());
+
+ fname = shadow_copy2_normalise_path(tmp_ctx, fname, gmt_start);
if (fname == NULL) {
TALLOC_FREE(tmp_ctx);
return NULL;