[PATCH] arm64: Add config to limit user space to 47bits

Ard Biesheuvel ard.biesheuvel at linaro.org
Wed Jul 13 08:59:54 PDT 2016


On 13 July 2016 at 17:42, Alexander Graf <agraf at suse.de> wrote:
> Some user space applications are known to break with 48 bits virtual

known by whom? At least I wasn't aware of it, so could you please
share some examples?

> address space. As interim step until the world is healed and everyone
> embraces correct code, this patch allows to only expose 47 bits of
> virtual address space to user space.
>

Is this a code generation/toolchain issue?

> Signed-off-by: Alexander Graf <agraf at suse.de>
> ---
>  arch/arm64/Kconfig              | 9 +++++++++
>  arch/arm64/include/asm/memory.h | 4 ++++
>  2 files changed, 13 insertions(+)
>
> diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
> index 5a0a691..9ff5a74 100644
> --- a/arch/arm64/Kconfig
> +++ b/arch/arm64/Kconfig
> @@ -538,6 +538,15 @@ config ARM64_VA_BITS
>         default 47 if ARM64_VA_BITS_47
>         default 48 if ARM64_VA_BITS_48
>
> +config ARM64_USER_VA_BITS_47
> +       bool "Limit user space to 47 bits address space"
> +       depends on ARM64_VA_BITS_48
> +       help
> +         Some user space applications are known to break with 48 bits virtual
> +         address space. As interim step until the world is healed and everyone
> +         embraces correct code, this option allows to only expose 47 bits of
> +         virtual address space to user space. If unsure say N here.
> +
>  config CPU_BIG_ENDIAN
>         bool "Build big-endian kernel"
>         help
> diff --git a/arch/arm64/include/asm/memory.h b/arch/arm64/include/asm/memory.h
> index 31b7322..ef268c6 100644
> --- a/arch/arm64/include/asm/memory.h
> +++ b/arch/arm64/include/asm/memory.h
> @@ -74,7 +74,11 @@
>  #define PCI_IO_END             (VMEMMAP_START - SZ_2M)
>  #define PCI_IO_START           (PCI_IO_END - PCI_IO_SIZE)
>  #define FIXADDR_TOP            (PCI_IO_START - SZ_2M)
> +#ifdef CONFIG_ARM64_USER_VA_BITS_47
> +#define TASK_SIZE_64           (UL(1) << (VA_BITS - 1))
> +#else
>  #define TASK_SIZE_64           (UL(1) << VA_BITS)
> +#endif
>
>  #ifdef CONFIG_COMPAT
>  #define TASK_SIZE_32           UL(0x100000000)
> --
> 1.8.5.6
>



More information about the linux-arm-kernel mailing list