mirror of
https://github.com/torvalds/linux.git
synced 2025-11-03 10:10:33 +02:00
bpf: Allow all printable characters in BTF DATASEC names
The intent is to allow libbpf to use SEC("?.struct_ops") to identify
struct_ops maps that are optional, e.g. like in the following BPF code:
SEC("?.struct_ops")
struct test_ops optional_map = { ... };
Which yields the following BTF:
...
[13] DATASEC '?.struct_ops' size=0 vlen=...
...
To load such BTF libbpf rewrites DATASEC name before load.
After this patch the rewrite won't be necessary.
Signed-off-by: Eduard Zingerman <eddyz87@gmail.com>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/bpf/20240306104529.6453-15-eddyz87@gmail.com
This commit is contained in:
parent
733e5e8754
commit
bd70a8fb7c
1 changed files with 15 additions and 1 deletions
|
|
@ -809,9 +809,23 @@ static bool btf_name_valid_identifier(const struct btf *btf, u32 offset)
|
||||||
return __btf_name_valid(btf, offset);
|
return __btf_name_valid(btf, offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Allow any printable character in DATASEC names */
|
||||||
static bool btf_name_valid_section(const struct btf *btf, u32 offset)
|
static bool btf_name_valid_section(const struct btf *btf, u32 offset)
|
||||||
{
|
{
|
||||||
return __btf_name_valid(btf, offset);
|
/* offset must be valid */
|
||||||
|
const char *src = btf_str_by_offset(btf, offset);
|
||||||
|
const char *src_limit;
|
||||||
|
|
||||||
|
/* set a limit on identifier length */
|
||||||
|
src_limit = src + KSYM_NAME_LEN;
|
||||||
|
src++;
|
||||||
|
while (*src && src < src_limit) {
|
||||||
|
if (!isprint(*src))
|
||||||
|
return false;
|
||||||
|
src++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return !*src;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char *__btf_name_by_offset(const struct btf *btf, u32 offset)
|
static const char *__btf_name_by_offset(const struct btf *btf, u32 offset)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue