Commit 6eede068 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'hardening-v6.5-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux

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
...@@ -8679,8 +8679,11 @@ S: Maintained ...@@ -8679,8 +8679,11 @@ S: Maintained
F: drivers/input/touchscreen/resistive-adc-touch.c F: drivers/input/touchscreen/resistive-adc-touch.c
GENERIC STRING LIBRARY GENERIC STRING LIBRARY
M: Kees Cook <keescook@chromium.org>
R: Andy Shevchenko <andy@kernel.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.h
F: include/linux/string_choices.h F: include/linux/string_choices.h
F: include/linux/string_helpers.h F: include/linux/string_helpers.h
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
unsigned long __xchg_u32(volatile u32 *m, u32 new); unsigned long __xchg_u32(volatile u32 *m, u32 new);
void __xchg_called_with_bad_pointer(void); 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) { switch (size) {
case 4: case 4:
......
...@@ -87,7 +87,7 @@ xchg16(__volatile__ unsigned short *m, unsigned short val) ...@@ -87,7 +87,7 @@ xchg16(__volatile__ unsigned short *m, unsigned short val)
return (load32 & mask) >> bit_shift; return (load32 & mask) >> bit_shift;
} }
static inline unsigned long static __always_inline unsigned long
__arch_xchg(unsigned long x, __volatile__ void * ptr, int size) __arch_xchg(unsigned long x, __volatile__ void * ptr, int size)
{ {
switch (size) { switch (size) {
......
...@@ -578,7 +578,6 @@ ...@@ -578,7 +578,6 @@
*(.text.unlikely .text.unlikely.*) \ *(.text.unlikely .text.unlikely.*) \
*(.text.unknown .text.unknown.*) \ *(.text.unknown .text.unknown.*) \
NOINSTR_TEXT \ NOINSTR_TEXT \
*(.text..refcount) \
*(.ref.text) \ *(.ref.text) \
*(.text.asan.* .text.tsan.*) \ *(.text.asan.* .text.tsan.*) \
MEM_KEEP(init.text*) \ MEM_KEEP(init.text*) \
......
...@@ -174,11 +174,10 @@ static bool cleanup_symbol_name(char *s) ...@@ -174,11 +174,10 @@ static bool cleanup_symbol_name(char *s)
* LLVM appends various suffixes for local functions and variables that * LLVM appends various suffixes for local functions and variables that
* must be promoted to global scope as part of LTO. This can break * must be promoted to global scope as part of LTO. This can break
* hooking of static functions with kprobes. '.' is not a valid * 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.llvm.[0-9a-f]+
* - foo.[0-9a-f]+
*/ */
res = strchr(s, '.'); res = strstr(s, ".llvm.");
if (res) { if (res) {
*res = '\0'; *res = '\0';
return true; return true;
......
...@@ -349,10 +349,10 @@ static void cleanup_symbol_name(char *s) ...@@ -349,10 +349,10 @@ static void cleanup_symbol_name(char *s)
* ASCII[_] = 5f * ASCII[_] = 5f
* ASCII[a-z] = 61,7a * ASCII[a-z] = 61,7a
* *
* As above, replacing '.' with '\0' does not affect the main sorting, * As above, replacing the first '.' in ".llvm." with '\0' does not
* but it helps us with subsorting. * affect the main sorting, but it helps us with subsorting.
*/ */
p = strchr(s, '.'); p = strstr(s, ".llvm.");
if (p) if (p)
*p = '\0'; *p = '\0';
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment