libbpf: Support PPC in arch_specific_syscall_pfx
Commit708ac5bea0
("libbpf: add ksyscall/kretsyscall sections support for syscall kprobes") added the arch_specific_syscall_pfx() function, which returns a string representing the architecture in use. As it turns out this function is currently not aware of Power PC, where NULL is returned. That's being flagged by the libbpf CI system, which builds for ppc64le and the compiler sees a NULL pointer being passed in to a %s format string. With this change we add representations for two more architectures, for Power PC and Power PC 64, and also adjust the string format logic to handle NULL pointers gracefully, in an attempt to prevent similar issues with other architectures in the future. Fixes:708ac5bea0
("libbpf: add ksyscall/kretsyscall sections support for syscall kprobes") Signed-off-by: Daniel Müller <deso@posteo.net> Signed-off-by: Andrii Nakryiko <andrii@kernel.org> Link: https://lore.kernel.org/bpf/20220728222345.3125975-1-deso@posteo.net
This commit is contained in:
parent
40b09653b1
commit
64893e83f9
|
@ -9995,6 +9995,10 @@ static const char *arch_specific_syscall_pfx(void)
|
|||
return "mips";
|
||||
#elif defined(__riscv)
|
||||
return "riscv";
|
||||
#elif defined(__powerpc__)
|
||||
return "powerpc";
|
||||
#elif defined(__powerpc64__)
|
||||
return "powerpc64";
|
||||
#else
|
||||
return NULL;
|
||||
#endif
|
||||
|
@ -10127,8 +10131,13 @@ struct bpf_link *bpf_program__attach_ksyscall(const struct bpf_program *prog,
|
|||
return libbpf_err_ptr(-EINVAL);
|
||||
|
||||
if (kernel_supports(prog->obj, FEAT_SYSCALL_WRAPPER)) {
|
||||
/* arch_specific_syscall_pfx() should never return NULL here
|
||||
* because it is guarded by kernel_supports(). However, since
|
||||
* compiler does not know that we have an explicit conditional
|
||||
* as well.
|
||||
*/
|
||||
snprintf(func_name, sizeof(func_name), "__%s_sys_%s",
|
||||
arch_specific_syscall_pfx(), syscall_name);
|
||||
arch_specific_syscall_pfx() ? : "", syscall_name);
|
||||
} else {
|
||||
snprintf(func_name, sizeof(func_name), "__se_sys_%s", syscall_name);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue