diff --git a/ChangeLog b/ChangeLog index 3d8ba00e4..8349cb7bd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-11-12 Vladimir Serbinenko + + * grub-core/io/lzopio.c: Remove variable length arrays. + 2013-11-12 Vladimir Serbinenko * include/grub/crypto.h: Add maximums on hash size and cipher block diff --git a/grub-core/io/lzopio.c b/grub-core/io/lzopio.c index 0e7e2e56b..2895e2102 100644 --- a/grub-core/io/lzopio.c +++ b/grub-core/io/lzopio.c @@ -166,15 +166,17 @@ read_block_data (struct grub_lzopio *lzopio) if (lzopio->ccheck_fun) { - GRUB_PROPERLY_ALIGNED_ARRAY (context, lzopio->ccheck_fun->contextsize); + grub_uint8_t computed_hash[GRUB_CRYPTO_MAX_MDLEN]; - lzopio->ccheck_fun->init (context); - lzopio->ccheck_fun->write (context, lzopio->block.cdata, - lzopio->block.csize); - lzopio->ccheck_fun->final (context); + if (lzopio->ccheck_fun->mdlen > GRUB_CRYPTO_MAX_MDLEN) + return -1; + + grub_crypto_hash (lzopio->ccheck_fun, computed_hash, + lzopio->block.cdata, + lzopio->block.csize); if (grub_memcmp - (lzopio->ccheck_fun->read (context), &lzopio->block.ccheck, + (computed_hash, &lzopio->block.ccheck, sizeof (lzopio->block.ccheck)) != 0) return -1; } @@ -212,15 +214,17 @@ uncompress_block (struct grub_lzopio *lzopio) if (lzopio->ucheck_fun) { - GRUB_PROPERLY_ALIGNED_ARRAY (context, lzopio->ucheck_fun->contextsize); + grub_uint8_t computed_hash[GRUB_CRYPTO_MAX_MDLEN]; - lzopio->ucheck_fun->init (context); - lzopio->ucheck_fun->write (context, lzopio->block.udata, - lzopio->block.usize); - lzopio->ucheck_fun->final (context); + if (lzopio->ucheck_fun->mdlen > GRUB_CRYPTO_MAX_MDLEN) + return -1; + + grub_crypto_hash (lzopio->ucheck_fun, computed_hash, + lzopio->block.udata, + lzopio->block.usize); if (grub_memcmp - (lzopio->ucheck_fun->read (context), &lzopio->block.ucheck, + (computed_hash, &lzopio->block.ucheck, sizeof (lzopio->block.ucheck)) != 0) return -1; }