nix-rust / nix

Rust friendly bindings to *nix APIs
MIT License
2.63k stars 661 forks source link

Change the signature of `ptrace::write` to make it safe #2323

Closed ShuiRuTian closed 7 months ago

ShuiRuTian commented 7 months ago

For now, the whole impl of write is

pub unsafe fn write(
    pid: Pid,
    addr: AddressType,
    data: *mut c_void,
) -> Result<()> {
    unsafe { ptrace_other(Request::PTRACE_POKEDATA, pid, addr, data).map(drop) }
}

In ptrace(2), it's mentioned data is "a word", which should be the same as the return type of read(c_long, in current code).

So, why don't we change the type of data to c_long, and make it safe?

Or maybe the type could be a byte array like [u8; sizeof::<c_long>()]

SteveLauC commented 7 months ago

It was made unsafe indeed for this argument, see #1245, so I think this would be a reasonable change.