Skip to content

Commit 80fd11e

Browse files
committed
Mark several readonly syscalls as readonly.
1 parent 1d0827a commit 80fd11e

File tree

5 files changed

+84
-53
lines changed

5 files changed

+84
-53
lines changed

src/imp/linux_raw/fs/syscalls.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1265,7 +1265,7 @@ fn _copy_file_range(
12651265
#[inline]
12661266
pub(crate) fn memfd_create(name: &ZStr, flags: MemfdFlags) -> io::Result<OwnedFd> {
12671267
unsafe {
1268-
ret_owned_fd(syscall2(
1268+
ret_owned_fd(syscall2_readonly(
12691269
nr(__NR_memfd_create),
12701270
c_str(name),
12711271
c_uint(flags.bits()),

src/imp/linux_raw/io/syscalls.rs

Lines changed: 45 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,16 @@
66
77
#![allow(unsafe_code)]
88

9+
#[cfg(not(any(
10+
target_arch = "aarch64",
11+
target_arch = "mips",
12+
target_arch = "mips64",
13+
target_arch = "riscv64"
14+
)))]
15+
use super::super::arch::choose::syscall1;
916
use super::super::arch::choose::{
10-
syscall1, syscall1_readonly, syscall2, syscall3, syscall3_readonly, syscall4, syscall5,
11-
syscall5_readonly, syscall6,
17+
syscall1_readonly, syscall2, syscall2_readonly, syscall3, syscall3_readonly, syscall4,
18+
syscall4_readonly, syscall5, syscall5_readonly, syscall6,
1219
};
1320
use super::super::c;
1421
use super::super::conv::{
@@ -41,29 +48,25 @@ use linux_raw_sys::general::{
4148
use linux_raw_sys::v5_4::general::{
4249
__NR_eventfd2, __NR_mlock2, __NR_preadv2, __NR_pwritev2, __NR_userfaultfd,
4350
};
44-
#[cfg(not(any(target_arch = "aarch64", target_arch = "riscv64")))]
45-
use {
46-
super::super::arch::choose::syscall2_readonly,
47-
linux_raw_sys::general::__NR_epoll_wait,
48-
linux_raw_sys::general::{__NR_dup2, __NR_pipe, __NR_poll},
49-
};
50-
#[cfg(target_pointer_width = "64")]
51-
use {
52-
super::super::arch::choose::syscall4_readonly, super::super::conv::loff_t_from_u64,
53-
linux_raw_sys::general::__NR_mmap,
54-
};
5551
#[cfg(target_pointer_width = "32")]
5652
use {
5753
super::super::arch::choose::syscall6_readonly,
5854
super::super::conv::{hi, lo},
5955
core::convert::TryInto,
6056
};
57+
#[cfg(target_pointer_width = "64")]
58+
use {super::super::conv::loff_t_from_u64, linux_raw_sys::general::__NR_mmap};
6159
#[cfg(any(target_arch = "aarch64", target_arch = "riscv64"))]
6260
use {
6361
super::super::conv::{opt_ref, size_of},
6462
linux_raw_sys::general::__NR_epoll_pwait,
6563
linux_raw_sys::general::{__NR_ppoll, __kernel_timespec, sigset_t},
6664
};
65+
#[cfg(not(any(target_arch = "aarch64", target_arch = "riscv64")))]
66+
use {
67+
linux_raw_sys::general::__NR_epoll_wait,
68+
linux_raw_sys::general::{__NR_dup2, __NR_pipe, __NR_poll},
69+
};
6770

6871
#[inline]
6972
pub(crate) fn read(fd: BorrowedFd<'_>, buf: &mut [u8]) -> io::Result<usize> {
@@ -358,7 +361,7 @@ pub(crate) unsafe fn msync(addr: *mut c::c_void, len: usize, flags: MsyncFlags)
358361
#[inline]
359362
pub(crate) fn eventfd(initval: u32, flags: EventfdFlags) -> io::Result<OwnedFd> {
360363
unsafe {
361-
ret_owned_fd(syscall2(
364+
ret_owned_fd(syscall2_readonly(
362365
nr(__NR_eventfd2),
363366
c_uint(initval),
364367
c_uint(flags.bits()),
@@ -384,7 +387,7 @@ pub(crate) fn ioctl_fionread(fd: BorrowedFd<'_>) -> io::Result<u64> {
384387
pub(crate) fn ioctl_fionbio(fd: BorrowedFd<'_>, value: bool) -> io::Result<()> {
385388
unsafe {
386389
let data = value as c::c_int;
387-
ret(syscall3(
390+
ret(syscall3_readonly(
388391
nr(__NR_ioctl),
389392
borrowed_fd(fd),
390393
c_uint(FIONBIO),
@@ -409,12 +412,24 @@ pub(crate) fn ioctl_tiocgwinsz(fd: BorrowedFd<'_>) -> io::Result<Winsize> {
409412

410413
#[inline]
411414
pub(crate) fn ioctl_tiocexcl(fd: BorrowedFd<'_>) -> io::Result<()> {
412-
unsafe { ret(syscall2(nr(__NR_ioctl), borrowed_fd(fd), c_uint(TIOCEXCL))) }
415+
unsafe {
416+
ret(syscall2_readonly(
417+
nr(__NR_ioctl),
418+
borrowed_fd(fd),
419+
c_uint(TIOCEXCL),
420+
))
421+
}
413422
}
414423

415424
#[inline]
416425
pub(crate) fn ioctl_tiocnxcl(fd: BorrowedFd<'_>) -> io::Result<()> {
417-
unsafe { ret(syscall2(nr(__NR_ioctl), borrowed_fd(fd), c_uint(TIOCNXCL))) }
426+
unsafe {
427+
ret(syscall2_readonly(
428+
nr(__NR_ioctl),
429+
borrowed_fd(fd),
430+
c_uint(TIOCNXCL),
431+
))
432+
}
418433
}
419434

420435
#[inline]
@@ -855,12 +870,20 @@ pub(crate) fn poll(fds: &mut [PollFd<'_>], timeout: c::c_int) -> io::Result<usiz
855870

856871
#[inline]
857872
pub(crate) unsafe fn userfaultfd(flags: UserfaultfdFlags) -> io::Result<OwnedFd> {
858-
ret_owned_fd(syscall1(nr(__NR_userfaultfd), c_uint(flags.bits())))
873+
ret_owned_fd(syscall1_readonly(
874+
nr(__NR_userfaultfd),
875+
c_uint(flags.bits()),
876+
))
859877
}
860878

861879
#[inline]
862880
pub(crate) fn epoll_create(flags: epoll::CreateFlags) -> io::Result<OwnedFd> {
863-
unsafe { ret_owned_fd(syscall1(nr(__NR_epoll_create1), c_uint(flags.bits()))) }
881+
unsafe {
882+
ret_owned_fd(syscall1_readonly(
883+
nr(__NR_epoll_create1),
884+
c_uint(flags.bits()),
885+
))
886+
}
864887
}
865888

866889
#[inline]
@@ -869,7 +892,7 @@ pub(crate) unsafe fn epoll_add(
869892
fd: c::c_int,
870893
event: &epoll_event,
871894
) -> io::Result<()> {
872-
ret(syscall4(
895+
ret(syscall4_readonly(
873896
nr(__NR_epoll_ctl),
874897
borrowed_fd(epfd),
875898
c_uint(EPOLL_CTL_ADD),
@@ -884,7 +907,7 @@ pub(crate) unsafe fn epoll_mod(
884907
fd: c::c_int,
885908
event: &epoll_event,
886909
) -> io::Result<()> {
887-
ret(syscall4(
910+
ret(syscall4_readonly(
888911
nr(__NR_epoll_ctl),
889912
borrowed_fd(epfd),
890913
c_uint(EPOLL_CTL_MOD),
@@ -895,7 +918,7 @@ pub(crate) unsafe fn epoll_mod(
895918

896919
#[inline]
897920
pub(crate) unsafe fn epoll_del(epfd: BorrowedFd<'_>, fd: c::c_int) -> io::Result<()> {
898-
ret(syscall4(
921+
ret(syscall4_readonly(
899922
nr(__NR_epoll_ctl),
900923
borrowed_fd(epfd),
901924
c_uint(EPOLL_CTL_DEL),

src/imp/linux_raw/net/syscalls.rs

Lines changed: 25 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
77
#![allow(unsafe_code)]
88

9-
use super::super::arch::choose::{syscall2, syscall2_readonly};
9+
use super::super::arch::choose::syscall2_readonly;
1010
use super::super::c;
1111
use super::super::conv::{
1212
borrowed_fd, by_mut, by_ref, c_int, c_uint, out, ret, ret_owned_fd, ret_usize, size_of, slice,
@@ -22,40 +22,38 @@ use crate::io::{self, OwnedFd};
2222
use crate::net::{SocketAddrAny, SocketAddrUnix, SocketAddrV4, SocketAddrV6};
2323
use core::convert::TryInto;
2424
use core::mem::MaybeUninit;
25-
use linux_raw_sys::general::{sockaddr, sockaddr_in, sockaddr_in6, sockaddr_un, socklen_t};
2625
#[cfg(not(any(
2726
target_arch = "x86",
2827
target_arch = "x86_64",
2928
target_arch = "aarch64",
3029
target_arch = "riscv64"
3130
)))]
31+
use linux_raw_sys::general::{__NR_recv, __NR_send};
32+
use linux_raw_sys::general::{sockaddr, sockaddr_in, sockaddr_in6, sockaddr_un, socklen_t};
33+
#[cfg(target_arch = "x86")]
3234
use {
33-
super::super::arch::choose::syscall4_readonly,
34-
linux_raw_sys::general::{__NR_recv, __NR_send},
35+
super::super::arch::choose::syscall2,
36+
super::super::conv::slice_just_addr,
37+
super::super::conv::x86_sys,
38+
super::super::reg::{ArgReg, SocketArg},
39+
linux_raw_sys::general::{
40+
__NR_socketcall, SYS_ACCEPT, SYS_ACCEPT4, SYS_BIND, SYS_CONNECT, SYS_GETPEERNAME,
41+
SYS_GETSOCKNAME, SYS_GETSOCKOPT, SYS_LISTEN, SYS_RECV, SYS_RECVFROM, SYS_SEND, SYS_SENDTO,
42+
SYS_SETSOCKOPT, SYS_SHUTDOWN, SYS_SOCKET, SYS_SOCKETPAIR,
43+
},
3544
};
3645
#[cfg(not(target_arch = "x86"))]
3746
use {
3847
super::super::arch::choose::{
39-
syscall3, syscall3_readonly, syscall4, syscall5, syscall5_readonly, syscall6,
40-
syscall6_readonly,
48+
syscall3, syscall3_readonly, syscall4, syscall4_readonly, syscall5, syscall5_readonly,
49+
syscall6, syscall6_readonly,
4150
},
4251
linux_raw_sys::general::{
4352
__NR_accept, __NR_accept4, __NR_bind, __NR_connect, __NR_getpeername, __NR_getsockname,
4453
__NR_getsockopt, __NR_listen, __NR_recvfrom, __NR_sendto, __NR_setsockopt, __NR_shutdown,
4554
__NR_socket, __NR_socketpair,
4655
},
4756
};
48-
#[cfg(target_arch = "x86")]
49-
use {
50-
super::super::conv::slice_just_addr,
51-
super::super::conv::x86_sys,
52-
super::super::reg::{ArgReg, SocketArg},
53-
linux_raw_sys::general::{
54-
__NR_socketcall, SYS_ACCEPT, SYS_ACCEPT4, SYS_BIND, SYS_CONNECT, SYS_GETPEERNAME,
55-
SYS_GETSOCKNAME, SYS_GETSOCKOPT, SYS_LISTEN, SYS_RECV, SYS_RECVFROM, SYS_SEND, SYS_SENDTO,
56-
SYS_SETSOCKOPT, SYS_SHUTDOWN, SYS_SOCKET, SYS_SOCKETPAIR,
57-
},
58-
};
5957

6058
#[inline]
6159
pub(crate) fn socket(
@@ -162,12 +160,17 @@ pub(crate) fn socketpair(
162160
pub(crate) fn accept(fd: BorrowedFd<'_>) -> io::Result<OwnedFd> {
163161
#[cfg(not(target_arch = "x86"))]
164162
unsafe {
165-
let fd = ret_owned_fd(syscall3(nr(__NR_accept), borrowed_fd(fd), zero(), zero()))?;
163+
let fd = ret_owned_fd(syscall3_readonly(
164+
nr(__NR_accept),
165+
borrowed_fd(fd),
166+
zero(),
167+
zero(),
168+
))?;
166169
Ok(fd)
167170
}
168171
#[cfg(target_arch = "x86")]
169172
unsafe {
170-
let fd = ret_owned_fd(syscall2(
173+
let fd = ret_owned_fd(syscall2_readonly(
171174
nr(__NR_socketcall),
172175
x86_sys(SYS_ACCEPT),
173176
slice_just_addr::<ArgReg<SocketArg>, _>(&[borrowed_fd(fd), zero(), zero()]),
@@ -180,7 +183,7 @@ pub(crate) fn accept(fd: BorrowedFd<'_>) -> io::Result<OwnedFd> {
180183
pub(crate) fn accept_with(fd: BorrowedFd<'_>, flags: AcceptFlags) -> io::Result<OwnedFd> {
181184
#[cfg(not(target_arch = "x86"))]
182185
unsafe {
183-
let fd = ret_owned_fd(syscall4(
186+
let fd = ret_owned_fd(syscall4_readonly(
184187
nr(__NR_accept4),
185188
borrowed_fd(fd),
186189
zero(),
@@ -191,7 +194,7 @@ pub(crate) fn accept_with(fd: BorrowedFd<'_>, flags: AcceptFlags) -> io::Result<
191194
}
192195
#[cfg(target_arch = "x86")]
193196
unsafe {
194-
let fd = ret_owned_fd(syscall2(
197+
let fd = ret_owned_fd(syscall2_readonly(
195198
nr(__NR_socketcall),
196199
x86_sys(SYS_ACCEPT4),
197200
slice_just_addr::<ArgReg<SocketArg>, _>(&[
@@ -288,7 +291,7 @@ pub(crate) fn acceptfrom_with(
288291
pub(crate) fn shutdown(fd: BorrowedFd<'_>, how: Shutdown) -> io::Result<()> {
289292
#[cfg(not(target_arch = "x86"))]
290293
unsafe {
291-
ret(syscall2(
294+
ret(syscall2_readonly(
292295
nr(__NR_shutdown),
293296
borrowed_fd(fd),
294297
c_uint(how as c::c_uint),

src/imp/linux_raw/process/syscalls.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ pub(crate) fn sched_getaffinity(pid: Option<Pid>, cpuset: &mut RawCpuSet) -> io:
200200
#[inline]
201201
pub(crate) fn sched_setaffinity(pid: Option<Pid>, cpuset: &RawCpuSet) -> io::Result<()> {
202202
unsafe {
203-
ret(syscall3(
203+
ret(syscall3_readonly(
204204
nr(__NR_sched_setaffinity),
205205
c_uint(Pid::as_raw(pid)),
206206
size_of::<RawCpuSet, _>(),

src/imp/linux_raw/syscalls.rs

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ pub(crate) use super::thread::syscalls::*;
2323
pub(crate) use super::time::syscalls::*;
2424

2525
use super::arch::choose::{
26-
syscall1, syscall1_noreturn, syscall2, syscall3_readonly, syscall5_readonly,
26+
syscall1_noreturn, syscall1_readonly, syscall2_readonly, syscall3_readonly, syscall5_readonly,
2727
};
2828
use super::c;
2929
use super::conv::{
@@ -104,19 +104,19 @@ pub(crate) mod tls {
104104
#[cfg(target_arch = "x86")]
105105
#[inline]
106106
pub(crate) unsafe fn set_thread_area(u_info: &mut UserDesc) -> io::Result<()> {
107-
ret(syscall1(nr(__NR_set_thread_area), by_mut(u_info)))
107+
ret(syscall1_readonly(nr(__NR_set_thread_area), by_mut(u_info)))
108108
}
109109

110110
#[cfg(target_arch = "arm")]
111111
#[inline]
112112
pub(crate) unsafe fn arm_set_tls(data: *mut c::c_void) -> io::Result<()> {
113-
ret(syscall1(nr(__ARM_NR_set_tls), void_star(data)))
113+
ret(syscall1_readonly(nr(__ARM_NR_set_tls), void_star(data)))
114114
}
115115

116116
#[cfg(target_arch = "x86_64")]
117117
#[inline]
118118
pub(crate) unsafe fn set_fs(data: *mut c::c_void) {
119-
ret_infallible(syscall2(
119+
ret_infallible(syscall2_readonly(
120120
nr(__NR_arch_prctl),
121121
c_uint(ARCH_SET_FS),
122122
void_star(data),
@@ -125,15 +125,20 @@ pub(crate) mod tls {
125125

126126
#[inline]
127127
pub(crate) unsafe fn set_tid_address(data: *mut c::c_void) -> Pid {
128-
let tid: i32 = ret_usize_infallible(syscall1(nr(__NR_set_tid_address), void_star(data)))
129-
as __kernel_pid_t;
128+
let tid: i32 =
129+
ret_usize_infallible(syscall1_readonly(nr(__NR_set_tid_address), void_star(data)))
130+
as __kernel_pid_t;
130131
debug_assert_ne!(tid, 0);
131132
Pid::from_raw_nonzero(RawNonZeroPid::new_unchecked(tid as u32))
132133
}
133134

134135
#[inline]
135136
pub(crate) unsafe fn set_thread_name(name: &ZStr) -> io::Result<()> {
136-
ret(syscall2(nr(__NR_prctl), c_uint(PR_SET_NAME), c_str(name)))
137+
ret(syscall2_readonly(
138+
nr(__NR_prctl),
139+
c_uint(PR_SET_NAME),
140+
c_str(name),
141+
))
137142
}
138143

139144
#[inline]

0 commit comments

Comments
 (0)