Commit 6eede068 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull hardening fixes from Kees Cook:

 - Remove LTO-only suffixes from promoted global function symbols
   (Yonghong Song)

 - Remove unused .text..refcount section from vmlinux.lds.h (Petr Pavlu)

 - Add missing __always_inline to sparc __arch_xchg() (Arnd Bergmann)

 - Claim maintainership of string routines

* tag 'hardening-v6.5-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux:
  sparc: mark __arch_xchg() as __always_inline
  MAINTAINERS: Foolishly claim maintainership of string routines
  kallsyms: strip LTO-only suffixes from promoted global functions
  vmlinux.lds.h: Remove a reference to no longer used sections .text..refcount
parents 4b4eef57 ec7633de
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -8679,8 +8679,11 @@ S: Maintained
F:	drivers/input/touchscreen/resistive-adc-touch.c
GENERIC STRING LIBRARY
M:	Kees Cook <keescook@chromium.org>
R:	Andy Shevchenko <andy@kernel.org>
S:	Maintained
L:	linux-hardening@vger.kernel.org
S:	Supported
T:	git git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git for-next/hardening
F:	include/linux/string.h
F:	include/linux/string_choices.h
F:	include/linux/string_helpers.h
+1 −1
Original line number Diff line number Diff line
@@ -15,7 +15,7 @@
unsigned long __xchg_u32(volatile u32 *m, u32 new);
void __xchg_called_with_bad_pointer(void);

static inline unsigned long __arch_xchg(unsigned long x, __volatile__ void * ptr, int size)
static __always_inline unsigned long __arch_xchg(unsigned long x, __volatile__ void * ptr, int size)
{
	switch (size) {
	case 4:
+1 −1
Original line number Diff line number Diff line
@@ -87,7 +87,7 @@ xchg16(__volatile__ unsigned short *m, unsigned short val)
	return (load32 & mask) >> bit_shift;
}

static inline unsigned long
static __always_inline unsigned long
__arch_xchg(unsigned long x, __volatile__ void * ptr, int size)
{
	switch (size) {
+0 −1
Original line number Diff line number Diff line
@@ -578,7 +578,6 @@
		*(.text.unlikely .text.unlikely.*)			\
		*(.text.unknown .text.unknown.*)			\
		NOINSTR_TEXT						\
		*(.text..refcount)					\
		*(.ref.text)						\
		*(.text.asan.* .text.tsan.*)				\
	MEM_KEEP(init.text*)						\
+2 −3
Original line number Diff line number Diff line
@@ -174,11 +174,10 @@ static bool cleanup_symbol_name(char *s)
	 * LLVM appends various suffixes for local functions and variables that
	 * must be promoted to global scope as part of LTO.  This can break
	 * hooking of static functions with kprobes. '.' is not a valid
	 * character in an identifier in C. Suffixes observed:
	 * character in an identifier in C. Suffixes only in LLVM LTO observed:
	 * - foo.llvm.[0-9a-f]+
	 * - foo.[0-9a-f]+
	 */
	res = strchr(s, '.');
	res = strstr(s, ".llvm.");
	if (res) {
		*res = '\0';
		return true;
Loading