diff options
Diffstat (limited to 'sys-block/parted')
-rw-r--r-- | sys-block/parted/files/parted-3.2-fix-resizing-FAT16.patch | 64 | ||||
-rw-r--r-- | sys-block/parted/parted-3.2-r1.ebuild | 59 |
2 files changed, 123 insertions, 0 deletions
diff --git a/sys-block/parted/files/parted-3.2-fix-resizing-FAT16.patch b/sys-block/parted/files/parted-3.2-fix-resizing-FAT16.patch new file mode 100644 index 000000000000..2a5a2311f1dd --- /dev/null +++ b/sys-block/parted/files/parted-3.2-fix-resizing-FAT16.patch @@ -0,0 +1,64 @@ +From 1e9e770f4bc7f3d80e09ecd1df58575fad064163 Mon Sep 17 00:00:00 2001 +From: Mike Fleetwood <mike.fleetwood@googlemail.com> +Date: Sun, 28 Sep 2014 15:15:48 +0000 +Subject: lib-fs-resize: Prevent crash resizing FAT16 file systems + +Resizing FAT16 file system crashes in libparted/fs/r/fat/resize.c +create_resize_context() because it was dereferencing NULL pointer +fs_info->info_sector to copy the info_sector. + +Only FAT32 file systems have info_sector populated by fat_open() -> +fat_info_sector_read(). FAT12 and FAT16 file systems don't have an +info_sector so pointer fs_info->info_sector remains assigned NULL from +fat_alloc(). When resizing a FAT file system create_resize_context() +was always dereferencing fs_info->info_sector to memory copy the +info_sector, hence it crashed for FAT12 and FAT16. + +Make create_resize_context() only copy the info_sector for FAT32 file +systems. + +Reported by Christian Hesse in +https://bugzilla.gnome.org/show_bug.cgi?id=735669 +--- +diff --git a/NEWS b/NEWS +index 297b0a5..da7db50 100644 +--- a/NEWS ++++ b/NEWS +@@ -2,6 +2,10 @@ GNU parted NEWS -*- outline -*- + + * Noteworthy changes in release ?.? (????-??-??) [?] + ++** Bug Fixes ++ ++ libparted-fs-resize: Prevent crash resizing FAT16 file systems. ++ + + * Noteworthy changes in release 3.2 (2014-07-28) [stable] + +diff --git a/libparted/fs/r/fat/resize.c b/libparted/fs/r/fat/resize.c +index 919acf0..bfe60a0 100644 +--- a/libparted/fs/r/fat/resize.c ++++ b/libparted/fs/r/fat/resize.c +@@ -668,11 +668,17 @@ create_resize_context (PedFileSystem* fs, const PedGeometry* new_geom) + + /* preserve boot code, etc. */ + new_fs_info->boot_sector = ped_malloc (new_geom->dev->sector_size); +- new_fs_info->info_sector = ped_malloc (new_geom->dev->sector_size); + memcpy (new_fs_info->boot_sector, fs_info->boot_sector, + new_geom->dev->sector_size); +- memcpy (new_fs_info->info_sector, fs_info->info_sector, +- new_geom->dev->sector_size); ++ new_fs_info->info_sector = NULL; ++ if (fs_info->fat_type == FAT_TYPE_FAT32) ++ { ++ PED_ASSERT (fs_info->info_sector != NULL); ++ new_fs_info->info_sector = ++ ped_malloc (new_geom->dev->sector_size); ++ memcpy (new_fs_info->info_sector, fs_info->info_sector, ++ new_geom->dev->sector_size); ++ } + + new_fs_info->logical_sector_size = fs_info->logical_sector_size; + new_fs_info->sector_count = new_geom->length; +-- +cgit v0.9.0.2 diff --git a/sys-block/parted/parted-3.2-r1.ebuild b/sys-block/parted/parted-3.2-r1.ebuild new file mode 100644 index 000000000000..e48c62046256 --- /dev/null +++ b/sys-block/parted/parted-3.2-r1.ebuild @@ -0,0 +1,59 @@ +# Copyright 1999-2015 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +EAPI=5 +inherit autotools eutils + +DESCRIPTION="Create, destroy, resize, check, copy partitions and file systems" +HOMEPAGE="https://www.gnu.org/software/parted" +SRC_URI="mirror://gnu/${PN}/${P}.tar.xz" + +LICENSE="GPL-3" +SLOT="0" +KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86" +IUSE="+debug device-mapper nls readline selinux static-libs" +RESTRICT="test" + +# specific version for gettext needed +# to fix bug 85999 +RDEPEND=" + >=sys-fs/e2fsprogs-1.27 + >=sys-libs/ncurses-5.7-r7:0= + device-mapper? ( >=sys-fs/lvm2-2.02.45 ) + readline? ( >=sys-libs/readline-5.2:0= ) + selinux? ( sys-libs/libselinux ) +" +DEPEND=" + ${RDEPEND} + nls? ( >=sys-devel/gettext-0.12.1-r2 ) + virtual/pkgconfig +" + +src_prepare() { + epatch \ + "${FILESDIR}"/${PN}-3.2-devmapper.patch \ + "${FILESDIR}"/${PN}-3.2-po4a-mandir.patch \ + "${FILESDIR}"/${PN}-3.2-fix-resizing-FAT16.patch + + eautoreconf +} + +src_configure() { + econf \ + $(use_enable debug) \ + $(use_enable device-mapper) \ + $(use_enable nls) \ + $(use_enable selinux) \ + $(use_enable static-libs static) \ + $(use_with readline) \ + --disable-rpath \ + --disable-silent-rules +} + +DOCS=( AUTHORS BUGS ChangeLog NEWS README THANKS TODO doc/{API,FAT,USER.jp} ) + +src_install() { + default + prune_libtool_files +} |