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)
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)
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.
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)
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.
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.
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`.
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.
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.
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.
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).
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.
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.
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"
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.
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.
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.
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.
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.
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
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
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
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
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
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
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
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`.
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.
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.
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.
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.
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.
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
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
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
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
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
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.
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`.
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.
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.
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.
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
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
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
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.
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.
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.
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.
Andrei Tatar [Thu, 6 Feb 2025 15:27:58 +0000 (16:27 +0100)]
lib/posix-fdio: Adopt f*sync syscalls from vfscore
This change moves the implementation of the fsync and fdatasync syscalls
from vfscore to posix-fdio, allowing shim operation on both ukfiles and
legacy vfscore files.
Andrei Tatar [Tue, 24 Sep 2024 15:03:34 +0000 (17:03 +0200)]
lib/ukfile: Add try acquire operation
This change adds a try_acquire operation on files which allows callers
holding a weakref to attempt to take a strong ref. This call may fail if
no other strongrefs are currently held (and thus finalizers and the
destructor are scheduled to run).
Andrei Tatar [Tue, 24 Sep 2024 14:54:53 +0000 (16:54 +0200)]
include/uk/weak_refcount: Add try acquire op
This change adds a `try_acquire` operation to strong/weak refcounts,
allowing a caller holding a weakref to attempt to acquire a strong ref.
This call may fail if no other strong references exist.
Andrei Tatar [Thu, 6 Feb 2025 11:28:50 +0000 (12:28 +0100)]
lib/posix-fdio: Fix wrong computation of dev_t
Previously posix-fdio would compute the value of a dev_t from a
major/minor number pair wrong by naive bit shifting. The correct
computation is more involved and should use makedev() defined in
<sys/sysmacros.h>.
This change fixes this oversight, making stat() output correct.
This change adds configuration guards around syscall declarations in
Makefiles that depend on posix-fdtab to be enabled. This allows builds
of these libs with syscall_shim but fdtab disabled, decoupling them from
the fdtab completely.
Andrei Tatar [Thu, 22 Feb 2024 20:32:38 +0000 (21:32 +0100)]
lib/posix-fdio: Remove posix-fdtab dependency
This change removes the hard dependency on posix-fdtab, allowing
posix-fdio to be used with anonymous open file descriptions (i.e., raw
uk_ofiles). It remains selected as a soft dependency by default.
File descriptor related syscalls are now only provided if posix-fdtab is
also selected.
Andrei Tatar [Thu, 22 Feb 2024 20:28:22 +0000 (21:28 +0100)]
lib/posix-fd: Move open file headers into own lib
This changes merges the headers uk/ofile.h and uk/posix-fd.h and moves
them into their own library, providing shared definitions related to
open file descriptions for both posix-fdio and posix-fdtab, without
introducing an undue dedependency between the two.
Andrei Tatar [Thu, 22 Feb 2024 19:40:25 +0000 (20:40 +0100)]
lib/posix-socket: Remove posix-fdtab dependency
This change makes posix-fdtab no longer a hard dependency of
posix-socket, allowing socket operations using the internal API without
needing a userspace-visible fdtab.
Andrei Tatar [Thu, 22 Feb 2024 19:38:00 +0000 (20:38 +0100)]
lib/posix-timerfd: Remove posix-fdtab dependency
This change makes posix-fdtab no longer a hard dependency of
posix-timerfd, allowing non-fd parts of its functionality to work
without the former selected.
Andrei Tatar [Thu, 22 Feb 2024 19:33:58 +0000 (20:33 +0100)]
lib/posix-pipe: Remove posix-fdtab dependency
This change makes posix-fdtab no longer a hard dependency of posix-pipe,
allowing non-fd parts of its functionality to work without the former
selected.
Andrei Tatar [Thu, 22 Feb 2024 19:28:24 +0000 (20:28 +0100)]
lib/posix-eventfd: Remove posix-fdtab dependency
This change makes posix-fdtab no longer a hard dependency of
posix-eventfd, allowing non-fd parts of its functionality to work
without the former selected.
Sergiu Moga [Mon, 3 Feb 2025 09:38:57 +0000 (11:38 +0200)]
lib/ukvmem: Use correct stack guard size macro for tests
During the upstreaming of 5587fd88 (lib/ukvmem: Make stack VMA guards size configurable and end-to-end),
following some renames, the macro used
in the tests was not updated as well, which results in build errors for
the ukvmem tests. Fix this by using the proper macro name.
Signed-off-by: Sergiu Moga <sergiu@unikraft.io> Approved-by: Andrei Tatar <andrei@unikraft.io> Reviewed-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1573