All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mark Rutland <mark.rutland@arm.com>
To: Will Deacon <will@kernel.org>
Cc: linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	Sami Tolvanen <samitolvanen@google.com>,
	"Mohan Rao .vanimina" <mailtoc.mohanrao@gmail.com>,
	Kees Cook <keescook@chromium.org>,
	Nathan Chancellor <nathan@kernel.org>
Subject: Re: [PATCH] vmlinux.lds.h: CFI: Reduce alignment of jump-table to function alignment
Date: Fri, 23 Sep 2022 13:24:20 +0100	[thread overview]
Message-ID: <Yy2ldICeQQUgOBdb@FVFF77S0Q05N> (raw)
In-Reply-To: <20220922215715.13345-1-will@kernel.org>

On Thu, Sep 22, 2022 at 10:57:15PM +0100, Will Deacon wrote:
> Due to undocumented, hysterical raisins on x86, the CFI jump-table
> sections in .text are needlessly aligned to PMD_SIZE in the vmlinux
> linker script. When compiling a CFI-enabled arm64 kernel with a 64KiB
> page-size, a PMD maps 512MiB of virtual memory and so the .text section
> increases to a whopping 940MiB and blows the final Image up to 960MiB.
> Others report a link failure.
> 
> Since the CFI jump-table requires only instruction alignment, reduce the
> alignment directives to function alignment for parity with other parts
> of the .text section. This reduces the size of the .text section for the
> aforementioned 64KiB page size arm64 kernel to 19MiB for a much more
> reasonable total Image size of 39MiB.
> 
> Cc: Sami Tolvanen <samitolvanen@google.com>
> Cc: Mark Rutland <mark.rutland@arm.com>
> Cc: "Mohan Rao .vanimina" <mailtoc.mohanrao@gmail.com>
> Cc: Kees Cook <keescook@chromium.org>
> Cc: Nathan Chancellor <nathan@kernel.org>
> Link: https://lore.kernel.org/all/CAL_GTzigiNOMYkOPX1KDnagPhJtFNqSK=1USNbS0wUL4PW6-Uw@mail.gmail.com/
> Fixes: cf68fffb66d60 ("add support for Clang CFI")
> Signed-off-by: Will Deacon <will@kernel.org>

Thanks for this!

I gave this a spin atop v6.-rc3 defconfig with:

* CONFIG_ARM64_64K_PAGES=y
* CONFIG_LTO_CLANG_THIN=y
* CONFIG_CFI_CLANG=y

The sizes clearly speak for themselves:

| % ls -al *-v6.0-rc3-64K-CFI*
| -rwxr-xr-x 1 mark mark  959693312 Sep 23 13:13 Image-v6.0-rc3-64K-CFI
| -rwxr-xr-x 1 mark mark   38781440 Sep 23 13:19 Image-v6.0-rc3-64K-CFI-patched
| -rwxr-xr-x 1 mark mark 1378631080 Sep 23 13:13 vmlinux-v6.0-rc3-64K-CFI
| -rwxr-xr-x 1 mark mark  453015376 Sep 23 13:19 vmlinux-v6.0-rc3-64K-CFI-patched

... and before and after applying the patch, the kernel booted fine under QEMU
(in TCG mode, as Cortex-A53).

I see that in scripts/module.lds.S we place the CFI bits into the .text
section, and that's only aligned to PAGE_SIZE, so we don't have a similar issue
for modules.

FWIW:

Reviewed-by: Mark Rutland <mark.rutland@arm.com>
Tested-by: Mark Rutland <mark.rutland@arm.com>

Mark.

> ---
>  include/asm-generic/vmlinux.lds.h | 3 +--
>  1 file changed, 1 insertion(+), 2 deletions(-)
> 
> diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
> index 7515a465ec03..7c90b1ab3e00 100644
> --- a/include/asm-generic/vmlinux.lds.h
> +++ b/include/asm-generic/vmlinux.lds.h
> @@ -543,10 +543,9 @@
>   */
>  #ifdef CONFIG_CFI_CLANG
>  #define TEXT_CFI_JT							\
> -		. = ALIGN(PMD_SIZE);					\
> +		ALIGN_FUNCTION();					\
>  		__cfi_jt_start = .;					\
>  		*(.text..L.cfi.jumptable .text..L.cfi.jumptable.*)	\
> -		. = ALIGN(PMD_SIZE);					\
>  		__cfi_jt_end = .;
>  #else
>  #define TEXT_CFI_JT
> -- 
> 2.37.3.998.g577e59143f-goog
> 

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

WARNING: multiple messages have this Message-ID (diff)
From: Mark Rutland <mark.rutland@arm.com>
To: Will Deacon <will@kernel.org>
Cc: linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	Sami Tolvanen <samitolvanen@google.com>,
	"Mohan Rao .vanimina" <mailtoc.mohanrao@gmail.com>,
	Kees Cook <keescook@chromium.org>,
	Nathan Chancellor <nathan@kernel.org>
Subject: Re: [PATCH] vmlinux.lds.h: CFI: Reduce alignment of jump-table to function alignment
Date: Fri, 23 Sep 2022 13:24:20 +0100	[thread overview]
Message-ID: <Yy2ldICeQQUgOBdb@FVFF77S0Q05N> (raw)
In-Reply-To: <20220922215715.13345-1-will@kernel.org>

On Thu, Sep 22, 2022 at 10:57:15PM +0100, Will Deacon wrote:
> Due to undocumented, hysterical raisins on x86, the CFI jump-table
> sections in .text are needlessly aligned to PMD_SIZE in the vmlinux
> linker script. When compiling a CFI-enabled arm64 kernel with a 64KiB
> page-size, a PMD maps 512MiB of virtual memory and so the .text section
> increases to a whopping 940MiB and blows the final Image up to 960MiB.
> Others report a link failure.
> 
> Since the CFI jump-table requires only instruction alignment, reduce the
> alignment directives to function alignment for parity with other parts
> of the .text section. This reduces the size of the .text section for the
> aforementioned 64KiB page size arm64 kernel to 19MiB for a much more
> reasonable total Image size of 39MiB.
> 
> Cc: Sami Tolvanen <samitolvanen@google.com>
> Cc: Mark Rutland <mark.rutland@arm.com>
> Cc: "Mohan Rao .vanimina" <mailtoc.mohanrao@gmail.com>
> Cc: Kees Cook <keescook@chromium.org>
> Cc: Nathan Chancellor <nathan@kernel.org>
> Link: https://lore.kernel.org/all/CAL_GTzigiNOMYkOPX1KDnagPhJtFNqSK=1USNbS0wUL4PW6-Uw@mail.gmail.com/
> Fixes: cf68fffb66d60 ("add support for Clang CFI")
> Signed-off-by: Will Deacon <will@kernel.org>

Thanks for this!

I gave this a spin atop v6.-rc3 defconfig with:

* CONFIG_ARM64_64K_PAGES=y
* CONFIG_LTO_CLANG_THIN=y
* CONFIG_CFI_CLANG=y

The sizes clearly speak for themselves:

| % ls -al *-v6.0-rc3-64K-CFI*
| -rwxr-xr-x 1 mark mark  959693312 Sep 23 13:13 Image-v6.0-rc3-64K-CFI
| -rwxr-xr-x 1 mark mark   38781440 Sep 23 13:19 Image-v6.0-rc3-64K-CFI-patched
| -rwxr-xr-x 1 mark mark 1378631080 Sep 23 13:13 vmlinux-v6.0-rc3-64K-CFI
| -rwxr-xr-x 1 mark mark  453015376 Sep 23 13:19 vmlinux-v6.0-rc3-64K-CFI-patched

... and before and after applying the patch, the kernel booted fine under QEMU
(in TCG mode, as Cortex-A53).

I see that in scripts/module.lds.S we place the CFI bits into the .text
section, and that's only aligned to PAGE_SIZE, so we don't have a similar issue
for modules.

FWIW:

Reviewed-by: Mark Rutland <mark.rutland@arm.com>
Tested-by: Mark Rutland <mark.rutland@arm.com>

Mark.

> ---
>  include/asm-generic/vmlinux.lds.h | 3 +--
>  1 file changed, 1 insertion(+), 2 deletions(-)
> 
> diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
> index 7515a465ec03..7c90b1ab3e00 100644
> --- a/include/asm-generic/vmlinux.lds.h
> +++ b/include/asm-generic/vmlinux.lds.h
> @@ -543,10 +543,9 @@
>   */
>  #ifdef CONFIG_CFI_CLANG
>  #define TEXT_CFI_JT							\
> -		. = ALIGN(PMD_SIZE);					\
> +		ALIGN_FUNCTION();					\
>  		__cfi_jt_start = .;					\
>  		*(.text..L.cfi.jumptable .text..L.cfi.jumptable.*)	\
> -		. = ALIGN(PMD_SIZE);					\
>  		__cfi_jt_end = .;
>  #else
>  #define TEXT_CFI_JT
> -- 
> 2.37.3.998.g577e59143f-goog
> 

  parent reply	other threads:[~2022-09-23 12:25 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-22 21:57 [PATCH] vmlinux.lds.h: CFI: Reduce alignment of jump-table to function alignment Will Deacon
2022-09-22 21:57 ` Will Deacon
2022-09-22 22:00 ` Sami Tolvanen
2022-09-22 22:00   ` Sami Tolvanen
2022-09-22 22:18 ` Kees Cook
2022-09-22 22:18   ` Kees Cook
2022-09-23 12:24 ` Mark Rutland [this message]
2022-09-23 12:24   ` Mark Rutland
2022-09-23 15:40 ` Will Deacon
2022-09-23 15:40   ` Will Deacon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Yy2ldICeQQUgOBdb@FVFF77S0Q05N \
    --to=mark.rutland@arm.com \
    --cc=keescook@chromium.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mailtoc.mohanrao@gmail.com \
    --cc=nathan@kernel.org \
    --cc=samitolvanen@google.com \
    --cc=will@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.