]> xenbits.xensource.com Git - unikraft/unikraft.git/log
unikraft/unikraft.git
2 weeks agolib/syscall_shim: Add `uk_syscall_do_` syms for execenv registrations
Sergiu Moga [Mon, 24 Mar 2025 09:03:56 +0000 (11:03 +0200)]
lib/syscall_shim: Add `uk_syscall_do_` syms for execenv registrations

Because of the unnecessary conditional during syscall symbols
generation, execenv syscall registrations would not benefit from
having their `uk_syscall_do_` symbol generated automatically.
Fix this by removing this conditional.

Signed-off-by: Sergiu Moga <sergiu@unikraft.io>
Approved-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1618

2 weeks agolib/posix-process: Register `execve` using non-LL variant
Sergiu Moga [Wed, 19 Mar 2025 15:15:00 +0000 (17:15 +0200)]
lib/posix-process: Register `execve` using non-LL variant

Use the non-LL variant of execenv-based syscall registration for
execenv so that we will automatically have a corresponding libc
wrapper defined.

Signed-off-by: Sergiu Moga <sergiu@unikraft.io>
Approved-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1618

2 weeks agolib/syscall_shim: Remove unnecessary `__used` from execenv variants
Sergiu Moga [Wed, 19 Mar 2025 15:14:10 +0000 (17:14 +0200)]
lib/syscall_shim: Remove unnecessary `__used` from execenv variants

The `__used` attribute in not necessary as we are fine with any of
these potentially being optimised away.

Signed-off-by: Sergiu Moga <sergiu@unikraft.io>
Approved-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1618

2 weeks agolib/syscall_shim: Add non-LL execenv syscall registration variant
Sergiu Moga [Wed, 19 Mar 2025 15:11:28 +0000 (17:11 +0200)]
lib/syscall_shim: Add non-LL execenv syscall registration variant

Based on UK_LLSYSCALL_R_E_DEFINE and provides a libc-style wrapper
in case UK_LIBC_SYSCALLS is enabled.

(Similar to its UK_SYSCALL_R_DEFINE, non-execenv variants)

Checkpatch-Ignore: MACRO_ARG_REUSE
Checkpatch-Ignore: COMPLEX_MACRO
Checkpatch-Ignore: SPACING
Signed-off-by: Sergiu Moga <sergiu@unikraft.io>
Approved-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1618

2 weeks agolib/syscall_shim/arch/x86_64: Save proper rsp in execenv prologue
Sergiu Moga [Wed, 19 Mar 2025 14:31:50 +0000 (16:31 +0200)]
lib/syscall_shim/arch/x86_64: Save proper rsp in execenv prologue

In the execenv prologue meant for native builds we try to mimic the
context save/restore that would happen following a syscall instruction
but in the case of a direct call instruction. This means that the rsp
on entry is actually 8 bytes less than the rsp we are supposed to show
to actual users of this execenv. To cope with this, after pushing the
original rsp do an addition of 8 so that children (e.g. vfork) that may
inherit this context have the proper rsp. Lastly, because of this, upon
exiting the execenv assembly wrapper we must ensure that the context
whose execenv we store/restore is using the proper rsp as well by
undoing aforementioned addition, since it actually returns like a normal
function through ret.

This bug hasn't been caught before because we've only been using this
in the context of the clone syscall for native builds. Unlike vfork,
in the case of clone, the children typically begin execution with a
brand new stack instead of reusing and mimicking that of the parent.

Signed-off-by: Sergiu Moga <sergiu@unikraft.io>
Approved-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1618

2 weeks agolib/syscall_shim: Use global scope inline asm for execenv prologue
Sergiu Moga [Mon, 10 Mar 2025 16:24:54 +0000 (18:24 +0200)]
lib/syscall_shim: Use global scope inline asm for execenv prologue

Avoid having to use weird and unconventional function attributes by
writing the inline assembly in a global scope. This is especially
useful for ARM64 as it does not support the naked attribute on GCC.

Signed-off-by: Sergiu Moga <sergiu@unikraft.io>
Approved-by: Andrei Tatar <andrei@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
Reviewed-by: Michalis Pappas <michalis@unikraft.io>
GitHub-Closes: #1598

5 weeks agolib/posix-fd: Move heap-alloc ofiles out of fdtab
Andrei Tatar [Tue, 18 Mar 2025 16:55:34 +0000 (17:55 +0100)]
lib/posix-fd: Move heap-alloc ofiles out of fdtab

This change moves the responsibility for allocating, managing the
lifetime of, and freeing heap-allocated open file descriptions out of
individual fdtab instances and into the main posix-fd API.
This allows libraries to create kernel-wide dynamic open file
descriptions independent of an fdtab.

Signed-off-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
GitHub-Closes: #1602

5 weeks agolib/posix-fdio: Fix missing error in fcntl(GETFD)
Andrei Tatar [Tue, 18 Mar 2025 16:48:20 +0000 (17:48 +0100)]
lib/posix-fdio: Fix missing error in fcntl(GETFD)

This change fixes a bug where fcntl(F_GETFD) would swallow error codes
from uk_fdtab_getflags and not return them up the callstack.

Signed-off-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
GitHub-Closes: #1602

5 weeks agolib/posix-fdio: Fix lseek relative from file end
Andrei Tatar [Tue, 18 Mar 2025 16:43:38 +0000 (17:43 +0100)]
lib/posix-fdio: Fix lseek relative from file end

This change fixes a bug in lseek where the file cursor was always set to
the end of file on SEEK_END, ignoring any passed-in offset.

Signed-off-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
GitHub-Closes: #1602

5 weeks agolib/posix-fdio: Fix lseek error on readonly files
Andrei Tatar [Tue, 18 Mar 2025 16:37:54 +0000 (17:37 +0100)]
lib/posix-fdio: Fix lseek error on readonly files

Previously lseek would wrongly fail when seeking a read-only-opened
file due to a logic error. This change fixes this oversight.

Signed-off-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
GitHub-Closes: #1602

5 weeks agolib/posix-pipe: Add pipe stat support
Andrei Tatar [Wed, 19 Mar 2025 12:37:23 +0000 (13:37 +0100)]
lib/posix-pipe: Add pipe stat support

This change implements a real getstat operation for pipes, returning
basic information about an open pipe.

Signed-off-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
GitHub-Closes: #1603

5 weeks agolib/posix-process: Make header definitions conditional to PIDS
Michalis Pappas [Tue, 18 Mar 2025 10:16:59 +0000 (11:16 +0100)]
lib/posix-process: Make header definitions conditional to PIDS

Make definitions in private process.h conditional to
CONFIG_LIBPOSIX_PROCESS_PIDS to prevent compile errors if that header
is if that header is included by files compiled unconditionally to
CONFIG_LIBPOSIX_PROCESS_PIDS.

Signed-off-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Ioan-Teodor Teugea <ioan_teodor.teugea@stud.acs.upb.ro>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1248

5 weeks agolib/posix-process: Resolve warning about struct clone_args
Michalis Pappas [Mon, 17 Feb 2025 13:11:31 +0000 (14:11 +0100)]
lib/posix-process: Resolve warning about struct clone_args

Include the kernel version of sched.h to resolve a missing
definition compiler warning on `struct clone_args`

Signed-off-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Ioan-Teodor Teugea <ioan_teodor.teugea@stud.acs.upb.ro>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1248

5 weeks agolib/uksignal: Retire libuksignal
Michalis Pappas [Fri, 26 Jan 2024 02:58:05 +0000 (03:58 +0100)]
lib/uksignal: Retire libuksignal

