* include/grub/efi/api.h (grub_efi_device_path): Define length as

unaligned u16 rather than u8[2].
This commit is contained in:
Vladimir Serbinenko 2013-12-11 15:54:01 +01:00
parent 30d0053799
commit 219401b8b9
4 changed files with 13 additions and 14 deletions

View file

@ -1,3 +1,8 @@
2013-12-11 Vladimir Serbinenko <phcoder@gmail.com>
* include/grub/efi/api.h (grub_efi_device_path): Define length as
unaligned u16 rather than u8[2].
2013-12-11 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/kern/ia64/dl.c (grub_arch_dl_relocate_symbols): Add checks

View file

@ -157,8 +157,7 @@ find_parent_device (struct grub_efidisk_data *devices,
ldp = find_last_device_path (dp);
ldp->type = GRUB_EFI_END_DEVICE_PATH_TYPE;
ldp->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE;
ldp->length[0] = sizeof (*ldp);
ldp->length[1] = 0;
ldp->length = sizeof (*ldp);
for (parent = devices; parent; parent = parent->next)
{
@ -188,8 +187,7 @@ is_child (struct grub_efidisk_data *child,
ldp = find_last_device_path (dp);
ldp->type = GRUB_EFI_END_DEVICE_PATH_TYPE;
ldp->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE;
ldp->length[0] = sizeof (*ldp);
ldp->length[1] = 0;
ldp->length = sizeof (*ldp);
ret = (grub_efi_compare_device_paths (dp, parent->device_path) == 0);
grub_free (dp);
@ -816,8 +814,7 @@ grub_efidisk_get_device_name (grub_efi_handle_t *handle)
dup_ldp->type = GRUB_EFI_END_DEVICE_PATH_TYPE;
dup_ldp->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE;
dup_ldp->length[0] = sizeof (*dup_ldp);
dup_ldp->length[1] = 0;
dup_ldp->length = sizeof (*dup_ldp);
}
if (!get_diskname_from_path (dup_dp, device_name))

View file

@ -122,9 +122,7 @@ copy_file_path (grub_efi_file_path_device_path_t *fp,
if (*p == '/')
*p = '\\';
size = size * sizeof (grub_efi_char16_t) + sizeof (*fp);
fp->header.length[0] = (grub_efi_uint8_t) (size & 0xff);
fp->header.length[1] = (grub_efi_uint8_t) (size >> 8);
fp->header.length = size * sizeof (grub_efi_char16_t) + sizeof (*fp);
}
static grub_efi_device_path_t *
@ -184,8 +182,7 @@ make_file_path (grub_efi_device_path_t *dp, const char *filename)
d = GRUB_EFI_NEXT_DEVICE_PATH (d);
d->type = GRUB_EFI_END_DEVICE_PATH_TYPE;
d->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE;
d->length[0] = sizeof (*d);
d->length[1] = 0;
d->length = sizeof (*d);
return file_path;
}

View file

@ -544,8 +544,8 @@ struct grub_efi_device_path
{
grub_efi_uint8_t type;
grub_efi_uint8_t subtype;
grub_efi_uint8_t length[2];
};
grub_efi_uint16_t length;
} __attribute__ ((packed));
typedef struct grub_efi_device_path grub_efi_device_path_t;
/* XXX EFI does not define EFI_DEVICE_PATH_PROTOCOL but uses it.
It seems to be identical to EFI_DEVICE_PATH. */
@ -553,7 +553,7 @@ typedef struct grub_efi_device_path grub_efi_device_path_protocol_t;
#define GRUB_EFI_DEVICE_PATH_TYPE(dp) ((dp)->type & 0x7f)
#define GRUB_EFI_DEVICE_PATH_SUBTYPE(dp) ((dp)->subtype)
#define GRUB_EFI_DEVICE_PATH_LENGTH(dp) (grub_get_unaligned16 ((dp)->length))
#define GRUB_EFI_DEVICE_PATH_LENGTH(dp) ((dp)->length)
/* The End of Device Path nodes. */
#define GRUB_EFI_END_DEVICE_PATH_TYPE (0xff & 0x7f)