diff options
author | Chen Qi <Qi.Chen@windriver.com> | 2021-07-07 14:37:48 +0530 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2021-07-15 15:27:49 +0100 |
commit | 1fe2f91cf39dd43661c7e229a48ec50cdc28b7bc (patch) | |
tree | 8afe460461e05c0d7d87b0e4671323a9a81868f2 /meta/recipes-core/busybox/busybox | |
parent | bfbd3253b629b464246525cf42633bae896cfd62 (diff) | |
download | poky-1fe2f91cf39dd43661c7e229a48ec50cdc28b7bc.tar.gz |
busybox: fix CVE-2021-28831
Backport patch to fix CVE-2021-28831.
(From OE-Core rev: e579dbd9a6b2472ca90f411c0b594da9e38c9aca)
(From OE-Core rev: 42098fd740fe3de68a221fcc9c44ead545757461)
Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Signed-off-by: Akash Hadke <akash.hadke@kpit.com>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/recipes-core/busybox/busybox')
-rw-r--r-- | meta/recipes-core/busybox/busybox/0001-decompress_gunzip-Fix-DoS-if-gzip-is-corrupt.patch | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/meta/recipes-core/busybox/busybox/0001-decompress_gunzip-Fix-DoS-if-gzip-is-corrupt.patch b/meta/recipes-core/busybox/busybox/0001-decompress_gunzip-Fix-DoS-if-gzip-is-corrupt.patch new file mode 100644 index 0000000000..b75f0907e7 --- /dev/null +++ b/meta/recipes-core/busybox/busybox/0001-decompress_gunzip-Fix-DoS-if-gzip-is-corrupt.patch | |||
@@ -0,0 +1,51 @@ | |||
1 | From fe791386ebc270219ca00406c9fdadc5130b64ee Mon Sep 17 00:00:00 2001 | ||
2 | From: Samuel Sapalski <samuel.sapalski@nokia.com> | ||
3 | Date: Wed, 3 Mar 2021 16:31:22 +0100 | ||
4 | Subject: [PATCH] decompress_gunzip: Fix DoS if gzip is corrupt | ||
5 | |||
6 | On certain corrupt gzip files, huft_build will set the error bit on | ||
7 | the result pointer. If afterwards abort_unzip is called huft_free | ||
8 | might run into a segmentation fault or an invalid pointer to | ||
9 | free(p). | ||
10 | |||
11 | In order to mitigate this, we check in huft_free if the error bit | ||
12 | is set and clear it before the linked list is freed. | ||
13 | |||
14 | Signed-off-by: Samuel Sapalski <samuel.sapalski@nokia.com> | ||
15 | Signed-off-by: Peter Kaestle <peter.kaestle@nokia.com> | ||
16 | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com> | ||
17 | |||
18 | Upstream-Status: Backport | ||
19 | CVE: CVE-2021-28831 | ||
20 | Comment: One hunk from this patch is removed as it was not relevant. | ||
21 | Signed-off-by: Chen Qi <Qi.Chen@windriver.com> | ||
22 | Signed-off-by: Akash Hadke <Akash.Hadke@kpit.com> | ||
23 | --- | ||
24 | archival/libarchive/decompress_gunzip.c | 12 ++++++++++-- | ||
25 | 1 file changed, 10 insertions(+), 2 deletions(-) | ||
26 | |||
27 | diff --git a/archival/libarchive/decompress_gunzip.c b/archival/libarchive/decompress_gunzip.c | ||
28 | index eb3b64930..e93cd5005 100644 | ||
29 | --- a/archival/libarchive/decompress_gunzip.c | ||
30 | +++ b/archival/libarchive/decompress_gunzip.c | ||
31 | @@ -220,10 +220,20 @@ static const uint8_t border[] ALIGN1 = { | ||
32 | * each table. | ||
33 | * t: table to free | ||
34 | */ | ||
35 | +#define BAD_HUFT(p) ((uintptr_t)(p) & 1) | ||
36 | +#define ERR_RET ((huft_t*)(uintptr_t)1) | ||
37 | static void huft_free(huft_t *p) | ||
38 | { | ||
39 | huft_t *q; | ||
40 | |||
41 | + /* | ||
42 | + * If 'p' has the error bit set we have to clear it, otherwise we might run | ||
43 | + * into a segmentation fault or an invalid pointer to free(p) | ||
44 | + */ | ||
45 | + if (BAD_HUFT(p)) { | ||
46 | + p = (huft_t*)((uintptr_t)(p) ^ (uintptr_t)(ERR_RET)); | ||
47 | + } | ||
48 | + | ||
49 | /* Go through linked list, freeing from the malloced (t[-1]) address. */ | ||
50 | while (p) { | ||
51 | q = (--p)->v.t; | ||