Retire libuksignal in favor of the new implementation introduced
in libposix-process. Stubs of equivalent functionality previously
provided in libuksignal are still available in libposix-process,
when CONFIG_POSIX_PROCESS_SIGNAL is not selected.

Signed-off-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Ioan-Teodor Teugea <ioan_teodor.teugea@stud.acs.upb.ro>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1248

5 weeks agolib/posix-process/signals: Add libc wrappers for POSIX sigsetops
Michalis Pappas [Mon, 24 Mar 2025 05:11:27 +0000 (06:11 +0100)]
lib/posix-process/signals: Add libc wrappers for POSIX sigsetops

Add libc wrappers for signal set operations. For more info
see sigsetops(3).

Signed-off-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Ioan-Teodor Teugea <ioan_teodor.teugea@stud.acs.upb.ro>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1248

5 weeks agolib/posix-process/signal: Add stub for alarm()
Michalis Pappas [Tue, 19 Mar 2024 10:56:30 +0000 (11:56 +0100)]
lib/posix-process/signal: Add stub for alarm()

Add stub for alarm() to get on par with libuksignal.

Signed-off-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Ioan-Teodor Teugea <ioan_teodor.teugea@stud.acs.upb.ro>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1248

5 weeks agolib/posix-process/signal: Add rt_sigtimedwait()
Michalis Pappas [Fri, 26 Jan 2024 02:53:09 +0000 (03:53 +0100)]
lib/posix-process/signal: Add rt_sigtimedwait()

rt_sigtimedwait() suspends the execution of the calling thread until a
signal in a caller-provided mask is pending, or a caller provided
timeout is reached. For more info see sigwaitinfo(2)

Signed-off-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Ioan-Teodor Teugea <ioan_teodor.teugea@stud.acs.upb.ro>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1248

5 weeks agolib/posix-process/signal: Add sigsuspend()
Michalis Pappas [Tue, 16 Jan 2024 11:49:36 +0000 (12:49 +0100)]
lib/posix-process/signal: Add sigsuspend()

sigsuspend() temporarily replaces the signal mask of the current
thread and suspends its execution until a signal is delivered.
For more info see sigsuspend(2)

Signed-off-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Ioan-Teodor Teugea <ioan_teodor.teugea@stud.acs.upb.ro>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1248

5 weeks agolib/posix-process/signal: Add pause()
Michalis Pappas [Mon, 15 Jan 2024 06:13:31 +0000 (07:13 +0100)]
lib/posix-process/signal: Add pause()

pause() causes the calling thread to sleep until
a signal is delivered. For more info see pause(2)

Signed-off-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Ioan-Teodor Teugea <ioan_teodor.teugea@stud.acs.upb.ro>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1248

5 weeks agolib/posix-process/signal: Add signal delivery
Michalis Pappas [Wed, 3 Jan 2024 11:36:37 +0000 (12:36 +0100)]
lib/posix-process/signal: Add signal delivery

Implement signal delivery. Signals are delivered at syscall exit
by registering a handler to the syscall shim. The same handler
could be potentially register a handler to a preemptive scheduler's
context switch.

Notable differences from Linux:
- The Core disposition falls back to Term, as we don't support
  application core dumps.
- The Stop and Cont dispositions are ignored, as these are normally
  relevant to shells.

Checkpatch-Ignore: LONG_LINE
Signed-off-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Ioan-Teodor Teugea <ioan_teodor.teugea@stud.acs.upb.ro>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1248

5 weeks agolib/posix-process/signal: Add clone handler for signals
Michalis Pappas [Wed, 3 Jan 2024 11:18:38 +0000 (12:18 +0100)]
lib/posix-process/signal: Add clone handler for signals

Migrate the clone handler into posix-process/signals.
Implement inheritance of signal handlers.

For more info see CLONE(2)

Checkpatch-Ignore: LONG_LINE
Signed-off-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Ioan-Teodor Teugea <ioan_teodor.teugea@stud.acs.upb.ro>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1248

5 weeks agolib/posix-process/signal: Add kill() and sigqueueinfo()
Michalis Pappas [Sun, 7 Jan 2024 10:56:16 +0000 (11:56 +0100)]
lib/posix-process/signal: Add kill() and sigqueueinfo()

Add syscalls for signalling. Internally these share common
abstractions.

The kill syscalls are used for sending signals to processes,
process groups, or threads:

* kill() allows sending a signal to a process group or process.
* tkill() allows sending a signal to a thread.
* tgkill() allows sending a signal to a thread in thread
  group.

The siqeueueinfo syscalls are similar to kill but additionally
allow to accompany the signal with data:

* rt_sigqueueinfo() allows sending signal and data to a process.
* rt_tgsigqueueinfo() allows sending signal and data to a thread
  in thread group.

For more info see kill(2), tkill(2), rt_sigqueueinfo(2)

Signed-off-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Ioan-Teodor Teugea <ioan_teodor.teugea@stud.acs.upb.ro>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1248

5 weeks agolib/posix-process/signal: Add rt_sigpending()
Michalis Pappas [Wed, 3 Jan 2024 11:48:30 +0000 (12:48 +0100)]
lib/posix-process/signal: Add rt_sigpending()

rt_sigpending() allows to examine any pending signals.
For more info see sigpending(2)

Signed-off-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Ioan-Teodor Teugea <ioan_teodor.teugea@stud.acs.upb.ro>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1248

5 weeks agolib/posix-process/signal: Add sigaltstack()
Michalis Pappas [Tue, 2 Jan 2024 17:53:21 +0000 (18:53 +0100)]
lib/posix-process/signal: Add sigaltstack()

sigaltstack() allows setting or retrieving an alternative
signal stack context. For more info see sigaltstack(2)

Signed-off-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Ioan-Teodor Teugea <ioan_teodor.teugea@stud.acs.upb.ro>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1248

5 weeks agolib/posix-process/signal: Add rt_sigaction()
Michalis Pappas [Tue, 18 Mar 2025 08:50:39 +0000 (09:50 +0100)]
lib/posix-process/signal: Add rt_sigaction()

rt_sigaction() allows examining and changing a signal action.
For more info see sigaction(2)

Signed-off-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Ioan-Teodor Teugea <ioan_teodor.teugea@stud.acs.upb.ro>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1248

5 weeks agolib/posix-process/signal: Add rt_sigprocmask()
Michalis Pappas [Tue, 18 Mar 2025 08:49:28 +0000 (09:49 +0100)]
lib/posix-process/signal: Add rt_sigprocmask()

rt_sigprocmask() allows examining and changing blocked signals.
For more info see sigprocmask(2).

Signed-off-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Ioan-Teodor Teugea <ioan_teodor.teugea@stud.acs.upb.ro>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1248

5 weeks agolib/posix-process/signal: Add default signal actions
Michalis Pappas [Fri, 29 Dec 2023 12:37:21 +0000 (13:37 +0100)]
lib/posix-process/signal: Add default signal actions

Add per-architecture default signal actions. These happen to be the
same for arm64 and x86_64, yet it's best to define them in separate
headers for forwards compatibility with future architectures.

Signed-off-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Ioan-Teodor Teugea <ioan_teodor.teugea@stud.acs.upb.ro>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1248

5 weeks agolib/posix-process/signal: Add signal descriptors and primitives
Michalis Pappas [Sun, 7 Jan 2024 15:50:12 +0000 (16:50 +0100)]
lib/posix-process/signal: Add signal descriptors and primitives

