diff options
-rw-r--r-- | meta/recipes-devtools/e2fsprogs/e2fsprogs/extents.patch | 56 | ||||
-rw-r--r-- | meta/recipes-devtools/e2fsprogs/e2fsprogs_1.46.5.bb | 1 |
2 files changed, 57 insertions, 0 deletions
diff --git a/meta/recipes-devtools/e2fsprogs/e2fsprogs/extents.patch b/meta/recipes-devtools/e2fsprogs/e2fsprogs/extents.patch new file mode 100644 index 0000000000..ffaecc622a --- /dev/null +++ b/meta/recipes-devtools/e2fsprogs/e2fsprogs/extents.patch | |||
@@ -0,0 +1,56 @@ | |||
1 | CVE: CVE-2022-1304 | ||
2 | Upstream-Status: Submitted [https://lore.kernel.org/linux-ext4/20220421173148.20193-1-lczerner@redhat.com/] | ||
3 | Signed-off-by: Ross Burton <ross.burton@arm.com> | ||
4 | |||
5 | From 347084c9c1ad20f47dae16f5a3dcd8628d5fc7b0 Mon Sep 17 00:00:00 2001 | ||
6 | From: Lukas Czerner <lczerner@redhat.com> | ||
7 | Date: Thu, 21 Apr 2022 19:31:48 +0200 | ||
8 | Subject: [PATCH] e2fsprogs: add sanity check to extent manipulation | ||
9 | |||
10 | It is possible to have a corrupted extent tree in such a way that a leaf | ||
11 | node contains zero extents in it. Currently if that happens and we try | ||
12 | to traverse the tree we can end up accessing wrong data, or possibly | ||
13 | even uninitialized memory. Make sure we don't do that. | ||
14 | |||
15 | Additionally make sure that we have a sane number of bytes passed to | ||
16 | memmove() in ext2fs_extent_delete(). | ||
17 | |||
18 | Note that e2fsck is currently unable to spot and fix such corruption in | ||
19 | pass1. | ||
20 | |||
21 | Signed-off-by: Lukas Czerner <lczerner@redhat.com> | ||
22 | Reported-by: Nils Bars <nils_bars@t-online.de> | ||
23 | Addressess: https://bugzilla.redhat.com/show_bug.cgi?id=2068113 | ||
24 | --- | ||
25 | lib/ext2fs/extent.c | 8 ++++++++ | ||
26 | 1 file changed, 8 insertions(+) | ||
27 | |||
28 | diff --git a/lib/ext2fs/extent.c b/lib/ext2fs/extent.c | ||
29 | index b324c7b0..1a206a16 100644 | ||
30 | --- a/lib/ext2fs/extent.c | ||
31 | +++ b/lib/ext2fs/extent.c | ||
32 | @@ -495,6 +495,10 @@ retry: | ||
33 | ext2fs_le16_to_cpu(eh->eh_entries); | ||
34 | newpath->max_entries = ext2fs_le16_to_cpu(eh->eh_max); | ||
35 | |||
36 | + /* Make sure there is at least one extent present */ | ||
37 | + if (newpath->left <= 0) | ||
38 | + return EXT2_ET_EXTENT_NO_DOWN; | ||
39 | + | ||
40 | if (path->left > 0) { | ||
41 | ix++; | ||
42 | newpath->end_blk = ext2fs_le32_to_cpu(ix->ei_block); | ||
43 | @@ -1630,6 +1634,10 @@ errcode_t ext2fs_extent_delete(ext2_extent_handle_t handle, int flags) | ||
44 | |||
45 | cp = path->curr; | ||
46 | |||
47 | + /* Sanity check before memmove() */ | ||
48 | + if (path->left < 0) | ||
49 | + return EXT2_ET_EXTENT_LEAF_BAD; | ||
50 | + | ||
51 | if (path->left) { | ||
52 | memmove(cp, cp + sizeof(struct ext3_extent_idx), | ||
53 | path->left * sizeof(struct ext3_extent_idx)); | ||
54 | -- | ||
55 | 2.25.1 | ||
56 | |||
diff --git a/meta/recipes-devtools/e2fsprogs/e2fsprogs_1.46.5.bb b/meta/recipes-devtools/e2fsprogs/e2fsprogs_1.46.5.bb index 16c183eed3..ec48f419c7 100644 --- a/meta/recipes-devtools/e2fsprogs/e2fsprogs_1.46.5.bb +++ b/meta/recipes-devtools/e2fsprogs/e2fsprogs_1.46.5.bb | |||
@@ -4,6 +4,7 @@ SRC_URI += "file://remove.ldconfig.call.patch \ | |||
4 | file://run-ptest \ | 4 | file://run-ptest \ |
5 | file://ptest.patch \ | 5 | file://ptest.patch \ |
6 | file://mkdir_p.patch \ | 6 | file://mkdir_p.patch \ |
7 | file://extents.patch \ | ||
7 | " | 8 | " |
8 | SRC_URI:append:class-native = " \ | 9 | SRC_URI:append:class-native = " \ |
9 | file://e2fsprogs-fix-missing-check-for-permission-denied.patch \ | 10 | file://e2fsprogs-fix-missing-check-for-permission-denied.patch \ |