[PATCH v2 087/113] efi: devicepath: improve const safety
Ahmad Fatoum
a.fatoum at pengutronix.de
Mon Mar 4 11:00:12 PST 2024
The device path traversal functions don't modify the device path itself,
so reflect that in the function prototypes.
Signed-off-by: Ahmad Fatoum <a.fatoum at pengutronix.de>
---
efi/devicepath.c | 140 ++++++++++++++++++++++++-----------------------
include/efi.h | 10 ++--
2 files changed, 76 insertions(+), 74 deletions(-)
diff --git a/efi/devicepath.c b/efi/devicepath.c
index 63b0ea61f0f9..6ec0c3780f37 100644
--- a/efi/devicepath.c
+++ b/efi/devicepath.c
@@ -49,7 +49,7 @@ char *cprintf(struct string *str, const char *fmt, ...)
#define DP_IS_END_SUBTYPE(a) ( ((a)->sub_type == END_ENTIRE_DEVICE_PATH_SUBTYPE )
#define device_path_type(a) ( ((a)->type) & EFI_DP_TYPE_MASK )
-#define next_device_path_node(a) ( (struct efi_device_path *) ( ((u8 *) (a)) + (a)->length))
+#define next_device_path_node(a) ( (const struct efi_device_path *) ( ((u8 *) (a)) + (a)->length))
#define is_device_path_end_type(a) ( device_path_type(a) == END_DEVICE_PATH_TYPE )
#define is_device_path_end_sub_type(a) ( (a)->sub_type == END_ENTIRE_DEVICE_PATH_SUBTYPE )
#define is_device_path_end(a) ( is_device_path_end_type(a) && is_device_path_end_sub_type(a) )
@@ -61,23 +61,23 @@ char *cprintf(struct string *str, const char *fmt, ...)
(a)->length = sizeof(struct efi_device_path); \
}
-struct efi_device_path end_device_path = {
+const struct efi_device_path end_device_path = {
.type = END_DEVICE_PATH_TYPE,
.sub_type = END_ENTIRE_DEVICE_PATH_SUBTYPE,
.length = END_DEVICE_PATH_LENGTH,
};
-struct efi_device_path end_instance_device_path = {
+const struct efi_device_path end_instance_device_path = {
.type = END_DEVICE_PATH_TYPE,
.sub_type = END_INSTANCE_DEVICE_PATH_SUBTYPE,
.length = END_DEVICE_PATH_LENGTH,
};
-struct efi_device_path *
+const struct efi_device_path *
device_path_from_handle(efi_handle_t Handle)
{
efi_status_t Status;
- struct efi_device_path *device_path;
+ const struct efi_device_path *device_path;
Status = BS->handle_protocol(Handle, &efi_device_path_protocol_guid,
(void *) &device_path);
@@ -132,27 +132,27 @@ unpack_device_path(const struct efi_device_path *dev_path)
}
static void
-dev_path_pci(struct string *str, void *dev_path)
+dev_path_pci(struct string *str, const void *dev_path)
{
- struct pci_device_path *Pci;
+ const struct pci_device_path *Pci;
Pci = dev_path;
cprintf(str, "Pci(0x%x,0x%x)", Pci->Device, Pci->Function);
}
static void
-dev_path_pccard(struct string *str, void *dev_path)
+dev_path_pccard(struct string *str, const void *dev_path)
{
- struct pccard_device_path *Pccard;
+ const struct pccard_device_path *Pccard;
Pccard = dev_path;
cprintf(str, "Pccard(0x%x)", Pccard->function_number);
}
static void
-dev_path_mem_map(struct string *str, void *dev_path)
+dev_path_mem_map(struct string *str, const void *dev_path)
{
- struct memmap_device_path *mem_map;
+ const struct memmap_device_path *mem_map;
mem_map = dev_path;
cprintf(str, "mem_map(%d,0x%llx,0x%llx)",
@@ -161,18 +161,18 @@ dev_path_mem_map(struct string *str, void *dev_path)
}
static void
-dev_path_controller(struct string *str, void *dev_path)
+dev_path_controller(struct string *str, const void *dev_path)
{
- struct controller_device_path *Controller;
+ const struct controller_device_path *Controller;
Controller = dev_path;
cprintf(str, "Ctrl(%d)", Controller->Controller);
}
static void
-dev_path_vendor(struct string *str, void *dev_path)
+dev_path_vendor(struct string *str, const void *dev_path)
{
- struct vendor_device_path *Vendor;
+ const struct vendor_device_path *Vendor;
char *type;
struct unknown_device_vendor_device_path *unknown_dev_path;
@@ -207,9 +207,9 @@ dev_path_vendor(struct string *str, void *dev_path)
type: 2 (ACPI Device Path) sub_type: 1 (ACPI Device Path)
*/
static void
-dev_path_acpi(struct string *str, void *dev_path)
+dev_path_acpi(struct string *str, const void *dev_path)
{
- struct acpi_hid_device_path *Acpi;
+ const struct acpi_hid_device_path *Acpi;
Acpi = dev_path;
if ((Acpi->HID & PNP_EISA_ID_MASK) == PNP_EISA_ID_CONST) {
@@ -250,9 +250,9 @@ dev_path_acpi(struct string *str, void *dev_path)
}
static void
-dev_path_atapi(struct string *str, void *dev_path)
+dev_path_atapi(struct string *str, const void *dev_path)
{
- struct atapi_device_path *Atapi;
+ const struct atapi_device_path *Atapi;
Atapi = dev_path;
cprintf(str, "Ata(%s,%s)",
@@ -261,18 +261,18 @@ dev_path_atapi(struct string *str, void *dev_path)
}
static void
-dev_path_scsi(struct string *str, void *dev_path)
+dev_path_scsi(struct string *str, const void *dev_path)
{
- struct scsi_device_path *Scsi;
+ const struct scsi_device_path *Scsi;
Scsi = dev_path;
cprintf(str, "Scsi(%d,%d)", Scsi->Pun, Scsi->Lun);
}
static void
-dev_path_fibre(struct string *str, void *dev_path)
+dev_path_fibre(struct string *str, const void *dev_path)
{
- struct fibrechannel_device_path *Fibre;
+ const struct fibrechannel_device_path *Fibre;
Fibre = dev_path;
cprintf(str, "Fibre%s(0x%016llx,0x%016llx)",
@@ -281,36 +281,36 @@ dev_path_fibre(struct string *str, void *dev_path)
}
static void
-dev_path1394(struct string *str, void *dev_path)
+dev_path1394(struct string *str, const void *dev_path)
{
- struct f1394_device_path *F1394;
+ const struct f1394_device_path *F1394;
F1394 = dev_path;
cprintf(str, "1394(%pU)", &F1394->Guid);
}
static void
-dev_path_usb(struct string *str, void *dev_path)
+dev_path_usb(struct string *str, const void *dev_path)
{
- struct usb_device_path *Usb;
+ const struct usb_device_path *Usb;
Usb = dev_path;
cprintf(str, "Usb(0x%x,0x%x)", Usb->Port, Usb->Endpoint);
}
static void
-dev_path_i2_o(struct string *str, void *dev_path)
+dev_path_i2_o(struct string *str, const void *dev_path)
{
- struct i2_o_device_path *i2_o;
+ const struct i2_o_device_path *i2_o;
i2_o = dev_path;
cprintf(str, "i2_o(0x%X)", i2_o->Tid);
}
static void
-dev_path_mac_addr(struct string *str, void *dev_path)
+dev_path_mac_addr(struct string *str, const void *dev_path)
{
- struct mac_addr_device_path *MAC;
+ const struct mac_addr_device_path *MAC;
unsigned long hw_address_size;
unsigned long Index;
@@ -335,14 +335,14 @@ dev_path_mac_addr(struct string *str, void *dev_path)
}
static void
-cat_print_iPv4(struct string *str, struct efi_ipv4_address * address)
+cat_print_iPv4(struct string *str, const struct efi_ipv4_address * address)
{
cprintf(str, "%d.%d.%d.%d", address->Addr[0], address->Addr[1],
address->Addr[2], address->Addr[3]);
}
static bool
-is_not_null_iPv4(struct efi_ipv4_address * address)
+is_not_null_iPv4(const struct efi_ipv4_address * address)
{
u8 val;
@@ -364,9 +364,9 @@ cat_print_network_protocol(struct string *str, u16 Proto)
}
static void
-dev_path_iPv4(struct string *str, void *dev_path)
+dev_path_iPv4(struct string *str, const void *dev_path)
{
- struct ipv4_device_path *ip;
+ const struct ipv4_device_path *ip;
bool show;
ip = dev_path;
@@ -406,7 +406,7 @@ dev_path_iPv4(struct string *str, void *dev_path)
#define cat_print_iPv6_ADD( x , y ) ( ( (u16) ( x ) ) << 8 | ( y ) )
static void
-cat_print_ipv6(struct string *str, struct efi_ipv6_address * address)
+cat_print_ipv6(struct string *str, const struct efi_ipv6_address * address)
{
cprintf(str, "%x:%x:%x:%x:%x:%x:%x:%x",
cat_print_iPv6_ADD(address->Addr[0], address->Addr[1]),
@@ -420,9 +420,9 @@ cat_print_ipv6(struct string *str, struct efi_ipv6_address * address)
}
static void
-dev_path_iPv6(struct string *str, void *dev_path)
+dev_path_iPv6(struct string *str, const void *dev_path)
{
- struct ipv6_device_path *ip;
+ const struct ipv6_device_path *ip;
ip = dev_path;
cprintf(str, "IPv6(");
@@ -444,9 +444,9 @@ dev_path_iPv6(struct string *str, void *dev_path)
}
static void
-dev_path_infini_band(struct string *str, void *dev_path)
+dev_path_infini_band(struct string *str, const void *dev_path)
{
- struct infiniband_device_path *infini_band;
+ const struct infiniband_device_path *infini_band;
infini_band = dev_path;
cprintf(str, "Infiniband(0x%x,%pU,0x%llx,0x%llx,0x%llx)",
@@ -456,9 +456,9 @@ dev_path_infini_band(struct string *str, void *dev_path)
}
static void
-dev_path_uart(struct string *str, void *dev_path)
+dev_path_uart(struct string *str, const void *dev_path)
{
- struct uart_device_path *Uart;
+ const struct uart_device_path *Uart;
s8 Parity;
Uart = dev_path;
@@ -516,9 +516,9 @@ dev_path_uart(struct string *str, void *dev_path)
}
static void
-dev_path_sata(struct string *str, void *dev_path)
+dev_path_sata(struct string *str, const void *dev_path)
{
- struct sata_device_path *sata;
+ const struct sata_device_path *sata;
sata = dev_path;
cprintf(str, "Sata(0x%x,0x%x,0x%x)", sata->HBAPort_number,
@@ -526,9 +526,9 @@ dev_path_sata(struct string *str, void *dev_path)
}
static void
-dev_path_hard_drive(struct string *str, void *dev_path)
+dev_path_hard_drive(struct string *str, const void *dev_path)
{
- struct harddrive_device_path *hd;
+ const struct harddrive_device_path *hd;
hd = dev_path;
switch (hd->signature_type) {
@@ -551,18 +551,18 @@ dev_path_hard_drive(struct string *str, void *dev_path)
}
static void
-dev_path_cdrom(struct string *str, void *dev_path)
+dev_path_cdrom(struct string *str, const void *dev_path)
{
- struct cdrom_device_path *cd;
+ const struct cdrom_device_path *cd;
cd = dev_path;
cprintf(str, "CDROM(0x%x)", cd->boot_entry);
}
static void
-dev_path_file_path(struct string *str, void *dev_path)
+dev_path_file_path(struct string *str, const void *dev_path)
{
- struct filepath_device_path *Fp;
+ const struct filepath_device_path *Fp;
char *dst;
Fp = dev_path;
@@ -575,18 +575,18 @@ dev_path_file_path(struct string *str, void *dev_path)
}
static void
-dev_path_media_protocol(struct string *str, void *dev_path)
+dev_path_media_protocol(struct string *str, const void *dev_path)
{
- struct media_protocol_device_path *media_prot;
+ const struct media_protocol_device_path *media_prot;
media_prot = dev_path;
cprintf(str, "%pU", &media_prot->Protocol);
}
static void
-dev_path_bss_bss(struct string *str, void *dev_path)
+dev_path_bss_bss(struct string *str, const void *dev_path)
{
- struct bbs_bbs_device_path *Bss;
+ const struct bbs_bbs_device_path *Bss;
char *type;
Bss = dev_path;
@@ -618,7 +618,7 @@ dev_path_bss_bss(struct string *str, void *dev_path)
}
static void
-dev_path_end_instance(struct string *str, void *dev_path)
+dev_path_end_instance(struct string *str, const void *dev_path)
{
cprintf(str, ",");
}
@@ -629,10 +629,10 @@ dev_path_end_instance(struct string *str, void *dev_path)
*/
static void
-dev_path_node_unknown(struct string *str, void *dev_path)
+dev_path_node_unknown(struct string *str, const void *dev_path)
{
- struct efi_device_path *Path;
- u8 *value;
+ const struct efi_device_path *Path;
+ const u8 *value;
int length, index;
Path = dev_path;
value = dev_path;
@@ -684,7 +684,7 @@ dev_path_node_unknown(struct string *str, void *dev_path)
struct {
u8 type;
u8 sub_type;
- void (*Function) (struct string *, void *);
+ void (*Function) (struct string *, const void *);
} dev_path_table[] = {
{
HARDWARE_DEVICE_PATH, HW_PCI_DP, dev_path_pci}, {
@@ -717,10 +717,11 @@ struct {
0, 0, NULL}
};
-static int __device_path_to_str(struct string *str, struct efi_device_path *dev_path)
+static int __device_path_to_str(struct string *str,
+ const struct efi_device_path *dev_path)
{
- struct efi_device_path *dev_path_node;
- void (*dump_node) (struct string *, void *);
+ const struct efi_device_path *dev_path_node;
+ void (*dump_node) (struct string *, const void *);
int i;
dev_path = unpack_device_path(dev_path);
@@ -753,7 +754,7 @@ static int __device_path_to_str(struct string *str, struct efi_device_path *dev_
return 0;
}
-char *device_path_to_str(struct efi_device_path *dev_path)
+char *device_path_to_str(const struct efi_device_path *dev_path)
{
struct string str = {};
@@ -770,9 +771,9 @@ char *device_path_to_str(struct efi_device_path *dev_path)
return str.str;
}
-u8 device_path_to_type(struct efi_device_path *dev_path)
+u8 device_path_to_type(const struct efi_device_path *dev_path)
{
- struct efi_device_path *dev_path_next;
+ const struct efi_device_path *dev_path_next;
dev_path = unpack_device_path(dev_path);
dev_path_next = next_device_path_node(dev_path);
@@ -785,9 +786,9 @@ u8 device_path_to_type(struct efi_device_path *dev_path)
return device_path_type(dev_path);
}
-u8 device_path_to_subtype(struct efi_device_path *dev_path)
+u8 device_path_to_subtype(const struct efi_device_path *dev_path)
{
- struct efi_device_path *dev_path_next;
+ const struct efi_device_path *dev_path_next;
dev_path = unpack_device_path(dev_path);
dev_path_next = next_device_path_node(dev_path);
@@ -800,9 +801,10 @@ u8 device_path_to_subtype(struct efi_device_path *dev_path)
return dev_path->sub_type;
}
-char *device_path_to_partuuid(struct efi_device_path *dev_path)
+
+char *device_path_to_partuuid(const struct efi_device_path *dev_path)
{
- struct efi_device_path *dev_path_node;
+ const struct efi_device_path *dev_path_node;
struct harddrive_device_path *hd;
char *str = NULL;;
diff --git a/include/efi.h b/include/efi.h
index 80d2f784847b..6795dc414c3c 100644
--- a/include/efi.h
+++ b/include/efi.h
@@ -878,11 +878,11 @@ struct efi_simple_text_input_protocol {
struct efi_event *wait_for_key;
};
-struct efi_device_path *device_path_from_handle(efi_handle_t Handle);
-char *device_path_to_str(struct efi_device_path *dev_path);
-u8 device_path_to_type(struct efi_device_path *dev_path);
-u8 device_path_to_subtype(struct efi_device_path *dev_path);
-char *device_path_to_partuuid(struct efi_device_path *dev_path);
+const struct efi_device_path *device_path_from_handle(efi_handle_t handle);
+char *device_path_to_str(const struct efi_device_path *dev_path);
+u8 device_path_to_type(const struct efi_device_path *dev_path);
+u8 device_path_to_subtype(const struct efi_device_path *dev_path);
+char *device_path_to_partuuid(const struct efi_device_path *dev_path);
const char *efi_guid_string(efi_guid_t *g);
--
2.39.2
More information about the barebox
mailing list