summaryrefslogtreecommitdiffstats
path: root/xlators/encryption
diff options
context:
space:
mode:
Diffstat (limited to 'xlators/encryption')
-rw-r--r--xlators/encryption/crypt/src/crypt.c470
-rw-r--r--xlators/encryption/crypt/src/crypt.h13
2 files changed, 248 insertions, 235 deletions
diff --git a/xlators/encryption/crypt/src/crypt.c b/xlators/encryption/crypt/src/crypt.c
index 9e5bcf79c30..72384a5595a 100644
--- a/xlators/encryption/crypt/src/crypt.c
+++ b/xlators/encryption/crypt/src/crypt.c
@@ -446,15 +446,15 @@ static int32_t crypt_readv_finodelk_cbk(call_frame_t *frame,
fd_unref(local->fd);
if (local->xdata)
dict_unref(local->xdata);
- STACK_UNWIND_STRICT(readv,
- frame,
- -1,
- op_errno,
- NULL,
- 0,
- NULL,
- NULL,
- NULL);
+ CRYPT_STACK_UNWIND(readv,
+ frame,
+ -1,
+ op_errno,
+ NULL,
+ 0,
+ NULL,
+ NULL,
+ NULL);
return 0;
}
@@ -486,8 +486,8 @@ static int32_t readv_trivial_completion(call_frame_t *frame,
NULL);
return 0;
error:
- STACK_UNWIND_STRICT(readv, frame, op_ret, op_errno,
- NULL, 0, NULL, NULL, NULL);
+ CRYPT_STACK_UNWIND(readv, frame, op_ret, op_errno,
+ NULL, 0, NULL, NULL, NULL);
return 0;
}
@@ -603,15 +603,15 @@ int32_t crypt_readv(call_frame_t *frame,
NULL);
return 0;
error:
- STACK_UNWIND_STRICT(readv,
- frame,
- -1,
- ret,
- NULL,
- 0,
- NULL,
- NULL,
- NULL);
+ CRYPT_STACK_UNWIND(readv,
+ frame,
+ -1,
+ ret,
+ NULL,
+ 0,
+ NULL,
+ NULL,
+ NULL);
return 0;
}
@@ -1196,7 +1196,7 @@ int crypt_writev(call_frame_t *frame,
if (local && local->info)
free_inode_info(local->info);
- STACK_UNWIND_STRICT(writev, frame, -1, ret, NULL, NULL, NULL);
+ CRYPT_STACK_UNWIND(writev, frame, -1, ret, NULL, NULL, NULL);
return 0;
}
@@ -1758,7 +1758,7 @@ static int32_t crypt_ftruncate(call_frame_t *frame,
if (local && local->info)
free_inode_info(local->info);
- STACK_UNWIND_STRICT(ftruncate, frame, -1, ret, NULL, NULL, NULL);
+ CRYPT_STACK_UNWIND(ftruncate, frame, -1, ret, NULL, NULL, NULL);
return 0;
}
@@ -1772,13 +1772,13 @@ int32_t truncate_end(call_frame_t *frame,
{
crypt_local_t *local = frame->local;
- STACK_UNWIND_STRICT(truncate,
- frame,
- op_ret,
- op_errno,
- &local->prebuf,
- &local->postbuf,
- local->xdata);
+ CRYPT_STACK_UNWIND(truncate,
+ frame,
+ op_ret,
+ op_errno,
+ &local->prebuf,
+ &local->postbuf,
+ local->xdata);
return 0;
}
@@ -1822,10 +1822,10 @@ static int32_t truncate_begin(call_frame_t *frame,
if (op_ret < 0) {
fd_unref(fd);
- STACK_UNWIND_STRICT(truncate,
- frame,
- op_ret,
- op_errno, NULL, NULL, NULL);
+ CRYPT_STACK_UNWIND(truncate,
+ frame,
+ op_ret,
+ op_errno, NULL, NULL, NULL);
return 0;
} else {
fd_bind (fd);
@@ -1884,7 +1884,7 @@ int32_t crypt_truncate(call_frame_t *frame,
NULL);
return 0;
error:
- STACK_UNWIND_STRICT(truncate, frame, -1, EINVAL, NULL, NULL, NULL);
+ CRYPT_STACK_UNWIND(truncate, frame, -1, EINVAL, NULL, NULL, NULL);
return 0;
}
@@ -2223,12 +2223,12 @@ static int32_t crypt_open(call_frame_t *frame,
xdata);
return 0;
error:
- STACK_UNWIND_STRICT(open,
- frame,
- -1,
- ret,
- NULL,
- NULL);
+ CRYPT_STACK_UNWIND(open,
+ frame,
+ -1,
+ ret,
+ NULL,
+ NULL);
return 0;
}
@@ -2310,16 +2310,16 @@ static int32_t crypt_create_done(call_frame_t *frame,
}
unwind:
free_format(local);
- STACK_UNWIND_STRICT(create,
- frame,
- op_ret,
- op_errno,
- local_fd,
- local_inode,
- &local->buf,
- &local->prebuf,
- &local->postbuf,
- local_xdata);
+ CRYPT_STACK_UNWIND(create,
+ frame,
+ op_ret,
+ op_errno,
+ local_fd,
+ local_inode,
+ &local->buf,
+ &local->prebuf,
+ &local->postbuf,
+ local_xdata);
fd_unref(local_fd);
inode_unref(local_inode);
if (local_xdata)
@@ -2365,16 +2365,16 @@ static int crypt_create_tail(call_frame_t *frame,
free_inode_info(local->info);
free_format(local);
- STACK_UNWIND_STRICT(create,
- frame,
- op_ret,
- op_errno,
- local_fd,
- local_inode,
- &local->buf,
- &local->prebuf,
- &local->postbuf,
- local_xdata);
+ CRYPT_STACK_UNWIND(create,
+ frame,
+ op_ret,
+ op_errno,
+ local_fd,
+ local_inode,
+ &local->buf,
+ &local->prebuf,
+ &local->postbuf,
+ local_xdata);
fd_unref(local_fd);
inode_unref(local_inode);
@@ -2413,16 +2413,16 @@ static int32_t crypt_create_finodelk_cbk(call_frame_t *frame,
if (local->xdata)
dict_unref(local->xdata);
- STACK_UNWIND_STRICT(create,
- frame,
- op_ret,
- op_errno,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL);
+ CRYPT_STACK_UNWIND(create,
+ frame,
+ op_ret,
+ op_errno,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
return 0;
}
@@ -2476,12 +2476,12 @@ static int32_t crypt_create_cbk(call_frame_t *frame,
fd_unref(local->fd);
dict_unref(local->xattr);
- STACK_UNWIND_STRICT(create,
- frame,
- op_ret,
- op_errno,
- NULL, NULL, NULL,
- NULL, NULL, NULL);
+ CRYPT_STACK_UNWIND(create,
+ frame,
+ op_ret,
+ op_errno,
+ NULL, NULL, NULL,
+ NULL, NULL, NULL);
return 0;
}
@@ -2598,12 +2598,12 @@ static int32_t crypt_create(call_frame_t *frame,
return 0;
error:
gf_log("crypt", GF_LOG_WARNING, "can not create file");
- STACK_UNWIND_STRICT(create,
- frame,
- -1,
- ret,
- NULL, NULL, NULL,
- NULL, NULL, NULL);
+ CRYPT_STACK_UNWIND(create,
+ frame,
+ -1,
+ ret,
+ NULL, NULL, NULL,
+ NULL, NULL, NULL);
return 0;
}
@@ -2735,15 +2735,15 @@ void link_unwind(call_frame_t *frame)
inode_t *inode;
if (!local) {
- STACK_UNWIND_STRICT(link,
- frame,
- -1,
- ENOMEM,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL);
+ CRYPT_STACK_UNWIND(link,
+ frame,
+ -1,
+ ENOMEM,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
return;
}
xdata = local->xdata;
@@ -2763,15 +2763,15 @@ void link_unwind(call_frame_t *frame)
if (local->format)
GF_FREE(local->format);
- STACK_UNWIND_STRICT(link,
- frame,
- local->op_ret,
- local->op_errno,
- inode,
- &local->buf,
- &local->prebuf,
- &local->postbuf,
- xdata);
+ CRYPT_STACK_UNWIND(link,
+ frame,
+ local->op_ret,
+ local->op_errno,
+ inode,
+ &local->buf,
+ &local->prebuf,
+ &local->postbuf,
+ xdata);
if (xdata)
dict_unref(xdata);
if (xattr)
@@ -2838,13 +2838,13 @@ void unlink_unwind(call_frame_t *frame)
dict_t *xattr;
if (!local) {
- STACK_UNWIND_STRICT(unlink,
- frame,
- -1,
- ENOMEM,
- NULL,
- NULL,
- NULL);
+ CRYPT_STACK_UNWIND(unlink,
+ frame,
+ -1,
+ ENOMEM,
+ NULL,
+ NULL,
+ NULL);
return;
}
xdata = local->xdata;
@@ -2858,13 +2858,13 @@ void unlink_unwind(call_frame_t *frame)
if (local->format)
GF_FREE(local->format);
- STACK_UNWIND_STRICT(unlink,
- frame,
- local->op_ret,
- local->op_errno,
- &local->prebuf,
- &local->postbuf,
- xdata);
+ CRYPT_STACK_UNWIND(unlink,
+ frame,
+ local->op_ret,
+ local->op_errno,
+ &local->prebuf,
+ &local->postbuf,
+ xdata);
if (xdata)
dict_unref(xdata);
if (xattr)
@@ -2893,16 +2893,16 @@ void rename_unwind(call_frame_t *frame)
struct iatt *postnewparent;
if (!local) {
- STACK_UNWIND_STRICT(rename,
- frame,
- -1,
- ENOMEM,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL);
+ CRYPT_STACK_UNWIND(rename,
+ frame,
+ -1,
+ ENOMEM,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
return;
}
xdata = local->xdata;
@@ -2923,16 +2923,16 @@ void rename_unwind(call_frame_t *frame)
if (local->format)
GF_FREE(local->format);
- STACK_UNWIND_STRICT(rename,
- frame,
- local->op_ret,
- local->op_errno,
- &local->buf,
- &local->prebuf,
- &local->postbuf,
- prenewparent,
- postnewparent,
- xdata);
+ CRYPT_STACK_UNWIND(rename,
+ frame,
+ local->op_ret,
+ local->op_errno,
+ &local->buf,
+ &local->prebuf,
+ &local->postbuf,
+ prenewparent,
+ postnewparent,
+ xdata);
if (xdata)
dict_unref(xdata);
if (xattr)
@@ -3411,12 +3411,12 @@ static void put_one_call_open(call_frame_t *frame)
loc_t *loc = local->loc;
dict_t *xdata = local->xdata;
- STACK_UNWIND_STRICT(open,
- frame,
- local->op_ret,
- local->op_errno,
- fd,
- xdata);
+ CRYPT_STACK_UNWIND(open,
+ frame,
+ local->op_ret,
+ local->op_errno,
+ fd,
+ xdata);
fd_unref(fd);
if (xdata)
dict_unref(xdata);
@@ -3457,15 +3457,15 @@ static int32_t __crypt_readv_done(call_frame_t *frame,
(int)(local->rw_count > 0 ? iov_length(avec, local->data_conf.acount) : 0),
(unsigned long long)local->buf.ia_size);
- STACK_UNWIND_STRICT(readv,
- frame,
- local->rw_count > 0 ? local->rw_count : local->op_ret,
- local->op_errno,
- avec,
- avec ? local->data_conf.acount : 0,
- &local->buf,
- local->iobref,
- local_xdata);
+ CRYPT_STACK_UNWIND(readv,
+ frame,
+ local->rw_count > 0 ? local->rw_count : local->op_ret,
+ local->op_errno,
+ avec,
+ avec ? local->data_conf.acount : 0,
+ &local->buf,
+ local->iobref,
+ local_xdata);
free_avec(avec, pool, blocks_in_pool);
fd_unref(local_fd);
@@ -3563,13 +3563,13 @@ static int32_t __crypt_writev_done(call_frame_t *frame,
gf_log("crypt", GF_LOG_DEBUG,
"writev: ret_to_user: %d", ret_to_user);
- STACK_UNWIND_STRICT(writev,
- frame,
- ret_to_user,
- local->op_errno,
- &local->prebuf,
- &local->postbuf,
- local_xdata);
+ CRYPT_STACK_UNWIND(writev,
+ frame,
+ ret_to_user,
+ local->op_errno,
+ &local->prebuf,
+ &local->postbuf,
+ local_xdata);
fd_unref(local_fd);
if (local_xdata)
dict_unref(local_xdata);
@@ -3680,13 +3680,13 @@ static int32_t __crypt_ftruncate_done(call_frame_t *frame,
(unsigned long long)local->prebuf.ia_size,
(unsigned long long)local->postbuf.ia_size);
- STACK_UNWIND_STRICT(ftruncate,
- frame,
- ((local->op_ret < 0) ? -1 : 0),
- local->op_errno,
- &local->prebuf,
- &local->postbuf,
- local_xdata);
+ CRYPT_STACK_UNWIND(ftruncate,
+ frame,
+ ((local->op_ret < 0) ? -1 : 0),
+ local->op_errno,
+ &local->prebuf,
+ &local->postbuf,
+ local_xdata);
fd_unref(local_fd);
if (local_xdata)
dict_unref(local_xdata);
@@ -3809,41 +3809,41 @@ static int32_t load_file_size(call_frame_t *frame,
}
switch (local->fop) {
case GF_FOP_FSTAT:
- STACK_UNWIND_STRICT(fstat,
- frame,
- op_ret,
- op_errno,
- op_ret >= 0 ? &local->buf : NULL,
- local->xdata);
+ CRYPT_STACK_UNWIND(fstat,
+ frame,
+ op_ret,
+ op_errno,
+ op_ret >= 0 ? &local->buf : NULL,
+ local->xdata);
break;
case GF_FOP_STAT:
- STACK_UNWIND_STRICT(stat,
- frame,
- op_ret,
- op_errno,
- op_ret >= 0 ? &local->buf : NULL,
- local->xdata);
+ CRYPT_STACK_UNWIND(stat,
+ frame,
+ op_ret,
+ op_errno,
+ op_ret >= 0 ? &local->buf : NULL,
+ local->xdata);
break;
case GF_FOP_LOOKUP:
- STACK_UNWIND_STRICT(lookup,
- frame,
- op_ret,
- op_errno,
- op_ret >= 0 ? local->inode : NULL,
- op_ret >= 0 ? &local->buf : NULL,
- local->xdata,
- op_ret >= 0 ? &local->postbuf : NULL);
+ CRYPT_STACK_UNWIND(lookup,
+ frame,
+ op_ret,
+ op_errno,
+ op_ret >= 0 ? local->inode : NULL,
+ op_ret >= 0 ? &local->buf : NULL,
+ local->xdata,
+ op_ret >= 0 ? &local->postbuf : NULL);
break;
case GF_FOP_READ:
- STACK_UNWIND_STRICT(readv,
- frame,
- op_ret,
- op_errno,
- NULL,
- 0,
- op_ret >= 0 ? &local->buf : NULL,
- NULL,
- NULL);
+ CRYPT_STACK_UNWIND(readv,
+ frame,
+ op_ret,
+ op_errno,
+ NULL,
+ 0,
+ op_ret >= 0 ? &local->buf : NULL,
+ NULL,
+ NULL);
break;
default:
gf_log(this->name, GF_LOG_WARNING,
@@ -3907,20 +3907,20 @@ static int32_t crypt_stat_common_cbk(call_frame_t *frame,
}
switch (local->fop) {
case GF_FOP_FSTAT:
- STACK_UNWIND_STRICT(fstat,
- frame,
- op_ret,
- op_errno,
- op_ret >= 0 ? buf : NULL,
- op_ret >= 0 ? xdata : NULL);
+ CRYPT_STACK_UNWIND(fstat,
+ frame,
+ op_ret,
+ op_errno,
+ op_ret >= 0 ? buf : NULL,
+ op_ret >= 0 ? xdata : NULL);
break;
case GF_FOP_STAT:
- STACK_UNWIND_STRICT(stat,
- frame,
- op_ret,
- op_errno,
- op_ret >= 0 ? buf : NULL,
- op_ret >= 0 ? xdata : NULL);
+ CRYPT_STACK_UNWIND(stat,
+ frame,
+ op_ret,
+ op_errno,
+ op_ret >= 0 ? buf : NULL,
+ op_ret >= 0 ? xdata : NULL);
break;
default:
gf_log (this->name, GF_LOG_WARNING,
@@ -3947,12 +3947,12 @@ static int32_t crypt_fstat(call_frame_t *frame,
xdata);
return 0;
error:
- STACK_UNWIND_STRICT(fstat,
- frame,
- -1,
- ENOMEM,
- NULL,
- NULL);
+ CRYPT_STACK_UNWIND(fstat,
+ frame,
+ -1,
+ ENOMEM,
+ NULL,
+ NULL);
return 0;
}
@@ -3983,12 +3983,12 @@ static int32_t crypt_stat(call_frame_t *frame,
xdata);
return 0;
error:
- STACK_UNWIND_STRICT(stat,
- frame,
- -1,
- ENOMEM,
- NULL,
- NULL);
+ CRYPT_STACK_UNWIND(stat,
+ frame,
+ -1,
+ ENOMEM,
+ NULL,
+ NULL);
return 0;
}
@@ -4026,14 +4026,14 @@ static int32_t crypt_lookup_cbk(call_frame_t *frame,
unwind:
loc_wipe(local->loc);
GF_FREE(local->loc);
- STACK_UNWIND_STRICT(lookup,
- frame,
- op_ret,
- op_errno,
- inode,
- buf,
- xdata,
- postparent);
+ CRYPT_STACK_UNWIND(lookup,
+ frame,
+ op_ret,
+ op_errno,
+ inode,
+ buf,
+ xdata,
+ postparent);
return 0;
}
@@ -4065,14 +4065,14 @@ static int32_t crypt_lookup(call_frame_t *frame,
xdata);
return 0;
error:
- STACK_UNWIND_STRICT(lookup,
- frame,
- -1,
- ENOMEM,
- NULL,
- NULL,
- NULL,
- NULL);
+ CRYPT_STACK_UNWIND(lookup,
+ frame,
+ -1,
+ ENOMEM,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
return 0;
}
@@ -4108,7 +4108,7 @@ static int32_t crypt_readdirp_cbk(call_frame_t *frame,
entry->d_stat.ia_size = data_to_uint64(data);
}
unwind:
- STACK_UNWIND_STRICT(readdirp, frame, op_ret, op_errno, entries, xdata);
+ CRYPT_STACK_UNWIND(readdirp, frame, op_ret, op_errno, entries, xdata);
return 0;
}
@@ -4149,7 +4149,7 @@ static int32_t crypt_readdirp(call_frame_t *frame, xlator_t *this,
dict_unref(xdata);
return 0;
error:
- STACK_UNWIND_STRICT(readdirp, frame, -1, ret, NULL, NULL);
+ CRYPT_STACK_UNWIND(readdirp, frame, -1, ret, NULL, NULL);
return 0;
}
@@ -4160,7 +4160,7 @@ static int32_t crypt_access(call_frame_t *frame,
{
gf_log(this->name, GF_LOG_WARNING,
"NFS mounts of encrypted volumes are unsupported");
- STACK_UNWIND_STRICT(access, frame, -1, EPERM, NULL);
+ CRYPT_STACK_UNWIND(access, frame, -1, EPERM, NULL);
return 0;
}
diff --git a/xlators/encryption/crypt/src/crypt.h b/xlators/encryption/crypt/src/crypt.h
index 6c014535f0a..5a2b1a9cc3b 100644
--- a/xlators/encryption/crypt/src/crypt.h
+++ b/xlators/encryption/crypt/src/crypt.h
@@ -876,6 +876,19 @@ static inline mtd_op_t linkop_mtdop_dispatch(glusterfs_fop_t fop)
}
}
+#define CRYPT_STACK_UNWIND(fop, frame, params ...) \
+ do { \
+ crypt_local_t *__local = NULL; \
+ if (frame) { \
+ __local = frame->local; \
+ frame->local = NULL; \
+ } \
+ STACK_UNWIND_STRICT (fop, frame, params); \
+ if (__local) { \
+ GF_FREE (__local); \
+ } \
+ } while (0)
+
#endif /* __CRYPT_H__ */
/*