Skip to content

Commit 5559740

Browse files
committed
pstore: Avoid size casts for 842 compression
Instead of casting, make sure we don't end up with giant values and just perform regular assignments with unsigned int instead of re-cast size_t. Signed-off-by: Kees Cook <keescook@chromium.org>
1 parent 239b716 commit 5559740

File tree

1 file changed

+14
-4
lines changed

1 file changed

+14
-4
lines changed

fs/pstore/platform.c

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -452,27 +452,37 @@ static const struct pstore_zbackend backend_lz4hc = {
452452
static int compress_842(const void *in, void *out, size_t inlen, size_t outlen)
453453
{
454454
int ret;
455+
unsigned int size;
455456

456-
ret = sw842_compress(in, inlen, out, (unsigned int *)&outlen, workspace);
457+
if (outlen > UINT_MAX)
458+
return -EIO;
459+
size = outlen;
460+
461+
ret = sw842_compress(in, inlen, out, &size, workspace);
457462
if (ret) {
458463
pr_err("sw842_compress error; compression failed!\n");
459464
return ret;
460465
}
461466

462-
return outlen;
467+
return size;
463468
}
464469

465470
static int decompress_842(void *in, void *out, size_t inlen, size_t outlen)
466471
{
467472
int ret;
473+
unsigned int size;
468474

469-
ret = sw842_decompress(in, inlen, out, (unsigned int *)&outlen);
475+
if (outlen > UINT_MAX)
476+
return -EIO;
477+
size = outlen;
478+
479+
ret = sw842_decompress(in, inlen, out, &size);
470480
if (ret) {
471481
pr_err("sw842_decompress error, ret = %d!\n", ret);
472482
return ret;
473483
}
474484

475-
return outlen;
485+
return size;
476486
}
477487

478488
static void allocate_842(void)

0 commit comments

Comments
 (0)