Skip to content

Commit

Permalink
sys-block/parted: Fix crash on resizing FAT16 (bug #562136 by Nico R.).
Browse files Browse the repository at this point in the history
Package-Manager: portage-2.2.22
  • Loading branch information
Jeroen Roovers committed Oct 10, 2015
1 parent e81bb5f commit 3a10363
Show file tree
Hide file tree
Showing 2 changed files with 123 additions and 0 deletions.
64 changes: 64 additions & 0 deletions sys-block/parted/files/parted-3.2-fix-resizing-FAT16.patch
Original file line number Diff line number Diff line change
@@ -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
59 changes: 59 additions & 0 deletions sys-block/parted/parted-3.2-r1.ebuild
Original file line number Diff line number Diff line change
@@ -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
}

0 comments on commit 3a10363

Please sign in to comment.