bpf: don't assume build-id length is always 20 bytes
authorStanislav Fomichev <sdf@google.com>
Wed, 16 Jan 2019 22:03:15 +0000 (14:03 -0800)
committerDaniel Borkmann <daniel@iogearbox.net>
Thu, 17 Jan 2019 15:42:35 +0000 (16:42 +0100)
commit0b698005a9d11c0e91141ec11a2c4918a129f703
tree8ba4e8f27f0b2b052d3fdf5f64389b9abb1ca44e
parent6e8ccb4f624a73c56fc6ef0c45bcf91ca80703c3
bpf: don't assume build-id length is always 20 bytes

Build-id length is not fixed to 20, it can be (`man ld` /--build-id):
  * 128-bit (uuid)
  * 160-bit (sha1)
  * any length specified in ld --build-id=0xhexstring

To fix the issue of missing BPF_STACK_BUILD_ID_VALID for shorter build-ids,
assume that build-id is somewhere in the range of 1 .. 20.
Set the remaining bytes to zero.

v2:
* don't introduce new "len = min(BPF_BUILD_ID_SIZE, nhdr->n_descsz)",
  we already know that nhdr->n_descsz <= BPF_BUILD_ID_SIZE if we enter
  this 'if' condition

Fixes: 615755a77b24 ("bpf: extend stackmap to save binary_build_id+offset instead of address")
Acked-by: Song Liu <songliubraving@fb.com>
Signed-off-by: Stanislav Fomichev <sdf@google.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
kernel/bpf/stackmap.c