xen/arm: address violations of Rule 11.3

Use {get,put}_unaligned_t to ensure that reads and writes are
safe to perform even on potentially misaligned pointers.

Signed-off-by: Nicola Vetrini <nicola.vetrini@bugseng.com>
Signed-off-by: Victor Lira <victorm.lira@amd.com>
Acked-by: Bertrand Marquis <bertrand.marquis@arm.com>
This commit is contained in:
Nicola Vetrini authored and Stefano Stabellini committed 2025-07-09 17:20:49 -07:00
1 parent 97717311a3
commit 62b4701646
2 files changed
+7 -5

No files matched your search

+5 -4
View File
@@ -9,6 +9,7 @@
#include <xen/device_tree.h> #include <xen/device_tree.h>
#include <xen/libfdt/libfdt.h> #include <xen/libfdt/libfdt.h>
#include <xen/unaligned.h>
#include <asm/setup.h> #include <asm/setup.h>
#include <asm/smp.h> #include <asm/smp.h>
@@ -85,7 +86,7 @@ static int __init setup_chosen_node(void *fdt, int *addr_cells, int *size_cells)
*addr_cells = 2; *addr_cells = 2;
} }
else else
*addr_cells = fdt32_to_cpu(*((uint32_t *)prop->data)); *addr_cells = fdt32_to_cpu(get_unaligned_t(uint32_t, prop->data));
prop = fdt_get_property(fdt, node, "#size-cells", &len); prop = fdt_get_property(fdt, node, "#size-cells", &len);
if ( !prop ) if ( !prop )
@@ -96,7 +97,7 @@ static int __init setup_chosen_node(void *fdt, int *addr_cells, int *size_cells)
*size_cells = 2; *size_cells = 2;
} }
else else
*size_cells = fdt32_to_cpu(*((uint32_t *)prop->data)); *size_cells = fdt32_to_cpu(get_unaligned_t(uint32_t, prop->data));
/* /*
* Make sure ranges is empty if it exists, otherwise create empty ranges * Make sure ranges is empty if it exists, otherwise create empty ranges
@@ -824,7 +825,7 @@ static int __init handle_dom0less_domain_node(const EFI_LOADED_IMAGE *loaded_ima
return ERROR_MISSING_DT_PROPERTY; return ERROR_MISSING_DT_PROPERTY;
} }
addr_cells = fdt32_to_cpu(*((uint32_t *)prop->data)); addr_cells = fdt32_to_cpu(get_unaligned_t(uint32_t, prop->data));
prop = fdt_get_property(fdt_efi, domain_node, "#size-cells", &len); prop = fdt_get_property(fdt_efi, domain_node, "#size-cells", &len);
if ( !prop ) if ( !prop )
@@ -833,7 +834,7 @@ static int __init handle_dom0less_domain_node(const EFI_LOADED_IMAGE *loaded_ima
return ERROR_MISSING_DT_PROPERTY; return ERROR_MISSING_DT_PROPERTY;
} }
size_cells = fdt32_to_cpu(*((uint32_t *)prop->data)); size_cells = fdt32_to_cpu(get_unaligned_t(uint32_t, prop->data));
/* Check for nodes compatible with multiboot,module inside this node */ /* Check for nodes compatible with multiboot,module inside this node */
for ( module_node = fdt_first_subnode(fdt_efi, domain_node); for ( module_node = fdt_first_subnode(fdt_efi, domain_node);
+2 -1
View File
@@ -13,6 +13,7 @@
#include <xen/lib.h> #include <xen/lib.h>
#include <xen/libfdt/libfdt-xen.h> #include <xen/libfdt/libfdt-xen.h>
#include <xen/sort.h> #include <xen/sort.h>
#include <xen/unaligned.h>
#include <xen/static-shmem.h> #include <xen/static-shmem.h>
#include <xsm/xsm.h> #include <xsm/xsm.h>
#include <asm/setup.h> #include <asm/setup.h>
@@ -211,7 +212,7 @@ u32 __init device_tree_get_u32(const void *fdt, int node,
if ( !prop || prop->len < sizeof(u32) ) if ( !prop || prop->len < sizeof(u32) )
return dflt; return dflt;
return fdt32_to_cpu(*(uint32_t*)prop->data); return fdt32_to_cpu(get_unaligned_t(uint32_t, prop->data));
} }
/** /**
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.