elf_reader: only read data from PROGBITS sections, ignore NOBITS
elf_reader: only read data from PROGBITS sections, ignore NOBITS

'Virtual' NOBITS sections like .bss always share an offset with another
ELF section, but reading from them is expected to yield only NUL bytes.

Prior to Go 1.18, opening a NOBITS section would yield a reader into
the overlapping 'real' section, dutifully returning its non-NUL bytes
and potentially reading past the end of the underlying file reader if
the size of the NOBITS section was large enough. This was addressed in
CL#375216.

As both an optimization (in case of large .bss sections) and a workaround
for this bug in Go versions 1.17 and earlier, only read data from PROGBITS
sections, which all known LLVM versions use correctly. Return an error if
a data section is not PROGBITS or NOBITS.

Signed-off-by: Timo Beckers <98c2d5a1e48c998bd9ba9dbc53d6857beae1c9bd@isovalent.com>

cilium/ebpf,cilium/ebpf