Commit Graph

626 Commits

Author SHA1 Message Date
Alan Somers
6fb3a8fcaa
Merge pull request #2094 from asomers/clippy-aug-11-2023
Clippy cleanup: noop_method_call
2023-08-11 15:43:32 +00:00
Alan Somers
18cbec28a8 Clippy cleanup: noop_method_call 2023-08-11 09:24:01 -06:00
Alan Somers
c1317e477f Add I/O safety to sockopt and some socket functions
* socket
* socketpair
* listen
* setsockopt
* getsockopt
2023-08-06 20:18:09 -06:00
Todd Neal
7a9826273f add vsock support for macOS 2023-07-18 07:31:29 -05:00
Jarred Allen
23125cbb1b Merge branch 'master' into set-sockaddr-length-linux 2023-07-17 11:34:00 -07:00
Alan Somers
4589411229 Clippy cleanup 2023-07-15 11:52:09 -06:00
Ben Kimock
57cdbed0ab Clippy cleanup:
fix the new clippy::non-minimal-cfg lint
2023-06-05 18:11:07 -06:00
Jarred Allen
3174d85d08 Merge branch 'master' into set-sockaddr-length-linux 2023-05-22 14:36:59 -07:00
Jarred Allen
72a2f567ee PR suggestions: use skip macro 2023-05-22 11:47:24 -07:00
Alan Somers
e42c3589a3 Clippy cleanup:
fix the new clippy::non_minimal_cfg lint
2023-05-21 08:52:42 -06:00
Jarred Allen
96fa5a898c Add test coverage for bug with unset socket address length 2023-05-19 17:00:13 -07:00
Armin Ronacher
960199daf9 Try enabling LocalPeerPid for ios 2023-01-15 22:41:33 +01:00
Armin Ronacher
34788b179b Added changelog entry and test for LocalPeerPid 2023-01-14 19:51:00 +01:00
David Collard
33643eff5a Added mq_timedreceive to ::nix::mqueue. 2023-01-10 21:47:56 -05:00
Jonathan
b7f8f93489 feat: I/O safety ftruncate 2023-01-08 18:19:31 +00:00
bors[bot]
99ea907d7d
Merge #1944
1944: Rework vsock test r=asomers a=stefano-garzarella

We mainly provide VsockAddr, so let's try to test well that VsockAddr mapping to libc::sockaddr_vm is correct.

Let's remove all interactions with the socket, since vsock may or may not be available in the environment.
Testing socket(), bind(), listen(), connect(), etc. caused unexpected failures, and it's out of scope of this crate.

So let's simplify the vsock test focussing on VsockAddr. This should work also on graviton, so let's try to re-enable it.

Fixes #1934

Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>

Co-authored-by: Stefano Garzarella <sgarzare@redhat.com>
2022-12-14 14:37:34 +00:00
Stefano Garzarella
4d31ecf06b Rework vsock test
We mainly provide VsockAddr, so let's try to test well that VsockAddr
mapping to libc::sockaddr_vm is correct.

Let's remove all interactions with the socket, since vsock may or may
not be available in the environment.
Testing socket(), bind(), listen(), connect(), etc. caused unexpected
failures, and it's out of scope of this crate.

So let's simplify the vsock test focussing on VsockAddr.
This should work also on graviton, so let's try to re-enable it.

Fixes #1934

Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
2022-12-14 09:54:43 +01:00
bors[bot]
53531b4330
Merge #1940
1940: feat: I/O safety for 'sys/select' r=asomers a=SteveLauC

#### What this PR does:
1. Adds I/O safety for module `sys/select`.

Co-authored-by: Steve Lau <stevelauc@outlook.com>
2022-12-13 22:09:14 +00:00
Steve Lau
2be852de8e feat: I/O safety for 'sys/select' 2022-12-12 14:18:49 +08:00
Steve Lau
47ecc9a1d0 feat: I/O safety for 'sys/poll' 2022-12-11 14:04:13 +08:00
bors[bot]
3d3e6b9fa0
Merge #1913 #1926 #1927 #1931 #1933
1913: feat: I/O safety for 'sys/inotify' r=asomers a=SteveLauC

#### What this PR does:

1. Changes the `fd` field of `struct Inotify` from `RawFd` to `OwnedFd`
2. Changes the interfaces of functions in the `impl Inotify {}`
   
    > The type of `self` changes from `Self` to `&mut Self`. 
    
    From:

   ```rust
   pub fn add_watch<P: ?Sized + NixPath>(
         self,
         path: &P,
         mask: AddWatchFlags,
   ) -> Result<WatchDescriptor> 

   pub fn rm_watch(self, wd: WatchDescriptor) -> Result<()>

   pub fn read_events(self) -> Result<Vec<InotifyEvent>>
   ```

   To:

   ```rust
   pub fn add_watch<P: ?Sized + NixPath>(
        &mut self,
        path: &P,
        mask: AddWatchFlags,
    ) -> Result<WatchDescriptor>

   pub fn rm_watch(&mut self, wd: WatchDescriptor) -> Result<()>

   pub fn read_events(&mut self) -> Result<Vec<InotifyEvent>>
   ```
  

   In the previous implementation, these functions can take `self` by value as `struct Inotify` [was `Copy`](https://docs.rs/nix/latest/nix/sys/inotify/struct.Inotify.html#impl-Copy-for-Inotify). With the changes in `1` applied, `struct Inotify` is no longer `Copy`, so we have to take `self` by reference.

-------

Blocks until the merge of #1863 as this PR needs `read(2)` to be I/O-safe.


1926: feat: I/O safety for 'sys/sendfile' r=asomers a=SteveLauC

#### What this PR does:
1. Adds I/O safety for module `sys/sendfile`.

1927: feat: I/O safety for 'sys/statvfs' r=asomers a=SteveLauC

#### What this PR does:
1. Adds I/O safety for module `sys/statvfs`.

1931: feat: I/O safety for 'sys/uid' & 'sched' r=asomers a=SteveLauC

#### What this PR does:
Adds I/O safety for modules:

1. `sys/uio`
2. `sched`

1933: feat: I/O safety for 'sys/timerfd' r=asomers a=SteveLauC

#### What this PR does:
1. Adds I/O safety  for module `sys/timerfd`.

Co-authored-by: Steve Lau <stevelauc@outlook.com>
2022-12-09 16:43:33 +00:00
Steve Lau
ab5c032e42 feat: I/O safety for 'sys/sendfile' 2022-12-09 11:50:45 +08:00
Steve Lau
8772cde9b8 feat: I/O safety for 'sys/uid' & 'sched' 2022-12-09 11:33:35 +08:00
Steve Lau
fc59f20e19 fix 2022-12-09 11:08:17 +08:00
Steve Lau
f5dffcc7f0 refactor: take AsFd by value 2022-12-09 11:02:30 +08:00
Steve Lau
8f52bc97c9 feat: I/O safety for 'sys/termios' & 'pty' 2022-12-08 14:04:22 +08:00
bors[bot]
67f7d46c6e
Merge #1916
1916: Use I/O safety in sys::mman r=rtzoeller a=asomers



Co-authored-by: Alan Somers <asomers@gmail.com>
2022-12-06 22:07:42 +00:00
bors[bot]
4e0c970a41
Merge #1882
1882: Epoll type r=asomers a=JonathanWoollett-Light

Epoll can be most safely used as a type. This implement a type `Epoll` which supports this.

Co-authored-by: Jonathan <jonathanwoollettlight@gmail.com>
2022-12-06 19:56:26 +00:00
Steve Lau
7058bcef55 feat: I/O safety for 'sys/statfs' 2022-12-06 21:45:12 +08:00
Alan Somers
16a8c02983 Use I/O safety in sys::mman 2022-12-05 11:43:17 -07:00
Jonathan
4f61d12009 Epoll 2022-12-04 22:50:13 +00:00
Alex Saveau
fb802462a6
Fix clippy lints
Signed-off-by: Alex Saveau <saveau.alexandre@gmail.com>
2022-12-04 13:44:50 -08:00
Alex Saveau
f3aa1affb0
Nuke deprecated net APIs
Signed-off-by: Alex Saveau <saveau.alexandre@gmail.com>
2022-12-03 11:40:05 -08:00
Alan Somers
8e91b28b64 Fix UB in the SO_TYPE sockopt
When reading a value into an enum from getsockopt, we must validate it.
Failing to do so can lead to UB for example with SOCK_PACKET on Linux.

Perform the validation in GetSockOpt::get.  Currently SockType is the
only type that requires validation.

Fixes #1819
2022-11-28 23:07:54 -07:00
bors[bot]
33a4d495d9
Merge #1865
1865: Add IpMtu sockopt r=asomers a=ShadowJonathan

Resolves https://github.com/nix-rust/nix/issues/1864

Co-authored-by: Jonathan de Jong <jonathandejong02@gmail.com>
2022-11-25 22:35:51 +00:00
Alan Somers
0ae109ddad Clippy cleanup with the latest nightly. 2022-11-25 08:27:55 -07:00
Jonathan de Jong
e9f07eea61 add IpMtu sockopt 2022-11-23 10:48:48 +00:00
bors[bot]
79f04fb3a3
Merge #1857
1857: Add better support for unnamed unix socket addrs r=asomers a=stevenengler

This adds the following 2 functions/methods: `UnixAddr::new_unnamed` and `UnixAddr::is_unnamed`.

Closes #1585

unix(7) on Linux:

> unnamed: A stream socket that has not been bound to a pathname using bind(2) has no name. Likewise, the two sockets created by socketpair(2) are unnamed. When the address of an unnamed socket is returned, its length is `sizeof(sa_family_t)`, and `sun_path` should not be inspected.

**Edit:** This currently isn't working on BSD, but I see why. Will fix it shortly.

Co-authored-by: Steven Engler <opara@cs.georgetown.edu>
2022-11-21 17:45:29 +00:00
Steven Engler
f6a22198a4 fixup! Added better support for unnamed unix socket addrs
Removed test assertion
2022-11-21 12:11:50 -05:00
Steven Engler
49bab984ee fixup! Added better support for unnamed unix socket addrs
Make Linux-only
2022-11-21 12:03:11 -05:00
Steven Engler
8884ea38ec Added better support for unnamed unix socket addrs 2022-11-21 12:03:11 -05:00
Jonathan
63c56263fb mmap non-zero length 2022-11-20 22:53:40 +00:00
bors[bot]
33b5f928ea
Merge #1853
1853: Adds IP_TOS, IPV6_TCLASS and SO_PRIORITY sockopt wrappers for Linux r=asomers a=mzachar

Added socket option wrappers for DiffServ related parameters on Linux

Co-authored-by: mzachar <mzachar@users.noreply.github.com>
2022-11-20 22:03:22 +00:00
Jonathan
d34696c84b mmap addr 2022-11-20 17:16:25 +00:00
mzachar
faac24c779 Adds IP_TOS, IPV6_TCLASS and SO_PRIORITY sockopt wrappers 2022-11-20 13:41:26 +01:00
Alex Saveau
58f99947bf
Run a round of clippy to fix CI
Signed-off-by: Alex Saveau <saveau.alexandre@gmail.com>
2022-11-06 11:40:46 -08:00
Michael Baikov
19c83afbbf reimplement recvmsg/sendmmsg
New implementation performs no allocations after all the necessary
structures are created, removes potentially unsound code that
was used by the old version (see below) and adds a bit more
documentation about bugs in how timeout is actually handled

```
    let timeout = if let Some(mut t) = timeout {
        t.as_mut() as *mut libc::timespec
    } else {
        ptr::null_mut()
    };
```
2022-10-14 08:57:41 -04:00
Steve Lau
04e409b376 add eaccess on FreeBSD, DragonFly and Linux (musl and glibc) 2022-10-13 09:23:09 +08:00
Ryan Zoeller
6e7bddd154 Fix clippy warnings on nightly
Clippy is now smarter about detecting unnecessary casts and
useless conversions, which means we need to be more explicit
about when the conversions are needed for a subset of platforms.

Required changes found by repeatedly running the following command
against a list of the supported platforms.

`xargs -t -I {} sh -c "cargo clippy -Zbuild-std --target {} --all-targets -- -D warnings || exit 255"`

I removed the casts it complained about, and then restored them
with an `#[allow]` if a later target needed the cast.
2022-10-08 14:08:54 -05:00
Jonas Schievink
945f743aa7 Add a sched_getcpu wrapper 2022-09-27 14:26:35 +02:00