efibootmgr: commands Active and Inactive do not work.
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
efibootmgr (Ubuntu) |
Triaged
|
Medium
|
Unassigned | ||
Noble |
Triaged
|
Medium
|
Unassigned | ||
Oracular |
Won't Fix
|
Medium
|
Unassigned | ||
Plucky |
Triaged
|
Medium
|
Unassigned | ||
Questing |
Triaged
|
Medium
|
Unassigned |
Bug Description
OS version: Ubuntu 24.04
package version: 18-1build2
My PCs has boot entries 0010, 0020 and 0021.
$ sudo efibootmgr
BootCurrent: 0010
Timeout: 1 seconds
BootOrder: 0020,0010
Boot0010* NORMAL HD(1,GPT,
Boot0020* UPDATE HD(1,GPT,
Boot0021* UEFI: TOSHIBA, Partition 1 PciRoot(
I tried to active/inactive 10 or 20 entry. But these are not found.
$ sudo efibootmgr -A -b 0010
efibootmgr: Boot entry 10 not found
Could not set active state for Boot0010: No such file or directory
$ sudo efibootmgr -A -b 0020
efibootmgr: Boot entry 20 not found
Could not set active state for Boot0020: No such file or directory
$ sudo efibootmgr -a -b 0010
efibootmgr: Boot entry 10 not found
Could not set active state for Boot0010: No such file or directory
$ sudo efibootmgr -a -b 0020
efibootmgr: Boot entry 20 not found
Could not set active state for Boot0020: No such file or directory
I investigated the cause and found a problem with the get_entry() function in src/efibootmgr.c.
static var_entry_t *
get_entry(list_t *entries, uint16_t num)
{
list_t *pos;
var_entry_t *entry = NULL;
list_for_each(pos, entries) {
entry = list_entry(pos, var_entry_t, list);
if (entry->num != num) {
entry = NULL;
continue;
}
}
return entry;
}
This code does not break the loop when an entry is found.
Therefore, NULL is returned unless the matching entry is the last one.
description: | updated |
description: | updated |
description: | updated |
I try to fix this bug.
Could you comfirm the patch?