[Bug 2112632] [NEW] comands active and inactive do not work

Tomohiro Masubuchi 2112632 at bugs.launchpad.net
Fri Jun 6 10:11:14 UTC 2025


Public bug reported:

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,XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX,0x800,0x80000)/<<snip>>
Boot0020* UPDATE	HD(1,GPT,XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX,0x800,0x80000)/<<snip>>
Boot0021* UEFI: TOSHIBA, Partition 1	PciRoot(0x0)/Pci(0x14,0x0)/USB(16,0)/HD(1,GPT,XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX,0x800,0x80000)0000424f

I tried to active/inactive 10 or 20 entry. But these are not found.

dev at spike (N101-7069):~$ sudo efibootmgr -A -b 0010
efibootmgr: Boot entry 10 not found
Could not set active state for Boot0010: No such file or directory
dev at spike (N101-7069):~$ sudo efibootmgr -A -b 0020
efibootmgr: Boot entry 20 not found
Could not set active state for Boot0020: No such file or directory
dev at spike (N101-7069):~$ sudo efibootmgr -a -b 0010
efibootmgr: Boot entry 10 not found
Could not set active state for Boot0010: No such file or directory
dev at spike (N101-7069):~$ 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.

** Affects: efibootmgr (Ubuntu)
     Importance: Undecided
         Status: New

** Description changed:

  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,416189f1-8d0d-4be6-a8b7-631c91d73a07,0x800,0x80000)/<<snip>>
- Boot0020* UPDATE	HD(1,GPT,416189f1-8d0d-4be6-a8b7-631c91d73a07,0x800,0x80000)/<<snip>>
- Boot0021* UEFI: TOSHIBA, Partition 1	PciRoot(0x0)/Pci(0x14,0x0)/USB(16,0)/HD(1,GPT,3de10ebe-8024-409f-bdc8-2251bb1bcd83,0x800,0x80000)0000424f
+ Boot0010* NORMAL	HD(1,GPT,XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX,0x800,0x80000)/<<snip>>
+ Boot0020* UPDATE	HD(1,GPT,XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX,0x800,0x80000)/<<snip>>
+ Boot0021* UEFI: TOSHIBA, Partition 1	PciRoot(0x0)/Pci(0x14,0x0)/USB(16,0)/HD(1,GPT,XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX,0x800,0x80000)0000424f
  
  I tried to active/inactive 10 or 20 entry. But these are not found.
  
  dev at spike (N101-7069):~$ sudo efibootmgr -A -b 0010
  efibootmgr: Boot entry 10 not found
  Could not set active state for Boot0010: No such file or directory
  dev at spike (N101-7069):~$ sudo efibootmgr -A -b 0020
  efibootmgr: Boot entry 20 not found
  Could not set active state for Boot0020: No such file or directory
  dev at spike (N101-7069):~$ sudo efibootmgr -a -b 0010
  efibootmgr: Boot entry 10 not found
  Could not set active state for Boot0010: No such file or directory
  dev at spike (N101-7069):~$ 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.
+ 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_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;
- 		}
- 	}
+  list_for_each(pos, entries) {
+   entry = list_entry(pos, var_entry_t, list);
+   if (entry->num != num) {
+    entry = NULL;
+    continue;
+   }
+  }
  
- 	return entry;
+  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 changed:

  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,XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX,0x800,0x80000)/<<snip>>
  Boot0020* UPDATE	HD(1,GPT,XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX,0x800,0x80000)/<<snip>>
  Boot0021* UEFI: TOSHIBA, Partition 1	PciRoot(0x0)/Pci(0x14,0x0)/USB(16,0)/HD(1,GPT,XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX,0x800,0x80000)0000424f
  
  I tried to active/inactive 10 or 20 entry. But these are not found.
  
  dev at spike (N101-7069):~$ sudo efibootmgr -A -b 0010
  efibootmgr: Boot entry 10 not found
  Could not set active state for Boot0010: No such file or directory
  dev at spike (N101-7069):~$ sudo efibootmgr -A -b 0020
  efibootmgr: Boot entry 20 not found
  Could not set active state for Boot0020: No such file or directory
  dev at spike (N101-7069):~$ sudo efibootmgr -a -b 0010
  efibootmgr: Boot entry 10 not found
  Could not set active state for Boot0010: No such file or directory
  dev at spike (N101-7069):~$ 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.
+ 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.

-- 
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to efibootmgr in Ubuntu.
https://bugs.launchpad.net/bugs/2112632

Title:
  comands active and inactive do not work

Status in efibootmgr package in Ubuntu:
  New

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,XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX,0x800,0x80000)/<<snip>>
  Boot0020* UPDATE	HD(1,GPT,XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX,0x800,0x80000)/<<snip>>
  Boot0021* UEFI: TOSHIBA, Partition 1	PciRoot(0x0)/Pci(0x14,0x0)/USB(16,0)/HD(1,GPT,XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX,0x800,0x80000)0000424f

  I tried to active/inactive 10 or 20 entry. But these are not found.

  dev at spike (N101-7069):~$ sudo efibootmgr -A -b 0010
  efibootmgr: Boot entry 10 not found
  Could not set active state for Boot0010: No such file or directory
  dev at spike (N101-7069):~$ sudo efibootmgr -A -b 0020
  efibootmgr: Boot entry 20 not found
  Could not set active state for Boot0020: No such file or directory
  dev at spike (N101-7069):~$ sudo efibootmgr -a -b 0010
  efibootmgr: Boot entry 10 not found
  Could not set active state for Boot0010: No such file or directory
  dev at spike (N101-7069):~$ 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.

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/efibootmgr/+bug/2112632/+subscriptions




More information about the foundations-bugs mailing list