Introduce signal descriptors into `struct posix_process` and
`struct posix_thread`. Introduce primitives for various signal
operations such as initialization, allocation, and queueing.

Initialize signal descriptors upon creating a new process or
a thread.

Checkpatch-Ignore: LONG_LINE
Checkpatch-Ignore: MACRO_ARG_REUSE
Checkpatch-Ignore: SPACING
Signed-off-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Ioan-Teodor Teugea <ioan_teodor.teugea@stud.acs.upb.ro>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1248

5 weeks agolib/posix-process: Add config option for POSIX signals
Michalis Pappas [Thu, 28 Dec 2023 09:57:35 +0000 (10:57 +0100)]
lib/posix-process: Add config option for POSIX signals

Add CONFIG_LIBPOSIX_PROCESS_SIGNALS to enable POSIX signals.
If that option is not enabled, the implementation will fall
back to stubs.

Signed-off-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Ioan-Teodor Teugea <ioan_teodor.teugea@stud.acs.upb.ro>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1248

5 weeks agolib/posix-process: Fix formatting of Config.uk
Michalis Pappas [Thu, 28 Dec 2023 09:55:29 +0000 (10:55 +0100)]
lib/posix-process: Fix formatting of Config.uk

Update the indentation of Config.uk to adhere to Unikraft's coding
conventions. Remove `default n` items being redundant as `bool`
symbols default to `n`.

Signed-off-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Ioan-Teodor Teugea <ioan_teodor.teugea@stud.acs.upb.ro>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1248

5 weeks agolib/posix-process: Add helpers for current process and thread
Michalis Pappas [Mon, 13 Nov 2023 18:21:12 +0000 (19:21 +0100)]
lib/posix-process: Add helpers for current process and thread

Add uk_pprocess_current() uk_pthread_current() helpers. For now
these are part of the private API.

Checkpatch-Ignore: GLOBAL_INITIALISERS
Signed-off-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Ioan-Teodor Teugea <ioan_teodor.teugea@stud.acs.upb.ro>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1248

5 weeks agolib/posix-process: Add process table
Michalis Pappas [Thu, 4 Jan 2024 09:57:08 +0000 (10:57 +0100)]
lib/posix-process: Add process table

Add process table that maps `pid_t` to `struct posix_process`.
Add process lookup function and process & thread iterators.

Checkpatch-Ignore: COMPLEX_MACRO
Checkpatch-Ignore: MACRO_ARG_REUSE
Checkpatch-Ignore: SUSPECT_CODE_INDENT
Signed-off-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Ioan-Teodor Teugea <ioan_teodor.teugea@stud.acs.upb.ro>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1248

5 weeks agolib/posix-process: Use negative errors internally
Michalis Pappas [Tue, 2 Apr 2024 14:57:48 +0000 (16:57 +0200)]
lib/posix-process: Use negative errors internally

Update static functions to encode negative errors in
returned pointers.

Signed-off-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Ioan-Teodor Teugea <ioan_teodor.teugea@stud.acs.upb.ro>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1248

5 weeks agolib/posix-process: Add assertions in ukthread2pid / ukthread2tid
Michalis Pappas [Tue, 2 Apr 2024 11:08:57 +0000 (13:08 +0200)]
lib/posix-process: Add assertions in ukthread2pid / ukthread2tid

Add assertions against passing a NULL pointer parameter in
ukthread2pid / ukthread2tid.

Signed-off-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Ioan-Teodor Teugea <ioan_teodor.teugea@stud.acs.upb.ro>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1248

5 weeks agolib/posix-process/signal: Add kernel definition of sigset_t
Michalis Pappas [Tue, 19 Mar 2024 10:25:43 +0000 (11:25 +0100)]
lib/posix-process/signal: Add kernel definition of sigset_t

POSIX specifies that sigset_t can be defined either as integer
type or a structure type. Add kernel definition of sigset_t to
avoid compilation errors caused by flavors of libc that use the
struct definition.

Signed-off-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Ioan-Teodor Teugea <ioan_teodor.teugea@stud.acs.upb.ro>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1248

5 weeks agolib/posix-process/signal: Fix coding style of sigset.h
Michalis Pappas [Tue, 9 Jan 2024 12:09:18 +0000 (13:09 +0100)]
lib/posix-process/signal: Fix coding style of sigset.h

Fix checkpatch issues, prefix macro args with underscore,
remove conditional definition to HAVE_LIBC, include header
for __sigset type.

Checkpatch-Ignore: MACRO_ARG_REUSE
Signed-off-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Ioan-Teodor Teugea <ioan_teodor.teugea@stud.acs.upb.ro>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1248

5 weeks agolib/posix-process: Fix integer overflow in sigset operations
Michalis Pappas [Tue, 9 Jan 2024 12:03:52 +0000 (13:03 +0100)]
lib/posix-process: Fix integer overflow in sigset operations

Fix an integer overflow caused by missing `UL` suffix on
shifted values that would result into incorrect evaluation
when signal numbers >= SIGRTMIN are passed to paremeters.

Signed-off-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Ioan-Teodor Teugea <ioan_teodor.teugea@stud.acs.upb.ro>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1248

5 weeks agolib/posix-process: Import `sigset.h` from libuksignal
Michalis Pappas [Thu, 28 Dec 2023 11:42:17 +0000 (12:42 +0100)]
lib/posix-process: Import `sigset.h` from libuksignal

Migrate `sigset.h` from libuksignal verbatim.

Signed-off-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Ioan-Teodor Teugea <ioan_teodor.teugea@stud.acs.upb.ro>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1248

2 months agoplat/kvm: Select `HAVE_IBMPC` only on x86_64
Samuel Hym [Mon, 20 Jan 2025 17:40:30 +0000 (18:40 +0100)]
plat/kvm: Select `HAVE_IBMPC` only on x86_64

Without this patch, asking `kraft` to build for QEMU on arm64 with its
default configuration gives a series of warnings such as:

```
WARNING: unmet direct dependencies detected for HAVE_IBMPC_VGA
  Depends on [n]: ARCH_X86_64 [=n]
  Selected by [y]:
  - HAVE_IBMPC [=y]
```

and `HAVE_IBMPC` is set to yes in the generated configuration.

Signed-off-by: Samuel Hym <samuel@tarides.com>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
Approved-by: Michalis Pappas <michalis@unikraft.io>
GitHub-Closes: #1565

2 months agodrivers/ukintctlr: Delete unnecessary `exportsyms.uk`
Sergiu Moga [Thu, 22 Feb 2024 12:41:08 +0000 (14:41 +0200)]
drivers/ukintctlr: Delete unnecessary `exportsyms.uk`

The philosophy is that each driver is meant to individually export
whatever symbols it sees fit. Therefore, delete the unnecessary
`exportsyms.uk` in the root of the interrupt controller drivers
subsystem.

Signed-off-by: Sergiu Moga <sergiu@unikraft.io>
Approved-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Michalis Pappas <michalis@unikraft.io>
GitHub-Closes: #1265

2 months agodrivers: Add `PS/2` subsystem with a dumbed down PS2 keyboard driver
Sergiu Moga [Tue, 16 Jan 2024 20:35:50 +0000 (22:35 +0200)]
drivers: Add `PS/2` subsystem with a dumbed down PS2 keyboard driver

Add a directory to represent what will be in the future the
subsystem for PS/2 controller drivers subsystem.

