kallsyms: increase maximum kernel symbol length to 512
Rust symbols can become quite long due to namespacing introduced by modules, types, traits, generics, etc. For instance, the following code: pub mod my_module { pub struct MyType; pub struct MyGenericType<T>(T); pub trait MyTrait { fn my_method() -> u32; } impl MyTrait for MyGenericType<MyType> { fn my_method() -> u32 { 42 } } } generates a symbol of length 96 when using the upcoming v0 mangling scheme: _RNvXNtCshGpAVYOtgW1_7example9my_moduleINtB2_13MyGenericTypeNtB2_6MyTypeENtB2_7MyTrait9my_method At the moment, Rust symbols may reach up to 300 in length. Setting 512 as the maximum seems like a reasonable choice to keep some headroom. Reviewed-by: Kees Cook <keescook@chromium.org> Reviewed-by: Petr Mladek <pmladek@suse.com> Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Co-developed-by: Alex Gaynor <alex.gaynor@gmail.com> Signed-off-by: Alex Gaynor <alex.gaynor@gmail.com> Co-developed-by: Wedson Almeida Filho <wedsonaf@google.com> Signed-off-by: Wedson Almeida Filho <wedsonaf@google.com> Co-developed-by: Gary Guo <gary@garyguo.net> Signed-off-by: Gary Guo <gary@garyguo.net> Co-developed-by: Boqun Feng <boqun.feng@gmail.com> Signed-off-by: Boqun Feng <boqun.feng@gmail.com> Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
This commit is contained in:
Родитель
73bbb94466
Коммит
b8a94bfb33
|
@ -15,7 +15,7 @@
|
|||
|
||||
#include <asm/sections.h>
|
||||
|
||||
#define KSYM_NAME_LEN 128
|
||||
#define KSYM_NAME_LEN 512
|
||||
#define KSYM_SYMBOL_LEN (sizeof("%s+%#lx/%#lx [%s %s]") + \
|
||||
(KSYM_NAME_LEN - 1) + \
|
||||
2*(BITS_PER_LONG*3/10) + (MODULE_NAME_LEN - 1) + \
|
||||
|
|
|
@ -213,7 +213,7 @@ static int klp_resolve_symbols(Elf_Shdr *sechdrs, const char *strtab,
|
|||
* we use the smallest/strictest upper bound possible (56, based on
|
||||
* the current definition of MODULE_NAME_LEN) to prevent overflows.
|
||||
*/
|
||||
BUILD_BUG_ON(MODULE_NAME_LEN < 56 || KSYM_NAME_LEN != 128);
|
||||
BUILD_BUG_ON(MODULE_NAME_LEN < 56 || KSYM_NAME_LEN != 512);
|
||||
|
||||
relas = (Elf_Rela *) relasec->sh_addr;
|
||||
/* For each rela in this klp relocation section */
|
||||
|
@ -227,7 +227,7 @@ static int klp_resolve_symbols(Elf_Shdr *sechdrs, const char *strtab,
|
|||
|
||||
/* Format: .klp.sym.sym_objname.sym_name,sympos */
|
||||
cnt = sscanf(strtab + sym->st_name,
|
||||
".klp.sym.%55[^.].%127[^,],%lu",
|
||||
".klp.sym.%55[^.].%511[^,],%lu",
|
||||
sym_objname, sym_name, &sympos);
|
||||
if (cnt != 3) {
|
||||
pr_err("symbol %s has an incorrectly formatted name\n",
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
#define _stringify_1(x) #x
|
||||
#define _stringify(x) _stringify_1(x)
|
||||
|
||||
#define KSYM_NAME_LEN 128
|
||||
#define KSYM_NAME_LEN 512
|
||||
|
||||
/*
|
||||
* A substantially bigger size than the current maximum.
|
||||
|
@ -39,7 +39,7 @@
|
|||
* for the fscanf() format string. Therefore, a _Static_assert() is
|
||||
* used instead to maintain the relationship with KSYM_NAME_LEN.
|
||||
*/
|
||||
#define KSYM_NAME_LEN_BUFFER 512
|
||||
#define KSYM_NAME_LEN_BUFFER 2048
|
||||
_Static_assert(
|
||||
KSYM_NAME_LEN_BUFFER == KSYM_NAME_LEN * 4,
|
||||
"Please keep KSYM_NAME_LEN_BUFFER in sync with KSYM_NAME_LEN"
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#define KSYM_NAME_LEN 128
|
||||
#define KSYM_NAME_LEN 512
|
||||
|
||||
struct module;
|
||||
|
||||
|
|
|
@ -97,7 +97,7 @@ struct perf_record_throttle {
|
|||
};
|
||||
|
||||
#ifndef KSYM_NAME_LEN
|
||||
#define KSYM_NAME_LEN 256
|
||||
#define KSYM_NAME_LEN 512
|
||||
#endif
|
||||
|
||||
struct perf_record_ksymbol {
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
#include <linux/types.h>
|
||||
|
||||
#ifndef KSYM_NAME_LEN
|
||||
#define KSYM_NAME_LEN 256
|
||||
#define KSYM_NAME_LEN 512
|
||||
#endif
|
||||
|
||||
static inline u8 kallsyms2elf_binding(char type)
|
||||
|
|
Загрузка…
Ссылка в новой задаче