mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 15:14:43 +00:00
fs: ubifs: Fix UBIFS decompression on 64 bit
Add local size_t variable to crypto_comp_decompress as intermediate storage for destination length to avoid memory corruption and incorrect results on 64 bit targets. This is what linux does for the various lz compression implementations. Signed-off-by: Paul Davey <paul.davey@alliedtelesis.co.nz> Cc: Heiko Schocher <hs@denx.de> Tested-by: Heiko Schocher <hs@denx.de>
This commit is contained in:
parent
dd610e616c
commit
e4aa10ba57
1 changed files with 3 additions and 1 deletions
|
@ -125,6 +125,7 @@ crypto_comp_decompress(const struct ubifs_info *c, struct crypto_comp *tfm,
|
|||
{
|
||||
struct ubifs_compressor *compr = ubifs_compressors[tfm->compressor];
|
||||
int err;
|
||||
size_t tmp_len = *dlen;
|
||||
|
||||
if (compr->compr_type == UBIFS_COMPR_NONE) {
|
||||
memcpy(dst, src, slen);
|
||||
|
@ -132,11 +133,12 @@ crypto_comp_decompress(const struct ubifs_info *c, struct crypto_comp *tfm,
|
|||
return 0;
|
||||
}
|
||||
|
||||
err = compr->decompress(src, slen, dst, (size_t *)dlen);
|
||||
err = compr->decompress(src, slen, dst, &tmp_len);
|
||||
if (err)
|
||||
ubifs_err(c, "cannot decompress %d bytes, compressor %s, "
|
||||
"error %d", slen, compr->name, err);
|
||||
|
||||
*dlen = tmp_len;
|
||||
return err;
|
||||
|
||||
return 0;
|
||||
|
|
Loading…
Reference in a new issue