On Wed, Jan 19, 2022 at 10:31 AM Ard Biesheuvel <ardb@xxxxxxxxxx> wrote: > > The C standard does not support dereferencing pointers that are not > aligned with respect to the pointed-to type, and doing so is technically > undefined behavior, even if the underlying hardware supports it. > > This means that conditionally dereferencing such pointers based on > whether CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y is not the right thing > to do, and actually results in alignment faults on ARM, which are fixed > up on a slow path. Instead, we should use the unaligned accessors in > such cases: on architectures that don't care about alignment, they will > result in identical codegen whereas, e.g., codegen on ARM will avoid > doubleword loads and stores but use ordinary ones, which are able to > tolerate misalignment. > > Link: https://lore.kernel.org/linux-crypto/CAHk-=wiKkdYLY0bv+nXrcJz3NH9mAqPAafX7PpW5EwVtxsEu7Q@xxxxxxxxxxxxxx/ > Signed-off-by: Ard Biesheuvel <ardb@xxxxxxxxxx> Reviewed-by: Arnd Bergmann <arnd@xxxxxxxx>