]> git.baikalelectronics.ru Git - kernel.git/commit
s390/decompressor: specify __decompress() buf len to avoid overflow
authorVasily Gorbik <gor@linux.ibm.com>
Sun, 29 Jan 2023 22:47:23 +0000 (23:47 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 22 Feb 2023 11:59:43 +0000 (12:59 +0100)
commitdc183965b2e3a671750b9691c79b554a8ac3846d
tree9a0fb86aa0c0ddd0d104d6dc1276165aa4c34102
parentb478ced19a48557c322dfeb595a6384b46047ab6
s390/decompressor: specify __decompress() buf len to avoid overflow

[ Upstream commit f183c1c9a95f267e50679435541fc87df4d4e5b9 ]

Historically calls to __decompress() didn't specify "out_len" parameter
on many architectures including s390, expecting that no writes beyond
uncompressed kernel image are performed. This has changed since commit
6c9988762aba ("zstd: import usptream v1.5.2") which includes zstd library
commit 6a7ede3dfccb ("Reduce size of dctx by reutilizing dst buffer
(#2751)"). Now zstd decompression code might store literal buffer in
the unwritten portion of the destination buffer. Since "out_len" is
not set, it is considered to be unlimited and hence free to use for
optimization needs. On s390 this might corrupt initrd or ipl report
which are often placed right after the decompressor buffer. Luckily the
size of uncompressed kernel image is already known to the decompressor,
so to avoid the problem simply specify it in the "out_len" parameter.

Link: https://github.com/facebook/zstd/commit/6a7ede3dfccb
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
Tested-by: Alexander Egorenkov <egorenar@linux.ibm.com>
Link: https://lore.kernel.org/r/patch-1.thread-41c676.git-41c676c2d153.your-ad-here.call-01675030179-ext-9637@work.hours
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
arch/s390/boot/decompressor.c