Skip to content

Comments

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

Merged
lmb merged 1 commit intocilium:masterfrom
ti-mo:tb/skip-reading-nobits
Jul 20, 2022
Merged

elf_reader: only read data from PROGBITS sections, ignore NOBITS#740
lmb merged 1 commit intocilium:masterfrom
ti-mo:tb/skip-reading-nobits

Conversation

@ti-mo
Copy link
Contributor

@ti-mo ti-mo commented Jul 20, 2022

'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.

Addresses #668 (comment).

'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 <[email protected]>
@ti-mo ti-mo requested a review from lmb July 20, 2022 13:00
@ti-mo ti-mo marked this pull request as ready for review July 20, 2022 13:01
@ti-mo ti-mo mentioned this pull request Jul 20, 2022
1 task
@lmb lmb merged commit 69c5729 into cilium:master Jul 20, 2022
@ti-mo ti-mo deleted the tb/skip-reading-nobits branch July 20, 2022 14:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants