Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Merged
merged 1 commit into from Jul 20, 2022

Conversation

ti-mo
Copy link
Collaborator

@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 <timo@isovalent.com>
@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.

None yet

3 participants