]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-stub: do not print warning if filesystem is not supported
authorAlfonso Sánchez-Beato <alfonso.sanchez-beato@canonical.com>
Thu, 3 Mar 2022 10:42:41 +0000 (11:42 +0100)
committerLuca Boccassi <luca.boccassi@gmail.com>
Thu, 3 Mar 2022 23:14:45 +0000 (23:14 +0000)
Do not print a warning in case we try to load the file system protocol for an
unsupported file system, just return EFI_SUCCESS instead.

src/boot/efi/cpio.c

index 258755366ed735c6c5365d1a5d430a58d7fb0982..2855c4119be70c4e1d8eb28f3a60f5557a50ca11 100644 (file)
@@ -324,6 +324,7 @@ EFI_STATUS pack_cpio(
         _cleanup_freepool_ void *buffer = NULL;
         UINT32 inode = 1; /* inode counter, so that each item gets a new inode */
         EFI_STATUS err;
+        EFI_FILE_IO_INTERFACE *volume;
 
         assert(loaded_image);
         assert(target_dir_prefix);
@@ -336,9 +337,24 @@ EFI_STATUS pack_cpio(
                 return EFI_SUCCESS;
         }
 
-        root = LibOpenRoot(loaded_image->DeviceHandle);
-        if (!root)
-                return log_error_status_stall(EFI_LOAD_ERROR, L"Unable to open root directory.");
+        err = BS->HandleProtocol(loaded_image->DeviceHandle,
+                                 &FileSystemProtocol, (void*)&volume);
+        /* Error will be unsupported if the bootloader doesn't implement the
+         * file system protocol on its file handles.
+         */
+        if (err == EFI_UNSUPPORTED) {
+                *ret_buffer = NULL;
+                *ret_buffer_size = 0;
+                return EFI_SUCCESS;
+        }
+        if (EFI_ERROR(err))
+                return log_error_status_stall(
+                                err, L"Unable to load file system protocol: %r", err);
+
+        err = volume->OpenVolume(volume, &root);
+        if (EFI_ERROR(err))
+                return log_error_status_stall(
+                                err, L"Unable to open root directory: %r", err);
 
         if (!dropin_dir)
                 dropin_dir = rel_dropin_dir = xpool_print(L"%D.extra.d", loaded_image->FilePath);