Implement a basic, dumbed down, driver stub for the PS/2 keyboard.
Write just enough functionality to register an IRQ handler for the
well known default legacy PIC routed PS/2 keyboard IRQ line and be
able to process 3 scan codes received in a burst manner:
CTRL + ALT + DEL

This functionality is bare minimum required to achieve shutdown with
Firecracker's `SendCtrlAltDel` command. It may not work on QEMU and
is obviously not the way the real driver should be implemented.

Additionally, introduce a new invisible config option:
`CONFIG_HAVE_SHUTDOWN_DISPATCHER`
Now, whenever a component implements the functionality of raising a
shutdown event, it must announce it system-wide by selecting this
config. That being said, make the keyboard driver do this.
(In the future, when we will be able to receive actual keystrokes,
we may be able to make this a separate config of the keyboard driver,
besides the actual functionality of processing keystrokes).

Signed-off-by: Sergiu Moga <sergiu@unikraft.io>
Approved-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Michalis Pappas <michalis@unikraft.io>
GitHub-Closes: #1265

2 months agolib/ukboot: Fix `KConfig` styling of `Config.uk`
Sergiu Moga [Mon, 15 Jan 2024 13:20:44 +0000 (15:20 +0200)]
lib/ukboot: Fix `KConfig` styling of `Config.uk`

Maintain consistency among `KConfig` files and align `lib/ukboot`'s
`Config.uk` file's indentation with the others'.

Signed-off-by: Sergiu Moga <sergiu@unikraft.io>
Approved-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Michalis Pappas <michalis@unikraft.io>
GitHub-Closes: #1265

2 months agolib/posix-unixsocket: Fix NULL crash on accept
Andrei Tatar [Wed, 25 Sep 2024 14:23:19 +0000 (16:23 +0200)]
lib/posix-unixsocket: Fix NULL crash on accept

This change fixes a NULL deref when accept() is handed a legal NULL
argument for addr, in which case it should not attempt to output.

Signed-off-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
GitHub-Closes: #1593

2 months agolib/posix-timerfd: Output correct old_value on set
Andrei Tatar [Wed, 22 Jan 2025 22:16:37 +0000 (23:16 +0100)]
lib/posix-timerfd: Output correct old_value on set

Previously settime() would output the old timerfd setting verbatim, as
an absolute deadline; this contradicts timerfd_settime(2) which clearly
states that old_value should be output with the same semantics as
gettime() -- relative time remaining until the next expiration.
This change makes settime() calculate and output this time correctly.

Signed-off-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
GitHub-Closes: #1568

2 months agolib/posix-timerfd: Fix counter on subsequent reads
Andrei Tatar [Wed, 22 Jan 2025 22:26:44 +0000 (23:26 +0100)]
lib/posix-timerfd: Fix counter on subsequent reads

The internal counter of a timerfd is returned on read() and reset to 0,
and should be increased by 1 for every subsequent expiration.
A logic error in the current code makes every update set the counter to
the total expirations rather than since last read, leading to subsequent
successful reads returning wrong counts.
This change fixes this error.

Signed-off-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
GitHub-Closes: #1567

2 months agolib/posix-timerfd: Validate settime argument
Andrei Tatar [Wed, 22 Jan 2025 22:10:22 +0000 (23:10 +0100)]
lib/posix-timerfd: Validate settime argument

This change adds a validation check on the `new_value` argument to
settime(), refusing to work with negative times and non-canonical
timespec values.

Signed-off-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
GitHub-Closes: #1566

2 months agolib/uktimeconv: Add time spec validation inlines
Andrei Tatar [Mon, 24 Feb 2025 14:30:07 +0000 (15:30 +0100)]
lib/uktimeconv: Add time spec validation inlines

This change adds inlines to check whether a timespec is in canonical
form, and if so whether it represents positive time.

Signed-off-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
GitHub-Closes: #1566

2 months agolib/posix-tty: Give names to initial stdin/out
Andrei Tatar [Wed, 25 Sep 2024 15:39:42 +0000 (17:39 +0200)]
lib/posix-tty: Give names to initial stdin/out

This change gives the initial files 0 and 1 the names "stdin" and
"stdout", respectively, with initial fd 2 remaining a duplicate of 1.

Signed-off-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
GitHub-Closes: #1592

2 months agolib/posix-timerfd: Give name to opened timerfds
Andrei Tatar [Wed, 25 Sep 2024 15:39:00 +0000 (17:39 +0200)]
lib/posix-timerfd: Give name to opened timerfds

This change names newly opened timerfds "timerfd".

Signed-off-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
GitHub-Closes: #1592

2 months agolib/posix-socket: Give name to opened sockets
Andrei Tatar [Wed, 25 Sep 2024 15:38:05 +0000 (17:38 +0200)]
lib/posix-socket: Give name to opened sockets

This change names newly opened sockets as such:
- generic sockets: "socket"
- sockets opened by a call to accept(): "socket:accepted"
- sockets opened by socketpair(): "socket:pair"

Signed-off-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
GitHub-Closes: #1592

2 months agolib/posix-poll: Give name to opened epollfds
Andrei Tatar [Wed, 25 Sep 2024 15:37:09 +0000 (17:37 +0200)]
lib/posix-poll: Give name to opened epollfds

This change names newly opened epollfds "epollfd".

Signed-off-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
GitHub-Closes: #1592

2 months agolib/posix-pipe: Give name to opened pipes
Andrei Tatar [Wed, 25 Sep 2024 15:35:41 +0000 (17:35 +0200)]
lib/posix-pipe: Give name to opened pipes

This change names newly opened pipes "pipe:read" or "pipe:write",
depending on which end it is.

Signed-off-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
GitHub-Closes: #1592

2 months agolib/posix-eventfd: Give name to opened eventfds
Andrei Tatar [Wed, 25 Sep 2024 15:34:47 +0000 (17:34 +0200)]
lib/posix-eventfd: Give name to opened eventfds

This change names newly opened eventfds as "eventfd".

Signed-off-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
GitHub-Closes: #1592

2 months agolib/posix-fdtab: Allow named files & partial open
Andrei Tatar [Wed, 25 Sep 2024 15:30:36 +0000 (17:30 +0200)]
lib/posix-fdtab: Allow named files & partial open

This change expands the fdtab API, separating the action of creating a
new open file description with that of associating it with an fd. This
allows callers to perform additional initialization on the open file
description before the fd goes live.

One notable such init is filling in the `name` field of the ofile,
which the API additions now support and take care to allocate space for.

It was a conscious decision to not mandate that the fdtab fill in the
name itself, as drivers may construct names in any manner of ways other
than having a string on hand. Thus, to prevent a redundant memcpy, a
driver can choose to fill in the field itself.

Signed-off-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
GitHub-Closes: #1592

2 months agolib/posix-fd: Add optional name field to ofiles
Andrei Tatar [Wed, 25 Sep 2024 14:53:47 +0000 (16:53 +0200)]
lib/posix-fd: Add optional name field to ofiles

This change adds an optional, binary-compatible, name field to open file
descriptions, allowing files to be assigned a meaningful name on open.

Signed-off-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
GitHub-Closes: #1592

2 months agolib/posix-fd: Provide public ofile refcounting
Andrei Tatar [Wed, 25 Sep 2024 14:42:26 +0000 (16:42 +0200)]
lib/posix-fd: Provide public ofile refcounting

This change adds public helpers for refcounting open file descriptions.

Signed-off-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
GitHub-Closes: #1592

2 months agolib/posix-fdtab: Fix wrong return in exec handler
Andrei Tatar [Wed, 19 Feb 2025 11:54:31 +0000 (12:54 +0100)]
lib/posix-fdtab: Fix wrong return in exec handler

Previously fdtab_handle_execve would return 0 on success, as per common
convention. This is however wrong for event handlers, as these require
specific exit codes on success; in this case UK_EVENT_HANDLED_CONT.
This change fixes this oversight.

Signed-off-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Michalis Pappas <michalis@unikraft.io>
GitHub-Closes: #1278

2 months agolib/posix-fdtab: Simplify active fdtab lookup
Andrei Tatar [Tue, 23 Jan 2024 19:22:49 +0000 (20:22 +0100)]
lib/posix-fdtab: Simplify active fdtab lookup

This change refactors the way fdtab code looks up the currently active
fdtable, simplifying functions and removing boilerplate code.

Signed-off-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Michalis Pappas <michalis@unikraft.io>
GitHub-Closes: #1278

2 months agolib/posix-fdtab: Handle fdtab duplication on clone
Andrei Tatar [Tue, 23 Jan 2024 18:44:06 +0000 (19:44 +0100)]
lib/posix-fdtab: Handle fdtab duplication on clone

This change adds logic to handle fdtab references on clone:
- if  CLONE_FILES: child inherits a reference to parent's tab
- if !CLONE_FILES: child allocates new fdtab duplicate of parent's,
  populated with new references to the same open file descriptions hosted
  by the parent fdtab.

The initial duplication logic is rudimentary and does not provide any
ordering guarantees w.r.t. syscalls modifying the original table (open,
dup, close), under the assumption that it won't trigger race conditions
in the wild. Please revisit if this turns out to be overly optimistic.

Signed-off-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Michalis Pappas <michalis@unikraft.io>
GitHub-Closes: #1278

2 months agolib/posix-fdtab: Add value assert in fmap_xchg
Andrei Tatar [Tue, 23 Jan 2024 18:37:36 +0000 (19:37 +0100)]
lib/posix-fdtab: Add value assert in fmap_xchg

This change adds an assert to sanity-check the value to be exchanged
into the fmap. Exchanging in a NULL value is an invalid operation and
breaks the semantics of fmap, leaving the data structure in a
potentially unsound state.
Calling code should never normally do this; the assert serves as extra
precaution for future development.

Signed-off-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Michalis Pappas <michalis@unikraft.io>
GitHub-Closes: #1278

2 months agolib/posix-fdtab: Support independent fdtab refs
Andrei Tatar [Tue, 23 Jan 2024 18:30:25 +0000 (19:30 +0100)]
lib/posix-fdtab: Support independent fdtab refs

This change adds the config option LIBPOSIX_FDTAB_MULTITAB that enables
independent per-thread fdtab references. If enabled, each thread will
lookup an fdtab reference in its TLS memory.
The static initial fdtab remains, and continues to be used.

To this end, fdtabs are now refcounted and have non-static lifetimes.
New threads inherit their parent's ref, with other components or
their callbacks responsible for initializing a meaningful value.
The init thread, however, holds a reference to the static init fdtab.

Signed-off-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Michalis Pappas <michalis@unikraft.io>
GitHub-Closes: #1278

2 months agolib/ukcpio: Use `uk_syscall_do_` instead of `uk_syscall_r_` symbols
Sergiu Moga [Fri, 14 Feb 2025 14:22:00 +0000 (16:22 +0200)]
lib/ukcpio: Use `uk_syscall_do_` instead of `uk_syscall_r_` symbols

Since `uk_syscall_r_` symbols tend to also invoke the system call enter
and exit tables if the `syscall_shim` library is enabled, replace such
calls with the `uk_syscall_do_` symbol variant which does not involve
any tables.

Checkpatch-Ignore: FUNCTION_ARGUMENTS
Checkpatch-Ignore: AVOID_EXTERNS
Signed-off-by: Sergiu Moga <sergiu@unikraft.io>
Approved-by: Andrei Tatar <andrei@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1590

2 months agolib/ukcpio: Add temporary `syscall_shim` library dependency
Sergiu Moga [Fri, 14 Feb 2025 14:18:46 +0000 (16:18 +0200)]
lib/ukcpio: Add temporary `syscall_shim` library dependency

Since the CPIO library depends on having the `uk_syscall_r_` symbols
exported by the VFSCore library, which can only do so if the
`syscall_shim` library is enabled, add a dependency to this said
library.

This will be undone in the near future by the deprecation of VFSCore,
but for now do this so we don't break builds that use CPIO without
`syscall_shim`.

Signed-off-by: Sergiu Moga <sergiu@unikraft.io>
Approved-by: Andrei Tatar <andrei@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1590

2 months agolib/vfscore: Register `creat` using the raw variant
Sergiu Moga [Mon, 17 Feb 2025 13:50:56 +0000 (15:50 +0200)]
lib/vfscore: Register `creat` using the raw variant

The `creat` has been registered as non-raw a long time ago, back
when the registration policy was different. Now, all system calls
should be registered as raw. Do so for `creat` as well and make it
call the `uk_syscall_do_` variant of `open` in order to avoid
invoking the system call enter/exit tables twice.

Signed-off-by: Sergiu Moga <sergiu@unikraft.io>
Approved-by: Andrei Tatar <andrei@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1591

2 months agolib/vfscore: Use `uk_syscall_do_` instead of `uk_syscall_r_` symbols
Sergiu Moga [Fri, 14 Feb 2025 14:22:00 +0000 (16:22 +0200)]
lib/vfscore: Use `uk_syscall_do_` instead of `uk_syscall_r_` symbols

Since `uk_syscall_r_` symbols tend to also invoke the system call enter
and exit tables if the `syscall_shim` library is enabled, replace such
calls with the `uk_syscall_do_` symbol variant which does not involve
any tables.

Signed-off-by: Sergiu Moga <sergiu@unikraft.io>
Approved-by: Andrei Tatar <andrei@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1591

2 months agolib/uksignal: Set _GNU_SOURCE to preserve definition of sighandler_t
Michalis Pappas [Tue, 21 Jan 2025 14:07:55 +0000 (15:07 +0100)]
lib/uksignal: Set _GNU_SOURCE to preserve definition of sighandler_t

Adding feature.h in nolibc requires that we set _GNU_SOURCE to preserve
the definition of sighandler_t in signal.c

Signed-off-by: Michalis Pappas <michalis@unikraft.io>
Approved-by: Andrei Tatar <andrei@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1244

2 months agolib/nolibc: Add _GNU_SOURCE to strsignal.c
Michalis Pappas [Mon, 8 Jan 2024 16:13:56 +0000 (17:13 +0100)]
lib/nolibc: Add _GNU_SOURCE to strsignal.c

After updating signal.h from musl strsignal.c requires
_GNU_SOURCE for _NSIG.

Signed-off-by: Michalis Pappas <michalis@unikraft.io>
Approved-by: Andrei Tatar <andrei@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1244

2 months agolib/nolibc: Adapt musl imported `signal.h` to nolibc
Michalis Pappas [Fri, 5 Jan 2024 19:09:32 +0000 (20:09 +0100)]
lib/nolibc: Adapt musl imported `signal.h` to nolibc

The replaced values of SIGRTMIN and SIGRTMAX are effectively
the return values of musl's __libc_current_sigrtmin() and
__libc_current_sigrtmax() defined in musl/src/signal/sigrtmin.c
and musl/src/signal/sigrtmax.c

