[efibootmgr] efibootmgr-0.5.4-Work-around-broken-Apple-firmware.patch

Matthew Garrett mjg59 at fedoraproject.org
Thu Apr 25 14:47:20 UTC 2013


commit 6940e36b33448187c70dd64be50cc91a7d15874c
Author: Matthew Garrett <mjg59 at srcf.ucam.org>
Date:   Wed Nov 28 17:35:29 2012 -0500

    efibootmgr-0.5.4-Work-around-broken-Apple-firmware.patch
    
      Resolves: #873629
    - efibootmgr-0.5.4-Remove-device-path-padding-on-non-Itanium.patch - improve
      spec conformance
    - efibootmgr-0.5.4-fix-minor-memory-leak.patch - from upstream
    - efibootmgr-0.5.4-fix-disk-minor-number-discovery.patch - from upstream
    - efibootmgr-0.5.4-make_boot_var-does-not-check-for-failed-status-with-.patch -
      from upstream

 ...Remove-device-path-padding-on-non-Itanium.patch |   28 ++++++++++++
 ...r-0.5.4-Work-around-broken-Apple-firmware.patch |   30 ++++++++++++
 ...mgr-0.5.4-fix-disk-minor-number-discovery.patch |   29 ++++++++++++
 efibootmgr-0.5.4-fix-minor-memory-leak.patch       |   29 ++++++++++++
 ...ar-does-not-check-for-failed-status-with-.patch |   47 ++++++++++++++++++++
 efibootmgr.spec                                    |   18 +++++++-
 6 files changed, 180 insertions(+), 1 deletions(-)
---
diff --git a/efibootmgr-0.5.4-Remove-device-path-padding-on-non-Itanium.patch b/efibootmgr-0.5.4-Remove-device-path-padding-on-non-Itanium.patch
new file mode 100644
index 0000000..240aa69
--- /dev/null
+++ b/efibootmgr-0.5.4-Remove-device-path-padding-on-non-Itanium.patch
@@ -0,0 +1,28 @@
+From 2d8f962284f40b918c0fc8385e58fcba219ddc12 Mon Sep 17 00:00:00 2001
+From: Fedora Ninjas <pjones at fedoraproject.org>
+Date: Wed, 28 Nov 2012 17:13:24 -0500
+Subject: [PATCH 2/5] Remove device path padding on non-Itanium
+
+This code predates EFI support on any x86 hardware, and it's a strict
+violation of the specification. Windows doesn't do it either.
+---
+ src/include/efi.h | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/src/include/efi.h b/src/include/efi.h
+index be667ae..c2ac853 100644
+--- a/src/include/efi.h
++++ b/src/include/efi.h
+@@ -294,7 +294,9 @@ typedef struct {
+ 	uint8_t  signature[16];
+ 	uint8_t  mbr_type;
+ 	uint8_t  signature_type;
++#ifdef __ia64
+ 	uint8_t  padding[6]; /* Emperically needed */
++#endif
+ } __attribute__((packed)) HARDDRIVE_DEVICE_PATH;
+ 
+ typedef struct {
+-- 
+1.8.0
+
diff --git a/efibootmgr-0.5.4-Work-around-broken-Apple-firmware.patch b/efibootmgr-0.5.4-Work-around-broken-Apple-firmware.patch
new file mode 100644
index 0000000..a1d9831
--- /dev/null
+++ b/efibootmgr-0.5.4-Work-around-broken-Apple-firmware.patch
@@ -0,0 +1,30 @@
+From 6edc3ed5479b575f87eb51e335957b05fdd04fe8 Mon Sep 17 00:00:00 2001
+From: Fedora Ninjas <pjones at fedoraproject.org>
+Date: Wed, 28 Nov 2012 16:49:18 -0500
+Subject: [PATCH 1/5] Work around broken Apple firmware
+
+Alex Murray found that Apple's firmware sets an invalid EFI attribute on
+BootCurrent, which newer versions of the kernel then reject. This patch
+from him simply masks off the extraneous bit.
+---
+ src/lib/efivars_sysfs.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/src/lib/efivars_sysfs.c b/src/lib/efivars_sysfs.c
+index 182c70f..ea87325 100644
+--- a/src/lib/efivars_sysfs.c
++++ b/src/lib/efivars_sysfs.c
+@@ -55,6 +55,10 @@ sysfs_read_variable(const char *name, efi_variable_t *var)
+ 		return EFI_INVALID_PARAMETER;
+ 	}
+ 	close(fd);
++	/* latest apple firmware sets high bit which appears invalid
++	   to the linux kernel if we write it back so lets zero it out
++	   if it is set since it would be invalid to set it anyway */
++	var->Attributes = var->Attributes & ~(1 << 31);
+ 	return var->Status;
+ }
+ 
+-- 
+1.8.0
+
diff --git a/efibootmgr-0.5.4-fix-disk-minor-number-discovery.patch b/efibootmgr-0.5.4-fix-disk-minor-number-discovery.patch
new file mode 100644
index 0000000..e9b5358
--- /dev/null
+++ b/efibootmgr-0.5.4-fix-disk-minor-number-discovery.patch
@@ -0,0 +1,29 @@
+From f9f4ee75ad745637a47bf17ed968101b1ffbcc1d Mon Sep 17 00:00:00 2001
+From: Matt Domsch <Matt_Domsch at dell.com>
+Date: Thu, 23 Jul 2009 14:20:19 -0500
+Subject: [PATCH 4/5] fix disk minor number discovery
+
+Raymund Will noted disk_info_from_fd() incorrectly used logical &&
+instead of bitwise & when obtaining the minor number.
+
+Reported in https://bugzilla.novell.com/show_bug.cgi?id=524529#c1
+---
+ src/lib/disk.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/lib/disk.c b/src/lib/disk.c
+index ebfe619..8ad590b 100644
+--- a/src/lib/disk.c
++++ b/src/lib/disk.c
+@@ -55,7 +55,7 @@ disk_info_from_fd(int fd,
+ 		return 1;
+ 	}
+ 	major = buf.st_dev >> 8;
+-	minor = buf.st_dev && 0xFF;
++	minor = buf.st_dev & 0xFF;
+ 
+ 	/* IDE disks can have up to 64 partitions, or 6 bits worth,
+ 	 * and have one bit for the disk number.
+-- 
+1.8.0
+
diff --git a/efibootmgr-0.5.4-fix-minor-memory-leak.patch b/efibootmgr-0.5.4-fix-minor-memory-leak.patch
new file mode 100644
index 0000000..1ff4ce3
--- /dev/null
+++ b/efibootmgr-0.5.4-fix-minor-memory-leak.patch
@@ -0,0 +1,29 @@
+From 36c3a19c62cc3b6841e363712c3c78ef5915122d Mon Sep 17 00:00:00 2001
+From: Matt Domsch <Matt_Domsch at dell.com>
+Date: Thu, 23 Jul 2009 14:18:11 -0500
+Subject: [PATCH 3/5] fix minor memory leak
+
+David Binderman noted new_data was being allocated but not freed.  Not
+a big deal as the program exits soon thereafter (and is thus freed),
+but worth fixing anyhow.
+
+Fixes https://bugzilla.novell.com/show_bug.cgi?id=524529#c1
+---
+ src/efibootmgr/efibootmgr.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/efibootmgr/efibootmgr.c b/src/efibootmgr/efibootmgr.c
+index b984143..de67af0 100644
+--- a/src/efibootmgr/efibootmgr.c
++++ b/src/efibootmgr/efibootmgr.c
+@@ -328,6 +328,7 @@ add_to_boot_order(uint16_t num)
+ 	/* Now new_data has what we need */
+ 	memcpy(&(boot_order.Data), new_data, new_data_size);
+ 	boot_order.DataSize = new_data_size;
++	free(new_data);
+ 	return create_or_edit_variable(&boot_order);
+ }
+ 
+-- 
+1.8.0
+
diff --git a/efibootmgr-0.5.4-make_boot_var-does-not-check-for-failed-status-with-.patch b/efibootmgr-0.5.4-make_boot_var-does-not-check-for-failed-status-with-.patch
new file mode 100644
index 0000000..75374ac
--- /dev/null
+++ b/efibootmgr-0.5.4-make_boot_var-does-not-check-for-failed-status-with-.patch
@@ -0,0 +1,47 @@
+From 5fcfccb39089febb89945b841f489b5acc7638ce Mon Sep 17 00:00:00 2001
+From: Lane Winner <lane.winner at oracle.com>
+Date: Tue, 24 Apr 2012 12:58:57 -0500
+Subject: [PATCH 5/5] make_boot_var does not check for failed status with
+ create_variable. This can result in a memory leak.
+ Additionally the user should be notified of the
+ problem.
+
+We encounter this issue on one system after filling up the UEFI boot list
+with dummy devices.
+
+The patch fix the problem. It was verified on a Mensa system using RHEL 6.0
+
+Signed-off-by: Yinghai Lu<yinghai at kernel.org>
+---
+ src/efibootmgr/efibootmgr.c | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+diff --git a/src/efibootmgr/efibootmgr.c b/src/efibootmgr/efibootmgr.c
+index de67af0..236365a 100644
+--- a/src/efibootmgr/efibootmgr.c
++++ b/src/efibootmgr/efibootmgr.c
+@@ -239,6 +239,7 @@ warn_duplicate_name(list_t *boot_list)
+ static var_entry_t *
+ make_boot_var(list_t *boot_list)
+ {
++	efi_status_t status;
+ 	var_entry_t *boot;
+ 	int free_number;
+ 	list_t *pos;
+@@ -271,7 +272,12 @@ make_boot_var(list_t *boot_list)
+ 		free(boot);
+ 		return NULL;
+ 	}
+-	create_variable(&boot->var_data);
++
++	status = create_variable(&boot->var_data);
++	if (status != EFI_SUCCESS) {
++		free(boot);
++		return NULL;
++	}
+ 	list_add_tail(&boot->list, boot_list);
+ 	return boot;
+ }
+-- 
+1.8.0
+
diff --git a/efibootmgr.spec b/efibootmgr.spec
index f626013..32f90c3 100644
--- a/efibootmgr.spec
+++ b/efibootmgr.spec
@@ -1,7 +1,7 @@
 Summary: EFI Boot Manager
 Name: efibootmgr
 Version: 0.5.4
-Release: 14%{?dist}
+Release: 15%{?dist}
 Group: System Environment/Base
 License: GPLv2+
 URL: http://linux.dell.com/%{name}/
@@ -17,6 +17,11 @@ Obsoletes: elilo <= 3.6-5
 Source0: http://linux.dell.com/%{name}/permalink/%{name}-%{version}.tar.gz
 Patch0: efibootmgr-0.5.4-default-to-grub.patch
 Patch1: efibootmgr-0.5.4-support-4k-sectors.patch
+Patch2: efibootmgr-0.5.4-Work-around-broken-Apple-firmware.patch
+Patch3: efibootmgr-0.5.4-Remove-device-path-padding-on-non-Itanium.patch
+Patch4: efibootmgr-0.5.4-fix-minor-memory-leak.patch
+Patch5: efibootmgr-0.5.4-fix-disk-minor-number-discovery.patch
+Patch6: efibootmgr-0.5.4-make_boot_var-does-not-check-for-failed-status-with-.patch
 
 %description
 %{name} displays and allows the user to edit the Intel Extensible
@@ -54,6 +59,17 @@ rm -rf %{buildroot}
 %doc README INSTALL COPYING
     
 %changelog
+
+* Thu Apr 25 2013 Matthew Garrett <mjg59 at srcf.ucam.org> - 0.5.4-15
+- efibootmgr-0.5.4-Work-around-broken-Apple-firmware.patch
+  Resolves: #873629
+- efibootmgr-0.5.4-Remove-device-path-padding-on-non-Itanium.patch - improve
+  spec conformance
+- efibootmgr-0.5.4-fix-minor-memory-leak.patch - from upstream
+- efibootmgr-0.5.4-fix-disk-minor-number-discovery.patch - from upstream
+- efibootmgr-0.5.4-make_boot_var-does-not-check-for-failed-status-with-.patch -
+  from upstream
+
 * Wed Feb 13 2013 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 0.5.4-14
 - Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
 


More information about the scm-commits mailing list