From 9da2f460bebf9a8281fdd52536d3676b0914b8fd Mon Sep 17 00:00:00 2001 From: "Brian C. Lane" Date: Mon, 11 Apr 2016 15:10:51 -0700 Subject: [PATCH 38/39] libparted: Remove fdasd geometry code from alloc_metadata (#1244833) commit db20944f changed how the trailing_metadata_end is calculated in dasd_alloc_metadata, removing the need for setting up the anchor struct. But dasd_alloc_metadata can be called in various contexts, and the arch_specific->fd may or may not be valid during these calls. This can result in unpredictable crashes when it uses a stale fd and tries to run the file image code in fdasd_get_geometry instead of the device code. The solution is to just drop the unneeded code, and to remember that arch_specific->fd should only be used when ped_device_open has first been called. Resolves: rhbz#1244833 --- libparted/labels/dasd.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/libparted/labels/dasd.c b/libparted/labels/dasd.c index 4d533cf..5bffda7 100644 --- a/libparted/labels/dasd.c +++ b/libparted/labels/dasd.c @@ -950,7 +950,6 @@ dasd_alloc_metadata (PedDisk* disk) PedPartition* part = NULL; /* initialize solely to placate gcc */ PedPartition* new_part2; PedSector trailing_meta_start, trailing_meta_end; - struct fdasd_anchor anchor; PED_ASSERT (disk != NULL); PED_ASSERT (disk->dev != NULL); @@ -1000,10 +999,7 @@ dasd_alloc_metadata (PedDisk* disk) backed up, then restored to a larger size disk, etc. */ trailing_meta_start = part->geom.end + 1; - fdasd_initialize_anchor(&anchor); - fdasd_get_geometry(disk->dev, &anchor, arch_specific->fd); trailing_meta_end = (long long) disk->dev->length - 1; - fdasd_cleanup(&anchor); if (trailing_meta_end >= trailing_meta_start) { new_part2 = ped_partition_new (disk,PED_PARTITION_METADATA, NULL, trailing_meta_start, trailing_meta_end); -- 2.5.5