Signed-off-by: Michalis Pappas <michalis@unikraft.io>
Approved-by: Andrei Tatar <andrei@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1244

2 months agolib/nolibc: Import `signal.h` from musl
Michalis Pappas [Fri, 5 Jan 2024 19:06:18 +0000 (20:06 +0100)]
lib/nolibc: Import `signal.h` from musl

This replaces `signal.h` with a clean copy from
musl to simplify manitenance.

Source of import:
Repository: https://git.musl-libc.org/cgit/musl
Tag: v1.2.4 (f5f55d65)
Path: musl/include/alltypes.h.in

Checkpatch-Ignore: LOGICAL_CONTINUATIONS
Checkpatch-Ignore: FUNCTION_ARGUMENTS
Checkpatch-Ignore: UNSPECIFIED_INT
Checkpatch-Ignore: LEADING_SPACE
Checkpatch-Ignore: LONG_LINE
Checkpatch-Ignore: BIT_MACRO
Checkpatch-Ignore: SPACING
Signed-off-by: Michalis Pappas <michalis@unikraft.io>
Approved-by: Andrei Tatar <andrei@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1244

2 months agolib/nolibc: Import _POSIX_SIGQUEUE_MAX from musl
Michalis Pappas [Fri, 5 Jan 2024 15:45:22 +0000 (16:45 +0100)]
lib/nolibc: Import _POSIX_SIGQUEUE_MAX from musl

Source of import:
Repository: https://git.musl-libc.org/cgit/musl
Tag: v1.2.4 (f5f55d65)
Path: /home/mpp/devel/musl/include/limits.h

Signed-off-by: Michalis Pappas <michalis@unikraft.io>
Approved-by: Andrei Tatar <andrei@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1244

2 months agolib/nolibc: Import `pthread_t` & `pthread_attr_t` from musl
Michalis Pappas [Fri, 5 Jan 2024 18:42:47 +0000 (19:42 +0100)]
lib/nolibc: Import `pthread_t` & `pthread_attr_t` from musl

Import definitions of `pthread_d` and `pthread_addr_t`
from musl, with minor changes to adapt for nolibc's
`sharedefs.h`.

Source of import:
Repository: https://git.musl-libc.org/cgit/musl
Tag: v1.2.4 (f5f55d65)
Path: musl/include/alltypes.h.in

Checkpatch-Ignore: POINTER_LOCATION
Checkpatch-Ignore: LONG_LINES
Checkpatch-Ignore: VOLATILE
Checkpatch-Ignore: SPACING
Signed-off-by: Michalis Pappas <michalis@unikraft.io>
Approved-by: Andrei Tatar <andrei@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1244

2 months agolib/nolibc: Import architecture signal definitions from musl
Michalis Pappas [Fri, 5 Jan 2024 15:28:07 +0000 (16:28 +0100)]
lib/nolibc: Import architecture signal definitions from musl

Source of import:
Repository: https://git.musl-libc.org/cgit/musl
Tag: v1.2.4 (f5f55d65)
Path: musl/arch/[aarch64,x86_64]/bits/signal.h

Checkpatch-Ignore: LOGICAL_CONTINUATIONS
Checkpatch-Ignore: MACRO_ARG_REUSE
Checkpatch-Ignore: UNSPECIFIED_INT
Checkpatch-Ignore: LEADING_SPACE
Checkpatch-Ignore: LINE_SPACING
Checkpatch-Ignore: BIT_MACRO
Checkpatch-Ignore: SPACING
Signed-off-by: Michalis Pappas <michalis@unikraft.io>
Approved-by: Andrei Tatar <andrei@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1244

2 months agolib/nolibc: Import features.h from musl
Michalis Pappas [Tue, 9 Jan 2024 09:47:51 +0000 (10:47 +0100)]
lib/nolibc: Import features.h from musl

This simplifies use of feature test macros.

Source of import:
Repository: https://git.musl-libc.org/cgit/musl
Tag: v1.2.4 (f5f55d65)
Path: musl/include/alltypes.h.in

Signed-off-by: Michalis Pappas <michalis@unikraft.io>
Approved-by: Andrei Tatar <andrei@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1244

2 months agolib/nolibc: Rename musl-imported/arch/aarch64
Michalis Pappas [Mon, 8 Jan 2024 15:57:19 +0000 (16:57 +0100)]
lib/nolibc: Rename musl-imported/arch/aarch64

Rename `musl-imported/arch/aarch64` to `musl-imported/arch/arm64`.
to fix build errors caused by an incorrect include path generated
relative to $(ARCH).

Signed-off-by: Michalis Pappas <michalis@unikraft.io>
Approved-by: Andrei Tatar <andrei@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1244

2 months agolib/posix-process: Define kernel internal `exit_group`
Sergiu Moga [Fri, 7 Feb 2025 09:54:53 +0000 (11:54 +0200)]
lib/posix-process: Define kernel internal `exit_group`

Add the kernel internal variant of `exit_group`, `pprocess_exit`.
This allows kernel internal code to call this system call's logic
without having the syscall shim wrapper logic intervene.

Signed-off-by: Sergiu Moga <sergiu@unikraft.io>
Approved-by: Andrei Tatar <andrei@unikraft.io>
Reviewed-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1585

2 months agolib/syscall_shim: Avoid nested syscalls within binary syscalls
Sergiu Moga [Fri, 7 Feb 2025 12:27:45 +0000 (14:27 +0200)]
lib/syscall_shim: Avoid nested syscalls within binary syscalls

The binary system call handler calls `uk_syscall6_r_e`, which ends up
calling either the `uk_syscall_r_` or the `uk_syscall_r_e_` variant of
the syscall wrappers, which also iterate through the system call
enter/exit tables. However, the binary system call itself also runs
through these tables already, therefore avoid this from happening twice
by calling the `uk_syscall_do_` and `uk_syscall_do_e` variants of the
system calls through `uk_syscall6_do_e`.

Signed-off-by: Sergiu Moga <sergiu@unikraft.io>
Approved-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Michalis Pappas <michalis@unikraft.io>
GitHub-Closes: #1277

2 months agolib/syscall_shim: Introduce `uk_syscall_do_` variant
Sergiu Moga [Fri, 7 Feb 2025 12:23:23 +0000 (14:23 +0200)]
lib/syscall_shim: Introduce `uk_syscall_do_` variant

Since either the `uk_syscall_r_`/`uk_syscall_r_e` or
`uk_syscall_e`/`uk_syscall_e_e` end up calling the syscall enter
and exit tables, we need a new, third, variant that guarantees calling
nothing but the actual implementation logic of the syscall itself.

Thus, introduce such a variant: the `uk_syscall_do_` variant. This
will be the exact same as what the `uk_syscall_r_` variant was, previous
to the introduction of the system call tables.

Signed-off-by: Sergiu Moga <sergiu@unikraft.io>
Approved-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Michalis Pappas <michalis@unikraft.io>
GitHub-Closes: #1277

2 months agolib/syscall_shim: Put bin syscall dbg handler in `syscall_entertab`
Sergiu Moga [Tue, 28 Jan 2025 19:00:58 +0000 (21:00 +0200)]
lib/syscall_shim: Put bin syscall dbg handler in `syscall_entertab`

Move the debug handler printing to a `syscall_entertab` handler.
Since we want this to be printed on binary system calls exit only, make
sure to check for it.

