mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
lz4: check for underruns
While overruns are already being taken care of, underruns (resulting from overflows in the respective "op + length" (or similar) operations weren't. This is CVE-2014-4611. Signed-off-by: Jan Beulich <jbeulich@suse.com> Acked-by: Ian Campbell <ian.campbell@citrix.com>
This commit is contained in:
1 parent
1b7fe9a1a1
commit
9143a6c55e
1 file changed
+8
@@ -84,6 +84,8 @@ static int INIT lz4_uncompress(const unsigned char *source, unsigned char *dest,
|
||||
ip += length;
|
||||
break; /* EOF */
|
||||
}
|
||||
if (unlikely((unsigned long)cpy < (unsigned long)op))
|
||||
goto _output_error;
|
||||
LZ4_WILDCOPY(ip, op, cpy);
|
||||
ip -= (op - cpy);
|
||||
op = cpy;
|
||||
@@ -142,6 +144,8 @@ static int INIT lz4_uncompress(const unsigned char *source, unsigned char *dest,
|
||||
goto _output_error;
|
||||
continue;
|
||||
}
|
||||
if (unlikely((unsigned long)cpy < (unsigned long)op))
|
||||
goto _output_error;
|
||||
LZ4_SECURECOPY(ref, op, cpy);
|
||||
op = cpy; /* correction */
|
||||
}
|
||||
@@ -207,6 +211,8 @@ static int lz4_uncompress_unknownoutputsize(const unsigned char *source,
|
||||
op += length;
|
||||
break;/* Necessarily EOF, due to parsing restrictions */
|
||||
}
|
||||
if (unlikely((unsigned long)cpy < (unsigned long)op))
|
||||
goto _output_error;
|
||||
LZ4_WILDCOPY(ip, op, cpy);
|
||||
ip -= (op - cpy);
|
||||
op = cpy;
|
||||
@@ -270,6 +276,8 @@ static int lz4_uncompress_unknownoutputsize(const unsigned char *source,
|
||||
goto _output_error;
|
||||
continue;
|
||||
}
|
||||
if (unlikely((unsigned long)cpy < (unsigned long)op))
|
||||
goto _output_error;
|
||||
LZ4_SECURECOPY(ref, op, cpy);
|
||||
op = cpy; /* correction */
|
||||
}
|
||||
|
||||