[PATCH master 23/39] efi: loader: initialize block IO ops before installing protocol
Ahmad Fatoum
a.fatoum at pengutronix.de
Mon Feb 16 00:44:23 PST 2026
efi_disk_add_cdev() installs the EFI_BLOCK_IO_PROTOCOL with
efi_install_multiple_protocol_interfaces() before populating the ops
structure and media fields. Between installation and initialization,
any consumer of the protocol (e.g., efi_simple_file_system() called
immediately after) would see zeroed-out function pointers.
Move the ops, media, and cdev initialization before the protocol
installation so the interface is fully populated when it becomes
visible.
Co-Authored-By: Claude Opus 4.6 <noreply at anthropic.com>
Signed-off-by: Ahmad Fatoum <a.fatoum at pengutronix.de>
---
efi/loader/protocols/disk.c | 24 ++++++++++++------------
1 file changed, 12 insertions(+), 12 deletions(-)
diff --git a/efi/loader/protocols/disk.c b/efi/loader/protocols/disk.c
index b4a3a7ab0c97..5494f9197cb4 100644
--- a/efi/loader/protocols/disk.c
+++ b/efi/loader/protocols/disk.c
@@ -248,6 +248,18 @@ static efi_status_t efi_disk_add_cdev(efi_handle_t parent,
diskobj->dp = efi_dp_from_cdev(cdev, true);
}
+ diskobj->media.removable_media = removable;
+ diskobj->media.media_present = true;
+ diskobj->media.read_only = cdev->flags & DEVFS_PARTITION_READONLY;
+ diskobj->media.block_size = 512;
+ diskobj->media.io_align = 512;
+ diskobj->media.last_block = cdev->size / diskobj->media.block_size - 1;
+
+ diskobj->ops = block_io_disk_template;
+ diskobj->ops.media = &diskobj->media;
+
+ diskobj->cdev = cdev;
+
/*
* Install the device path and the block IO protocol.
*
@@ -272,18 +284,6 @@ static efi_status_t efi_disk_add_cdev(efi_handle_t parent,
return ret;
}
- diskobj->media.removable_media = removable;
- diskobj->media.media_present = true;
- diskobj->media.read_only = cdev->flags & DEVFS_PARTITION_READONLY;
- diskobj->media.block_size = 512;
- diskobj->media.io_align = 512;
- diskobj->media.last_block = cdev->size / diskobj->media.block_size - 1;
-
- diskobj->ops = block_io_disk_template;
- diskobj->ops.media = &diskobj->media;
-
- diskobj->cdev = cdev;
-
if (disk)
*disk = diskobj;
--
2.47.3
More information about the barebox
mailing list