Lastly, add an assertion for a nested depth of 1. It should be
impossible that this would be different from 1 as it would either mean
a kernel internal system call invoked the binary handler somehow or the
TLS counter nesting variable is corrupted.

Signed-off-by: Sergiu Moga <sergiu@unikraft.io>
Approved-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Michalis Pappas <michalis@unikraft.io>
GitHub-Closes: #1277

2 months agolib/syscall_shim: Move binary syscall strace to `syscall_exittab`
Sergiu Moga [Tue, 28 Jan 2025 19:00:58 +0000 (21:00 +0200)]
lib/syscall_shim: Move binary syscall strace to `syscall_exittab`

Move `strace` printing to a `syscall_exittab` handler.
Since we want this to be printed on binary system calls exit only, make
sure to check for it.

Lastly, add an assertion for a nested depth of 1. It should be
impossible that this would be different from 1 as it would either mean
a kernel internal system call invoked the binary handler somehow or the
TLS counter nesting variable is corrupted.

Signed-off-by: Sergiu Moga <sergiu@unikraft.io>
Approved-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Michalis Pappas <michalis@unikraft.io>
GitHub-Closes: #1277

2 months agolib/syscall_shim: Introduce syscall enter/exit routines tables
Sergiu Moga [Thu, 25 Apr 2024 08:04:57 +0000 (11:04 +0300)]
lib/syscall_shim: Introduce syscall enter/exit routines tables

Define two routines tables: syscall_entertab and syscall_exittab.
These tables shall be iterated upon on system call entry and exit
respectively.
By registering into one of these tables, one may be able to have a custom
function called during the entering/exiting of a called system call.
The order these routines are executed in is dictated by their
priority: lower priority means earlier.

Note that there may exist some nested system calls, e.g. system call
handler invoked through a binary system call ending up calling a system
call of its own. To deal with such cases, introduce a TLS variable for
keeping track of when we enter/exit a syscall, binary or native. This way
we are able to let registered handlers know whether they are in a nested
context or not.
Very important is that we must remember to reset this TLS variable to 0
in the context of exiting execve since the process is born anew with a
fresh counter.

Signed-off-by: Sergiu Moga <sergiu@unikraft.io>
Approved-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Michalis Pappas <michalis@unikraft.io>
GitHub-Closes: #1277

2 months agolib/syscall_shim: Add execenv argument to PRINTD variant
Sergiu Moga [Mon, 3 Feb 2025 12:03:44 +0000 (14:03 +0200)]
lib/syscall_shim: Add execenv argument to PRINTD variant

The __UK_SYSCALL_EXECENV_PRINTD variant wrongly expects no execenv
argument despite using an execenv. It's only worked so far because it's
been only used in a spot where there is an execenv variable declared in
the function. Fix this by making __UK_SYSCALL_EXECENV_PRINTD take an
additional execenv argument.

Signed-off-by: Sergiu Moga <sergiu@unikraft.io>
Approved-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Michalis Pappas <michalis@unikraft.io>
GitHub-Closes: #1277

2 months agolib/posix-process: Define kernel internal `getpid`
Sergiu Moga [Fri, 7 Feb 2025 09:35:04 +0000 (11:35 +0200)]
lib/posix-process: Define kernel internal `getpid`

Add the kernel internal variant of `getpid`, `uk_sys_getpid`. This
allows kernel internal code to call this system call's logic without
having the syscall shim wrapper logic intervene.

Signed-off-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1583

2 months agolib/posix-process: Define kernel internal `getppid`
Sergiu Moga [Fri, 7 Feb 2025 09:35:04 +0000 (11:35 +0200)]
lib/posix-process: Define kernel internal `getppid`

Add the kernel internal variant of `getppid`, `uk_sys_getppid`. This
allows kernel internal code to call this system call's logic without
having the syscall shim wrapper logic intervene.

Signed-off-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1583

2 months agolib/posix-futex: Use kernel internal `uk_sys_gettid`
Sergiu Moga [Fri, 7 Feb 2025 09:36:29 +0000 (11:36 +0200)]
lib/posix-futex: Use kernel internal `uk_sys_gettid`

Use the kernel internal variant of `gettid`, `uk_sys_gettid`. Unlike
`uk_syscall_r_gettid`, this variant does not involve any syscall shim
wrapper logic, but rather simply calls the system call's logic directly.

Signed-off-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1583

2 months agolib/posix-process: Define kernel internal `gettid`
Sergiu Moga [Fri, 7 Feb 2025 09:35:04 +0000 (11:35 +0200)]
lib/posix-process: Define kernel internal `gettid`

Add the kernel internal variant of `gettid`, `uk_sys_gettid`. This
allows kernel internal code to call this system call's logic without
having the syscall shim wrapper logic intervene.

Signed-off-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1583

2 months agolib/vfscore: Use kernel internal `clock_gettime` variant
Sergiu Moga [Fri, 7 Feb 2025 10:17:48 +0000 (12:17 +0200)]
lib/vfscore: Use kernel internal `clock_gettime` variant

Use the kernel internal variant of `clock_gettime`,
`uk_sys_clock_gettime`. This helps avoid unnecessary execution of
the syscall wrappers' logic of syscall shim that would have otherwise
been run through `uk_syscall_r_clock_gettime`. Additionally, make
sure to also handle errors of said syscall.

Signed-off-by: Sergiu Moga <sergiu@unikraft.io>
Approved-by: Andrei Tatar <andrei@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1586

2 months agolib/ramfs: Explicitly mention that there are no public symbols
Sergiu Moga [Fri, 14 Feb 2025 09:09:43 +0000 (11:09 +0200)]
lib/ramfs: Explicitly mention that there are no public symbols

`exportsyms.uk` of RAMFS had a `none` dummy string so that no symbols
are exported, otherwise the `objcopy --keep-global-symbols=` would have
failed due to an empty file being given as argument.
However, this is inconsistent with other such files which just had
`# No public symbols` which is just as effective. Thus make it
consistent and do the same here.

Signed-off-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Michalis Pappas <michalis@unikraft.io>
Approved-by: Michalis Pappas <michalis@unikraft.io>
GitHub-Closes: #1577

2 months agolib/posix-process: Remove leftover `uk_syscall_` symbols of `clone3`
Sergiu Moga [Sat, 8 Feb 2025 11:38:30 +0000 (13:38 +0200)]
lib/posix-process: Remove leftover `uk_syscall_` symbols of `clone3`

Commit cee6ce09d720 ("lib/posix-process: remove clone3 syscall")
tried to remove `clone3` but forgot to remove its `uk_syscall_` symbols
from `exportsyms.uk`.

Signed-off-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Michalis Pappas <michalis@unikraft.io>
Approved-by: Michalis Pappas <michalis@unikraft.io>
GitHub-Closes: #1577

2 months agolib: Remove unneeded `uk_syscall_*` symbols from all `exportsyms.uk`
Sergiu Moga [Thu, 6 Feb 2025 09:35:15 +0000 (11:35 +0200)]
lib: Remove unneeded `uk_syscall_*` symbols from all `exportsyms.uk`

The syscall shim library is now able to automatically generate and
export `uk_syscall_*` symbols by preprocessing each library's defined
`UK_SYSCALLS_PROVIDED-*`. Thus, we no longer need to manually add these
in each exportsyms.uk.

Note that in the case of `posix-futex`'s library we had to keep an
exportsyms containing `none` to still avoid having any symbols being
spilled.

