david/ipxe
david
/
ipxe
Archived
1
0
Fork 0

[peerdist] Avoid NULL pointer dereference for plaintext blocks

Avoid accidentally dereferencing a NULL cipher context pointer for
plaintext blocks (which are usually messages with a block length of
zero, indicating a missing block).

Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
Michael Brown 2015-09-29 01:24:36 +01:00
parent f3fbb5ff1c
commit 0a4805bf94
1 changed files with 10 additions and 7 deletions

View File

@ -700,17 +700,20 @@ static int peerblk_parse_header ( struct peerdist_block *peerblk ) {
return -EPROTO;
}
/* Allocate cipher context. Freeing the cipher context (on
* error or otherwise) is handled by peerblk_reset().
/* Allocate cipher context, if applicable. Freeing the cipher
* context (on error or otherwise) is handled by peerblk_reset().
*/
peerblk->cipher = cipher;
assert ( peerblk->cipherctx == NULL );
peerblk->cipherctx = malloc ( cipher->ctxsize );
if ( ! peerblk->cipherctx )
return -ENOMEM;
if ( cipher ) {
peerblk->cipherctx = malloc ( cipher->ctxsize );
if ( ! peerblk->cipherctx )
return -ENOMEM;
}
/* Initialise cipher */
if ( ( rc = cipher_setkey ( cipher, peerblk->cipherctx, peerblk->secret,
/* Initialise cipher, if applicable */
if ( cipher &&
( rc = cipher_setkey ( cipher, peerblk->cipherctx, peerblk->secret,
keylen ) ) != 0 ) {
DBGC ( peerblk, "PEERBLK %p %d.%d could not set key: %s\n",
peerblk, peerblk->segment, peerblk->block,