forked from gentoo/gentoo
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
sys-block/parted: Fix crash on resizing FAT16 (bug #562136 by Nico R.).
Package-Manager: portage-2.2.22
- Loading branch information
Jeroen Roovers
committed
Oct 10, 2015
1 parent
e81bb5f
commit 3a10363
Showing
2 changed files
with
123 additions
and
0 deletions.
There are no files selected for viewing
64 changes: 64 additions & 0 deletions
64
sys-block/parted/files/parted-3.2-fix-resizing-FAT16.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
} |