Signed-off-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Michalis Pappas <michalis@unikraft.io>
Approved-by: Michalis Pappas <michalis@unikraft.io>
GitHub-Closes: #1577

2 months agolib/syscall_shim: Autogenerate `uk_syscall_*` symbols at build time
Sergiu Moga [Thu, 6 Feb 2025 09:32:38 +0000 (11:32 +0200)]
lib/syscall_shim: Autogenerate `uk_syscall_*` symbols at build time

Introduce a new AWK script that autogenerates an additional, custom
defined, exportsyms that contains all `uk_syscall_*` symbols as per
each library's `UK_SYSCALLS_PROVIDED-*`.

This will help in reducing exportsyms.uk noise from now on as we no
longer have to manually add these supposedly internal symbols.

Checkpatch-Ignore: SPDX_LICENSE_TAG
Signed-off-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Michalis Pappas <michalis@unikraft.io>
Approved-by: Michalis Pappas <michalis@unikraft.io>
GitHub-Closes: #1577

2 months agoIntroduce `EACHOLIB_EXPORTS`
Sergiu Moga [Thu, 6 Feb 2025 09:26:55 +0000 (11:26 +0200)]
Introduce `EACHOLIB_EXPORTS`

Introduce the equivalent of `EACHOLIB_LOCALS`, but for exportsyms.uk.
Now, one is able to add custom defined/named exportsyms.uk, in addition
to an already existing exportsyms.uk. If no exportsyms.uk exists, then,
unlike `EACHOLIB_LOCALS` which is processed regardless of whether a
localsyms.uk exists or not, `EACHOLIB_EXPORTS` will be ignored.
However, its result files may still be built as per Makefile recipe
dependencies.

Checkpatch-Ignore: UNIKRAFT_SUBJECT_FORMAT
Signed-off-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Michalis Pappas <michalis@unikraft.io>
Approved-by: Michalis Pappas <michalis@unikraft.io>
GitHub-Closes: #1577

2 months agolib/posix-socket: Add explicitly polled sockets
Andrei Tatar [Wed, 6 Mar 2024 14:42:07 +0000 (15:42 +0100)]
lib/posix-socket: Add explicitly polled sockets

This change adds support for socket drivers that maintain events
internally and provide an explicit callback for fetching current events.

This contains breaking API changes.

Signed-off-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Michalis Pappas <michalis@unikraft.io>
GitHub-Closes: #1446

2 months agolib/ukfile: Add explicitly polled files
Andrei Tatar [Wed, 6 Mar 2024 13:18:06 +0000 (14:18 +0100)]
lib/ukfile: Add explicitly polled files

This change reworks the internal handling of events in uk_file to
provide support for drivers that need to be explicitly polled.

Checkpatch-Ignore: MACRO_ARG_REUSE
Signed-off-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Michalis Pappas <michalis@unikraft.io>
GitHub-Closes: #1446

2 months agolib/ukfile: Remove unused parts of pollqueue API
Andrei Tatar [Mon, 4 Mar 2024 18:58:36 +0000 (19:58 +0100)]
lib/ukfile: Remove unused parts of pollqueue API

This change removes the following from the pollqueue API:
- uk_pollq_init: initializers & init values fill its usecase better
- uk_pollq_edge*: semantics were unclear & not useful nor used

Signed-off-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Michalis Pappas <michalis@unikraft.io>
GitHub-Closes: #1446

2 months agolib/posix-process: Define kernel internal resource limit syscalls
Sergiu Moga [Thu, 13 Feb 2025 14:39:15 +0000 (16:39 +0200)]
lib/posix-process: Define kernel internal resource limit syscalls

Add the kernel internal variants of `prlimit64`, `getrlimit` and
`setrlimit`: `uk_sys_prlimit64`, `uk_sys_getrlimit` and
`uk_sys_setrlimit` respectively.
This allows kernel internal code to call these system calls' logic
without having the syscall shim wrapper logic intervene.

Note how only `uk_sys_prlimit64` has been added to `exportsyms.uk`
since the others are defined as inline.

Signed-off-by: Sergiu Moga <sergiu@unikraft.io>
Approved-by: Andrei Tatar <andrei@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1584

2 months agolib/ramfs: Use kernel internal `clock_gettime` variant
Sergiu Moga [Fri, 7 Feb 2025 10:25:11 +0000 (12:25 +0200)]
lib/ramfs: Use kernel internal `clock_gettime` variant

Use the kernel internal variant of `clock_gettime`,
`uk_sys_clock_gettime`.
This helps avoid unnecessary execution of the syscall wrappers'
logic of syscall shim that would have otherwise been run through
`uk_syscall_r_clock_gettime`.

Lastly, since now RAMFS uses a definition available only through
posix-time, add a dependency to it in the Config.uk. Ideally,
this should have been a depends on HAVE_TIME and an imply, but seeing
that currently this is the only library offering us time services,
do it like this for now.

Signed-off-by: Sergiu Moga <sergiu@unikraft.io>
Approved-by: Andrei Tatar <andrei@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1587

2 months agolib/ukfile: API: Change iovec length to size_t
Andrei Tatar [Thu, 6 Feb 2025 12:49:13 +0000 (13:49 +0100)]
lib/ukfile: API: Change iovec length to size_t

Previously the ukfile API would take the size of a passed iovec as a
signed int, a design oversight copied over from the binary syscall API.
Negative iovec lengths make no sense and should not be exposed by our
internal API.
This change makes iovec lengths unsigned size_t for ukfiles.
The posix-socket socket ops API is similarly changed to use size_t.
External socket implementations will need updating.

Signed-off-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Sergiu Moga <sergiu@unikraft.io>
Approved-by: Razvan Deaconescu <razvand@unikraft.io>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
GitHub-Closes: #1580

2 months agolib/ukfile: API: Change file offset to size_t
Andrei Tatar [Thu, 6 Feb 2025 12:20:44 +0000 (13:20 +0100)]
lib/ukfile: API: Change file offset to size_t

This change makes the ukfile API natively use size_t as type for
file offsets. The previous use of the signed off_t was unwieldy, as
negative file offsets had no meaning or use in the internal API.
Best to correct this mistake earlier than later.
This makes posix-fdio syscalls the only entry points with signed file
offset args, allowing validation to be isolated.

Signed-off-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Sergiu Moga <sergiu@unikraft.io>
Approved-by: Razvan Deaconescu <razvand@unikraft.io>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
GitHub-Closes: #1580

2 months agolib/posix-fdio: Adopt fch* syscalls from vfscore
Andrei Tatar [Thu, 6 Feb 2025 15:38:57 +0000 (16:38 +0100)]
lib/posix-fdio: Adopt fch* syscalls from vfscore

This change moves the implementation of the fchmod and fchown syscalls
from vfscore to posix-fdio, allowing shim operation on both ukfiles and
legacy vfscore files.
In addition, this move fixes a file ref leak in vfscore's fchmod due to
a missing fdrop after fd lookup.

Signed-off-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
GitHub-Closes: #1581

2 months agolib/posix-fdio: Adopt file space mgmt syscalls
Andrei Tatar [Thu, 6 Feb 2025 15:33:03 +0000 (16:33 +0100)]
lib/posix-fdio: Adopt file space mgmt syscalls

This change moves the implementation of the ftruncate and fallocate
syscalls from vfscore to posix-fdio, allowing shim operation on both
ukfiles and legacy vfscore files alike.
In addition, the related fadvise64 syscall is implemented, stubbed out
as success for vfscore files.

Signed-off-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
GitHub-Closes: #1581