Skip to content

Commit 2d044d9

Browse files
committedOct 16, 2020
Auto merge of #1878 - rupansh:master, r=JohnTitor
process_vm_readv, process_vm_writev should be available on android process_vm_readv and process_vm_writev generally return -EPERM(-1) when used in android, however the syscalls work fine when running under privileged shell. The following was tested(with modified nix) on Android 9/10 running Linux Kernel 4.9 on a SDM 845 phone: ``` fn read_mem_real(pid: i32, addr: usize, vsize: usize) -> Result<Vec<u8>, String> { let mut res = vec![0; vsize]; let riovec: [RemoteIoVec; 1] = [RemoteIoVec {base: addr, len: vsize}]; match process_vm_readv(Pid::from_raw(pid), &[IoVec::from_mut_slice(&mut res)], &riovec) { Err(e) => { log::info!("ERR {}", e); return Err(e.to_string()); }, Ok(_) => { return Ok(res); } } } ``` This will work fine when run under su shell.
2 parents 0d37400 + 0121c5c commit 2d044d9

File tree

2 files changed

+18
-0
lines changed

2 files changed

+18
-0
lines changed
 

‎libc-test/build.rs

+2
Original file line numberDiff line numberDiff line change
@@ -1610,6 +1610,8 @@ fn test_android(target: &str) {
16101610
| "open_memstream"
16111611
| "open_wmemstream"
16121612
| "clock_getcpuclockid"
1613+
| "process_vm_readv"
1614+
| "process_vm_writev"
16131615
if aarch64 =>
16141616
{
16151617
true

‎src/unix/linux_like/android/mod.rs

+16
Original file line numberDiff line numberDiff line change
@@ -2387,6 +2387,22 @@ extern "C" {
23872387
sevlen: ::size_t,
23882388
flags: ::c_int,
23892389
) -> ::c_int;
2390+
pub fn process_vm_readv(
2391+
pid: ::pid_t,
2392+
local_iov: *const ::iovec,
2393+
liovcnt: ::c_ulong,
2394+
remote_iov: *const ::iovec,
2395+
riovcnt: ::c_ulong,
2396+
flags: ::c_ulong,
2397+
) -> ::ssize_t;
2398+
pub fn process_vm_writev(
2399+
pid: ::pid_t,
2400+
local_iov: *const ::iovec,
2401+
liovcnt: ::c_ulong,
2402+
remote_iov: *const ::iovec,
2403+
riovcnt: ::c_ulong,
2404+
flags: ::c_ulong,
2405+
) -> ::ssize_t;
23902406
pub fn ptrace(request: ::c_int, ...) -> ::c_long;
23912407
pub fn getpriority(which: ::c_int, who: ::id_t) -> ::c_int;
23922408
pub fn setpriority(which: ::c_int, who: ::id_t, prio: ::c_int) -> ::c_int;

0 commit comments

Comments
 (0)
Please sign in to comment.