Conditionally apply linux-only operations

Rust's libc considers android to be different than linux and provides
certain functions exclusively for target_os = "linux".

BUG=b:185155959

Change-Id: I664821fd678f0c911deb9312fe5fcfc9faf00053
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/2822209
Tested-by: Jorge Moreira Broche <jemoreira@google.com>
Commit-Queue: Jorge Moreira Broche <jemoreira@google.com>
Reviewed-by: Zach Reizner <zachr@chromium.org>
This commit is contained in:
Jorge E. Moreira 2021-04-12 13:57:49 -07:00 committed by Commit Bot
parent 6d473b3615
commit 1e3cb9faa1
2 changed files with 17 additions and 10 deletions

View file

@ -158,6 +158,9 @@ impl ProxyDevice {
let debug_label_trimmed =
&debug_label.as_bytes()[..std::cmp::min(max_len, debug_label.len())];
let thread_name = CString::new(debug_label_trimmed).unwrap();
// TODO(crbug.com/1199487): remove this once libc provides the wrapper for all
// targets
#[cfg(all(target_os = "linux", target_env = "gnu"))]
let _ = libc::pthread_setname_np(libc::pthread_self(), thread_name.as_ptr());
device.on_sandboxed();
child_proc(child_tube, &mut device);

View file

@ -188,18 +188,22 @@ impl<F: FileSystem + Sync> Worker<F> {
// cases.
const SECBIT_NO_SETUID_FIXUP: i32 = 1 << 2;
// Safe because this doesn't modify any memory and we check the return value.
let mut securebits = unsafe { libc::prctl(libc::PR_GET_SECUREBITS) };
if securebits < 0 {
return Err(Error::GetSecurebits(io::Error::last_os_error()));
}
// TODO(crbug.com/1199487): Remove this once libc provides the wrapper for all targets.
#[cfg(target_os = "linux")]
{
// Safe because this doesn't modify any memory and we check the return value.
let mut securebits = unsafe { libc::prctl(libc::PR_GET_SECUREBITS) };
if securebits < 0 {
return Err(Error::GetSecurebits(io::Error::last_os_error()));
}
securebits |= SECBIT_NO_SETUID_FIXUP;
securebits |= SECBIT_NO_SETUID_FIXUP;
// Safe because this doesn't modify any memory and we check the return value.
let ret = unsafe { libc::prctl(libc::PR_SET_SECUREBITS, securebits) };
if ret < 0 {
return Err(Error::SetSecurebits(io::Error::last_os_error()));
// Safe because this doesn't modify any memory and we check the return value.
let ret = unsafe { libc::prctl(libc::PR_SET_SECUREBITS, securebits) };
if ret < 0 {
return Err(Error::SetSecurebits(io::Error::last_os_error()));
}
}
#[derive(PollToken)]