commit:     3a1036332df73333e2b01d5e6fedd91dad7415de
Author:     Jeroen Roovers <jer <AT> gentoo <DOT> org>
AuthorDate: Sat Oct 10 04:01:34 2015 +0000
Commit:     Jeroen Roovers <jer <AT> gentoo <DOT> org>
CommitDate: Sat Oct 10 04:01:34 2015 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=3a103633

sys-block/parted: Fix crash on resizing FAT16 (bug #562136 by Nico R.).

Package-Manager: portage-2.2.22

 .../files/parted-3.2-fix-resizing-FAT16.patch      | 64 ++++++++++++++++++++++
 sys-block/parted/parted-3.2-r1.ebuild              | 59 ++++++++++++++++++++
 2 files changed, 123 insertions(+)

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 0000000..2a5a231
--- /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 <[email protected]>
+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 0000000..e48c620
--- /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
+}

Reply via email to