Andrei Tatar [Mon, 24 Jul 2023 15:39:35 +0000 (17:39 +0200)]
lib/ramfs: Implement new file timestamps
This change implements setting the file times of newly created files to
the current time, filling in a placeholder that previously would set the
times to the epoch (i.e., 1970-01-01 00:00 UTC).
Signed-off-by: Andrei Tatar <andrei@unikraft.io> Reviewed-by: Delia Pavel <delia_maria.pavel@stud.acs.upb.ro> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #995
Andrei Tatar [Mon, 24 Jul 2023 15:30:24 +0000 (17:30 +0200)]
lib/ramfs: Ensure stability of inode numbers
Previously ramfs would assign a new unique inode number to a file on
every successful filesystem lookup. This can lead to the same file being
allocated multiple different inodes, breaking code that (correctly) uses
inodes as reliable indicators of file identity.
This change makes inode numbers persistent, allocated along with the
filesystem node, and stable across multiple lookups of the same file.
Signed-off-by: Andrei Tatar <andrei@unikraft.io> Reviewed-by: Radu Nichita <radunichita99@gmail.com> Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #996
Andrei Tatar [Mon, 24 Jul 2023 15:21:33 +0000 (17:21 +0200)]
lib/vfscore: Fix create through broken symlink
Previously a vfs syscall on a broken symlink would fail with ENOENT
instead of attempting the syscall on the symlink target. This would make
open(O_CREAT) to fail instead of creating the missing target file.
This change fixes this behavior, bringing it in line with expectations.
Signed-off-by: Andrei Tatar <andrei@unikraft.io> Reviewed-by: Radu Nichita <radunichita99@gmail.com> Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #998
Marc Rittinghaus [Thu, 20 Oct 2022 08:42:21 +0000 (10:42 +0200)]
Makefile: Change gccgo-7 to gccgo
The current Makefile refers to gccgo via gccgo-7. This commit removes
the version suffix.
Co-authored-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Signed-off-by: Eduard Vintilă <eduard.vintila47@gmail.com> Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com> Reviewed-by: Radu Nichita <radunichita99@gmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #1005
The current method of building libraries is to iterate over
each library's source files and invoke a file type specific
build rule. For libgo this is insufficient as we have to do
more complex operations for dependency resolution
before starting the actual build. This commit allows libraries
to supply an own `Makefile.build` that enables custom
build mechanics.
Co-authored-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Signed-off-by: Eduard Vintilă <eduard.vintila47@gmail.com> Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com> Reviewed-by: Radu Nichita <radunichita99@gmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #1005
plat/common: Add support for pvpanic devices for x86
Unikraft already offers exit codes through the ISA device, but these
are only a convention and are not understood by QEMU itself.
When using `-device pvpanic`, a GUEST_PANICKED event[1] is sent to QEMU
when the unikernel crashes.
This event can be seen when using QMP[1] for example.
The bits corresponding to each even are set as per the documentation[2].
The main usage of this is in kraftkit where unikernels are detached
and exit codes are lost.
Using this can signal when the unikernel crashes.
Andrei Tatar [Mon, 24 Jul 2023 16:12:06 +0000 (18:12 +0200)]
lib/vfscore: Fix wrong application of umask
Previously vfscore would apply the umask to the mode bits in the
emulated libc functions `open` and `openat`, instead of within the
open/openat syscall implementation where it would be correct to do so.
This lead to the umask being ignored when a real libc was in use.
This change fixes this bug, restoring expected behavior with or without
a libc.
Signed-off-by: Andrei Tatar <andrei@unikraft.io> Reviewed-by: Radu Nichita <radunichita99@gmail.com> Reviewed-by: Eduard Vintilă <eduard.vintila47@gmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #990
Andrei Tatar [Mon, 24 Jul 2023 16:25:54 +0000 (18:25 +0200)]
lib/vfscore: Correct behavior of utime(NULL)
Previously, as a placeholder behavior, utime(NULL) would set the file
times to the epoch (1970-01-01 00:00 -0000) instead of the current time.
This change corrects this oversight, bringing the syscall in line with
expected and documented behavior.
Signed-off-by: Andrei Tatar <andrei@unikraft.io> Reviewed-by: Eduard Vintilă <eduard.vintila47@gmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #993
Andrei Tatar [Mon, 24 Jul 2023 16:20:43 +0000 (18:20 +0200)]
lib/vfscore: Add unlinkat syscall
Unikraft was previously missing an implementation of `unlinkat`, a
syscall often used by modern runtimes and libcs in lieu of the older
`unlink` and `rmdir` for deleting files and directories.
This change provides an implementation of `unlinkat` based off existing
syscalls, in the same vein as other `*at` syscalls.
Signed-off-by: Andrei Tatar <andrei@unikraft.io> Reviewed-by: Delia Pavel <delia_maria.pavel@stud.acs.upb.ro> Reviewed-by: Adina-Maria Vaman <adinamariav22@gmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #994
Andrei Tatar [Mon, 24 Jul 2023 16:07:06 +0000 (18:07 +0200)]
lib/ramfs: Support setting file mode on creation
Previously any file created on ramfs would have the mode bits set to
0777, regardless of the mode bits supplied to open/creat/mkdir, which
can break software that explicitly checks these bits.
This change corrects this oversight, having new files be created with
the requested mode bits set.
Signed-off-by: Andrei Tatar <andrei@unikraft.io> Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com> Reviewed-by: Radu Nichita <radunichita99@gmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #997
Martin Kröning [Wed, 28 Jun 2023 08:35:48 +0000 (10:35 +0200)]
build: Add `UK_LDEPS`
This adds support for the `UK_LDEPS` environment variable.
This variable specifies external files that are watched for changes by make.
If any of the specified files change, the final linking step is redone.
The files are only watched and not consumed to avoid changing the order of supplied `LDFLAGS`.
This was inspired by `cargo:rerun-if-changed=PATH`:
- https://doc.rust-lang.org/cargo/reference/build-scripts.html#rerun-if-changed
Signed-off-by: Martin Kröning <martin.kroening@eonerc.rwth-aachen.de> Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com> Reviewed-by: Marco Schlumpp <marco@unikraft.io> Approved-by: Simon Kuenzer <simon@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #957
Martin Kröning [Fri, 23 Jun 2023 09:38:30 +0000 (11:38 +0200)]
build: Allow setting flags from the environment
This adds `UK_ASFLAGS`, `UK_CFLAGS`, `UK_CXXFLAGS`, `UK_GOCFLAGS`, and
`UK_LDFLAGS` for explicitly setting these build flags for Unikraft.
For reference, see
- https://github.com/torvalds/linux/blob/v6.4/Documentation/kbuild/kbuild.rst#environment-variables
- https://github.com/torvalds/linux/blob/v6.4/Makefile#L1097-L1101
Signed-off-by: Martin Kröning <martin.kroening@eonerc.rwth-aachen.de> Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com> Reviewed-by: Marco Schlumpp <marco@unikraft.io> Approved-by: Simon Kuenzer <simon@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #957
Marco Schlumpp [Thu, 3 Aug 2023 09:17:06 +0000 (11:17 +0200)]
plat/*: Signal shutdown cause on QEMU
This uses the `isa-debug-exit` device to pass an exit code to QEMU. By
default this device is not available but can be enabled using the
`-device isa-debug-exit` switch on the QEMU command-line.
Sergiu Moga [Wed, 2 Aug 2023 18:30:37 +0000 (21:30 +0300)]
plat/kvm/x86: Fix build error due to missing `assert.h` header
Once the commit dbfb886b5312 ("plat: Ensure IRQ's disabled in `ukplat_lcpu_halt_irq`")
got merged, a new build error appeared:
```
E /usr/bin/ld: /github/workspace/_helloworld/.unikraft/build/libkvmplat.o: in function `ukplat_lcpu_halt_irq':
E /github/workspace/plat/kvm/x86/lcpu.c:50: undefined reference to `UK_ASSERT'
E collect2: error: ld returned 1 exit status
```
This happened due to `uk/assert.h` not being included.
Github-Fixes: #980 Signed-off-by: Sergiu Moga <sergiu@unikraft.io> Reviewed-by: Alexander Jung <alex@unikraft.io> Reviewed-by: Marco Schlumpp <marco@unikraft.io> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #1017
Robert Kuban [Thu, 13 Jul 2023 10:53:53 +0000 (12:53 +0200)]
plat/kvm/arm: Do not enable interrupts before `wfi`
There is the opportunity to miss an IRQ on the path to `wfi` from the
idle thread after deciding to sleep:
The interrupts are enable just before exuting `wfi`.
If the interrupt already arrived before that, it will be executed
before `wfi`, and `wfi` will go to sleep afterward, not being woken
up by the interrupt.
This patch removes calls to enable/disable interrupts around `wfi`.
`wfi` will be woken up by pending interrupts regardless.
Signed-off-by: Robert Kuban <robert.kuban@opensynergy.com> Reviewed-by: Razvan Deaconescu <razvand@unikraft.io> Approved-by: Sergiu Moga <sergiu@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #980
This commit introduces GitHub-centric CI/CD definition that is intended
to be executed on incoming PRs such that the incoming PR can be
determined as working. This supplementary file is based on-top of the
KraftKit GitHub Action Workflow Step[0] which is a native-to-Unikraft
integration. This integration allows for seamless building, packaging,
distributing and executing (via TCG-based emulation) of Unikraft
unikernels in a clear and declarative manner.
In this first integration pipeline, incoming PRs will be built against
the following variant of the helloworld application:
Additionally, a more comprensive test will be executed with libc-test[1]
via uktest in emulation mode for qemu on x86_64 only in order to display
maximum coverage.
Stefan Jumarea [Tue, 20 Jun 2023 12:41:23 +0000 (15:41 +0300)]
arch/arm: Update cpu models compiler version checks
Previously the cpu selections were available only when compiling with `GCC`.
This commit adds `Clang` support by checking if the feature is available for
the compiler version.
A lot of checks will also be completely removed, since minimum required
compiler versions were introduced (`GCC` >= 7, `Clang` >= 9).
Signed-off-by: Stefan Jumarea <stefanjumarea02@gmail.com> Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com> Approved-by: Michalis Pappas <michalis@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #949
Stefan Jumarea [Tue, 20 Jun 2023 08:09:26 +0000 (11:09 +0300)]
arch/arm64: Fix cpu and erratas for clang
Previously the cpu selections and the erratas were available only when
compiling with `GCC`. This commit adds `Clang` support by checking if
the feature is available for the compiler version.
A lot of checks will also be completely removed, since minimum required
compiler versions were introduced (`GCC` >= 7, `Clang` >= 9).
Signed-off-by: Stefan Jumarea <stefanjumarea02@gmail.com> Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com> Approved-by: Michalis Pappas <michalis@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #949
Maria Sfiraiala [Fri, 9 Dec 2022 21:07:52 +0000 (23:07 +0200)]
Makfile: Add target flags for `clang` with `AArch64`
This commit adds target flags needed for cross-compiling with `clang`
for`AArch64`.
They are guarded by a condition which checks if these flags
are really needed (the compiler is `clang` and the architecture is
`AArch64`).
Signed-off-by: Maria Sfiraiala <maria.sfiraiala@gmail.com> Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com> Approved-by: Michalis Pappas <michalis@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #685
Real-world applications may run into this error many times per second.
I posted a simple reproduction into the issue.
According to @mschlumpp, this just means that Unikraft is filling up the
virtio descriptors faster than the host consumes them.
This commit downgrades the error to a debug message to avoid scaring and
to spend less time printing errors instead of doing work.
Signed-off-by: Martin Kröning <martin.kroening@eonerc.rwth-aachen.de>
GitHub-Closes: #853 Reviewed-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #984
Andrei Tatar [Tue, 18 Jul 2023 16:43:30 +0000 (18:43 +0200)]
build: Add compiler version checking for Clang
This change adds version checking make functions in line with what we
have already for GCC. Also added are *_lt functions that check for a
maximum compiler version.
Signed-off-by: Andrei Tatar <andrei@unikraft.io> Reviewed-by: Razvan Deaconescu <razvand@unikraft.io> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #983
Andrei Tatar [Wed, 31 May 2023 11:17:07 +0000 (13:17 +0200)]
lib/uksignal: Use correct kernel struct sigaction
The structs passed to the `sigaction` library call and the
`rt_sigaction` Linux syscall have different sizes and layouts; uksignal
previously used the incorrect library struct in the syscall, leading to
possible memory corruptions when called from a real libc (musl, newlib).
This change corrects this behavior by using the kernel struct.
Signed-off-by: Andrei Tatar <andrei@unikraft.io> Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #924
Stefan Jumarea [Tue, 27 Jun 2023 11:28:57 +0000 (14:28 +0300)]
plat/linuxu: Add fpsimd source file to build system
If `CONFIG_FPSIMD`, the `fp_arm64.c` source file should be added to the
build. Currently this is only done for `kvm`, so trying to build anything
for `linuxu` will fail with undefined references to the `fpsimd_*_state`
functions.
Signed-off-by: Stefan Jumarea <stefanjumarea02@gmail.com> Reviewed-by: Radu Nichita <radunichita99@gmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #962
Simon Kuenzer [Thu, 18 May 2023 13:50:30 +0000 (15:50 +0200)]
lib/posix-event: `SYS_eventfd2`: Fix assertion with O_NONBLOCK
Commit fc96850 - lib/vfscore: Enable FIONBIO in fcntl(F_SETFL)
introduced a complete implementation of handling `FNONBLOCK` and `FASYNC`
with `fcntl`, including forwarding of error codes to the caller. Because
a standard `EINVAL` handler for `ioctl` was used for `eventfd` file
descriptors, setting `O_NONBLOCK` caused a failing assertion.
Checkpatch-Ignore: USE_NEGATIVE_ERRNO Signed-off-by: Simon Kuenzer <simon@unikraft.io> Reviewed-by: Florin Postolache <florin.postolache.of@gmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #903
Simon Kuenzer [Thu, 18 May 2023 13:48:28 +0000 (15:48 +0200)]
lib/posix-event: `SYS_eventfd2`: Use low-level `fcntl` syscall
The eventfd constructor system call `eventfd2` uses the the `fcntl` system
call to setup the file descriptor flag `O_NONBLOCK` during creation. This
commit makes sure that the low-level implementation is directly called so
that there is no dependency to `errno`.
`python3` uses `isatty()`, which does an `ioctl()` with
`TIOCGWINSZ` as an argument for checking whether it should invoke
the interactive interpretor or just start interpreting a given
file.
Since `9pfs` is not a pseudo filesystem, it should be able to respond
to such `ioctl` accordingly for scripts defined in its filesystem
with a `ENOTTY`.
Signed-off-by: Sergiu Moga <sergiu@unikraft.io> Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com> Reviewed-by: Razvan Virtan <virtanrazvan@gmail.com> Approved-by: Simon Kuenzer <simon@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #981
Cosmin Vancea [Sun, 4 Jun 2023 20:37:17 +0000 (23:37 +0300)]
lib/posix-sysinfo: Fill the `totalram` and `freeram` fields of `sysinfo`
Newer glibc versions translate `sysconf(_SC_PHYS_PAGES)` to a `sysinfo`
syscall. Internally, `totalram` is used to compute the number of physical
pages.
Signed-off-by: Cosmin Vancea <csvancea@gmail.com> Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #930
Sergiu Moga [Wed, 14 Jun 2023 14:11:39 +0000 (17:11 +0300)]
lib/ukschedcoop: Add early check for runnable thread in idle thread
Since we enable IRQ's before context switching, there is a chance that
IRQ's may fire in the short time frame between the enabling of IRQ's
in the scheduler before context switching and disabling of IRQ's before
entering the idle thread's halting state.
To fix this, make sure we disable IRQ's at the beginning of the idle
thread's halting loop and do a quick early check for runnable threads
alongside the one for exited threads.
Co-authored-by: Stefan Jumarea <stefanjumarea02@gmail.com> Signed-off-by: Sergiu Moga <sergiu@unikraft.io> Signed-off-by: Stefan Jumarea <stefanjumarea02@gmail.com> Reviewed-by: Tu Dinh Ngoc <dinhngoc.tu@irit.fr> Approved-by: Marco Schlumpp <marco@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #941
Sergiu Moga [Wed, 14 Jun 2023 13:37:25 +0000 (16:37 +0300)]
plat/common: Ensure `IRQ`'s disabled in `ukplat_lcpu_halt_to`
Make sure that `IRQ`'s are disabled when calling `ukplat_lcpu_halt_to`.
Furthermore, do not surround the call to `time_block_until` with `IRQ`
`save`/`restore` and inform the function user through a `NOTE` to take
care of that himself.
Therefore, with this commit, change every other reference to this
function accordingly. Furthermore, change the name of the function to
reflect this.
Signed-off-by: Sergiu Moga <sergiu@unikraft.io> Suggested-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Tu Dinh Ngoc <dinhngoc.tu@irit.fr> Approved-by: Marco Schlumpp <marco@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #941
Sergiu Moga [Thu, 25 May 2023 07:08:42 +0000 (10:08 +0300)]
arch/arm/arm64: Fix `stxr`'s used in `spinlock`s register size
Our `spinlock`s have a size of 4-bytes and an alignment of 8, which,
in our `semaphore` implementation, causes a padding of 4 bytes. This
is fine, but it is an inconsistency.
With `QEMU` direct kernel boot, all of our free memory is zeroed out.
However, when using a previous boot phase such as `UEFI`, this
inconsistency shows itself through an always locked `spinlock`.
`UEFI` firmware "poisons" all of its free memory with `0xaf` bytes
which leads to our `stxr`, whose second register argument is 64-bit
instead of 32-bit, also atomically storing the `poisoned` padding.
Thus, make sure that our `stxr` uses 32-bit register for the to be
transferred register.
Signed-off-by: Sergiu Moga <sergiu.moga@protonmail.com>
GitHub-Fixes: #289 Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com> Reviewed-by: Eduard Vintilă <eduard.vintila47@gmail.com> Approved-by: Michalis Pappas <michalis@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #907
Marco Schlumpp [Fri, 3 Feb 2023 08:26:33 +0000 (09:26 +0100)]
lib/ukboot: Allow disabling weak main using KConfig
This allows other modules to disable the weak main function. This is
useful in situations where the main is in a static library and the weak
symbol causes a premature end of search.
Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Gabriel Mocanu <gabi.mocanu98@gmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #898
Andrei Tatar [Fri, 2 Jun 2023 09:59:50 +0000 (11:59 +0200)]
lib/ukalloc: Fix underallocation bug in malloc
This change fixes a logic error that allocates less memory than
necessary in specific cases, risking the memory corruption of internal
data structures, leading to unpredictable behavior and crashes.
Signed-off-by: Andrei Tatar <andrei@unikraft.io> Reviewed-by: Eduard-Florin Mihailescu <mihailescu.eduard@gmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #931
Andrei Tatar [Wed, 31 May 2023 13:20:58 +0000 (15:20 +0200)]
doc: Correct docstring format to silence warnings
Several unikraft files have inconsistent docstrings which generate many
warnings when building with clang.
This change corrects all inconsistencies, silencing the warnings.
Signed-off-by: Andrei Tatar <andrei@unikraft.io> Reviewed-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #927
Change `uk_9pfs_ioctl` from `vfscore_vop_einval` to
`vfscore_vop_nullop`, effectively stubbing it. This means a call to
`uk_9pfs_ioctl` will no longer return `-EINVAL`, but it will return
`0`, tricking the caller into thinking `ioctl()` functionality is
available.
This is useful in binary-compatibility mode, where certain `ioctl()`
calls may cause the application to end, if an error code (such as
`-EINVAL` is returned). This is the case of Ruby interpreter running in
binary-compatibility mode.
Signed-off-by: Razvan Deaconescu <razvand@unikraft.io> Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #928
Federico Parola [Wed, 31 May 2023 23:16:08 +0000 (16:16 -0700)]
plat/kvm/x86/tscclock: Switch i8254 to sw-triggered strobe on init
To switch the i8254 to sw-triggered strobe mode a value must be
written into the counter. Previously the timer remained in rate
generator mode and kept generating interrupts until the counter
was written (e.g., for a sleep())
Signed-off-by: Federico Parola <federico.parola@polito.it> Reviewed-by: Razvan Deaconescu <razvand@unikraft.io> Approved-by: Simon Kuenzer <simon@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #923
The musl imported rusage structure keeps an extra buffer in the rusage.
This can lead to errors if running applications in binary compatibility,
due to buffer overflows.
GitHub-Fixes: #915 Signed-off-by: Stefan Jumarea <stefanjumarea02@gmail.com> Reviewed-by: Razvan Deaconescu <razvand@unikraft.io> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #917
Stefan Jumarea [Mon, 22 May 2023 10:06:32 +0000 (13:06 +0300)]
build: Add proper compiler detection
Checking for the output of `$(CC) -v` may fail depending on compiler
versions (e.g. `clang-15 -v` on ubuntu will output `Ubuntu clang ...`,
making `CC_NAME` `Ubuntu` instead of `clang`).
Use a preprocessor program to find the proper compiler name and version.
The `cc-version.sh` script is taken from the linux kernel tree, and will
return a string containing the compiler name and version:
`GCC|Clang MAJOR_V.MINOR_V`.
Signed-off-by: Stefan Jumarea <stefanjumarea02@gmail.com> Reviewed-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com> Approved-by: Simon Kuenzer <simon@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #902
Stefan Jumarea [Sat, 27 May 2023 08:57:40 +0000 (11:57 +0300)]
9pfs: Change default 9p version to `9P 2000L`
Using the `9p 2000U` version as the default leads to problems,
especially when using Unikraft in binary compatibility mode, since it
has a lot of limitation. There is no actual reason to use it as the
default 9P protocol version, so we just change it to `2000L`.
Signed-off-by: Stefan Jumarea <stefanjumarea02@gmail.com> Reviewed-by: Andra Paraschiv <andra@unikraft.org> Approved-by: Simon Kuenzer <simon@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #914
Stefan Jumarea [Wed, 17 May 2023 08:15:32 +0000 (11:15 +0300)]
plat/kvm: Add vmm option for arm64
Add the option to choose a VMM when building for arm64. There are build
options that depend on the chosen VMM (i.e. PCI support), so the VMM
should be selected no matter what the chosen architecture is.
Signed-off-by: Stefan Jumarea <stefanjumarea02@gmail.com> Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com> Reviewed-by: Marco Schlumpp <marco@unikraft.io> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #900
Michalis Pappas [Sat, 27 May 2023 13:51:57 +0000 (15:51 +0200)]
.github: Update Prerequisites in PR template to reference checkpatch.uk
checkpatch.uk has been introduced to allow invoking checkpatch.uk with
Unikraft's configuration from any directory. Update the Prerequisites
section in the PR template to use that instead.
Signed-off-by: Michalis Pappas <michalis@unikraft.io> Reviewed-by: Alexander Jung <alex@unikraft.io> Approved-by: Alexander Jung <alex@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #918
Andrei Tatar [Fri, 21 Apr 2023 16:45:16 +0000 (18:45 +0200)]
lib/syscall_shim: Sanitize ectx memory before use
`ukplat_syscall_handler` allocates uninitialized stack space for saving
ectx; this coupled with brittle store/load routines (e.g., x86
XSAVE/XRSTOR) can result in a fatal fault.
This change sanitizes the allocated space before use.
Sanitizing is preferable to zero-ing out the entire area because
(1) we're on the syscall hot path, and (2) it's only needed in specific
situations.
Signed-off-by: Andrei Tatar <andrei.ttr@gmail.com> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Simon Kuenzer <simon@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #863
Andrei Tatar [Fri, 21 Apr 2023 16:24:12 +0000 (18:24 +0200)]
arch/*: Add sanitization function for ectx memory
Most context saving instructions/routines overwrite the target area with
a valid representation that can be loaded back. x86 XSAVE/XSAVEOPT are
an exception, as garbage data can remain in the context area causing the
following XRSTOR to fault. Thus any potentially dirty memory passed to
XSAVE* must be (minimally) sanitized before its first use.
This change introduces `ukarch_ectx_sanitize` as a function to perform
this sanitization if needed. It differs from `ukarch_ectx_init` in that
it does only the minimum work necessary to make memory ready for
`ukarch_ectx_store`, instead of preparing a valid argument for
`ukarch_ectx_load`.
Signed-off-by: Andrei Tatar <andrei.ttr@gmail.com> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Simon Kuenzer <simon@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #863
Simon Kuenzer [Fri, 24 Mar 2023 16:33:17 +0000 (17:33 +0100)]
lib/ukargparse: Support escaping of quotes
This commit introduces the support of escaping single (`'`) and double
quotes (`"`) with the escape character `\`. The behaviour is similar to
what one expects from Unix shells, like `sh` or `bash`.
Single-quoted characters and character sequences preserve each character.
Double-quoted characters and character sequences preserve each character
except the backslash `\`. The backslash can be used to switch of the
special meaning of a character, like the double quote (`\"`) or a
backslash (`\\`).
Signed-off-by: Simon Kuenzer <simon@unikraft.io> Reviewed-by: Razvan Deaconescu <razvand@unikraft.io> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #893
Currently `m_path` and `m_special` are statically-allocated arrays,
meaning their storage spaces are wasted in `static struct mount`
variables. Dynamically allocate these variables to save on binary size.
Also add initcalls to initialize `struct mounts` in lib/posix-event,
lib/posix-socket and lib/vfscore.
Signed-off-by: Tu Dinh Ngoc <dinhngoc.tu@irit.fr> Reviewed-by: Radu Nichita <radunichita99@gmail.com> Approved-by: Simon Kuenzer <simon@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #826
The VFS `struct vnode` structure has two `uk_list_head` members:
`v_link` and `v_names`. These need to be initialized by a dedicated
macro / function, such as `UK_LIST_HEAD_INIT`.
The `stdio_vnode` variable (of type `struct vnode`) is not initializing
these members (they are filled with zeros). This will cause crashes when
using them.
This commit fixes that by properly initializing the `v_link` and
`v_names` members of the `stdio_vnode` variable.
Signed-off-by: Razvan Deaconescu <razvand@unikraft.io> Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com> Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #889
Sairaj Kodilkar [Mon, 13 Mar 2023 05:42:46 +0000 (11:12 +0530)]
lib/uklock: Add SMP-safe reader-writer lock
This commit introduces a reader-writer lock. To avoid
starvation of readers and writer, the lock maintains the current
count of readers and writers waiting for the lock. New readers give
priority to waiting writers and writers give priority to readers on
unlock.
Co-authored-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Signed-off-by: Sairaj Kodilkar <skodilkar7@gmail.com> Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Reviewed-by: Radu Nichita <radunichita99@gmail.com> Reviewed-by: Andra Paraschiv <andra@unikraft.org> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #476
Sairaj Kodilkar [Tue, 31 Jan 2023 10:19:53 +0000 (15:49 +0530)]
lib/uklock: Make semaphore SMP safe
On uniprocessor systems, it is sufficient to disable interrupts.
In SMP environments, however, it is not because a thread executing on a
different core can give rise to a race condition. Hence, to make the
semaphore SMP safe, we use a spinlock.
Signed-off-by: Sairaj Kodilkar <skodilkar7@gmail.com> Reviewed-by: Radu Nichita <radunichita99@gmail.com> Reviewed-by: Andra Paraschiv <andra@unikraft.org> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #476
Sairaj Kodilkar [Tue, 31 Jan 2023 09:36:02 +0000 (15:06 +0530)]
lib/uklock: Make mutex SMP safe
We can safely acquire a lock on uniprocessor systems by disabling the
interrupts, but this does not work in an SMP environment. Hence, to
make the mutex SMP safe, this commit uses atomic compare exchange.
The commit also makes recursive locking optional (disabled by default).
While this is a breaking change, recursive locks are discouraged and
should only be used with caution. The current Unikraft core does not
use recursive locks anywhere.
Co-authored-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Signed-off-by: Sairaj Kodilkar <skodilkar7@gmail.com> Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Reviewed-by: Radu Nichita <radunichita99@gmail.com> Reviewed-by: Andra Paraschiv <andra@unikraft.org> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #476
Sairaj Kodilkar [Tue, 31 Jan 2023 06:52:01 +0000 (12:22 +0530)]
lib/uklock: Provide irqf wrappers for uk_spinlock
Holding a spinlock which is required by an interrupt handler, causes a
deadlock. To avoid this, the programmer must disable the interrupt
before acquiring such spinlocks. This involves saving the interrupt
flags before acquiring the spinlock and restoring them after
releasing the spinlock.
This commit provides versions of the ukplat_spin_* macros for the
uk_spinlock.
Co-authored-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Signed-off-by: Sairaj Kodilkar <skodilkar7@gmail.com> Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Reviewed-by: Radu Nichita <radunichita99@gmail.com> Reviewed-by: Andra Paraschiv <andra@unikraft.org> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #476
Sairaj Kodilkar [Sun, 12 Mar 2023 07:55:56 +0000 (13:25 +0530)]
lib/uksched: Add unconditional wait and wakeup_one
This commit adds an unconditional wait, which is required
for reader-writer locks. The commit also adds an interface to
wakeup only a single thread sleeping on a wait queue.
Co-authored-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Signed-off-by: Sairaj Kodilkar <skodilkar7@gmail.com> Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Reviewed-by: Radu Nichita <radunichita99@gmail.com> Reviewed-by: Andra Paraschiv <andra@unikraft.org> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #476
Sairaj Kodilkar [Tue, 31 Jan 2023 11:22:53 +0000 (16:52 +0530)]
lib/uksched: Make wait queues SMP safe
Wait queues use a linked list to store the threads waiting on a
particular condition. But operations such as add to and remove
from the list are not SMP safe. Hence, this commit associates
a spin lock with each wait queue.
Co-authored-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Signed-off-by: Sairaj Kodilkar <skodilkar7@gmail.com> Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Reviewed-by: Radu Nichita <radunichita99@gmail.com> Reviewed-by: Andra Paraschiv <andra@unikraft.org> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #476
Marc Rittinghaus [Fri, 12 May 2023 15:24:10 +0000 (17:24 +0200)]
lib/vfscore: Avoid recursive locking in sys_rename
If the source and destination directories are the same in sys_rename,
the vnode is locked two times. This is problematic with non-recursive
mutexes. Also the double checks for access are not needed. This commit
adds a check to make sure in this case, only a single lock is done and
redundant checks are avoided.
Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #888
Marc Rittinghaus [Fri, 12 May 2023 11:58:50 +0000 (13:58 +0200)]
lib/9pfs: Fix wrong fid for fsync in 9P2000.u
Performing an fsync with the 9P2000.u protocol version previously
resulted in an I/O error. This is because we used the wrong fid
in the request. This commit moves the implementation of setattr
into a separate function that accepts the fid to use, and adjusts all
callers to provide the fid.
Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com> Reviewed-by: Eduard Vintilă <eduard.vintila47@gmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #886
GCC optimizes the use of `memcmp()` if the `-ffreestanding` flag is
missing. In the current configuration, the flag is missing for GCC <= 9.
The resulting optimization causes in an infinite loop for `lib/nolibc`.
This commit fixes the issue by adding the `-ffreestanding` flag for
`lib/nolibc`, irrespective of the GCC version.
GitHub-Fixes: #728
Signed-off-by: Razvan Deaconescu <razvand@unikraft.io> Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com> Reviewed-by: Eduard Vintilă <eduard.vintila47@gmail.com> Reviewed-by: Marco Schlumpp <marco@unikraft.io> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #740
This commit makes so that the correct info will be printed when the current
thread gets killed. Before, instead of the actual TID, the empty TID from
the iterator would be printed.
Signed-off-by: Florin Postolache <florin.postolache.of@gmail.com> Reviewed-by: Simon Kuenzer <simon@unikraft.io> Reviewed-by: Andra Paraschiv <andra@unikraft.org> Approved-by: Simon Kuenzer <simon@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #885
This commit marks the TID/PID as unavailable to mimic the behaviour of
other kernels. This change also make pthread_rwlocks from glibc work in
binary compatibility mode.
Signed-off-by: Florin Postolache <florin.postolache.of@gmail.com> Reviewed-by: Simon Kuenzer <simon@unikraft.io> Reviewed-by: Andra Paraschiv <andra@unikraft.org> Approved-by: Simon Kuenzer <simon@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #885
This commit changes the tid_map size to reflect the kernel
reservation of the 0 TID/PID value. Before, the first thread
would set the 0 position in all used structures. Now, because
it will be already set, we need to make room for another.
Signed-off-by: Florin Postolache <florin.postolache.of@gmail.com> Reviewed-by: Simon Kuenzer <simon@unikraft.io> Reviewed-by: Andra Paraschiv <andra@unikraft.org> Approved-by: Simon Kuenzer <simon@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #885
Simon Kuenzer [Fri, 5 May 2023 13:44:28 +0000 (15:44 +0200)]
lib/vfscore: `fs0` as default device name for 9PFS
This commit changes the default device/tag name for an automatically
mounted 9pfs root volume from `rootfs` to `fs0`. This is done for
convenience because `fs0` is the tag name that the `qemu-guest` support
script uses to name the first 9pfs share.
Signed-off-by: Simon Kuenzer <simon@unikraft.io> Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com> Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #875
Andrei Tatar [Mon, 8 May 2023 09:02:45 +0000 (11:02 +0200)]
build: Disable compiler control flow protection
Compiler flag -fcf-protection sets control-flow integrity measures
that improve security, and sometimes defaults to enabled on distro
compilers. Some aspects of this feature are implemented in the compiler
header <cet.h> for e.g., stack unwinders. If this header is missing some
programs fail to compile.
Since we don't (yet) support pulling compiler headers into unikraft
build, this change disables cf-protection globally.
Signed-off-by: Andrei Tatar <andrei@unikraft.io> Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com> Reviewed-by: Radu Nichita <radunichita99@gmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #881
Stefan Jumarea [Sun, 7 May 2023 10:53:19 +0000 (13:53 +0300)]
plat/kvm/x86: Fix register names for clang
`clang` does not understand the `rflags` register name, so the build
will fail. On the other hand, `gcc` does not understand `flags`, so the
register naming needs to be placed inside `#ifdef` guards.
Signed-off-by: Stefan Jumarea <stefanjumarea02@gmail.com> Reviewed-by: Marco Schlumpp <marco@unikraft.io> Approved-by: Simon Kuenzer <simon@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #877
Hugo Lefeuvre [Sun, 16 Apr 2023 13:08:17 +0000 (15:08 +0200)]
plat/*, lib/ukalloc: Use PAGE_ALIGN_UP(), PAGE_ALIGN_DOWN()
We have PAGE_ALIGN_DOWN, PAGE_ALIGN_UP, and PAGE_ALIGN macros, but don't
use them consistently. At places we still have code that does custom
ALIGN_DOWN, ALIGN_UP, and masks. Use appropriate macros everywhere.
This patch was generated by the following Coccinelle rule:
Marco Schlumpp [Wed, 12 Apr 2023 09:09:26 +0000 (11:09 +0200)]
build: Do not use segment annotations on linuxu
For the linuxu platform we rely on the default linker script and only
add some additional sections on top of that one. That also means that
there aren't any segments defined. This makes the segment specification
opt-in instead of assuming the segments are always defined.
Marco Schlumpp [Wed, 12 Apr 2023 09:06:17 +0000 (11:06 +0200)]
lib/ukdebug: Mark tracepoint sections as unallocated notes
At runtime we don't care about the content of them, and we only need
them on host side to decode the trace buffer.
This also prevents the linker from adding a segment for these sections.
Because the resulting segment sometimes only contained these two
sections, the final `strip` step would end up with an empty segment.
And in the case of the linuxu platform the resulting image was not
working anymore.
plat/linuxu: Avoid re-initialization of the `heap` and `initrd`
Keep a locally declared static variable `init` to cache the
current amount of memory region descriptors. This way, whenever
`ukplat_memregion_count` is called, `__linuxu_plat_heap_init` and
`__linuxu_plat_initrd_init` do not have to be executed more than
once.
Co-authored-by: Sergiu Moga <sergiu.moga@protonmail.com> Signed-off-by: Sergiu Moga <sergiu.moga@protonmail.com> Signed-off-by: Diego Alejandro Parra Guzman <diego-alejandro.parra-guzman@tttech.com> Reviewed-by: Razvan Deaconescu <razvand@unikraft.io> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #878
plat/linuxu: Add check for memory region index out of range
Ensure that we do not try to fetch a memory region descriptor by an
index that is larger than our current memory region descriptor count.
Furthermore, this guarantees that `ukplat_memregion_count` is always
called before `ukplat_memregion_get` is executed fully. This way we
will always have the memory region descriptors as well as their count
set up and available before we try to fetch one.
Co-authored-by: Sergiu Moga <sergiu.moga@protonmail.com> Signed-off-by: Sergiu Moga <sergiu.moga@protonmail.com> Signed-off-by: Diego Alejandro Parra Guzman <diego-alejandro.parra-guzman@tttech.com>
GitHub-Fixes: #766 Reviewed-by: Razvan Deaconescu <razvand@unikraft.io> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #878
Alexander Jung [Mon, 8 May 2023 07:43:37 +0000 (07:43 +0000)]
support/scripts: Add additional recognised Git trailers to checkpatch
This commit introduces 3 additional Git trailers to be recognised by the
checkpatch program:
- GitHub-Fixes - Used to reference and address an open issue, often
a specific bug or problem. GitHub will automatically
close the issue once the commit with this Git
trailer is merged.
- GitHub-Closes - Used to reference an open issue or PR, which is not
specific to a particular bug. For example, it can
be used to supercede another PR. GitHub will
automatically close the referenced issue or PR once
a commit with this Git trailer is merged.
- Co-authored-by - Similar to providing additional Signed-off-by's,
this trailer is recognised by GitHub and helps
attribute authorship, making the user's profile
more visible.
- Approved-by - Signifies the authoritive representative (usually a
project maintainer) who approved the commit.
Additional adjustments to the checkpatch script are made in order to
recognise non-standard Git trailer values (those from GitHub).
Signed-off-by: Alexander Jung <alex@unikraft.io> Reviewed-by: Gabi Mocanu <gabi.mocanu98@gmail.com> Reviewed-by: Radu Nichita <radunichita99@gmail.com> Reviewed-by: Gabi Mocanu <gabi.mocanu98@gmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #879
Simon Kuenzer [Mon, 8 May 2023 14:38:14 +0000 (16:38 +0200)]
lib/uklibparam: Fixes for review PR #867
Commits
- 7741af97 "`UK_LIBPARAM_PARAM_ALIAS()`,`UK_LIBPARAM_PARAM_ARR_ALIAS()`"
- 1cc3a2f6 "Rewrite of parser"
- 243f0c45 "Declare __LIBNAME__, __BASENAME__ and __VARIANT__ for .lds.S"
- 910b9bef "Add linker scripts to link dependencies"
should have been included with PR #867 but got merged by mistake with
PR #868 due to a dependency.
This commit addresses the comments provided with the review for PR #867.
Signed-off-by: Simon Kuenzer <simon@unikraft.io> Reviewed-by: Delia Pavel <delia_maria.pavel@stud.acs.upb.ro> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #882
@depends on !ok@
expression ptr;
position call.p;
@@
ptr@p = uk_palloc(...);
+ if (ptr == NULL) return;
Signed-off-by: Hugo Lefeuvre <hugo.lefeuvre@manchester.ac.uk> Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com> Approved-by: Simon Kuenzer <simon@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #839