Commit Graph

327 Commits

Author SHA1 Message Date
Red Bear OS b187b31d1a fix: add missing ENOPROTOOPT import in redox socket platform layer 2026-07-09 15:11:09 +03:00
Red Bear OS 8d52695af2 relibc: fix disguised socket stubs — listen + setsockopt
Fixed two critical disguised stubs found by comprehensive audit:

1. listen(): updated misleading 'Redox has no need to listen'
   comment. TCP sockets enter LISTEN state during bind() via
   smoltcp's tcp_handle.listen(), making POSIX listen() a no-op.
   The backlog is handled internally via scheme event mechanism.

2. setsockopt(): changed fallthrough from Ok(()) (silent success
   for unknown socket options) to Err(ENOPROTOOPT). Previously
   applications calling setsockopt with SO_REUSEADDR, SO_KEEPALIVE,
   TCP_NODELAY would get success but the option was silently ignored.
   Now returns the POSIX-correct error for unsupported options.
2026-07-09 15:05:47 +03:00
Red Bear OS 74367d1542 relibc: fix redox feature compile errors 2026-07-09 13:08:39 +03:00
Red Bear OS fa792c6231 relibc: implement setitimer() using POSIX timer_create/timer_settime
Replaced ENOSYS stub with real implementation for ITIMER_REAL.

Uses timer_create(CLOCK_MONOTONIC, SIGEV_SIGNAL, SIGALRM) followed
by timer_settime to set the interval timer. ITIMER_VIRTUAL and
ITIMER_PROF still return ENOSYS (need per-process CPU time
accounting which Red Bear does not implement).

Cross-referenced with Linux 7.1 kernel/time/itimer.c which
implements setitimer via do_setitimer → hrtimer.

This fixes ualarm() and any legacy code that still uses setitimer(2).
2026-07-09 12:21:52 +03:00
Red Bear OS c1cad7f95f relibc: implement mremap() via munmap+mmap+memcpy
Replaced ENOSYS stub with real implementation using
syscall::funmap + syscall::fmap + copy_nonoverlapping.

Algorithm (cross-referenced with Linux 7.1 mm/mremap.c):
1. Same size → no-op
2. Smaller (shrink) → funmap excess pages
3. Larger with MREMAP_MAYMOVE → allocate new anonymous mapping,
   copy old data, funmap old mapping
