summaryrefslogtreecommitdiff
path: root/src
AgeCommit message (Collapse)Author
2023-07-21Disable tcsetattr() on illumos and solarisfix/disable_tcsetattr_illumosMartin Samuelsson
Calling tcsetattr() as currently done by nix is documented undefined behaviour on illumos, and will always fail. For details, please see: https://github.com/nix-rust/nix/issues/2071
2023-07-17Merge #2041masterbors[bot]
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>
2023-07-17Fix lintJarred Allen
2023-07-17Correctly let the kernel set the length on BSDsJarred Allen
Co-authored-by: Alan Somers <asomers@gmail.com>
2023-07-17Merge branch 'master' into set-sockaddr-length-linuxJarred Allen
2023-07-17More PR feedbackJarred Allen
2023-07-17Enable socket timestamping options on AndroidChris Spencer
2023-07-15Merge #2048bors[bot]
2048: Enable additional socket timestamping flags r=asomers a=spencercw Co-authored-by: Chris Spencer <spencercw@gmail.com>
2023-07-15Clippy cleanupAlan Somers
2023-07-02Address seeming typo in lib.rsJason Dusek
I believe the `my` here was intended to be `many` -- but am not sure.
2023-06-29Merge #2027 #2057bors[bot]
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>
2023-06-27For invalid IP address conversions with future Rust versionsAlan Somers
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
2023-06-27Disable the doc test for sys::personality::personality on aarch64Alan Somers
It's failing in CI, and we don't yet know why. Possibly the cloud provider just turned on seccomp. Issue #2060
2023-06-17Haiku: `speed_t` is defined as `u8` for 32 and 64 bit systemsNiels Sascha Reedijk
2023-06-05Clippy cleanup:Ben Kimock
fix the new clippy::non-minimal-cfg lint
2023-06-02Enable additional socket timestamping flagsChris Spencer
2023-06-02Fix typo in commentChris Spencer
2023-05-22Merge branch 'master' into set-sockaddr-length-linuxJarred Allen
2023-05-22Remove redundant `unsafe` blockJarred Allen
2023-05-22Fixup accidentally-introduced changesJarred Allen
2023-05-22PR suggestion: Set the length later instead of using `from_raw`Jarred Allen
2023-05-22Fix warnings.Andrew Walbran
2023-05-22Use repr(transparent) for bitflags.Andrew Walbran
2023-05-22Update to bitflags 2.3.1.Andrew Walbran
This is a new major version and requires some code changes.
2023-05-22Use .bits() method rather than field for bitflags.Andrew Walbran
2023-05-21Merge #2009bors[bot]
2009: Add more detail for ptrace documentation r=asomers a=thomasqueirozb All functions are documented with the equivalent C call example except for `read`, `read_user`, `write` & `write_user`. I was looking for the function that used `PTRACE_PEEKDATA` and couldn't find it using the documentation and had to go to the source code to find it out. In hindsight, it's pretty obvious that it was read... But still I think it would be nice to have it documented Co-authored-by: Thomas de Queiroz Barros <38295417+thomasqueirozb@users.noreply.github.com>
2023-05-21Merge #2040bors[bot]
2040: timerfd: Add TFD_TIMER_CANCEL_ON_SET flag r=asomers a=apohrebniak Hi. This PR adds an TFD_TIMER_CANCEL_ON_SET flag to use with `timerfd` on Linux and Android Co-authored-by: Andrii Pohrebniak <andrii.pohrebniak@gmail.com>
2023-05-21Clippy cleanup:Alan Somers
fix the new clippy::non_minimal_cfg lint
2023-05-20timerfd: Add TFD_TIMER_CANCEL_ON_SET flagAndrii Pohrebniak
2023-05-20Merge #2029bors[bot]
2029: Remove 'static mut' usage in features::os::kernel_version. r=asomers a=zachs18 Resolves #2028 Note that this is (AFAICT) the first use of `Atomic*` types in `nix` (other than tests). However, this shouldn't be a portability issue, since `nix` is not `#![no_std]`, and (IIUC) [`std` requires](https://doc.rust-lang.org/std/sync/atomic/#portability) at least loads and stores of pointer-sized atomics (i.e. `AtomicUsize`), which is all this PR uses. Co-authored-by: Zachary S <zasample18+github@gmail.com>
2023-05-19Set the length of a sockaddr received on LinuxJarred Allen
2023-05-09remove unused mut from two variable declarations in sys/socket/mod.rsBob Haarman
This addresses diagnostics like: error: variable does not need to be mutable --> src/sys/socket/mod.rs:1537:13 | 1537 | let mut p = &mut mmsghdr.msg_hdr;
2023-04-29Remove 'static mut' usage in features::os::kernel_version.Zachary S
(re-commit for CI retry after rustix 0.37.18 release)
2023-04-16Merge #2021bors[bot]
2021: Fixing link in rustdoc comments in User::from_name r=asomers a=austinkeeley Link text is correct but the URL goes to the wrong function. Probably just a copy/paste issue from the other function. Co-authored-by: Austin Keeley <austin.keeley@gmail.com>
2023-04-16Quiet a clippy::suspicious_doc_comments lintAlan Somers
2023-04-16Quiet Clippy::manual_slice_size_calculation lintsAlan Somers
2023-04-16Fixing linkAustin Keeley
2023-04-05Merge #2012bors[bot]
2012: Enable socket and select on redox r=asomers a=coolreader18 Co-authored-by: Noa <coolreader18@gmail.com>
2023-04-02Merge #1999bors[bot]
1999: inotify: Add AsFd to allow using with epoll (issue #1998) r=asomers a=VorpalBlade This resolves issue #1998 and allows `Inotify` to be used by `Epoll` by adding AsFd. I'm not entirely sure about the unit test. Maybe it would be possible to do a more comperhensive check by contructing inotify using `from_raw_fd` and checking that I get the same value back. However, that would basically mean duplicating `Inotify::new` and that feels a bit pointless. Another option would be to create an integration test to combine `Inotify` and `Epoll`. Fixes #1998 Co-authored-by: Arvid Norlander <VorpalBlade@users.noreply.github.com>
2023-03-20fix: send ETH_P_ALL in htons formatTodd Neal
2023-03-13Enable select on redoxNoa
2023-03-13Enable socket on redoxNoa
2023-03-06Add more detail for ptrace documentationThomas de Queiroz Barros
2023-02-19inotify: Add AsFd to allow using with epoll (issue #1998)Arvid Norlander
2023-02-10Merge #1995bors[bot]
1995: Add `AT_EACCESS` to `AtFlags` on all platforms r=asomers a=MatteoNardi On Linux, I need the `AT_EACCESS` flag for `faccessat`: ``` AT_EACCESS Perform access checks using the effective user and group IDs. By default, faccessat() uses the real IDs (like access()). ``` ~~This commit is enabling it for all platforms but redox. I'm not really sure if this is correct of I should have just added a target_os = "linux". A did quick git grep -e AT_EACCESS -e 'AT_REMOVEDIR' on libc and it showed they're available on the same targets, so for consistence I just removed the cfg limitation.~~ CI was helpful and showed me I was wrong: it's undefined on android. Co-authored-by: Matteo Nardi <matteo@exein.io>
2023-02-09Rustier kqueue APIAlan Somers
* Prefer methods instead of functions. * Create a newtype for a kqueue. * Document everything. * Deprecate EVFILT_SENDFILE, because it was never fully implemented upstream. * Add support to the libc_enum! macro to be able to deprecate variants.
2023-02-09Merge #1967bors[bot]
1967: Added LOCAL_PEERPID/LocalPeerPid sockopt for macos r=asomers a=mitsuhiko macOS has a badly documented `LOCAL_PEERPID` sockopt that can be used to retrieve the PID of the connected peer. I intentionally only added this for macOS because I know it exists there, and I'm not sure about ios yet even if it exists there, it's doubtful that the PID information gets any use there. Co-authored-by: Armin Ronacher <armin.ronacher@active-4.com>
2023-02-01Enabled `AtFlags::AT_EACCESS` on all platforms but android and redoxMatteo Nardi
2023-01-31setgroups type mismatches on Solaris #1986gco
2023-01-27Merge #1978bors[bot]
1978: Null-check `libc::group` members before converting r=rtzoeller a=djkoloski This mirrors the approach used for the `From<&libc::passwd> for User` impl. Co-authored-by: David Koloski <djkoloski@gmail.com>