On Thu, 2020-11-26 at 23:35 -0800, Yonghong Song wrote: > On 11/26/20 8:57 AM, Florent Revest wrote: > > +BPF_CALL_5(bpf_kallsyms_lookup, u64, address, char *, symbol, u32, > > symbol_size, > > + char *, module, u32, module_size) > > +{ > > + char buffer[KSYM_SYMBOL_LEN]; > > + unsigned long offset, size; > > + const char *name; > > + char *modname; > > + long ret; > > + > > + name = kallsyms_lookup(address, &size, &offset, &modname, > > buffer); > > + if (!name) > > + return -EINVAL; > > + > > + ret = strlen(name) + 1; > > + if (symbol_size) { > > + strncpy(symbol, name, symbol_size); > > + symbol[symbol_size - 1] = '\0'; > > + } > > + > > + if (modname && module_size) { > > + strncpy(module, modname, module_size); > > + module[module_size - 1] = '\0'; > > In this case, module name may be truncated and user did not get any > indication from return value. In the helper description, it is > mentioned that module name currently is most 64 bytes. But from UAPI > perspective, it may be still good to return something to let user > know the name is truncated. > > I do not know what is the best way to do this. One suggestion is > to break it into two helpers, one for symbol name and another > for module name. What is the use cases people want to get both > symbol name and module name and is it common? Fair, I can split this into two helpers :) The lookup would be done twice but I don't think that's a big deal.