diff options
author | Adrian-Ken Rueegsegger <ken@codelabs.ch> | 2012-11-12 12:08:32 +0100 |
---|---|---|
committer | Tobias Brunner <tobias@strongswan.org> | 2013-03-19 15:23:49 +0100 |
commit | d2371b728c645e93823a82b2ffc1b587e1b2b32f (patch) | |
tree | 2388e381a32adaa7cfe5357609c7c20b79957fd1 /src | |
parent | 3360bad9106938751cf06fd8a64bfe1e1c3d6940 (diff) | |
download | strongswan-d2371b728c645e93823a82b2ffc1b587e1b2b32f.tar.bz2 strongswan-d2371b728c645e93823a82b2ffc1b587e1b2b32f.tar.xz |
Check that chunk fits into sequence when converting
Diffstat (limited to 'src')
-rw-r--r-- | src/charon-tkm/src/tkm/tkm_utils.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/charon-tkm/src/tkm/tkm_utils.c b/src/charon-tkm/src/tkm/tkm_utils.c index 28fcdd1d1..e0c3e5752 100644 --- a/src/charon-tkm/src/tkm/tkm_utils.c +++ b/src/charon-tkm/src/tkm/tkm_utils.c @@ -14,6 +14,8 @@ * for more details. */ +#include <utils/debug.h> + #include "tkm_utils.h" /* Generic variable-length sequence */ @@ -33,8 +35,18 @@ void sequence_to_chunk(const byte_t * const first, const uint32_t len, void chunk_to_sequence(const chunk_t * const chunk, void *sequence, const uint32_t typelen) { + const uint32_t seqlenmax = typelen - sizeof(uint32_t); memset(sequence, 0, typelen); sequence_type *seq = sequence; - seq->size = chunk->len; + if (chunk->len > seqlenmax) + { + DBG1(DBG_LIB, "chunk too large to fit into sequence %d > %d, limiting" + " to %d bytes", chunk->len, seqlenmax, seqlenmax); + seq->size = seqlenmax; + } + else + { + seq->size = chunk->len; + } memcpy(seq->data, chunk->ptr, seq->size); } |