4. Larger without MREMAP_MAYMOVE → ENOMEM (can't grow in place)

This fixes realloc() for large allocations that use mremap
via the platform allocator (platform/allocator/sys.rs).
2026-07-09 12:20:12 +03:00
Red Bear OS 21c3e96b1d relibc: implement clock_settime() via /scheme/time
Replaced ENOSYS stub with real implementation: opens
/scheme/time/{clk_id} for writing and writes the timespec.
Cross-referenced with Linux 7.1 kernel/time/posix-clock.c
pc_clock_settime().

The kernel's /scheme/time scheme supports write() for both
CLOCK_REALTIME and CLOCK_MONOTONIC. Writing a TimeSpec sets
the clock value. Returns EIO if fewer bytes written than
expected.
2026-07-09 11:50:45 +03:00
Red Bear OS 9eacf8efc4 pal: add syncfs to Pal trait (default calls fsync) 2026-07-09 11:36:25 +03:00
Red Bear OS b0e4502b6e relibc: add syncfs() syscall binding
Added syncfs(fd) which calls fsync(fd) — equivalent on Red Bear
since all filesystem I/O is synchronous. Cross-referenced with
Linux 7.1 fs/sync.c.
2026-07-09 11:25:05 +03:00
Red Bear OS 6c56264396 fix(socket): avoid casts in match patterns for IPPROTO_IP/IPPROTO_IPV6 2026-07-08 19:39:11 +03:00
Red Bear OS 93afedade5 relibc: extend getsockopt to handle IPPROTO_IP and IPPROTO_IPV6
Previously only SOL_SOCKET and IPPROTO_TCP levels were handled by
the socket scheme. Now IPPROTO_IP and IPPROTO_IPV6 levels also
forward to the socket scheme via SocketCall::GetSockOpt, removing
the ENOSYS fallthrough for these common socket option levels.

Cross-referenced with Linux 7.1 net/ipv4/ip_sockglue.c and
net/ipv6/ipv6_sockglue.c which implement IP/UDP/ICMP level
getsockopt handlers.
2026-07-08 19:24:43 +03:00
Red Bear OS 5638058b48 relibc: fix setgroups and unused ENOSYS import 2026-07-08 18:45:05 +03:00
Red Bear OS 5c8fe1c51a relibc: implement setgroups() via kernel proc Groups handle
Opens /scheme/sys/proc/{pid}/groups for writing, converts
the gid_t array to little-endian u32 bytes, and writes to the
procfs handle. The kernel's Groups writer (proc.rs:1600) reads
the bytes and updates the context's groups list.

Cross-referenced with Linux 7.1 kernel/groups.c setgroups().

Validation:
- size=0, list=NULL: clear all groups (per Linux man page)
- size>0, list=NULL: return EFAULT
- size>NGROUPS_MAX: return EINVAL
- File open/write errors: return EIO/EACCES
2026-07-08 18:40:06 +03:00
Red Bear OS e90086dc67 relibc: implement gtty() and inet_aton() hex/octal parsing
gtty(): set errno=ENOTTY instead of silently logging TODO. The
function always fails on Red Bear (no terminal ioctl subsystem).
Modern equivalent is tcgetattr(3) in <termios.h>.

inet_aton(): implement 0xNN (hex) and 0NN (octal) parsing per
Linux man-page inet_aton(3) convention. Mixed hex/octal/decimal
parts are normalized to decimal and fed to inet_pton. Previous
behavior logged TODO and returned 0 for any non-decimal part.
2026-07-08 18:30:51 +03:00
Red Bear OS 01807f6fa7 relibc: implement madvise() — remove ENOSYS stub
Replaced ENOSYS stub with proper POSIX madvise() implementation
cross-referenced from Linux 7.1 mm/madvise.c.

Flag validation: MADV_NORMAL, RANDOM, SEQUENTIAL, WILLNEED, DONTNEED.
Address must be page-aligned. Unknown flags → EINVAL.

Red Bear has no page cache, swap, or lazy allocation. All MADV_*
flags are no-ops: the hints are advisory and the kernel is free to
ignore them. MADV_DONTNEED would need page table teardown support
which is not implemented.
2026-07-08 18:00:15 +03:00
Red Bear OS fc158b3611 relibc: implement msync() — remove ENOSYS stub
Replaced ENOSYS stub with proper POSIX msync() implementation
cross-referenced from Linux 7.1 mm/msync.c:42-55.

Flag validation: MS_ASYNC|MS_INVALIDATE|MS_SYNC, rejects unknown
flags and MS_ASYNC|MS_SYNC combination. Address page-aligned check.
Length rounded to page boundary with overflow check.

Red Bear filesystem I/O is synchronous (no writeback cache).
MS_SYNC/MS_ASYNC are no-ops. MS_INVALIDATE not implemented (needs
kernel cache invalidation), but stale cache is not a concern
with direct filesystem reads.
2026-07-08 17:58:47 +03:00
Red Bear OS c1e4c1d53d relibc: use /scheme/proc/{pid}/ctx for ptrace GETREGS/SETREGS 2026-07-08 17:58:11 +03:00
vasilito 4ef7e57571 0.3.0: converge relibc to upstream 0.6.0 + Red Bear patches 2026-07-06 19:13:57 +03:00
Jeremy Soller 5ae7b7efe7 Use new semaphore to prevent spinning 2020-12-23 12:20:19 -07:00
Mateusz Tabaka 79643c293b Fix formatiing issues 2020-09-30 11:40:38 +02:00
Jeremy Soller 36bb60cacc Do not unmap stack while it is being used, add a comment to fix it later 2020-09-09 18:49:44 -06:00
Jeremy Soller 5af8e3ca35 Merge branch 'bump-fmap' into 'master'
Use renamed fmap call

See merge request redox-os/relibc!305
2020-08-17 12:36:11 +00:00
jD91mZM2 e33aea434f Use renamed fmap call 2020-08-17 13:57:39 +02:00
jD91mZM2 eaee4e6329 Emulate brk 2020-08-15 18:44:22 +02:00
jD91mZM2 6952a079ae Fix CI 2020-08-07 14:16:45 +00:00
Jeremy Soller 5d45042d5d Correct more asm! usages 2020-08-02 13:38:29 -06:00
Jeremy Soller f2c2d7c52e Fix compilation on newer nightly, update nightly to 2020-08-01 2020-08-02 12:24:49 -06:00
jD91mZM2 4c148c1860 Make munmap use funmap2 2020-07-30 13:39:20 +02:00
4lDO2 a5e02650d7 Remove ptrace write call. 2020-07-25 22:30:38 +02:00
4lDO2 e38d185870 Use fmap2 to support passing an address. 2020-07-25 22:30:38 +02:00
Jeremy Soller d6b03de7a4 Align stack to 128 bytes 2020-07-19 21:04:16 -06:00
oddcoder 37a462de5d Apply cargo fmt to the whole repo 2020-07-19 21:27:38 +02:00
oddcoder f4f68a3441 Make use of mspaces 2020-07-18 21:03:46 +02:00
oddcoder 3a8817072c Initialize the mspaces of allocator and keep track of it 2020-07-18 21:03:20 +02:00
oddcoder 9a1efda121 Initial allocator structure 2020-07-18 20:54:30 +02:00
Wren Turkal 865b7962a1 Add implmentation for fwide posix function.
This function is used to set the orientation of a stream to either
byte-oriented or wchar-oriented.

More info on this function is here:
https://man7.org/linux/man-pages/man3/fwide.3p.html

This implementation only impmlemnts the manual switching and does
not yet guard against using a byte-oriented stream with wchar
functions and vice versa. Those step will come in additional
commits.

Signed-off-by: Wren Turkal <wt@penguintechs.org>
2020-07-08 14:33:06 -07:00
jD91mZM2 56e1eceb28 Replace AllocStringWriter with CVec 2020-06-29 17:44:57 +02:00
jD91mZM2 39ce623d2d Fix bind/connect's AF_UNIX socket path... again
I don't really know for sure what all these silly rules are, but I think
I got it now...
2020-06-29 11:36:07 +02:00
jD91mZM2 f8b49936bc Various unix socket fixes (+socketpair!) 2020-06-27 16:39:50 +02:00
jD91mZM2 cdc9aa06e3 Fix getpeername
Rust's TcpListener fails because of the address format being wrong. The format
comes from `accept`, but there we internally use this function.
2020-06-19 13:56:06 +02:00
oddcoder 92d6735e3f Add more scanf tests 2020-06-03 23:20:53 +02:00
Jeremy Soller a6fffd3fb5 Add getrandom and sys/random.h 2020-05-22 11:50:54 -06:00
Jeremy Soller 2cf3ccae72 Fix import of user_regs_struct 2020-05-21 20:01:47 -06:00
Jeremy Soller 06429ccc4c Fix redox socket inner_get_name 2020-05-21 14:59:22 -06:00
oddcoder de03566158 Enable RTLD debugging protocol system-wide
This patch makes use of the data structures and functions impelemented
in the last patch to enable RTLD debugging protocol as per SVR4
2020-04-13 12:39:51 +02:00
Jeremy Soller 6ed37efaeb Merge branch 'weak-symbols' into 'master'
Weak symbols

See merge request redox-os/relibc!260
2020-03-19 17:56:22 +00:00
Jeremy Soller 2e27cf525e Work on adding cargo test capability 2020-03-10 20:57:07 -06:00
oddcoder c2488b5094 Running ./fmt.sh
These files needs formating by the auto formatter and It keeps popping
up every time I format my own code.
2020-03-07 23:52:27 +02:00
Tiago Lam 76f07b163b platform/redox: Support AF_UNIX in accept.
As with the previous commit, accept() was calling inner_get_name() and
assuming only "tcp:" or "udp:" addresses would be received. Thus, in
order to support AF_UNIX sockets, inner_get_name() was split into two,
inner_af_inet() and inner_af_unix() - where the former keeps the
previous logic, dealing with "tcp:" and "udp:" addresses, and the latter
deals now with "chan:" addresses and filling in the sockaddr_un
appropriately.
2020-02-06 08:41:51 +00:00
Tiago Lam d36cd72788 platform/redox: Support AF_UNIX in bind / connect.
Previously, domain AF_INET was assumed while processing bind() /
connect(), which end up calling bind_or_connect!. Instead, match on the
domain type and process the path for AF_UNIX domains.
2020-02-06 08:41:48 +00:00
Tiago Lam 12f6ffd152 platform/redox: Support AF_UNIX in socket.
To add support for UNIX sockets (AF_UNIX), of SOCK_STREAM type, the
"chan:" scheme is used, which will be supportedby the ipcd running in
userspace.

Later commits add similar AF_UNIX support for the rest of the methods in
impl PalSocket.
2020-02-06 08:21:12 +00:00