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

fix process scanning on linux 32bits without LFS #2005

Merged
merged 1 commit into from
Nov 27, 2023

Conversation

vthib
Copy link
Contributor

@vthib vthib commented Nov 22, 2023

The commit dfd6f7b brought large file detection in the autoconf file to fix process scanning on linux in x86 architecture. This is however a bit flaky, because:

  • process scanning won't work on systems that do not have LFS, which does not make sense (although I don't really know how autoconf detects it or not).
  • the fix does not work if the compilation is done without the use of autoconf, and _FILE_OFFSET_BITS is not defined. This is for example the case for yara-rust, where the process scanning does not work on linux 32bits for this reason.

This breaks process scanning because without it, the pread function on the mem file will fail if provided with an offset bigger than INT32_MAX, which will always happen for processes.

A better fix is to use the pread64 syscall, which always takes a 64-bits value for the offset. This is the actual linux syscall, so it is completely safe.

See for example the exact same fix on chromium:

https://groups.google.com/a/chromium.org/g/crashpad-dev/c/IJLo8M2AQs0/m/Edyyau2LAwAJ

The commit dfd6f7b brought large file detection in the autoconf file
to fix process scanning on linux in x86 architecture. This is however a
bit flaky, because:
- process scanning won't work on systems that do not have LFS, which
  does not make sense (although I don't really know how autoconf detects
  it or not).
- the fix does not work if the compilation is done without the use of
  autoconf, and `_FILE_OFFSET_BITS` is not defined. This is for example
  the case for yara-rust, where the process scanning does not work on
  linux 32bits for this reason.

This breaks process scanning because without it, the pread function
on the mem file will fail if provided with an offset bigger than
INT32_MAX, which will always happen for processes.

A better fix is to use the pread64 syscall, which always takes a 64-bits
value for the offset. This is the actual linux syscall, so it is
completely safe.

See for example the exact same fix on chromium:

https://groups.google.com/a/chromium.org/g/crashpad-dev/c/IJLo8M2AQs0/m/Edyyau2LAwAJ
@plusvic plusvic merged commit 8dfea8f into VirusTotal:master Nov 27, 2023
9 of 10 checks passed
@vthib vthib deleted the fix-linux32-process-scan branch November 28, 2023 16:16
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.

2 participants