
On Fri, Sep 15, 2017 at 2:53 PM, Heinrich Schuchardt xypron.glpk@gmx.de wrote:
On 09/14/2017 12:05 AM, Rob Clark wrote:
All of the device-path related structures should be packed. UEFI defines the device-path as a byte-aligned data structure.
Signed-off-by: Rob Clark robdclark@gmail.com
include/efi_api.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/include/efi_api.h b/include/efi_api.h index ec1b321e8e..175341348e 100644 --- a/include/efi_api.h +++ b/include/efi_api.h @@ -284,11 +284,11 @@ struct efi_device_path { u8 type; u8 sub_type; u16 length; -}; +} __packed;
struct efi_mac_addr { u8 addr[32];
Hello Alex, hello Rob,
32 bytes is more than the 6 bytes than we need. Why was the structure defined this way?
Off the top of my head, I'm not sure where that came from, maybe this dp node is meant to be variable length? But I guess that is also a separate patch.
-}; +} __packed;
#define DEVICE_PATH_TYPE_MESSAGING_DEVICE 0x03 # define DEVICE_PATH_SUB_TYPE_MSG_MAC_ADDR 0x0b @@ -297,7 +297,7 @@ struct efi_device_path_mac_addr { struct efi_device_path dp; struct efi_mac_addr mac; u8 if_type; -}; +} __packed;
#define DEVICE_PATH_TYPE_MEDIA_DEVICE 0x04 # define DEVICE_PATH_SUB_TYPE_FILE_PATH 0x04 @@ -305,7 +305,7 @@ struct efi_device_path_mac_addr { struct efi_device_path_file_path { struct efi_device_path dp; u16 str[32];
Where do we get this 32 from? Couldn't file/directory names be shorter (1 character) or longer (255 characters)?
yup, file-path nodes should be variable length (and are after my patches.. I have a later one that changes it to 'u16 str[]')
I believe the hard-coded 32 is due to current staticly initialized device-path structs which go away with "efi_loader: refactor boot device and loaded_image handling"
BR, -R