Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12:Update
efibootmgr
efibootmgr-0.6.0-set_boot_order.diff
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File efibootmgr-0.6.0-set_boot_order.diff of Package efibootmgr
From: Raymund Will <rw@suse.com> Subject: Fix '--bootorder' handling. References: bnc#810899 Elisa Mitchell wrote: > If efibootmgr -o is called with a boot order number that does not exist > in the list you get when you execute efibootmgr, it is supposed to test > for an invalid DataSize parameter and exit. In fact, the test conducted > will never fail, even on invalid data, and the command will always take > the path to make the firmware call, passing FW an invalid DataSize value, > which can lead to panics, hangs, uninterruptible command hangs. Even if not every firmware panics over such an "invalid DataSize value", it's still a bug, which should be addressed. Reported-by: Elisa Mitchell <lisa.mitchell@hp.com> Signed-off-by: Raymund Will <rw@suse.com> --- src/efibootmgr/efibootmgr.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) --- a/src/efibootmgr/efibootmgr.c +++ b/src/efibootmgr/efibootmgr.c @@ -612,10 +612,10 @@ is_current_boot_entry(int b) } -static int +static unsigned long parse_boot_order(char *buffer, uint16_t *order, int length) { - int i; + unsigned long i; int num, rc; for (i=0; i<length && *buffer; i++) { @@ -623,12 +623,12 @@ parse_boot_order(char *buffer, uint16_t if (rc == 1) order[i] = num & 0xFFFF; else { fprintf(stderr,"\nInvalid hex characters in boot order: %s\n\n",buffer); - return -1; + return 0UL; } /* make sure this is an existing boot entry */ if (!is_current_boot_entry(order[i])) { fprintf (stderr,"\nboot entry %X does not exist\n\n",order[i]); - return -1; + return 0UL; } /* Advance to the comma */ @@ -651,7 +651,7 @@ set_boot_order() fill_var(&boot_order, "BootOrder"); boot_order.DataSize = parse_boot_order(opts.bootorder, n, 1024/sizeof(uint16_t)) * sizeof(uint16_t); - if (boot_order.DataSize < 0) + if (boot_order.DataSize == 0UL) return 1; else return create_or_edit_variable(&boot_order);
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor