All of lore.kernel.org
 help / color / mirror / Atom feed
From: Borislav Petkov <bp@alien8.de>
To: Alexander Lobakin <alexandr.lobakin@intel.com>
Cc: linux-hardening@vger.kernel.org, x86@kernel.org,
	Jesse Brandeburg <jesse.brandeburg@intel.com>,
	Kristen Carlson Accardi <kristen@linux.intel.com>,
	Kees Cook <keescook@chromium.org>,
	Miklos Szeredi <miklos@szeredi.hu>,
	Ard Biesheuvel <ardb@kernel.org>, Tony Luck <tony.luck@intel.com>,
	Bruce Schlobohm <bruce.schlobohm@intel.com>,
	Jessica Yu <jeyu@kernel.org>, kernel test robot <lkp@intel.com>,
	Miroslav Benes <mbenes@suse.cz>,
	Evgenii Shatokhin <eshatokhin@virtuozzo.com>,
	Jonathan Corbet <corbet@lwn.net>,
	Masahiro Yamada <masahiroy@kernel.org>,
	Michal Marek <michal.lkml@markovi.net>,
	Nick Desaulniers <ndesaulniers@google.com>,
	Herbert Xu <herbert@gondor.apana.org.au>,
	"David S. Miller" <davem@davemloft.net>,
	Thomas Gleixner <tglx@linutronix.de>,
	Will Deacon <will@kernel.org>, Ingo Molnar <mingo@redhat.com>,
	Dave Hansen <dave.hansen@linux.intel.com>,
	"H. Peter Anvin" <hpa@zytor.com>,
	Andy Lutomirski <luto@kernel.org>,
	Peter Zijlstra <peterz@infradead.org>,
	Arnd Bergmann <arnd@arndb.de>,
	Josh Poimboeuf <jpoimboe@redhat.com>,
	Nathan Chancellor <nathan@kernel.org>,
	Masami Hiramatsu <mhiramat@kernel.org>,
	Marios Pomonis <pomonis@google.com>,
	Sami Tolvanen <samitolvanen@google.com>,
	"H.J. Lu" <hjl.tools@gmail.com>, Nicolas Pitre <nico@fluxnic.net>,
	linux-kernel@vger.kernel.org, linux-kbuild@vger.kernel.org,
	linux-arch@vger.kernel.org, live-patching@vger.kernel.org,
	llvm@lists.linux.dev
Subject: Re: [PATCH v9 04/15] arch: introduce ASM function sections
Date: Mon, 17 Jan 2022 22:08:00 +0100	[thread overview]
Message-ID: <YeXasIO5ArXxtw1J@zn.tnic> (raw)
In-Reply-To: <20211223002209.1092165-5-alexandr.lobakin@intel.com>

On Thu, Dec 23, 2021 at 01:21:58AM +0100, Alexander Lobakin wrote:
> Sometimes it is useful to create a separate section for every
> function (symbol in general) to be able then to selectively merge
> them back into on or several others. This is how DCE and a part of
		 ^^

"one"

DCE == Dead Code Elimination?

In any case, write it out first please and then use the abbreviation.

> LTO work.

I would've said that too but that one at least has a Kconfig entry which
explains what it is so no need.

/me looks further

Aha there is LD_DEAD_CODE_DATA_ELIMINATION. So connect the two pls.

> Currently, only C functions are in scope

You mean, currently this is done only for C functions? The "in scope"
formulation sounds weird.

> and the compilers are able to do this automatically when
> `-ffunction-section` is specified.

-ffunction-sections, plural.

> Add a basic infra for supporting ASM function sections. If any of

yah s/ASM/asm/g. It's not like it is an acronym or so.

and also, you should explain that "asm function sections" means "put a
function symbol defined in asm, into a separate section".

> the required build options (DCE, LTO, FG-KASLR later) is on and
> the target architecture claims it supports them, all ASM functions
> and "code" will be placed into separate named sections by default.
> This is achieved using --sectname-subst GAS flag which will then
> substitute "%S" in a .pushsection or .section directive with the

Thanks for explaining this. The gas manpage is very, hm, verbose
<sarcarstic eyeroll> ;-\:

"       --sectname-subst
           Honor substitution sequences in section names.
"


...

> diff --git a/include/linux/linkage.h b/include/linux/linkage.h
> index dbf8506decca..0c0ddf4429dc 100644
> --- a/include/linux/linkage.h
> +++ b/include/linux/linkage.h
> @@ -73,6 +73,37 @@
>  #define __ALIGN_STR	".align 4,0x90"
>  #endif
>  
> +/*
> + * Allow ASM symbols to have their own unique sections if they are being
> + * generated by the compiler for C functions (DCE, LTO).
> + */
> +#if defined(CONFIG_HAVE_ASM_FUNCTION_SECTIONS) && \
> +    ((defined(CONFIG_LD_DEAD_CODE_DATA_ELIMINATION) && !defined(MODULE)) || \
> +     (defined(CONFIG_LTO_CLANG)))
> +
> +#define SYM_PUSH_SECTION(name)				\
> +	.pushsection %S.name, "ax"
> +
> +#define SYM_POP_SECTION()				\
> +	.popsection
> +
> +#define __ASM_PUSH_SECTION(name)			\
> +	".pushsection %S." name ", \"ax\""
> +
> +#else /* Just .text */

Just .text?

> +
> +#define SYM_PUSH_SECTION(name)
> +#define SYM_POP_SECTION()
> +#define __ASM_PUSH_SECTION(name)
> +
> +#endif /* Just .text */
> +
> +#define ASM_PUSH_SECTION(name)				\
> +	__ASM_PUSH_SECTION(__stringify(name))
> +
> +#define ASM_POP_SECTION()				\
> +	__stringify(SYM_POP_SECTION())
> +
>  #ifdef __ASSEMBLY__
>  
>  /* SYM_T_FUNC -- type used by assembler to mark functions */
> @@ -209,6 +240,15 @@
>  	SYM_START(name, SYM_L_LOCAL, SYM_A_ALIGN)
>  #endif
>  
> +/*
> + * SYM_FUNC_START_WEAK -- use where there are two global names for one

SYM_FUNC_START_WEAK_ALIAS

> + * function, and one of them is weak
> + */
> +#ifndef SYM_FUNC_START_WEAK_ALIAS
> +#define SYM_FUNC_START_WEAK_ALIAS(name)			\
> +	SYM_START(name, SYM_L_WEAK, SYM_A_ALIGN)
> +#endif
> +
>  /*
>   * SYM_FUNC_START_ALIAS -- use where there are two global names for one
>   * function
> @@ -225,12 +265,24 @@
>   * later.
>   */
>  #define SYM_FUNC_START(name)				\
> +	SYM_PUSH_SECTION(name) ASM_NL			\
> +	SYM_START(name, SYM_L_GLOBAL, SYM_A_ALIGN)
> +#endif
> +
> +/*
> + * SYM_FUNC_START_SECT -- use for global functions, will be conditionally
> + * placed into a section specified in the second argument
> + */
> +#ifndef SYM_FUNC_START_SECT
> +#define SYM_FUNC_START_SECT(name, to)			\

			      (name, sect)

"to" reads kinda unclear what it is supposed to mean.


> +	SYM_PUSH_SECTION(to) ASM_NL			\
>  	SYM_START(name, SYM_L_GLOBAL, SYM_A_ALIGN)
>  #endif
>  
>  /* SYM_FUNC_START_NOALIGN -- use for global functions, w/o alignment */
>  #ifndef SYM_FUNC_START_NOALIGN
>  #define SYM_FUNC_START_NOALIGN(name)			\
> +	SYM_PUSH_SECTION(name) ASM_NL			\
>  	SYM_START(name, SYM_L_GLOBAL, SYM_A_NONE)
>  #endif
>  
> @@ -238,24 +290,38 @@
>  #ifndef SYM_FUNC_START_LOCAL
>  /* the same as SYM_FUNC_START_LOCAL_ALIAS, see comment near SYM_FUNC_START */
>  #define SYM_FUNC_START_LOCAL(name)			\
> +	SYM_PUSH_SECTION(name) ASM_NL			\
>  	SYM_START(name, SYM_L_LOCAL, SYM_A_ALIGN)
>  #endif
>  
>  /* SYM_FUNC_START_LOCAL_NOALIGN -- use for local functions, w/o alignment */
>  #ifndef SYM_FUNC_START_LOCAL_NOALIGN
>  #define SYM_FUNC_START_LOCAL_NOALIGN(name)		\
> +	SYM_PUSH_SECTION(name) ASM_NL			\
> +	SYM_START(name, SYM_L_LOCAL, SYM_A_NONE)
> +#endif
> +
> +/*
> + * SYM_FUNC_START_LOCAL_NOALIGN_SECT -- use for local functions, w/o alignment,
> + * will be conditionally placed into a section specified in the second argument
> + */
> +#ifndef SYM_FUNC_START_LOCAL_NOALIGN_SECT
> +#define SYM_FUNC_START_LOCAL_NOALIGN_SECT(name, to)	\

Ditto. And so on below.

...

> diff --git a/init/Kconfig b/init/Kconfig
> index 37926d19a74a..3babc0aeac61 100644
> --- a/init/Kconfig
> +++ b/init/Kconfig
> @@ -1386,6 +1386,17 @@ config CC_OPTIMIZE_FOR_SIZE
>  
>  endchoice
>  
> +config HAVE_ASM_FUNCTION_SECTIONS
> +	depends on ARCH_SUPPORTS_ASM_FUNCTION_SECTIONS
> +	depends on $(cc-option,-Wa$(comma)--sectname-subst)
> +	def_bool y
> +	help
> +	  This enables ASM function sections if both architecture
> +	  and toolchain supports that. It allows creating a separate

"... support it."

> +	  .text section for each ASM function in order to improve

s/.text // - the section name is specified by the macro arg.

> +	  DCE and LTO (works the same way as -ffunction-sections for
> +	  C code).
> +

Thx.

-- 
Regards/Gruss,
    Boris.

https://people.kernel.org/tglx/notes-about-netiquette

  reply	other threads:[~2022-01-17 21:08 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-23  0:21 [PATCH v9 00/15] Function Granular KASLR Alexander Lobakin
2021-12-23  0:21 ` [PATCH v9 01/15] modpost: fix removing numeric suffixes Alexander Lobakin
2021-12-23 16:19   ` Borislav Petkov
2021-12-27 18:22     ` Alexander Lobakin
2021-12-27 21:26       ` Borislav Petkov
2021-12-28 17:03         ` Alexander Lobakin
2022-01-03 13:07   ` Miroslav Benes
2021-12-23  0:21 ` [PATCH v9 02/15] livepatch: use `-z unique-symbol` if available to nuke pos-based search Alexander Lobakin
2021-12-30 11:10   ` Borislav Petkov
2021-12-30 18:31     ` Fāng-ruì Sòng
2022-01-03 13:55       ` Miroslav Benes
2022-01-03 16:06         ` Alexander Lobakin
2022-01-05  3:24           ` Fāng-ruì Sòng
2022-01-03 16:29     ` Alexander Lobakin
2022-01-03 13:44   ` Miroslav Benes
2021-12-23  0:21 ` [PATCH v9 03/15] kallsyms: Hide layout Alexander Lobakin
2021-12-30 22:36   ` Borislav Petkov
2022-01-03 15:40     ` Alexander Lobakin
2022-01-03 16:59       ` Borislav Petkov
2022-01-05 18:46   ` Borislav Petkov
2021-12-23  0:21 ` [PATCH v9 04/15] arch: introduce ASM function sections Alexander Lobakin
2022-01-17 21:08   ` Borislav Petkov [this message]
2022-01-17 21:38     ` Nicolas Pitre
2022-01-17 21:55       ` Borislav Petkov
2021-12-23  0:21 ` [PATCH v9 05/15] x86: support " Alexander Lobakin
2022-01-21 15:08   ` Borislav Petkov
2022-01-26 14:49     ` Alexander Lobakin
2021-12-23  0:22 ` [PATCH v9 06/15] x86: decouple ORC table sorting into a separate file Alexander Lobakin
2021-12-23  0:22 ` [PATCH v9 07/15] Makefile: Add build and config option for CONFIG_FG_KASLR Alexander Lobakin
2021-12-23  0:22 ` [PATCH v9 08/15] x86/tools: Add relative relocs for randomized functions Alexander Lobakin
2021-12-23  0:22 ` [PATCH v9 09/15] x86: Add support for function granular KASLR Alexander Lobakin
2021-12-23  0:22 ` [PATCH v9 10/15] FG-KASLR: use a scripted approach to handle .text.* sections Alexander Lobakin
2021-12-23  0:22 ` [PATCH v9 11/15] x86/boot: allow FG-KASLR to be selected Alexander Lobakin
2021-12-23  0:22 ` [PATCH v9 12/15] module: Reorder functions Alexander Lobakin
2021-12-23  0:22 ` [PATCH v9 13/15] module: use a scripted approach for FG-KASLR Alexander Lobakin
2021-12-23  0:22 ` [PATCH v9 14/15] Documentation: add documentation " Alexander Lobakin
2021-12-23  0:22 ` [PATCH v9 15/15] maintainers: add MAINTAINERS entry " Alexander Lobakin
2021-12-23 15:15 ` [PATCH v9 00/15] Function Granular KASLR Alexander Lobakin
2021-12-23 15:40   ` Peter Zijlstra
2021-12-24  6:38 ` Christoph Hellwig
2021-12-27 18:33   ` Alexander Lobakin
2021-12-30  9:00     ` Christoph Hellwig

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=YeXasIO5ArXxtw1J@zn.tnic \
    --to=bp@alien8.de \
    --cc=alexandr.lobakin@intel.com \
    --cc=ardb@kernel.org \
    --cc=arnd@arndb.de \
    --cc=bruce.schlobohm@intel.com \
    --cc=corbet@lwn.net \
    --cc=dave.hansen@linux.intel.com \
    --cc=davem@davemloft.net \
    --cc=eshatokhin@virtuozzo.com \
    --cc=herbert@gondor.apana.org.au \
    --cc=hjl.tools@gmail.com \
    --cc=hpa@zytor.com \
    --cc=jesse.brandeburg@intel.com \
    --cc=jeyu@kernel.org \
    --cc=jpoimboe@redhat.com \
    --cc=keescook@chromium.org \
    --cc=kristen@linux.intel.com \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-hardening@vger.kernel.org \
    --cc=linux-kbuild@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=live-patching@vger.kernel.org \
    --cc=lkp@intel.com \
    --cc=llvm@lists.linux.dev \
    --cc=luto@kernel.org \
    --cc=masahiroy@kernel.org \
    --cc=mbenes@suse.cz \
    --cc=mhiramat@kernel.org \
    --cc=michal.lkml@markovi.net \
    --cc=miklos@szeredi.hu \
    --cc=mingo@redhat.com \
    --cc=nathan@kernel.org \
    --cc=ndesaulniers@google.com \
    --cc=nico@fluxnic.net \
    --cc=peterz@infradead.org \
    --cc=pomonis@google.com \
    --cc=samitolvanen@google.com \
    --cc=tglx@linutronix.de \
    --cc=tony.luck@intel.com \
    --cc=will@kernel.org \
    --cc=x86@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.