libbpf: Fix strncat bounds error in libbpf_prog_type_by_name
authorKP Singh <kpsingh@google.com>
Wed, 23 Oct 2019 15:40:38 +0000 (17:40 +0200)
committerAlexei Starovoitov <ast@kernel.org>
Wed, 23 Oct 2019 17:17:28 +0000 (10:17 -0700)
On compiling samples with this change, one gets an error:

 error: â€˜strncat’ specified bound 118 equals destination size
  [-Werror=stringop-truncation]

    strncat(dst, name + section_names[i].len,
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     sizeof(raw_tp_btf_name) - (dst - raw_tp_btf_name));
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

strncat requires the destination to have enough space for the
terminating null byte.

Fixes: f75a697e09137 ("libbpf: Auto-detect btf_id of BTF-based raw_tracepoint")
Signed-off-by: KP Singh <kpsingh@google.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Link: https://lore.kernel.org/bpf/20191023154038.24075-1-kpsingh@chromium.org
tools/lib/bpf/libbpf.c

index 8b4d765..d71631a 100644 (file)
@@ -4690,7 +4690,7 @@ int libbpf_prog_type_by_name(const char *name, enum bpf_prog_type *prog_type,
                        }
                        /* prepend "btf_trace_" prefix per kernel convention */
                        strncat(dst, name + section_names[i].len,
-                               sizeof(raw_tp_btf_name) - (dst - raw_tp_btf_name));
+                               sizeof(raw_tp_btf_name) - sizeof("btf_trace_"));
                        ret = btf__find_by_name(btf, raw_tp_btf_name);
                        btf__free(btf);
                        if (ret <= 0) {