Linux s390 Architecture development
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Thomas Weißschuh" <thomas.weissschuh@linutronix.de>
Cc: "Vasily Gorbik" <gor@linux.ibm.com>,
	"Alexander Gordeev" <agordeev@linux.ibm.com>,
	"Christian Borntraeger" <borntraeger@linux.ibm.com>,
	"Heiko Carstens" <hca@linux.ibm.com>,
	ojeda@kernel.org, linux-s390@vger.kernel.org
Subject: Re: [PATCH v5 12/24] vdso: Add the vdsocheck tool
Date: Tue, 08 Sep 2026 06:57:19 +0000	[thread overview]
Message-ID: <20260908065719.DF3E61F00A3A@smtp.kernel.org> (raw)
In-Reply-To: <20260908-vdso-absolute-reloc-v5-12-3a93791af1cf@linutronix.de>

Thank you for your contribution! Sashiko AI review found 4 potential issue(s) to consider:
- [Medium] Parsing failure for valid ELF files containing `SHT_NOBITS` sections.
- [Medium] `validate_linked_dso` blindly rejects DSOs with `SHT_REL` / `SHT_RELA` sections, dropping the workaround for `R_*_NONE` relocations.
- [Low] Unchecked slice indexing in `get_data_subslice` causes unhandled panics on malformed or adversarial ELF files.
- [Low] vdsocheck.rs fails to compile due to multiple lifetime violations and a move-while-borrowed error.
--

commit 043a7ddfce689ccb30ea6aee60c35639fb8be5b1
Author: Thomas Weißschuh <thomas.weissschuh@linutronix.de>

vdso: Add the vdsocheck tool

This commit introduces a Rust-based vdsocheck tool to validate that the vDSO
library does not contain absolute dynamic relocations, moving this logic out of
inline shell commands.

> diff --git a/lib/vdso/check/elf.rs b/lib/vdso/check/elf.rs
> new file mode 100644
> index 0000000000000..520285d6fd10a
> --- /dev/null
> +++ b/lib/vdso/check/elf.rs
[ ... ]
> +fn get_data_subslice(data: &[u8], offset: u64, size: u64) -> ParseResult<&[u8]> {
> +    let start: usize = offset.try_into().map_err(|_| ParseError::IndexOutOfRange)?;
> +    let size: usize = size.try_into().map_err(|_| ParseError::IndexOutOfRange)?;
> +    let end = start.checked_add(size).ok_or(ParseError::IndexOutOfRange)?;
> +
> +    Ok(&data[start..end])
> +}

[Severity: Low]
Does this slice indexing panic if the ELF file specifies an out-of-bounds size
where end exceeds data.len()?

Could this use data.get(start..end).ok_or(...) instead to return a graceful
parsing error rather than failing on malformed ELF files?

[ ... ]
> +impl<'f: 'a, 'a> Iterator for SectionHeaderIterator<'f, 'a> {
> +    type Item = ParseResult<SectionHeader<'f>>;
> +
> +    fn next(&mut self) -> Option<Self::Item> {
[ ... ]
> +        match &mut self.0 {
> +            ClassAlternative::Elf32(iter) => iter.next().map(|n| {
> +                Ok(SectionHeader {
> +                    name: n.sh_name.to_cpu(iter.byteorder).into(),
> +                    type_: n.sh_type.to_cpu(iter.byteorder).into(),
> +                    entsize: n.sh_entsize.to_cpu(iter.byteorder).into(),
> +                    data: get_data_subslice(
> +                        file_data,
> +                        n.sh_offset.to_cpu(iter.byteorder).into(),
> +                        n.sh_size.to_cpu(iter.byteorder).into(),
> +                    )?,
> +                })
> +            }),
[ ... ]

[Severity: Medium]
Will this fail to parse valid ELF files containing sections with no file data
like .bss?

Since sh_size for these sections represents memory allocation size rather than
file size, calling get_data_subslice() here attempts to read non-existent
bytes from the file, which could cause a parsing failure.

[ ... ]
> +impl<'a> RelSection<'a> {
> +    pub fn entries(&'a self) -> ParseResult<RelSectionIterator<'a>> {
> +        RelSectionIterator::new(&self.0)
> +    }
> +}

[Severity: Low]
Does this method signature enforce a lifetime bound (&'a self) that cannot be
satisfied when iterating over locally constructed sections? This appears to
cause a compile failure in validate_object_file().

[ ... ]
> diff --git a/lib/vdso/check/vdsocheck.rs b/lib/vdso/check/vdsocheck.rs
> new file mode 100644
> index 0000000000000..f4c0730bc976d
> --- /dev/null
> +++ b/lib/vdso/check/vdsocheck.rs
[ ... ]
> +fn validate_linked_dso<'a>(file: &'a elf::File<'a>) -> ValidationResult<'a> {
> +    for section in file.sections()? {
> +        let section = section?;
> +
> +        /* No relocations are allowed */
> +        match section {
> +            elf::Section::Rel(_) | elf::Section::Rela(_) => {
> +                return Err(ValidationError::UnexpectedSection(section))
> +            }
> +            _ => {}
> +        }
> +    }
> +
> +    Ok(())
> +}

[Severity: Medium]
Does this blindly reject DSOs containing relocation sections, even if they
solely contain ignored relocations?

The inline shell script this replaces in lib/vdso/Makefile.include explicitly
ignored _NONE relocations:

  cmd_vdso_check = if $(READELF) -rW $@ | grep -v _NONE | grep -q " R_\w*_"; \

Does unconditionally rejecting all relocation sections drop this workaround for
toolchains that emit empty or _NONE relocations?

[ ... ]
> +fn validate_object_file<'a>(file: &'a elf::File<'a>) -> ValidationResult<'a> {
[ ... ]
> +        match section {
> +            elf::Section::Rel(ref rel) => {
> +                for entry in rel.entries()? {
> +                    if !allowed_relocs.in_object_file.contains(&entry.type_) {
> +                        return Err(ValidationError::InvalidRelocation(section, entry.type_));
> +                    }
> +                }
> +            }

[Severity: Low]
Will this fail to compile due to a move-while-borrowed error?

The variable section is moved into ValidationError::InvalidRelocation while it
is still borrowed by ref rel.

Combined with the lifetime requirements of rel.entries(), this breaks the
build when the vdso check config is enabled.

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260908-vdso-absolute-reloc-v5-0-3a93791af1cf@linutronix.de?part=12

  reply	other threads:[~2026-09-08  6:57 UTC|newest]

Thread overview: 77+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-08  6:33 [PATCH v5 00/24] vdso: Reject absolute relocations during build Thomas Weißschuh
2026-09-08  6:33 ` [PATCH v5 01/24] elf, uapi: Add a header for relocation constants Thomas Weißschuh
2026-09-08  6:37   ` sashiko-bot
2026-09-08  9:00   ` Christophe Leroy (CS GROUP)
2026-09-10  6:31   ` Mukesh Kumar Chaurasiya
2026-09-08  6:33 ` [PATCH v5 02/24] x86/elf, um/x86/elf: Move relocation constants to UAPI Thomas Weißschuh
2026-09-08  6:46   ` sashiko-bot
2026-09-08 13:55   ` Borislav Petkov
2026-09-08 14:26     ` Thomas Weißschuh
2026-09-08 15:12       ` Borislav Petkov
2026-09-09  5:59         ` Thomas Weißschuh
2026-09-09 14:49           ` Borislav Petkov
2026-09-09 19:27             ` H. Peter Anvin
2026-09-09 19:47               ` Borislav Petkov
2026-09-10  8:33             ` Thomas Weißschuh
2026-09-08 14:32     ` Christophe Leroy (CS GROUP)
2026-09-08  6:33 ` [PATCH v5 03/24] ARM: elf: " Thomas Weißschuh
2026-09-08  6:39   ` sashiko-bot
2026-09-08  6:33 ` [PATCH v5 04/24] arm64: " Thomas Weißschuh
2026-09-08  6:44   ` sashiko-bot
2026-09-08  6:33 ` [PATCH v5 05/24] powerpc/elf: " Thomas Weißschuh
2026-09-08  6:43   ` sashiko-bot
2026-09-08  9:02   ` Christophe Leroy (CS GROUP)
2026-09-08 14:01   ` R Nageswara Sastry
2026-09-10  6:30   ` Mukesh Kumar Chaurasiya
2026-09-08  6:33 ` [PATCH v5 06/24] riscv: elf: " Thomas Weißschuh
2026-09-08  6:45   ` sashiko-bot
2026-09-08  6:33 ` [PATCH v5 07/24] LoongArch: " Thomas Weißschuh
2026-09-08  6:44   ` sashiko-bot
2026-09-08  6:33 ` [PATCH v5 08/24] s390/elf: " Thomas Weißschuh
2026-09-08  6:50   ` sashiko-bot
2026-09-08  6:33 ` [PATCH v5 09/24] MIPS: ELF: " Thomas Weißschuh
2026-09-08  6:48   ` sashiko-bot
2026-09-08  6:33 ` [PATCH v5 10/24] sparc: elf: " Thomas Weißschuh
2026-09-08  6:48   ` sashiko-bot
2026-09-08  6:33 ` [PATCH v5 11/24] tools headers UAPI: Sync ELF headers with the kernel sources Thomas Weißschuh
2026-09-08  6:51   ` sashiko-bot
2026-09-08  8:56   ` Christophe Leroy (CS GROUP)
2026-09-08  9:37     ` Thomas Weißschuh
2026-09-08  9:09   ` Christophe Leroy (CS GROUP)
2026-09-08  6:33 ` [PATCH v5 12/24] vdso: Add the vdsocheck tool Thomas Weißschuh
2026-09-08  6:57   ` sashiko-bot [this message]
2026-09-08  7:19   ` Peter Zijlstra
2026-09-08  7:35     ` Thomas Weißschuh
2026-09-08  7:37       ` Peter Zijlstra
2026-09-09 19:31     ` H. Peter Anvin
2026-09-09 19:38       ` Miguel Ojeda
2026-09-10  6:52   ` Mukesh Kumar Chaurasiya
2026-09-08  6:33 ` [PATCH v5 13/24] x86/vdso: Enable " Thomas Weißschuh
2026-09-08  7:00   ` sashiko-bot
2026-09-08  6:33 ` [PATCH v5 14/24] ARM: vdso: " Thomas Weißschuh
2026-09-08  7:01   ` sashiko-bot
2026-09-08  6:33 ` [PATCH v5 15/24] arm64: " Thomas Weißschuh
2026-09-08  7:08   ` sashiko-bot
2026-09-08  6:33 ` [PATCH v5 16/24] powerpc/elf: Add 32-bit REL16 relocation definitions Thomas Weißschuh
2026-09-08  6:55   ` sashiko-bot
2026-09-08  9:21   ` Christophe Leroy (CS GROUP)
2026-09-08 14:01   ` R Nageswara Sastry
2026-09-08  6:33 ` [PATCH v5 17/24] powerpc/vdso: Enable the vdsocheck tool Thomas Weißschuh
2026-09-08  7:05   ` sashiko-bot
2026-09-08 14:02   ` R Nageswara Sastry
2026-09-08 14:41   ` Christophe Leroy (CS GROUP)
2026-09-09  6:09     ` Thomas Weißschuh
2026-09-08  6:33 ` [PATCH v5 18/24] riscv: vdso: " Thomas Weißschuh
2026-09-08  7:04   ` sashiko-bot
2026-09-08  6:33 ` [PATCH v5 19/24] LoongArch: vDSO: " Thomas Weißschuh
2026-09-08  7:05   ` sashiko-bot
2026-09-08  6:33 ` [PATCH v5 20/24] s390/vdso: " Thomas Weißschuh
2026-09-08  7:06   ` sashiko-bot
2026-09-08  6:33 ` [PATCH v5 21/24] MIPS: ELF: Add more PC-relative relocation definitions Thomas Weißschuh
2026-09-08  7:05   ` sashiko-bot
2026-09-08  6:33 ` [PATCH v5 22/24] MIPS: vdso: Enable the vdsocheck tool Thomas Weißschuh
2026-09-08  7:20   ` sashiko-bot
2026-09-08  6:33 ` [PATCH v5 23/24] sparc: " Thomas Weißschuh
2026-09-08  7:27   ` sashiko-bot
2026-09-08  6:33 ` [PATCH v5 24/24] vDSO: Automatically enable VDSO_CHECK Thomas Weißschuh
2026-09-08  7:18   ` sashiko-bot

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260908065719.DF3E61F00A3A@smtp.kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=agordeev@linux.ibm.com \
    --cc=borntraeger@linux.ibm.com \
    --cc=gor@linux.ibm.com \
    --cc=hca@linux.ibm.com \
    --cc=linux-s390@vger.kernel.org \
    --cc=ojeda@kernel.org \
    --cc=sashiko-reviews@lists.linux.dev \
    --cc=thomas.weissschuh@linutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox