Message ID | 20200326053556.20492-2-wqu@suse.com |
---|---|
State | Accepted |
Commit | 25babb7c1b52bbe62ff9433c07f9e491b9d1b6af |
Headers | show |
Series | fs: btrfs: Fix false LZO decompression error due to missing page boundary check | expand |
On Thu, 26 Mar 2020 13:35:54 +0800 Qu Wenruo <wqu at suse.com> wrote: > Just a cleanup. These immediate numbers make my eyes hurt. > > Signed-off-by: Qu Wenruo <wqu at suse.com> > Cc: Marek Behun <marek.behun at nic.cz> > --- > fs/btrfs/compression.c | 22 ++++++++++++---------- > 1 file changed, 12 insertions(+), 10 deletions(-) > > diff --git a/fs/btrfs/compression.c b/fs/btrfs/compression.c > index 346875d45a1b..4ef44ce11485 100644 > --- a/fs/btrfs/compression.c > +++ b/fs/btrfs/compression.c > @@ -12,36 +12,38 @@ > #include <u-boot/zlib.h> > #include <asm/unaligned.h> > > +/* Header for each segment, LE32, recording the compressed size */ > +#define LZO_LEN 4 > static u32 decompress_lzo(const u8 *cbuf, u32 clen, u8 *dbuf, u32 dlen) > { > u32 tot_len, in_len, res; > size_t out_len; > int ret; > > - if (clen < 4) > + if (clen < LZO_LEN) > return -1; > > tot_len = le32_to_cpu(get_unaligned((u32 *)cbuf)); > - cbuf += 4; > - clen -= 4; > - tot_len -= 4; > + cbuf += LZO_LEN; > + clen -= LZO_LEN; > + tot_len -= LZO_LEN; > > if (tot_len == 0 && dlen) > return -1; > - if (tot_len < 4) > + if (tot_len < LZO_LEN) > return -1; > > res = 0; > > - while (tot_len > 4) { > + while (tot_len > LZO_LEN) { > in_len = le32_to_cpu(get_unaligned((u32 *)cbuf)); > - cbuf += 4; > - clen -= 4; > + cbuf += LZO_LEN; > + clen -= LZO_LEN; > > - if (in_len > clen || tot_len < 4 + in_len) > + if (in_len > clen || tot_len < LZO_LEN + in_len) > return -1; > > - tot_len -= 4 + in_len; > + tot_len -= (LZO_LEN + in_len); > > out_len = dlen; > ret = lzo1x_decompress_safe(cbuf, in_len, dbuf, &out_len); Reviewed-by: Marek Beh?n <marek.behun at nic.cz>
diff --git a/fs/btrfs/compression.c b/fs/btrfs/compression.c index 346875d45a1b..4ef44ce11485 100644 --- a/fs/btrfs/compression.c +++ b/fs/btrfs/compression.c @@ -12,36 +12,38 @@ #include <u-boot/zlib.h> #include <asm/unaligned.h> +/* Header for each segment, LE32, recording the compressed size */ +#define LZO_LEN 4 static u32 decompress_lzo(const u8 *cbuf, u32 clen, u8 *dbuf, u32 dlen) { u32 tot_len, in_len, res; size_t out_len; int ret; - if (clen < 4) + if (clen < LZO_LEN) return -1; tot_len = le32_to_cpu(get_unaligned((u32 *)cbuf)); - cbuf += 4; - clen -= 4; - tot_len -= 4; + cbuf += LZO_LEN; + clen -= LZO_LEN; + tot_len -= LZO_LEN; if (tot_len == 0 && dlen) return -1; - if (tot_len < 4) + if (tot_len < LZO_LEN) return -1; res = 0; - while (tot_len > 4) { + while (tot_len > LZO_LEN) { in_len = le32_to_cpu(get_unaligned((u32 *)cbuf)); - cbuf += 4; - clen -= 4; + cbuf += LZO_LEN; + clen -= LZO_LEN; - if (in_len > clen || tot_len < 4 + in_len) + if (in_len > clen || tot_len < LZO_LEN + in_len) return -1; - tot_len -= 4 + in_len; + tot_len -= (LZO_LEN + in_len); out_len = dlen; ret = lzo1x_decompress_safe(cbuf, in_len, dbuf, &out_len);
Just a cleanup. These immediate numbers make my eyes hurt. Signed-off-by: Qu Wenruo <wqu at suse.com> Cc: Marek Behun <marek.behun at nic.cz> --- fs/btrfs/compression.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-)