summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorMiloslav Trmač <mitr@redhat.com>2010-11-15 21:43:41 +0100
committerMiloslav Trmač <mitr@redhat.com>2010-11-15 21:43:41 +0100
commit3724774d26cdf4c067935ba3df5cb4824c201d84 (patch)
tree87c44ab5fdc1c355c17f3e4c54ff4a02e45d59d9 /lib
parenta285eb9f51f59bd3f12426dc574f5bfd7ae2cd04 (diff)
downloadncrypto-3724774d26cdf4c067935ba3df5cb4824c201d84.tar.gz
ncrypto-3724774d26cdf4c067935ba3df5cb4824c201d84.tar.xz
ncrypto-3724774d26cdf4c067935ba3df5cb4824c201d84.zip
Detect integer overflow in cmsg size computation
Diffstat (limited to 'lib')
-rw-r--r--lib/ncrypto_alg.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/lib/ncrypto_alg.c b/lib/ncrypto_alg.c
index dcb6e02..3cfda6a 100644
--- a/lib/ncrypto_alg.c
+++ b/lib/ncrypto_alg.c
@@ -919,7 +919,7 @@ ncr_symm_cipher_change_iv (struct ncr_symm_cipher_session *sess, const void *iv,
g_return_val_if_fail (iv != NULL || iv_size == 0, CKR_ARGUMENTS_BAD);
/* Implicitly restricts iv_size so that it fits into iv_header.ivlen */
cmsg_space = CMSG_SPACE (sizeof (iv_header) + iv_size);
- g_return_val_if_fail (cmsg_space <= sizeof (cmsg_buf),
+ g_return_val_if_fail (cmsg_space > iv_size && cmsg_space <= sizeof (cmsg_buf),
CKR_MECHANISM_PARAM_INVALID);
/* The IV might be left pending until the first actual data arrives, saving
@@ -967,7 +967,8 @@ symm_cipher_init (struct ncr_symm_cipher_session *sess, bool encrypt,
g_return_val_if_fail (param != NULL || param_size == 0, CKR_ARGUMENTS_BAD);
/* Implicitly restricts param_size so that it fits into iv.ivlen */
cmsg_space = CMSG_SPACE (sizeof (iv) + param_size);
- g_return_val_if_fail (cmsg_space <= sizeof (cmsg_buf),
+ g_return_val_if_fail (cmsg_space > param_size
+ && cmsg_space <= sizeof (cmsg_buf),
CKR_MECHANISM_PARAM_INVALID);
switch (sess->mech)