/* * These structs are used by the system-use-sharing protocol, in which the * Rock Ridge extensions are embedded. It is quite possible that other * extensions are present on the disk, and this is fine as long as they * all use SUSP */ struct SU_SP_s { unsigned char magic[2]; unsigned char skip; } __attribute__ ((packed)); struct SU_CE_s { char extent[8]; char offset[8]; char size[8]; }; struct SU_ER_s { unsigned char len_id; unsigned char len_des; unsigned char len_src; unsigned char ext_ver; char data[0]; } __attribute__ ((packed)); struct RR_RR_s { char flags[1]; } __attribute__ ((packed)); struct RR_PX_s { char mode[8]; char n_links[8]; char uid[8]; char gid[8]; }; struct RR_PN_s { char dev_high[8]; char dev_low[8]; }; struct SL_component { unsigned char flags; unsigned char len; char text[0]; } __attribute__ ((packed)); struct RR_SL_s { unsigned char flags; struct SL_component link; } __attribute__ ((packed)); struct RR_NM_s { unsigned char flags; char name[0]; } __attribute__ ((packed)); struct RR_CL_s { char location[8]; }; struct RR_PL_s { char location[8]; }; struct stamp { char time[7]; } __attribute__ ((packed)); struct RR_TF_s { char flags; struct stamp times[0]; /* Variable number of these beasts */ } __attribute__ ((packed)); /* Linux-specific extension for transparent decompression */ struct RR_ZF_s { char algorithm[2]; char parms[2]; char real_size[8]; }; /* * These are the bits and their meanings for flags in the TF structure. */ #define TF_CREATE 1 #define TF_MODIFY 2 #define TF_ACCESS 4 #define TF_ATTRIBUTES 8 #define TF_BACKUP 16 #define TF_EXPIRATION 32 #define TF_EFFECTIVE 64 #define TF_LONG_FORM 128 struct rock_ridge { char signature[2]; unsigned char len; unsigned char version; union { struct SU_SP_s SP; struct SU_CE_s CE; struct SU_ER_s ER; struct RR_RR_s RR; struct RR_PX_s PX; struct RR_PN_s PN; struct RR_SL_s SL; struct RR_NM_s NM; struct RR_CL_s CL; struct RR_PL_s PL; struct RR_TF_s TF; struct RR_ZF_s ZF; } u; }; #define RR_PX 1 /* POSIX attributes */ #define RR_PN 2 /* POSIX devices */ #define RR_SL 4 /* Symbolic link */ #define RR_NM 8 /* Alternate Name */ #define RR_CL 16 /* Child link */ #define RR_PL 32 /* Parent link */ #define RR_RE 64 /* Relocation directory */ #define RR_TF 128 /* Timestamps */ log/tools/arch/sparc'>
path: root/tools/arch/sparc
diff options
context:
space:
mode:
authorArd Biesheuvel <ard.biesheuvel@linaro.org>2017-02-01 17:45:02 +0000
committerIngo Molnar <mingo@kernel.org>2017-02-01 21:17:49 +0100
commitc8f325a59cfc718d13a50fbc746ed9b415c25e92 (patch)
treed53fbdac9d0781e39a13b2ac6b2bd258cf3b4140 /tools/arch/sparc
parentbf29bddf0417a4783da3b24e8c9e017ac649326f (diff)
efi/fdt: Avoid FDT manipulation after ExitBootServices()
Some AArch64 UEFI implementations disable the MMU in ExitBootServices(), after which unaligned accesses to RAM are no longer supported. Commit: abfb7b686a3e ("efi/libstub/arm*: Pass latest memory map to the kernel") fixed an issue in the memory map handling of the stub FDT code, but inadvertently created an issue with such firmware, by moving some of the FDT manipulation to after the invocation of ExitBootServices(). Given that the stub's libfdt implementation uses the ordinary, accelerated string functions, which rely on hardware handling of unaligned accesses, manipulating the FDT with the MMU off may result in alignment faults. So fix the situation by moving the update_fdt_memmap() call into the callback function invoked by efi_exit_boot_services() right before it calls the ExitBootServices() UEFI service (which is arguably a better place for it anyway) Note that disabling the MMU in ExitBootServices() is not compliant with the UEFI spec, and carries great risk due to the fact that switching from cached to uncached memory accesses halfway through compiler generated code (i.e., involving a stack) can never be done in a way that is architecturally safe. Fixes: abfb7b686a3e ("efi/libstub/arm*: Pass latest memory map to the kernel") Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Tested-by: Riku Voipio <riku.voipio@linaro.org> Cc: <stable@vger.kernel.org> Cc: mark.rutland@arm.com Cc: linux-efi@vger.kernel.org Cc: matt@codeblueprint.co.uk Cc: leif.lindholm@linaro.org Cc: linux-arm-kernel@lists.infradead.org Link: http://lkml.kernel.org/r/1485971102-23330-2-git-send-email-ard.biesheuvel@linaro.org Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'tools/arch/sparc')