projects
/
moonshot.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
d3157d7
)
integrity protect subtoken length
author
Luke Howard
<lukeh@padl.com>
Sat, 16 Jul 2011 11:56:54 +0000
(11:56 +0000)
committer
Luke Howard
<lukeh@padl.com>
Sat, 16 Jul 2011 11:56:54 +0000
(11:56 +0000)
moonshot/mech_eap/util_context.c
patch
|
blob
|
history
diff --git
a/moonshot/mech_eap/util_context.c
b/moonshot/mech_eap/util_context.c
index
5c6bbc8
..
8ed7494
100644
(file)
--- a/
moonshot/mech_eap/util_context.c
+++ b/
moonshot/mech_eap/util_context.c
@@
-235,29
+235,37
@@
gssEapMakeOrVerifyTokenMIC(OM_uint32 *minor,
int verifyMIC)
{
OM_uint32 major;
int verifyMIC)
{
OM_uint32 major;
- gss_iov_buffer_desc *iov;
+ gss_iov_buffer_desc *iov
= NULL
;
size_t i = 0, j;
enum gss_eap_token_type tokType;
OM_uint32 micTokType;
unsigned char wireTokType[2];
size_t i = 0, j;
enum gss_eap_token_type tokType;
OM_uint32 micTokType;
unsigned char wireTokType[2];
- unsigned char *innerTokTypes;
+ unsigned char *innerTokTypes
= NULL, *innerTokLengths = NULL
;
const struct gss_eap_token_buffer_set *tokens;
tokens = verifyMIC ? ctx->inputTokens : ctx->outputTokens;
assert(tokens != NULL);
const struct gss_eap_token_buffer_set *tokens;
tokens = verifyMIC ? ctx->inputTokens : ctx->outputTokens;
assert(tokens != NULL);
- iov = GSSEAP_CALLOC(2 + (
2
* tokens->buffers.count) + 1, sizeof(*iov));
+ iov = GSSEAP_CALLOC(2 + (
3
* tokens->buffers.count) + 1, sizeof(*iov));
if (iov == NULL) {
if (iov == NULL) {
+ major = GSS_S_FAILURE;
*minor = ENOMEM;
*minor = ENOMEM;
-
return GSS_S_FAILURE
;
+
goto cleanup
;
}
innerTokTypes = GSSEAP_MALLOC(4 * tokens->buffers.count);
if (innerTokTypes == NULL) {
}
innerTokTypes = GSSEAP_MALLOC(4 * tokens->buffers.count);
if (innerTokTypes == NULL) {
- GSSEAP_FREE(iov);
*minor = ENOMEM;
*minor = ENOMEM;
- return GSS_S_FAILURE;
+ major = GSS_S_FAILURE;
+ goto cleanup;
+ }
+
+ innerTokLengths = GSSEAP_MALLOC(4 * tokens->buffers.count);
+ if (innerTokLengths == NULL) {
+ major = GSS_S_FAILURE;
+ *minor = ENOMEM;
+ goto cleanup;
}
/* Mechanism OID */
}
/* Mechanism OID */
@@
-295,6
+303,13
@@
gssEapMakeOrVerifyTokenMIC(OM_uint32 *minor,
i++;
iov[i].type = GSS_IOV_BUFFER_TYPE_DATA;
i++;
iov[i].type = GSS_IOV_BUFFER_TYPE_DATA;
+ iov[i].buffer.length = 4;
+ iov[i].buffer.value = &innerTokLengths[j * 4];
+ store_uint32_be(tokens->buffers.elements[j].length,
+ iov[i].buffer.value);
+ i++;
+
+ iov[i].type = GSS_IOV_BUFFER_TYPE_DATA;
iov[i].buffer = tokens->buffers.elements[j];
i++;
}
iov[i].buffer = tokens->buffers.elements[j];
i++;
}
@@
-324,8
+339,13
@@
gssEapMakeOrVerifyTokenMIC(OM_uint32 *minor,
*tokenMIC = iov[i - 1].buffer;
}
*tokenMIC = iov[i - 1].buffer;
}
- gssEapReleaseIov(iov, tokens->buffers.count);
- GSSEAP_FREE(innerTokTypes);
+cleanup:
+ if (iov != NULL)
+ gssEapReleaseIov(iov, tokens->buffers.count);
+ if (innerTokTypes != NULL)
+ GSSEAP_FREE(innerTokTypes);
+ if (innerTokLengths != NULL)
+ GSSEAP_FREE(innerTokLengths);
return major;
}
return major;
}