On Mon, Dec 5, 2022 at 1:11 PM Daniel Borkmann <daniel@xxxxxxxxxxxxx> wrote: > > On 12/3/22 10:37 AM, Xin Liu wrote: > > This is a small improvement in libbpf_strerror. When libbpf_strerror > > is used to obtain the system error description, if the length of the > > buf is insufficient, libbpf_sterror returns ERANGE and sets errno to > > ERANGE. > > > > However, this processing is not performed when the error code > > customized by libbpf is obtained. Make some minor improvements here, > > return -ERANGE and set errno to ERANGE when buf is not enough for > > custom description. > > > > Signed-off-by: Xin Liu <liuxin350@xxxxxxxxxx> > > --- > > tools/lib/bpf/libbpf_errno.c | 6 ++++++ > > 1 file changed, 6 insertions(+) > > > > diff --git a/tools/lib/bpf/libbpf_errno.c b/tools/lib/bpf/libbpf_errno.c > > index 96f67a772a1b..48ce7d5b5bf9 100644 > > --- a/tools/lib/bpf/libbpf_errno.c > > +++ b/tools/lib/bpf/libbpf_errno.c > > @@ -54,10 +54,16 @@ int libbpf_strerror(int err, char *buf, size_t size) > > > > if (err < __LIBBPF_ERRNO__END) { > > const char *msg; > > + size_t msg_size; > > > > msg = libbpf_strerror_table[ERRNO_OFFSET(err)]; > > snprintf(buf, size, "%s", msg); > > buf[size - 1] = '\0'; > > + > > + msg_size = strlen(msg); > > + if (msg_size >= size) > > + return libbpf_err(-ERANGE); > > Given this is related to libbpf_strerror_table[] where the error strings are known > lets do compile-time error instead. All callers should pass in a buffer of STRERR_BUFSIZE > size in libbpf. That sounds a bit too pessimistic?.. If the actual error message fits in the buffer, why return -ERANGE just because theoretically some error descriptions might fit? But I don't think we need to calculate strlen(). snprintf above returns the number of bytes required to print a full string, even if it was truncated. So just comparing snprintf's result to size should be enough. > > > return 0; > > } > > > > >