From c8f03e621820f1371fe16d15502b34f45a4f0886 Mon Sep 17 00:00:00 2001 From: Peter Jones Date: Tue, 27 Sep 2016 13:48:14 -0400 Subject: [PATCH] efivar-dp.h: Actually add the packed attribute everywhere. Apparently 9b3155b095 was not enough, so pack all the device path structures. Signed-off-by: Peter Jones --- src/include/efivar/efivar-dp.h | 94 +++++++++++++++++----------------- 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/src/include/efivar/efivar-dp.h b/src/include/efivar/efivar-dp.h index b6b444f3..230b8093 100644 --- a/src/include/efivar/efivar-dp.h +++ b/src/include/efivar/efivar-dp.h @@ -45,7 +45,7 @@ typedef struct { efidp_header header; uint8_t function; uint8_t device; -} efidp_pci; +} __attribute__((__packed__)) efidp_pci; extern ssize_t efidp_make_pci(uint8_t *buf, ssize_t size, uint8_t device, uint8_t function); @@ -53,7 +53,7 @@ extern ssize_t efidp_make_pci(uint8_t *buf, ssize_t size, uint8_t device, typedef struct { efidp_header header; uint8_t function; -} efidp_pccard; +} __attribute__((__packed__)) efidp_pccard; #define EFIDP_HW_MMIO 0x03 typedef struct { @@ -61,14 +61,14 @@ typedef struct { uint32_t memory_type; uint64_t starting_address; uint64_t ending_address; -} efidp_mmio; +} __attribute__((__packed__)) efidp_mmio; #define EFIDP_HW_VENDOR 0x04 typedef struct { efidp_header header; efi_guid_t vendor_guid; uint8_t vendor_data[0]; -} efidp_hw_vendor; +} __attribute__((__packed__)) efidp_hw_vendor; typedef efidp_hw_vendor efidp_vendor_hw; #define efidp_make_hw_vendor(buf, size, guid, data, data_size) \ efidp_make_vendor(buf, size, EFIDP_HARDWARE_TYPE, \ @@ -80,7 +80,7 @@ typedef struct { efidp_header header; efi_guid_t vendor_guid; uint32_t hardware_device; -} efidp_edd10; +} __attribute__((__packed__)) efidp_edd10; extern ssize_t efidp_make_edd10(uint8_t *buf, ssize_t size, uint32_t hardware_device); @@ -88,14 +88,14 @@ extern ssize_t efidp_make_edd10(uint8_t *buf, ssize_t size, typedef struct { efidp_header header; uint32_t controller; -} efidp_controller; +} __attribute__((__packed__)) efidp_controller; #define EFIDP_HW_BMC 0x06 typedef struct { efidp_header header; uint8_t interface_type; uint64_t base_addr; -} efidp_bmc; +} __attribute__((__packed__)) efidp_bmc; #define EFIDP_BMC_UNKNOWN 0x00 #define EFIDP_BMC_KEYBOARD 0x01 @@ -109,7 +109,7 @@ typedef struct { efidp_header header; uint32_t hid; uint32_t uid; -} efidp_acpi_hid; +} __attribute__((__packed__)) efidp_acpi_hid; extern ssize_t efidp_make_acpi_hid(uint8_t *buf, ssize_t size, uint32_t hid, uint32_t uid); @@ -121,7 +121,7 @@ typedef struct { uint32_t cid; /* three ascii string fields follow */ char hidstr[]; -} efidp_acpi_hid_ex; +} __attribute__((__packed__)) efidp_acpi_hid_ex; extern ssize_t efidp_make_acpi_hid_ex(uint8_t *buf, ssize_t size, uint32_t hid, uint32_t uid, uint32_t cid, char *hidstr, char *uidstr, char *cidstr) @@ -148,7 +148,7 @@ extern ssize_t efidp_make_acpi_hid_ex(uint8_t *buf, ssize_t size, uint32_t hid, typedef struct { efidp_header header; uint32_t adr[]; -} efidp_acpi_adr; +} __attribute__((__packed__)) efidp_acpi_adr; #define EFIDP_ACPI_ADR_DISPLAY_TYPE_OTHER 0 #define EFIDP_ACPI_ADR_DISPLAY_TYPE_VGA 1 @@ -175,7 +175,7 @@ typedef struct { uint8_t primary; uint8_t slave; uint16_t lun; -} efidp_atapi; +} __attribute__((__packed__)) efidp_atapi; extern ssize_t efidp_make_atapi(uint8_t *buf, ssize_t size, uint16_t primary, uint16_t slave, uint16_t lun); @@ -184,7 +184,7 @@ typedef struct { efidp_header header; uint16_t target; uint16_t lun; -} efidp_scsi; +} __attribute__((__packed__)) efidp_scsi; extern ssize_t efidp_make_scsi(uint8_t *buf, ssize_t size, uint16_t target, uint16_t lun); @@ -194,7 +194,7 @@ typedef struct { uint32_t reserved; uint64_t wwn; uint64_t lun; -} efidp_fc; +} __attribute__((__packed__)) efidp_fc; #define EFIDP_MSG_FIBRECHANNELEX 0x15 typedef struct { @@ -202,21 +202,21 @@ typedef struct { uint32_t reserved; uint8_t wwn[8]; uint8_t lun[8]; -} efidp_fcex; +} __attribute__((__packed__)) efidp_fcex; #define EFIDP_MSG_1394 0x04 typedef struct { efidp_header header; uint32_t reserved; uint64_t guid; -} efidp_1394; +} __attribute__((__packed__)) efidp_1394; #define EFIDP_MSG_USB 0x05 typedef struct { efidp_header header; uint8_t parent_port; uint8_t interface; -} efidp_usb; +} __attribute__((__packed__)) efidp_usb; #define EFIDP_MSG_USB_CLASS 0x0f typedef struct { @@ -226,7 +226,7 @@ typedef struct { uint8_t device_class; uint8_t device_subclass; uint8_t device_protocol; -} efidp_usb_class; +} __attribute__((__packed__)) efidp_usb_class; #define EFIDP_USB_CLASS_AUDIO 0x01 #define EFIDP_USB_CLASS_CDC_CONTROL 0x02 @@ -252,13 +252,13 @@ typedef struct { uint16_t vendor_id; uint16_t product_id; uint16_t serial_number[]; -} efidp_usb_wwid; +} __attribute__((__packed__)) efidp_usb_wwid; #define EFIDP_MSG_LUN 0x11 typedef struct { efidp_header header; uint8_t lun; -} efidp_lun; +} __attribute__((__packed__)) efidp_lun; #define EFIDP_MSG_SATA 0x12 typedef struct { @@ -266,7 +266,7 @@ typedef struct { uint16_t hba_port; uint16_t port_multiplier_port; uint16_t lun; -} efidp_sata; +} __attribute__((__packed__)) efidp_sata; #define SATA_HBA_DIRECT_CONNECT_FLAG 0x8000 extern ssize_t efidp_make_sata(uint8_t *buf, ssize_t size, uint16_t hba_port, int16_t port_multiplier_port, uint16_t lun); @@ -275,14 +275,14 @@ extern ssize_t efidp_make_sata(uint8_t *buf, ssize_t size, uint16_t hba_port, typedef struct { efidp_header header; uint32_t target; -} efidp_i2o; +} __attribute__((__packed__)) efidp_i2o; #define EFIDP_MSG_MAC_ADDR 0x0b typedef struct { efidp_header header; uint8_t mac_addr[32]; uint8_t if_type; -} efidp_mac_addr; +} __attribute__((__packed__)) efidp_mac_addr; extern ssize_t efidp_make_mac_addr(uint8_t *buf, ssize_t size, uint8_t if_type, const uint8_t * const mac_addr, @@ -300,7 +300,7 @@ typedef struct { efidp_boolean static_ip_addr; uint8_t gateway[4]; uint8_t netmask[4]; -} efidp_ipv4_addr; +} __attribute__((__packed__)) efidp_ipv4_addr; /* everything here is in host byte order */ extern ssize_t efidp_make_ipv4(uint8_t *buf, ssize_t size, uint32_t local, uint32_t remote, @@ -322,7 +322,7 @@ typedef struct { uint8_t ip_addr_origin; uint8_t prefix_length; uint8_t gateway_ipv6_addr; -} efidp_ipv6_addr; +} __attribute__((__packed__)) efidp_ipv6_addr; #define EFIDP_IPv6_ORIGIN_MANUAL 0x00 #define EFIDP_IPv6_ORIGIN_AUTOCONF 0x01 @@ -332,7 +332,7 @@ typedef struct { typedef struct { efidp_header header; uint16_t vlan_id; -} efidp_vlan; +} __attribute__((__packed__)) efidp_vlan; #define EFIDP_MSG_INFINIBAND 0x09 typedef struct { @@ -345,7 +345,7 @@ typedef struct { }; uint64_t target_port_id; uint64_t device_id; -} efidp_infiniband; +} __attribute__((__packed__)) efidp_infiniband; #define EFIDP_INFINIBAND_RESOURCE_IOC_SERVICE 0x01 #define EFIDP_INFINIBAND_RESOURCE_EXTENDED_BOOT 0x02 @@ -361,7 +361,7 @@ typedef struct { uint8_t data_bits; uint8_t parity; uint8_t stop_bits; -} efidp_uart; +} __attribute__((__packed__)) efidp_uart; #define EFIDP_UART_PARITY_DEFAULT 0x00 #define EFIDP_UART_PARITY_NONE 0x01 @@ -389,7 +389,7 @@ typedef struct { efidp_header header; efi_guid_t vendor_guid; uint8_t vendor_data[0]; -} efidp_msg_vendor; +} __attribute__((__packed__)) efidp_msg_vendor; typedef efidp_msg_vendor efidp_vendor_msg; #define efidp_make_msg_vendor(buf, size, guid, data, data_size) \ efidp_make_vendor(buf, size, EFIDP_MESSAGE_TYPE, \ @@ -402,7 +402,7 @@ typedef struct { efidp_header header; efi_guid_t vendor_guid; uint32_t flow_control_map; -} efidp_uart_flow_control; +} __attribute__((__packed__)) efidp_uart_flow_control; #define EFIDP_UART_FLOW_CONTROL_HARDWARE 0x1 #define EFIDP_UART_FLOW_CONTROL_XONXOFF 0x2 @@ -418,7 +418,7 @@ typedef struct { uint8_t device_topology_info; uint8_t drive_bay_id; /* If EFIDP_SAS_TOPOLOGY_NEXTBYTE set */ uint16_t rtp; -} efidp_sas; +} __attribute__((__packed__)) efidp_sas; extern ssize_t efidp_make_sas(uint8_t *buf, ssize_t size, uint64_t sas_address); /* device_topology_info Bits 0:3 (enum) */ @@ -449,7 +449,7 @@ typedef struct { uint8_t device_topology_info; uint8_t drive_bay_id; /* If EFIDP_SAS_TOPOLOGY_NEXTBYTE set */ uint16_t rtp; -} efidp_sas_ex; +} __attribute__((__packed__)) efidp_sas_ex; #define EFIDP_MSG_DEBUGPORT_GUID \ EFI_GUID(0xEBA4E8D2,0x3858,0x41EC,0xA281,0x26,0x47,0xBA,0x96,0x60,0xD0) @@ -462,7 +462,7 @@ typedef struct { uint8_t lun[8]; uint16_t tpgt; uint8_t target_name[0]; -} efidp_iscsi; +} __attribute__((__packed__)) efidp_iscsi; /* options bits 0:1 */ #define EFIDP_ISCSI_HEADER_DIGEST_SHIFT 0 @@ -494,7 +494,7 @@ typedef struct { efidp_header header; uint32_t namespace_id; uint8_t ieee_eui_64[8]; -} efidp_nvme; +} __attribute__((__packed__)) efidp_nvme; extern ssize_t efidp_make_nvme(uint8_t *buf, ssize_t size, uint32_t namespace_id, uint8_t *ieee_eui_64); @@ -502,20 +502,20 @@ extern ssize_t efidp_make_nvme(uint8_t *buf, ssize_t size, typedef struct { efidp_header header; uint8_t uri[0]; -} efidp_uri; +} __attribute__((__packed__)) efidp_uri; #define EFIDP_MSG_UFS 0x19 typedef struct { efidp_header header; uint8_t target_id; uint8_t lun; -} efidp_ufs; +} __attribute__((__packed__)) efidp_ufs; #define EFIDP_MSG_SD 0x1a typedef struct { efidp_header header; uint8_t slot_number; -} efidp_sd; +} __attribute__((__packed__)) efidp_sd; /* Each media subtype */ #define EFIDP_MEDIA_HD 0x1 @@ -530,7 +530,7 @@ typedef struct { #ifdef __ia64 uint8_t padding[6]; /* Emperically needed */ #endif -} __attribute__((__packed__)) efidp_hd; +} __attribute__((__packed__)) __attribute__((__packed__)) efidp_hd; extern ssize_t efidp_make_hd(uint8_t *buf, ssize_t size, uint32_t num, uint64_t part_start, uint64_t part_size, uint8_t *signature, uint8_t format, @@ -549,14 +549,14 @@ typedef struct { uint32_t boot_catalog_entry; uint64_t partition_rba; uint64_t sectors; -} efidp_cdrom; +} __attribute__((__packed__)) efidp_cdrom; #define EFIDP_MEDIA_VENDOR 0x3 typedef struct { efidp_header header; efi_guid_t vendor_guid; uint8_t vendor_data[0]; -} efidp_media_vendor; +} __attribute__((__packed__)) efidp_media_vendor; typedef efidp_media_vendor efidp_vendor_media; #define efidp_make_media_vendor(buf, size, guid, data, data_size) \ efidp_make_vendor(buf, size, EFIDP_MEDIA_TYPE, \ @@ -566,26 +566,26 @@ typedef efidp_media_vendor efidp_vendor_media; typedef struct { efidp_header header; uint16_t name[]; -} efidp_file; +} __attribute__((__packed__)) efidp_file; extern ssize_t efidp_make_file(uint8_t *buf, ssize_t size, char *filename); #define EFIDP_MEDIA_PROTOCOL 0x5 typedef struct { efidp_header header; efi_guid_t protocol_guid; -} efidp_protocol; +} __attribute__((__packed__)) efidp_protocol; #define EFIDP_MEDIA_FIRMWARE_FILE 0x6 typedef struct { efidp_header header; uint8_t pi_info[0]; -} efidp_firmware_file; +} __attribute__((__packed__)) efidp_firmware_file; #define EFIDP_MEDIA_FIRMWARE_VOLUME 0x7 typedef struct { efidp_header header; uint8_t pi_info[0]; -} efidp_firmware_volume; +} __attribute__((__packed__)) efidp_firmware_volume; #define EFIDP_MEDIA_RELATIVE_OFFSET 0x8 typedef struct { @@ -593,7 +593,7 @@ typedef struct { uint32_t reserved; uint64_t first_byte; uint64_t last_byte; -} efidp_relative_offset; +} __attribute__((__packed__)) efidp_relative_offset; #define EFIDP_MEDIA_RAMDISK 0x9 typedef struct { @@ -602,7 +602,7 @@ typedef struct { uint64_t end_addr; efi_guid_t disk_type_guid; uint16_t instance_number; -} efidp_ramdisk; +} __attribute__((__packed__)) efidp_ramdisk; #define EFIDP_VIRTUAL_DISK_GUID \ EFI_GUID(0x77AB535A,0x45FC,0x624B,0x5560,0xF7,0xB2,0x81,0xD1,0xF9,0x6E) @@ -620,7 +620,7 @@ typedef struct { uint16_t device_type; uint16_t status; uint8_t description[0]; -} efidp_bios_boot; +} __attribute__((__packed__)) efidp_bios_boot; #define EFIDP_BIOS_BOOT_DEVICE_TYPE_FLOPPY 1 #define EFIDP_BIOS_BOOT_DEVICE_TYPE_HD 2 @@ -686,7 +686,7 @@ typedef union { efidp_relative_offset relative_offset; efidp_ramdisk ramdisk; efidp_bios_boot bios_boot; -} efidp_data; +} __attribute__((__packed__)) efidp_data; typedef efidp_data *efidp; typedef const efidp_data *const_efidp;