e2fsprogs: Fix CVE-2022-1304
This fixes CVE-2022-1304: An out-of-bounds read/write vulnerability was found in e2fsprogs 1.46.5. This issue leads to a segmentation fault and possibly arbitrary code execution via a specially crafted filesystem. Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
This commit is contained in:
		| @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk | |||||||
|  |  | ||||||
| PKG_NAME:=e2fsprogs | PKG_NAME:=e2fsprogs | ||||||
| PKG_VERSION:=1.46.5 | PKG_VERSION:=1.46.5 | ||||||
| PKG_RELEASE:=1 | PKG_RELEASE:=2 | ||||||
|  |  | ||||||
| PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz | PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz | ||||||
| PKG_SOURCE_URL:=@KERNEL/linux/kernel/people/tytso/e2fsprogs/v$(PKG_VERSION)/ | PKG_SOURCE_URL:=@KERNEL/linux/kernel/people/tytso/e2fsprogs/v$(PKG_VERSION)/ | ||||||
|   | |||||||
| @@ -0,0 +1,50 @@ | |||||||
|  | From ab51d587bb9b229b1fade1afd02e1574c1ba5c76 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Lukas Czerner <lczerner@redhat.com> | ||||||
|  | Date: Thu, 21 Apr 2022 19:31:48 +0200 | ||||||
|  | Subject: libext2fs: add sanity check to extent manipulation | ||||||
|  |  | ||||||
|  | It is possible to have a corrupted extent tree in such a way that a leaf | ||||||
|  | node contains zero extents in it. Currently if that happens and we try | ||||||
|  | to traverse the tree we can end up accessing wrong data, or possibly | ||||||
|  | even uninitialized memory. Make sure we don't do that. | ||||||
|  |  | ||||||
|  | Additionally make sure that we have a sane number of bytes passed to | ||||||
|  | memmove() in ext2fs_extent_delete(). | ||||||
|  |  | ||||||
|  | Note that e2fsck is currently unable to spot and fix such corruption in | ||||||
|  | pass1. | ||||||
|  |  | ||||||
|  | Signed-off-by: Lukas Czerner <lczerner@redhat.com> | ||||||
|  | Reported-by: Nils Bars <nils_bars@t-online.de> | ||||||
|  | Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=2068113 | ||||||
|  | Addresses: CVE-2022-1304 | ||||||
|  | Addresses-Debian-Bug: #1010263 | ||||||
|  | Signed-off-by: Theodore Ts'o <tytso@mit.edu> | ||||||
|  | --- | ||||||
|  |  lib/ext2fs/extent.c | 8 ++++++++ | ||||||
|  |  1 file changed, 8 insertions(+) | ||||||
|  |  | ||||||
|  | --- a/lib/ext2fs/extent.c | ||||||
|  | +++ b/lib/ext2fs/extent.c | ||||||
|  | @@ -495,6 +495,10 @@ retry: | ||||||
|  |  			ext2fs_le16_to_cpu(eh->eh_entries); | ||||||
|  |  		newpath->max_entries = ext2fs_le16_to_cpu(eh->eh_max); | ||||||
|  |   | ||||||
|  | +		/* Make sure there is at least one extent present */ | ||||||
|  | +		if (newpath->left <= 0) | ||||||
|  | +			return EXT2_ET_EXTENT_NO_DOWN; | ||||||
|  | + | ||||||
|  |  		if (path->left > 0) { | ||||||
|  |  			ix++; | ||||||
|  |  			newpath->end_blk = ext2fs_le32_to_cpu(ix->ei_block); | ||||||
|  | @@ -1630,6 +1634,10 @@ errcode_t ext2fs_extent_delete(ext2_exte | ||||||
|  |   | ||||||
|  |  	cp = path->curr; | ||||||
|  |   | ||||||
|  | +	/* Sanity check before memmove() */ | ||||||
|  | +	if (path->left < 0) | ||||||
|  | +		return EXT2_ET_EXTENT_LEAF_BAD; | ||||||
|  | + | ||||||
|  |  	if (path->left) { | ||||||
|  |  		memmove(cp, cp + sizeof(struct ext3_extent_idx), | ||||||
|  |  			path->left * sizeof(struct ext3_extent_idx)); | ||||||
| @@ -11,7 +11,7 @@ PKG_NAME:=e2fsprogs | |||||||
| PKG_CPE_ID:=cpe:/a:e2fsprogs_project:e2fsprogs | PKG_CPE_ID:=cpe:/a:e2fsprogs_project:e2fsprogs | ||||||
| PKG_VERSION:=1.46.5 | PKG_VERSION:=1.46.5 | ||||||
| PKG_HASH:=2f16c9176704cf645dc69d5b15ff704ae722d665df38b2ed3cfc249757d8d81e | PKG_HASH:=2f16c9176704cf645dc69d5b15ff704ae722d665df38b2ed3cfc249757d8d81e | ||||||
| PKG_RELEASE:=1 | PKG_RELEASE:=2 | ||||||
|  |  | ||||||
| PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz | PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz | ||||||
| PKG_SOURCE_URL:=@KERNEL/linux/kernel/people/tytso/e2fsprogs/v$(PKG_VERSION)/ | PKG_SOURCE_URL:=@KERNEL/linux/kernel/people/tytso/e2fsprogs/v$(PKG_VERSION)/ | ||||||
|   | |||||||
| @@ -0,0 +1,50 @@ | |||||||
|  | From ab51d587bb9b229b1fade1afd02e1574c1ba5c76 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Lukas Czerner <lczerner@redhat.com> | ||||||
|  | Date: Thu, 21 Apr 2022 19:31:48 +0200 | ||||||
|  | Subject: libext2fs: add sanity check to extent manipulation | ||||||
|  |  | ||||||
|  | It is possible to have a corrupted extent tree in such a way that a leaf | ||||||
|  | node contains zero extents in it. Currently if that happens and we try | ||||||
|  | to traverse the tree we can end up accessing wrong data, or possibly | ||||||
|  | even uninitialized memory. Make sure we don't do that. | ||||||
|  |  | ||||||
|  | Additionally make sure that we have a sane number of bytes passed to | ||||||
|  | memmove() in ext2fs_extent_delete(). | ||||||
|  |  | ||||||
|  | Note that e2fsck is currently unable to spot and fix such corruption in | ||||||
|  | pass1. | ||||||
|  |  | ||||||
|  | Signed-off-by: Lukas Czerner <lczerner@redhat.com> | ||||||
|  | Reported-by: Nils Bars <nils_bars@t-online.de> | ||||||
|  | Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=2068113 | ||||||
|  | Addresses: CVE-2022-1304 | ||||||
|  | Addresses-Debian-Bug: #1010263 | ||||||
|  | Signed-off-by: Theodore Ts'o <tytso@mit.edu> | ||||||
|  | --- | ||||||
|  |  lib/ext2fs/extent.c | 8 ++++++++ | ||||||
|  |  1 file changed, 8 insertions(+) | ||||||
|  |  | ||||||
|  | --- a/lib/ext2fs/extent.c | ||||||
|  | +++ b/lib/ext2fs/extent.c | ||||||
|  | @@ -495,6 +495,10 @@ retry: | ||||||
|  |  			ext2fs_le16_to_cpu(eh->eh_entries); | ||||||
|  |  		newpath->max_entries = ext2fs_le16_to_cpu(eh->eh_max); | ||||||
|  |   | ||||||
|  | +		/* Make sure there is at least one extent present */ | ||||||
|  | +		if (newpath->left <= 0) | ||||||
|  | +			return EXT2_ET_EXTENT_NO_DOWN; | ||||||
|  | + | ||||||
|  |  		if (path->left > 0) { | ||||||
|  |  			ix++; | ||||||
|  |  			newpath->end_blk = ext2fs_le32_to_cpu(ix->ei_block); | ||||||
|  | @@ -1630,6 +1634,10 @@ errcode_t ext2fs_extent_delete(ext2_exte | ||||||
|  |   | ||||||
|  |  	cp = path->curr; | ||||||
|  |   | ||||||
|  | +	/* Sanity check before memmove() */ | ||||||
|  | +	if (path->left < 0) | ||||||
|  | +		return EXT2_ET_EXTENT_LEAF_BAD; | ||||||
|  | + | ||||||
|  |  	if (path->left) { | ||||||
|  |  		memmove(cp, cp + sizeof(struct ext3_extent_idx), | ||||||
|  |  			path->left * sizeof(struct ext3_extent_idx)); | ||||||
		Reference in New Issue
	
	Block a user
	 Hauke Mehrtens
					Hauke Mehrtens