Solaris hasn't included flock(2) for a long while now, and building
this wrapper creates issues with undefined symbols. However,
OpenSolaris derivatives like Illumos do include flock(2) so they should
not be excluded here.
2019: Fix aio_suspend in non-trivial cases r=asomers a=asomers
aio_suspend would probably fail with EFAULT if the first operation in the list wasn't complete, due to an invalid pointer cast.
Also, deprecate lio_listio, which has the same problem, and others besides.
Fixes#1980
2087: Fix Haiku build by updating tempfile to 3.7.1 r=asomers a=asomers
https://github.com/Stebalien/tempfile/issues/246
Co-authored-by: Alan Somers <asomers@gmail.com>
2088: sockopt add OpenBSD's SO_RTABLE to set the route table. r=asomers a=devnexen
Also SO_ACCEPTFILTER for FreeBSD/NetBSD.
Co-authored-by: David Carlier <devnexen@gmail.com>
Co-authored-by: David CARLIER <devnexen@gmail.com>
2056: add vsock support for macOS r=asomers a=tzneal
Adds vsock support for macOS. It's not possible to create a listening
vsock socket on a macOS host, but you can create one from inside a
VM and connect back to the host.
Co-authored-by: Todd Neal <tnealt@amazon.com>
Co-authored-by: Alan Somers <asomers@gmail.com>
2079: Remove sigevent support on Fuchsia r=asomers a=asomers
It triggers UB, which the compiler warns about beginning with 1.41.0. Remove it, due to lack of a Fuchsia maintainer and lack of feedback from the original Fuchsia porter.
Fixes#1441
Co-authored-by: Alan Somers <asomers@gmail.com>
2086: Clippy cleanup r=asomers a=asomers
Clippy found some const-correctness issues in internal APIs, but nothing user-facing.
Co-authored-by: Alan Somers <asomers@gmail.com>
It triggers UB, which the compiler warns about beginning with 1.41.0.
Remove it, due to lack of a Fuchsia maintainer and lack of feedback from
the original Fuchsia porter.
Fixes#1441
2041: Set the length of a socket address when calling `recvmsg` on Linux r=asomers a=JarredAllen
# Background
I think I've found a bug with `recvmsg` on Linux where it doesn't set the length of a received socket address. I found this while working with unix datagram sockets with path `struct sockaddr_un` addresses, but I think this applies to any variable-length socket address type.
At present, the `sun_len` field of `UnixAddr` on Linux shows up as 0 whenever I call `recvmsg`. I think it's reading uninitialized memory (afaict the `recvmsg` function never initializes it before we call `MaybeUninit::assume_init`), though it's possible that it's being zero-initialized somewhere that I missed. Either way, this isn't the correct behavior, which should set it to the length of the `struct sockaddr_un` contents (or whatever other type of socket).
# Changes
I changed the `recvmsg` function to construct the returned socket address from the `struct sockaddr` and length returned by the libc `recvmsg` call (using the `from_raw` function the trait provides). Since the trait is sealed so downstream crates can't implement it, I believe this shouldn't be a breaking change.
# Validation
I've tested that my code (which failed due to this bug) now works. I also added a new test case which tests that we construct `UnixAddr`s correctly in the `recvmsg` function, which passes locally for me and fails if I cherry-pick it onto the current `master`.
I've also checked that `cargo test` and `cargo clippy` both still pass on `aarch64-apple-darwin` and on `aarch64-unknown-linux-musl` targets (the two targets I develop for/have access to). Hopefully your CI will confirm that everything else still works.
Co-authored-by: Jarred Allen <jarred@moveparallel.com>
Co-authored-by: Jarred Allen <jarredallen73@gmail.com>
2077: Enable socket timestamping options on Android r=asomers a=spencercw
Requires https://github.com/rust-lang/libc/pull/3267 which landed in libc 0.2.147.
Co-authored-by: Chris Spencer <spencercw@gmail.com>
2067: Address seeming typo in lib.rs r=asomers a=solidsnack
I believe the `my` here was intended to be `many` -- but am not sure.
Co-authored-by: Jason Dusek <jason.dusek@gmail.com>
2027: Update to bitflags 2.2.1. r=asomers a=qwandor
This is a new major version and requires some code changes.
2057: Haiku: `speed_t` is defined as `u8` for 32 and 64 bit systems r=asomers a=nielx
This fixes the build on 32 bit Haiku systems.
Co-authored-by: Andrew Walbran <qwandor@google.com>
Co-authored-by: Niels Sascha Reedijk <niels.reedijk@gmail.com>
2061: For invalid IP address conversions with future Rust versions r=asomers a=asomers
Rust's standard library no longer guarantees that Ipv4Addr and Ipv6Addr are wrappers around the C types (though for now at least, they are identical on all platforms I'm aware of). So do the conversions explicitly instead of transmuting.
Fixes#2053
Co-authored-by: Alan Somers <asomers@gmail.com>
Rust's standard library no longer guarantees that Ipv4Addr and Ipv6Addr
are wrappers around the C types (though for now at least, they are
identical on all platforms I'm aware of). So do the conversions
explicitly instead of transmuting.
Fixes#2053
2062: Disable the doc test for sys::personality::personality on aarch64 r=asomers a=asomers
It's failing in CI, and we don't yet know why. Possibly the cloud provider just turned on seccomp.
Issue #2060
Co-authored-by: Alan Somers <asomers@gmail.com>
The latest Rustup does not allow the toolchain specification to be
blank, which we were using. Fix it by ensuring that only one toolchain
is ever installed in a given task, so we won't need to use the
+$TOOLCHAIN with cargo.