From 737da26a56595d21e82ba42fca47442c690f0b73 Mon Sep 17 00:00:00 2001 From: Peter Jones Date: Jun 19 2014 20:28:55 +0000 Subject: Reinstate an accidentally dropped hack to avoid apple brain damage. --- diff --git a/0001-Mitigate-apple-setting-invalid-attribute-bits-in-boo.patch b/0001-Mitigate-apple-setting-invalid-attribute-bits-in-boo.patch new file mode 100644 index 0000000..1fe8c07 --- /dev/null +++ b/0001-Mitigate-apple-setting-invalid-attribute-bits-in-boo.patch @@ -0,0 +1,65 @@ +From 15a46a8023c9925a78ddbacc8534af17db611edb Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Tue, 17 Jun 2014 14:05:31 -0400 +Subject: [PATCH] Mitigate apple setting invalid attribute bits in boot + variables. + +Signed-off-by: Peter Jones +--- + src/efibootmgr/efibootmgr.c | 19 ++++++++++++++++++- + 1 file changed, 18 insertions(+), 1 deletion(-) + +diff --git a/src/efibootmgr/efibootmgr.c b/src/efibootmgr/efibootmgr.c +index e2ec5cd..f596d99 100644 +--- a/src/efibootmgr/efibootmgr.c ++++ b/src/efibootmgr/efibootmgr.c +@@ -115,6 +115,13 @@ read_vars(char **namelist, + &entry->attributes); + if (rc < 0) + goto err; ++ ++ /* 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 */ ++ entry->attributes = entry->attributes & ~(1 << 31); ++ + entry->name = namelist[i]; + list_add_tail(&entry->list, head); + } +@@ -299,6 +306,11 @@ read_boot_order(efi_variable_t **boot_order) + free(new); + *boot_order = NULL; + } ++ ++ /* 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 */ ++ bo->attributes = bo->attributes & ~(1 << 31); + return rc; + } + +@@ -404,7 +416,7 @@ read_boot_u16(const char *name) + static int + set_boot_u16(const char *name, uint16_t num) + { +- return efi_set_variable(EFI_GLOBAL_GUID, name, (uint8_t *)&num, ++ return efi_set_variable(EFI_GLOBAL_GUID, name, (uint8_t *)&num, + sizeof (num), EFI_VARIABLE_NON_VOLATILE | + EFI_VARIABLE_BOOTSERVICE_ACCESS | + EFI_VARIABLE_RUNTIME_ACCESS); +@@ -577,6 +589,11 @@ construct_boot_order(char *bootorder, int keep, + return 0; + } + ++ /* 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 */ ++ bo.attributes = bo.attributes & ~(1 << 31); ++ + size_t new_data_size = data_size + bo.data_size; + uint16_t *new_data = calloc(1, new_data_size); + if (!new_data) +-- +1.9.0 +