diff options
-rw-r--r-- | meta/recipes-core/busybox/busybox/0001-decompress_gunzip-Fix-DoS-if-gzip-is-corrupt.patch | 51 | ||||
-rw-r--r-- | meta/recipes-core/busybox/busybox_1.31.1.bb | 3 |
2 files changed, 53 insertions, 1 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; | ||
diff --git a/meta/recipes-core/busybox/busybox_1.31.1.bb b/meta/recipes-core/busybox/busybox_1.31.1.bb index 7563368287..f7808f4d84 100644 --- a/meta/recipes-core/busybox/busybox_1.31.1.bb +++ b/meta/recipes-core/busybox/busybox_1.31.1.bb | |||
@@ -50,7 +50,8 @@ SRC_URI = "https://busybox.net/downloads/busybox-${PV}.tar.bz2;name=tarball \ | |||
50 | file://0001-sysctl-ignore-EIO-of-stable_secret-below-proc-sys-ne.patch \ | 50 | file://0001-sysctl-ignore-EIO-of-stable_secret-below-proc-sys-ne.patch \ |
51 | file://busybox-CVE-2018-1000500.patch \ | 51 | file://busybox-CVE-2018-1000500.patch \ |
52 | file://0001-hwclock-make-glibc-2.31-compatible.patch \ | 52 | file://0001-hwclock-make-glibc-2.31-compatible.patch \ |
53 | " | 53 | file://0001-decompress_gunzip-Fix-DoS-if-gzip-is-corrupt.patch \ |
54 | " | ||
54 | SRC_URI_append_libc-musl = " file://musl.cfg " | 55 | SRC_URI_append_libc-musl = " file://musl.cfg " |
55 | 56 | ||
56 | SRC_URI[tarball.md5sum] = "70913edaf2263a157393af07565c17f0" | 57 | SRC_URI[tarball.md5sum] = "70913edaf2263a157393af07565c17f0" |