]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
bootctl: do not use the EFI path as XBOOTLDR path 40413/head
authorYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 21 Jan 2026 12:39:46 +0000 (21:39 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 13 Feb 2026 07:11:33 +0000 (16:11 +0900)
When running in a container, EFI and XBOOTLDR partition check is
relaxed, hence /boot may be recognized as both EFI and XBOOTLDR
partition.

Before:
```
$ run0 systemd-nspawn -xD / --private-network --bind=/sys/firmware/efi/efivars --bind=/boot -E SYSTEMD_LOG_LEVEL=debug -- build/bootctl --variables=yes --no-pager -x
Failed to check file system type of "/efi": No such file or directory
Using EFI System Partition at /boot.
Using XBOOTLDR partition at /boot as $BOOT.
/boot
```

After:
```
$ run0 systemd-nspawn -xD / --private-network --bind=/sys/firmware/efi/efivars --bind=/boot -E SYSTEMD_LOG_LEVEL=debug -- build/bootctl --variables=yes -x
Failed to check file system type of "/efi": No such file or directory
Using EFI System Partition at /boot.
Didn't find an XBOOTLDR partition, using the ESP as $BOOT.
/boot
```

src/bootctl/bootctl.c

index b0c1fb29341a0478fa9f33e05c5b8aff10c31593..a74a131c247cc8c110c38a9fd231703c3c6ae851 100644 (file)
@@ -145,8 +145,8 @@ int acquire_xbootldr(
         int r;
 
         r = find_xbootldr_and_warn(arg_root, arg_xbootldr_path, unprivileged_mode, &np, ret_uuid, ret_devid);
-        if (r == -ENOKEY) {
-                log_debug_errno(r, "Didn't find an XBOOTLDR partition, using the ESP as $BOOT.");
+        if (r == -ENOKEY || path_equal(np, arg_esp_path)) {
+                log_debug("Didn't find an XBOOTLDR partition, using the ESP as $BOOT.");
                 arg_xbootldr_path = mfree(arg_xbootldr_path);
 
                 if (ret_uuid)