summaryrefslogtreecommitdiff
path: root/usr/src/common/crypto/modes/modes.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/common/crypto/modes/modes.c')
-rw-r--r--usr/src/common/crypto/modes/modes.c32
1 files changed, 26 insertions, 6 deletions
diff --git a/usr/src/common/crypto/modes/modes.c b/usr/src/common/crypto/modes/modes.c
index f5753bfc72..972f30b2df 100644
--- a/usr/src/common/crypto/modes/modes.c
+++ b/usr/src/common/crypto/modes/modes.c
@@ -23,8 +23,6 @@
* Use is subject to license terms.
*/
-#pragma ident "%Z%%M% %I% %E% SMI"
-
#ifndef _KERNEL
#include <stdlib.h>
#endif
@@ -172,25 +170,33 @@ crypto_free_mode_ctx(void *ctx)
{
common_ctx_t *common_ctx = (common_ctx_t *)ctx;
- if (common_ctx->cc_flags & ECB_MODE)
+ switch (common_ctx->cc_flags &
+ (ECB_MODE|CBC_MODE|CTR_MODE|CCM_MODE|GCM_MODE)) {
+ case ECB_MODE:
#ifdef _KERNEL
kmem_free(common_ctx, sizeof (ecb_ctx_t));
#else
free(common_ctx);
#endif
- else if (common_ctx->cc_flags & CBC_MODE)
+ break;
+
+ case CBC_MODE:
#ifdef _KERNEL
kmem_free(common_ctx, sizeof (cbc_ctx_t));
#else
free(common_ctx);
#endif
- else if (common_ctx->cc_flags & CTR_MODE)
+ break;
+
+ case CTR_MODE:
#ifdef _KERNEL
kmem_free(common_ctx, sizeof (ctr_ctx_t));
#else
free(common_ctx);
#endif
- else if (common_ctx->cc_flags & CCM_MODE) {
+ break;
+
+ case CCM_MODE:
#ifdef _KERNEL
if (((ccm_ctx_t *)ctx)->ccm_pt_buf != NULL)
kmem_free(((ccm_ctx_t *)ctx)->ccm_pt_buf,
@@ -202,5 +208,19 @@ crypto_free_mode_ctx(void *ctx)
free(((ccm_ctx_t *)ctx)->ccm_pt_buf);
free(ctx);
#endif
+ break;
+
+ case GCM_MODE:
+#ifdef _KERNEL
+ if (((gcm_ctx_t *)ctx)->gcm_pt_buf != NULL)
+ kmem_free(((gcm_ctx_t *)ctx)->gcm_pt_buf,
+ ((gcm_ctx_t *)ctx)->gcm_pt_buf_len);
+
+ kmem_free(ctx, sizeof (gcm_ctx_t));
+#else
+ if (((gcm_ctx_t *)ctx)->gcm_pt_buf != NULL)
+ free(((gcm_ctx_t *)ctx)->gcm_pt_buf);
+ free(ctx);
+#endif
}
}