New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
lib/ukboot: Critical error when running app-helloworld
on linuxu
#766
Labels
kind/bug
Something isn't working
Milestone
Comments
hi @RaduNichita I add some changes that will fix this problem. |
4 tasks
4 tasks
4 tasks
4 tasks
Hackathon points: 40 |
mogasergiu
pushed a commit
to mogasergiu/unikraft
that referenced
this issue
May 8, 2023
Ensure that we do not try to fetch a memory region descriptor by an index that is larget 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. GitHub-Fixes: unikraft#766 Signed-off-by: guzman <daparrag@correo.udistrital.edu.co>
mogasergiu
pushed a commit
to mogasergiu/unikraft
that referenced
this issue
May 8, 2023
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. GitHub-Fixes: unikraft#766 Signed-off-by: guzman <daparrag@correo.udistrital.edu.co>
mogasergiu
added a commit
to mogasergiu/unikraft
that referenced
this issue
May 8, 2023
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. GitHub-Fixes: unikraft#766 Signed-off-by: guzman <daparrag@correo.udistrital.edu.co> Co-authored-by: Sergiu Moga <sergiu.moga@protonmail.com>
mogasergiu
added a commit
to mogasergiu/unikraft
that referenced
this issue
May 8, 2023
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: guzman <daparrag@correo.udistrital.edu.co> GitHub-Fixes: unikraft#766
razvand
pushed a commit
to mogasergiu/unikraft
that referenced
this issue
May 10, 2023
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: unikraft#766
dragosp27
added a commit
to dragosp27/unikraft
that referenced
this issue
Jun 1, 2023
commit abd35a233677df19c463687405a3973a7eb9a424 Author: Alexander Jung <alex@unikraft.io> Date: Thu Jun 1 14:55:17 2023 +0200 Release: v0.13.1 Atlas Signed-off-by: Razvan Deaconescu <razvand@unikraft.io> Signed-off-by: Simon Kuenzer <simon@unikraft.io> Signed-off-by: Alexander Jung <alex@unikraft.io> commit c31a4b4937f94695d45079d81f3667a129f61650 Author: Stefan Jumarea <stefanjumarea02@gmail.com> Date: Mon May 22 13:06:32 2023 +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 commit cd9dcb4079b53555d3c1333650241f467f4d1cc4 Author: Stefan Jumarea <stefanjumarea02@gmail.com> Date: Sat May 27 11:57:40 2023 +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 commit 31bcc48776be55f94d3f2de408b768de4cdeaa5a Author: Stefan Jumarea <stefanjumarea02@gmail.com> Date: Wed May 17 11:15:32 2023 +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 commit de40bcc1440b324491a5e520523d5af40dc5e66f Author: Michalis Pappas <michalis@unikraft.io> Date: Sat May 27 15:51:57 2023 +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 commit ef5b449be28c69a64da9f82733c03c15c0c28664 Author: Andrei Tatar <andrei.ttr@gmail.com> Date: Fri Apr 21 18:45:16 2023 +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 commit ffdbb486c4dd3fce002607d8de76c8cff4c126c4 Author: Andrei Tatar <andrei.ttr@gmail.com> Date: Fri Apr 21 18:24:12 2023 +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 commit 988b7eddc3601d6a6cc394e71b2a2f9befff99c2 Author: Christiano Haesbaert <haesbaert@haesbaert.org> Date: Wed May 17 10:19:42 2023 +0200 lib/uknetdev: Fix typo in uk_netdev_tx_one Signed-off-by: Christiano Haesbaert <haesbaert@haesbaert.org> Reviewed-by: Cezar Craciunoiu <cezar.craciunoiu@unikraft.io> Approved-by: Alexander Jung <alex@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #901 commit b0da6bfc5286027fd4b77256e4bef5725cbeaba9 Author: Alexander Jung <alex@nder.sh> Date: Mon May 15 23:09:49 2023 +0200 Release: v0.13.0 Atlas Signed-off-by: Razvan Deaconescu <razvand@unikraft.io> Signed-off-by: Marc Rittinghaus <marc@unikraft.io> Signed-off-by: Simon Kuenzer <simon@unikraft.io> Signed-off-by: Alexander Jung <alex@unikraft.io> commit 8da5cbb6cd6e973a4c6cdbb4b113d5fc222a57fb Author: Simon Kuenzer <simon@unikraft.io> Date: Fri Mar 24 17:33:17 2023 +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 commit 7279c2d240e92285aaf2e7ebd48813a70f3d20a7 Author: Costin Sin <sin.costinrobert@gmail.com> Date: Sat May 13 06:48:31 2023 +0000 lib/posix-time: Add clock_nanosleep syscall clock_nanosleep syscall should mimic the nanosleep syscall when the clockid equals CLOCK_REALTIME and the TIMER_ABSTIME flag is missing. Signed-off-by: Costin Sin <sin.costinrobert@gmail.com> 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: #891 commit 8ea48c6f064f62ab007300d87de93bb8f61f854c Author: Tu Dinh Ngoc <dinhngoc.tu@irit.fr> Date: Tue Apr 4 20:17:40 2023 +0000 lib/vfscore: Dynamically allocate mount paths 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 commit a7698597cd20b726dc15405368c3bf23050304c8 Author: Razvan Deaconescu <razvand@unikraft.io> Date: Sat May 13 01:28:57 2023 +0300 lib/vfscore: Initialize lists for stdio_vnode 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 commit 7b76234d3351c4d4414ba341c2d4fb9fd6220b62 Author: Razvan Deaconescu <razvand@unikraft.io> Date: Sat May 13 01:45:43 2023 +0300 lib/vfscore: Add semicolon to DPRINTF macro The `DPRINTF()` macro in `vfscore` requires a semicolon (`;`). If this is not present (once `DEBUG_VFS` is enabled), a build issue occurs. Signed-off-by: Razvan Deaconescu <razvand@unikraft.io> Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com> 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: #890 commit cb35dfff57bdc7b7e2896922fd0743e4f25f5972 Author: Sairaj Kodilkar <skodilkar7@gmail.com> Date: Mon Mar 13 11:12:46 2023 +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 commit 362ddab80a491a4ed3a7d2354813f2fb94282086 Author: Sairaj Kodilkar <skodilkar7@gmail.com> Date: Tue Jan 31 15:49:53 2023 +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 commit edda7dff6f86d94ef46342a3f71974158469826b Author: Sairaj Kodilkar <skodilkar7@gmail.com> Date: Tue Jan 31 15:06:02 2023 +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 commit f205fee3da57c467ce1cf9cf33f88d529e79875b Author: Sairaj Kodilkar <skodilkar7@gmail.com> Date: Tue Jan 31 12:22:01 2023 +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 commit d073d652299d53509d059b60706eee236d5c0d10 Author: Sairaj Kodilkar <skodilkar7@gmail.com> Date: Sun Mar 12 13:25:56 2023 +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 commit a078828e0d7a5d33b3d2c4bd62b79e02ddcf7b9b Author: Sairaj Kodilkar <skodilkar7@gmail.com> Date: Tue Jan 31 16:52:53 2023 +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 commit 3970edf400001f0fb62a86a1dea898e323aafd3e Author: Sairaj Kodilkar <skodilkar7@gmail.com> Date: Tue Jan 31 12:17:50 2023 +0530 include/arch: Add macros for atomic add, sub, or This commit adds macros to atomically add, subtract, and perform a bitwise or based on the builtins provided by GCC. 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 commit dedc1b71eecc0ac25eb60a5d62a7a10f9b7b7c28 Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Date: Fri May 12 17:24:10 2023 +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 commit 55cf96d011284e35fced79e8d8bac4934d0c8d6d Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Date: Fri May 12 16:19:06 2023 +0200 lib/ukswrand: Add missing errno include This commit adds an include for errno.h that might not be included otherwise and causes the build to fail. Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Reviewed-by: Cezar Craciunoiu <cezar.craciunoiu@unikraft.io> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #887 commit dfe489a4f27aff6c74b2c7c8b111e0afb73e5a96 Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Date: Fri May 12 14:00:38 2023 +0200 lib/uk9p: Add workaround for QEMU WSTAT fsync bug This commit adds a workaround for a bug in QEMU where performing an fsync using the WSTAT command in 9P2000.u leads to a zero-sized response. Checkpatch-Ignore: SUSPECT_CODE_INDENT 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 commit d2c0ccd32602e337c12fb50867a2b24530fa0f8f Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Date: Fri May 12 13:58:50 2023 +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 commit d7f598242afd95dceab42983d8d616885e618cbf Author: Razvan Deaconescu <razvand@unikraft.io> Date: Fri Feb 3 13:41:38 2023 +0200 lib/nolibc: Add -ffreestanding flag 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 commit 7eac25ea53ae833294652d6f38d04732612145b6 Author: Florin Postolache <florin.postolache.of@gmail.com> Date: Thu May 11 22:48:53 2023 +0300 lib/posix-process: Fix debug printing of TIDs 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 commit d4100c9dc4dfffdebd48ce8788d04ca3fa75d066 Author: Florin Postolache <florin.postolache.of@gmail.com> Date: Thu May 11 13:07:48 2023 +0300 lib/posix-process: Reserve PID/TID 0 for kernel 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 commit a1c73be910b779b3b57a5ae79435d4f86b488fa2 Author: Florin Postolache <florin.postolache.of@gmail.com> Date: Thu May 11 12:44:58 2023 +0300 lib/posix-process: Correct MAX_PID config option 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 commit ddefe64f12ab4599f0ea3064bbbfedbf5205384f Author: Andra Paraschiv <andra@unikraft.org> Date: Wed May 10 13:40:27 2023 +0300 lib/vfscore: Fix file path resolution for 9pfs setup The path resolution doesn't correctly work for a set of file cases (e.g. symlinks to binaries or shared libraries). One setup example is using 9pfs and the entire root local filesystem, while running the "ls" binary and loading the shared libraries: unikraft/support/scripts/qemu-guest -k build/app-elfloader_qemu-x86_64 -e / -a "/bin/ls /" A "/" character is omitted from the last part of the path e.g. "/binls" instead of "/bin/ls". Update the logic to include the missing character. Signed-off-by: Andra Paraschiv <andra@unikraft.org> Reviewed-by: Florin Postolache <florin.postolache.of@gmail.com> Reviewed-by: Ioan-Teodor Teugea <ioan_teodor.teugea@stud.acs.upb.ro> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #883 commit b2c2164eeb2745325489003dc6b52354c02a9a4d Author: Simon Kuenzer <simon@unikraft.io> Date: Fri May 5 15:44:28 2023 +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 commit 5784d007b1d2b727d3151f84ea70e5dd4683df32 Author: Andrei Tatar <andrei@unikraft.io> Date: Mon May 8 11:02:45 2023 +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 commit cfc103cf6fc09add1291990a8b44a172a54195c5 Author: Stefan Jumarea <stefanjumarea02@gmail.com> Date: Sun May 7 13:53:19 2023 +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 commit c04312c813a9ce47476f3ea7ece77f22cd888dcd Author: Hugo Lefeuvre <hugo.lefeuvre@manchester.ac.uk> Date: Sun Apr 16 15:08:17 2023 +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: @@ expression E; @@ - ALIGN_DOWN(E, __PAGE_SIZE) + PAGE_ALIGN_DOWN(E) @@ expression E; type T; @@ - ALIGN_DOWN(E, (T) __PAGE_SIZE) + PAGE_ALIGN_DOWN(E) @@ expression E; @@ - ALIGN_UP(E, __PAGE_SIZE) + PAGE_ALIGN_UP(E) @@ expression E; type T; @@ - ALIGN_UP(E, (T) __PAGE_SIZE) + PAGE_ALIGN_UP(E) @@ expression E; @@ - (E + PAGE_SIZE - 1) & PAGE_MASK + PAGE_ALIGN(E) Signed-off-by: Hugo Lefeuvre <hugo.lefeuvre@manchester.ac.uk> Reviewed-by: Dragos Petre <dragos.petre27@gmailcom> Reviewed-by: Alexandru Calciu <alxcalciu@gmail.com> Approved-by: Simon Kuenzer <simon@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #842 commit 5d9c4d702ec4a6e9de4e848a727db21e06d5d3b7 Author: Maria Sfiraiala <maria.sfiraiala@gmail.com> Date: Mon May 8 10:49:43 2023 +0300 lib/{nolibc,isrlib}: Modify pointer comparison This commit typecasts `src` and `dst` strings from `memmove()` to ensure that their values are treated as pointers. It also modifies the function implementation to handle overlapping. Co-authored-by: Soumya Ranjan <ranjan42069@gmail.com> Signed-off-by: Maria Sfiraiala <maria.sfiraiala@gmail.com> Signed-off-by: Soumya Ranjan <ranjan42069@gmail.com> Reviewed-by: Radu Nichita <radunichita99@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: #880 commit 4e139b3164bb4ead5cec2760ea0f3fd4aecb762c Author: Marco Schlumpp <marco@unikraft.io> Date: Wed Apr 12 11:09:26 2023 +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. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Checkpatch-Ignore: SPACING Checkpatch-Ignore: COMPLEX_MACRO Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Reviewed-by: Razvan Deaconescu <razvand@unikraft.io> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #833 commit 7255b0ee1209d3309a610d8ea516fbc21ea84e27 Author: Marco Schlumpp <marco@unikraft.io> Date: Wed Apr 12 11:06:17 2023 +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. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Reviewed-by: Razvan Deaconescu <razvand@unikraft.io> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #833 commit d57a4c7cd10ab8d781a089629cb310b8e8de3c91 Author: Diego Alejandro Parra Guzman <diego-alejandro.parra-guzman@tttech.com> Date: Wed May 10 14:12:39 2023 +0300 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 commit 372475c140863dabab697f01ab485c971a3ba054 Author: Diego Alejandro Parra Guzman <diego-alejandro.parra-guzman@tttech.com> Date: Wed May 10 14:12:01 2023 +0300 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 commit d39b30308e957893cd2bed2115aeb056f2b08b59 Author: Alexander Jung <alex@unikraft.io> Date: Mon May 8 07:43:37 2023 +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 commit 47c243c394548b1198951f44af1c7101bd868589 Author: Aryan Verma <aryanvarma7272@gmail.com> Date: Thu Feb 16 15:19:32 2023 +0530 doc: Add Codacy code quality status badge to README.md GitHub-Fixes: #650 Signed-off-by: Aryan Verma <aryanvarma7272@gmail.com> Co-authored-by: Alexander Jung <alex@unikraft.io> Reviewed-by: Cezar Craciunoiu <cezar.craciunoiu@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: #764 commit 84172dbfbe07b91cade20eb6c88f2c4a1c2e6255 Author: Simon Kuenzer <simon@unikraft.io> Date: Mon May 8 16:38:14 2023 +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 commit 275429893d983ff13d9874b310b4566c254631fe Author: Hugo Lefeuvre <hugo.lefeuvre@manchester.ac.uk> Date: Sun Apr 16 11:57:44 2023 +0200 plat/xen: Fix unchecked uk_palloc() value in x86/mm.c The return value of uk_palloc is not checked in _arch_init_p2m. Allocation failure at that point should never happen, but it's not a reason not to check. At this stage, in the event of a failure, we should probably abort the boot altogether. This bug was detected using the following Coccinelle spatch: @call@ expression ptr; position p; @@ ptr@p = uk_palloc(...); @ok@ expression ptr; position call.p; @@ ptr@p = uk_palloc(...); ... when != ptr ( (ptr == NULL || ...) | (ptr != NULL || ...) ) @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 commit b240edc27abe95d22034d1b4ea7d582dd93098c2 Author: Eduard Vintilă <eduard.vintila47@gmail.com> Date: Mon May 1 19:13:55 2023 +0300 lib/vfscore: Handle `FIONBIO` command in `pipe_ioctl()` The current `ioctl` implementation for pipes does not handle the `FIONBIO` command, which leads to a negative error value being returned. This commit introduces a simple case which sets the FNONBLOCK flag when such a command is passed. Signed-off-by: Eduard Vintilă <eduard.vintila47@gmail.com> Reviewed-by: Tu Dinh Ngoc <dinhngoc.tu@irit.fr> 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: #874 commit 0f75e55ba08647b2e398a19aea35f31b06c0da6a Author: Andrei Tudor TOPALĂ (101668) <topala.andrei@gmail.com> Date: Fri Apr 15 00:36:51 2022 +0300 plat/common: Add firecracker shutdown signal Firecracker emulates a PS/2 controller and detects attempted writes to the CPU reset line. Co-authored-by: Marco Schlumpp <marco@unikraft.io> Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #760 commit 59111c4f28254c0614c62d56113e2048300a5549 Author: Marco Schlumpp <marco@unikraft.io> Date: Mon Apr 17 11:19:33 2023 +0200 plat/kvm: Include target hypervisor in image name This makes it more clear on what hypervisor the image works on. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #760 commit 789cdba609d4c879e6b8bfc05c7b89cc85c1f3b7 Author: Marco Schlumpp <marco@unikraft.io> Date: Tue Apr 11 17:58:08 2023 +0200 plat/kvm/x86: Use position independent code for lxboot This should make it easier in the future to extend the entry point to support proper boot loaders such as the one in QEMU. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #760 commit f0ae44de725f698505060756d85558361fcd2abb Author: Marco Schlumpp <marco@unikraft.io> Date: Thu Feb 9 14:47:36 2023 +0100 plat/kvm/x86: Workaround re-mapping low-mem areas The paging code currently does not unmap the memory area before the kernel image, but then tries to re-map any region in that area. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #760 commit e85a0cd860e4166b26269785e229c6676b175a30 Author: Marco Schlumpp <marco@unikraft.io> Date: Thu Feb 9 14:43:51 2023 +0100 plat/kvm/x86: Add an entry point for the firecracker hypervisor This is currently not conforming to the actual Linux boot protocol and only suitable for firecracker. The kernel image would have to include a proper Linux boot protocol header to allow loading with proper bootloaders such as the one in QEMU. Co-authored-by: Marc Rittinghaus <marc@unikraft.io> Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #760 commit ebb4795a3a41e8196f501f5b0b7d7a88361ad7f3 Author: Marco Schlumpp <marco@unikraft.io> Date: Thu Feb 9 14:41:00 2023 +0100 plat/kvm/x86: Add structures/definitions for the linux boot protocol This defines the necessary structures to parse the information passed by a linux boot protocol compatible bootloader. Co-authored-by: Marc Rittinghaus <marc@unikraft.io> Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #760 commit deef081dd04ee254c03266b431befb3ae4d2a329 Author: Marco Schlumpp <marco@unikraft.io> Date: Thu Feb 9 14:38:27 2023 +0100 plat/kvm: Add hypervisor/boot protocol configuration This allows the configuration of a target hypervisor. Depending on the hypervisor a suitable boot protocol is selected. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #760 commit 7190449a7a0bdd0ffcd90c37fa0a8d2fc287c804 Author: Marco Schlumpp <marco@unikraft.io> Date: Mon Feb 13 16:58:19 2023 +0100 plat/common: Extract non-multiboot specific memory region helpers The multiboot entry point had a few internal functions that are also useful for other entry points. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #760 commit 70b260d0668eb0850465c525ac1ca6b697b23ce3 Author: Marco Schlumpp <marco@unikraft.io> Date: Tue Apr 25 10:05:41 2023 +0200 include/uk: Simplify RANGE_OVERLAP macro We can simplify the check by observing that there are only two conditions necessary to check whether a range does *not* overlap: - the end of range 0 is before the start of range 1 [--0--) [--1--) - OR the start of range 0 is after the end of range 1 [--1--) [--0--) Inverting this gives us a simple condition for checking whether ranges *do* overlap. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #760 commit 7346338847c8449389316ffc2c554a5d3637ba69 Author: Marco Schlumpp <marco@unikraft.io> Date: Thu Feb 9 14:34:39 2023 +0100 plat/*: Introduce cmdline length to bootinfo Some boot protocols already have the length information and the internal command line handling works with non-null terminated strings anyway. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #760 commit ad684b5175f70e78dc37ed63d8a124c2b6e53d1c Author: Marco Schlumpp <marco@unikraft.io> Date: Thu Feb 9 13:09:03 2023 +0100 plat/kvm/x86: Don't create fine-grained mapping for low memory Mapping all memory makes the page table more independent of the actual boot protocol. Firecracker currently puts the protocol information at a very low address (0x7000). Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #760 commit c7c221dc66b124752250a39a677e4a9bbe3f2c24 Author: Marco Schlumpp <marco@unikraft.io> Date: Fri Feb 24 17:18:55 2023 +0100 plat/kvm: Remove intermediate relocatable object step This object was previously used to hide all symbols except the entry point. But this step was removed making the relocatable object creation unnecessary. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Simon Kuenzer <simon@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #789 commit 195cc32f7e5e65d8929ae65b8fa9203ddf246ba6 Author: Eduard Vintilă <eduard.vintila47@gmail.com> Date: Thu Mar 16 14:13:06 2023 +0200 plat/drivers/ofw: Fix search in `fdt_node_offset_by_compatible_list` The current implementation returns as soon as a node that matches a compatible string is found. However, we should iterate through all of the compatible list to make sure that we return the node with the least offset value such that future searches will not skip any matching nodes. Signed-off-by: Eduard Vintilă <eduard.vintila47@gmail.com> Reviewed-by: Robert Kuban <robert.kuban@opensynergy.com> Reviewed-by: Razvan Virtan <virtanrazvan@gmail.com> Approved-by: Michalis Pappas <michalis@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #805 commit dfbf3ffd2cf2542e97129e017f4a06afd65b079c Author: Eduard Vintilă <eduard.vintila47@gmail.com> Date: Thu Mar 16 14:10:46 2023 +0200 plat/drivers/ofw: Fix incorrect offset in `fdt_translate_one` When a node is missing the "ranges" property, offset should be set to 0. The current implementation sets offset to the address to be translated, which ignores the fact that `fdt_default_translate` is later called. The latter function adds the offset to the same address, resulting in doubling the effective address, when in fact a 1-to-1 mapping is necessary. Signed-off-by: Eduard Vintilă <eduard.vintila47@gmail.com> Reviewed-by: Robert Kuban <robert.kuban@opensynergy.com> Reviewed-by: Razvan Virtan <virtanrazvan@gmail.com> Approved-by: Michalis Pappas <michalis@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #805 commit 4792af49d89c1c0e141b40720d4ec1b89530411a Author: Takeru Wada <takew@asg.cs.tuat.ac.jp> Date: Mon Mar 13 14:37:51 2023 +0000 lib/nolibc: Remove warnings of timespec This commit fixes the definition of pointer arguments in GCC >= 11. Signed-off-by: Takeru Wada <takew@asg.cs.tuat.ac.jp> Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #800 commit ec2c285ea91fac0a178e6c550c122e6bc82f10dd Author: Simon Kuenzer <simon@unikraft.io> Date: Thu Mar 16 17:31:42 2023 +0100 lib/ukboot: Print environment variables before entering main 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: #868 commit 3f89855cf89e38a009d85da26b1355f167985ca8 Author: Simon Kuenzer <simon@unikraft.io> Date: Tue Mar 14 15:18:12 2023 +0100 lib/posix-environ: Symbol aliases for `environ` In order to comply with common libc behavior, we provide the following symbol aliases for environ`: `_environ`, `__environ`, `___environ`. 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: #868 commit fefaa0591880d69770a869cbc06f85b38872dc61 Author: Simon Kuenzer <simon@unikraft.io> Date: Fri Feb 24 01:45:52 2023 +0100 lib/posix-environ: Variables from kernel command line Introduces the ability to populate additional environment variables via the kernel command line. Checkpatch-Ignore: SPACING 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: #868 commit 6f2798a9f2a95d02c9aec763a3c6e7649350f104 Author: Simon Kuenzer <simon@unikraft.io> Date: Wed Feb 15 00:32:29 2023 +0100 lib/posix-environ: Compiled-in environment variables We introduce the ability to compile-in up to 16 environment variables. The values can be set via `menuconfig`. The initial `environ` array is automatically sized to match the number of compiled-in values. 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: #868 commit a46c0c1d63a71742e79b4fdd1bf690df560abf8d Author: Simon Kuenzer <simon@unikraft.io> Date: Thu Feb 9 21:54:40 2023 +0100 lib/posix-environ: Register and make it compile This commit integrates and enables compiling of the imported environment helper functions (see previous commit). 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: #868 commit e9b7d00e5407dc0c4cfeb912b2f3329cdc5ff28b Author: Simon Kuenzer <simon@unikraft.io> Date: Wed Feb 8 17:01:41 2023 +0100 lib/posix-environ: Import from musl 1.2.3 This commit imports needed code from musl 1.2.3. This concentrates mostly on the following helper functions for environment variables: - `clearenv()` - `getenv()` - `putenv()` - `setenv()` - `unsetenv()` Checkpatch-Ignore: FUNCTION_WITHOUT_ARGS Checkpatch-Ignore: LINE_SPACING Checkpatch-Ignore: SPACING Checkpatch-Ignore: TRAILING_STATEMENTS Checkpatch-Ignore: SIZEOF_PARENTHESIS Checkpatch-Ignore: TYPO_SPELLING 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: #868 commit 7741af977fd2c723272abfce8c166deb125cf6c6 Author: Simon Kuenzer <simon@unikraft.io> Date: Fri Feb 24 01:42:55 2023 +0100 lib/uklibparam: `UK_LIBPARAM_PARAM_ALIAS()`,`UK_LIBPARAM_PARAM_ARR_ALIAS()` This commit provides `UK_LIBPARAM_PARAM_ALIAS()` and `UK_LIBPARAM_PARAM_ARR_ALIAS()` which are variants of `UK_LIBPARAM_PARAM()` and `UK_LIBPARAM_PARAM_ARR()`. These registration macros allow to set a custom parameter name instead of deriving it from the variable name. 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: #868 commit 1cc3a2f6e33d1dbb390d24e79f73b86b34597b23 Author: Simon Kuenzer <simon@unikraft.io> Date: Fri Feb 24 00:42:29 2023 +0100 lib/uklibparam: Rewrite of parser This commit introduces a rewrite of `lib/uklibparam`. The rewrite ensures that it is errno-free, malloc-free, and TLS-free. This makes it ideal for processing library parameters early during boot. It includes an own and modified version of `strtoull` function that is used for parsing integer values from the command line. Additionally, the parser can handle arrays more intuitively (and for any data type of the elements) while fully utilizing pre-processed argument vectors. It relies on the fact that whitespacing and quoting is already handled (e.g., by `lib/ukargparse`). There are new types that are more inline with the ones defined by ukstore. This rewrite introduces the ability to provide a parameter description with updated parameter registration macros: UK_LIBPARAM_PARAM(variable, type, description) UK_LIBPARAM_PARAM_ARR(variable, type, count, description) The description is printed on the help output. The previous interfaces are kept for backwards compatibility. However, it is planned to remove them as soon as the code base is completely adopted. Checkpatch-Ignore: SPACING Checkpatch-Ignore: OPEN_BRACE Checkpatch-Ignore: MACRO_WITH_FLOW_CONTROL 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: #868 commit 243f0c45ca8060a230e0bde34783b75c0fefb47a Author: Simon Kuenzer <simon@unikraft.io> Date: Thu Feb 23 22:21:04 2023 +0100 build: Declare __LIBNAME__, __BASENAME__ and __VARIANT__ for .lds.S .lds.S files are linker script files that use the C preprocessor in order to generate the final .lds file. This commit provides Unikraft's common declarations of `__LIBNAME__`, `__BASENAME__`, `__VARIANT__` to this pre-processing step so that they can be used for generating linker scripts. 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: #868 commit 910b9befc07212f8b1313b234ce162dd6130e0d0 Author: Simon Kuenzer <simon@unikraft.io> Date: Thu Feb 23 21:47:59 2023 +0100 plat/*: Add linker scripts to link dependencies This commit adds needed linker scripts as dependency to the linking rule of the final image. This dependency was mostly indirectly covered via libraries. However, updates to platform linker scripts did not trigger relinking the final image. Additionally, pure API libraries (like `lib/ukfalloc`) would not even cause building a linker script that is shipped with the library or injected with an `EACHOLIB_SRCS` declaration. The library buildrule is generated but because no library object is generated, the linker script was never be part of a dependency list. 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: #868 commit ae0ee99ee2f79b8db511ab97a4f3d3f3218ca121 Author: calex257 <alexandru.calciu@stud.acs.upb.ro> Date: Sat Feb 25 17:53:56 2023 +0200 lib/nolibc: Add README.md Add a brief description of nolibc, providing an overview of its purpose, usage and limitations. This commit also shows a relevant example of how to configure an application to use Unikraft-specific assertions or the ones implemented in nolibc. Signed-off-by: Alexandru Calciu <alexandru.calciu@stud.acs.upb.ro> Reviewed-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: #778 commit 3e7a08afd4147f4f101a72765bf105968cce11f9 Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Date: Tue Apr 25 12:24:08 2023 +0200 lib/vfscore: Cleanup sys_symlink This commit cleans up sys_symlink() according to the current coding conventions and uses separate jump labels for exits depending on if the vnode lock needs to be released or not. Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #866 commit 20a2f602813e407754f217b1804384b9289d21e2 Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Date: Tue Apr 25 12:19:05 2023 +0200 lib/vfscore: Do not copy oldpath in symlink With the changes to the vnode ops definitions the symlink operation takes a constant string. We can thus just pass the input string on without having to copy it. Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #866 commit 429a017dcf3bd3b2429a87c55686cb47d81bb875 Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Date: Tue Apr 25 12:16:06 2023 +0200 lib/ramfs: Switch to const strings for vnops This commit changes all vnode operations to accept constant string parameters to be inline with the changed definitions. Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #866 commit 22c1a55814bd3763ea35285ae75a14ee5accf988 Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Date: Tue Apr 25 12:14:49 2023 +0200 lib/devfs: Switch to const strings for vnops This commit changes all vnode operations to accept constant string parameters to be inline with the changed definitions. Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #866 commit 3ab142f25240e39fe90c8fe97cbc0525e8ede89d Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Date: Tue Apr 25 12:14:11 2023 +0200 lib/9pfs: Switch to const strings for vnops This commit changes all vnode operations to accept constant string parameters to be inline with the changed definitions. Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #866 commit e04174a8eae7eaf16be08b93142ccd3266ce58d6 Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Date: Tue Apr 25 12:12:09 2023 +0200 lib/vfscore: Make vnops strings constant The current vnode operations define strings as mutable, which makes it more difficult to do optimizations. Since no buffer size is supplied the strings can only be modified on a char-for-char basis anyways, which also limits the use-cases. In addition, no implementation of the vnode operations makes use of the mutability of the strings. This commit thus introduces the `const` keyword for all strings passed to vnode operations. Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #866 commit 7ef5bbccffa6592a0d6da0efedd3c63366ba3cbb Author: Marco Schlumpp <marco@unikraft.io> Date: Mon Apr 17 10:04:04 2023 +0200 lib/posix-futex: Check for proper FUTEX_CLOCK_REALTIME usage The documentation specifies a list of operations which support this flag. This adds a check that explicitly rejects all invalid combinations and returns `ENOSYS` according to the documentation. Checkpatch-Ignore: ENOSYS Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Adina Smeu <adina.smeu@gmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #758 commit 54d27549bfa6a0c3aaffe08d10c7e9a5101f8c0d Author: Marco Schlumpp <marco@unikraft.io> Date: Mon Apr 17 09:57:45 2023 +0200 lib/posix-futex: Ignore FUTEX_PRIVATE_FLAG The flag can be specified for all operations and does not make a difference in the context of a single-process scenario. Therefore, we can ignore it. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Adina Smeu <adina.smeu@gmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #758 commit c905e263471c9081e457d1d0041a083dec53f828 Author: Marco Schlumpp <marco@unikraft.io> Date: Thu Feb 9 16:44:35 2023 +0100 lib/posix-futex: Implement subset of FUTEX_WAIT_BITSET Many modern applications use FUTEX_WAIT_BITSET to be able to set an absolute timeout. To accomplish that they set all bits in the val3/mask parameter, which makes the operation equivalent to a normal FUTEX_WAIT (except the absolute timeout value). Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Adina Smeu <adina.smeu@gmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #758 commit 7683671942d29fb5c3cc4c6471f257f0dc290687 Author: Marco Schlumpp <marco@unikraft.io> Date: Thu Feb 9 15:57:30 2023 +0100 lib/uksched: Expose uk_thread_block_until This allows external API clients to specify an absolute deadline for waking up. This is potentially more precise because the `timeout` is relative to whenever uk_thread_block_timeout is actually taking the "current" time. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Adina Smeu <adina.smeu@gmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #758 commit 5223ae6691e0d8ee449ece64f6f9bde3aaeb7643 Author: Nour-eddine Taleb <contact@noureddine.xyz> Date: Sat Mar 25 19:56:47 2023 +0000 lib/uksched: fix docs Signed-off-by: Nour-eddine Taleb <contact@noureddine.xyz> Reviewed-by: Adina Smeu <adina.smeu@gmail.com> Approved-by: Cezar Craciunoiu <cezar.craciunoiu@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #809 commit c00afb4d422af1377374bfee5d4ea52cec0cbea0 Author: Nour-eddine Taleb <contact@noureddine.xyz> Date: Thu Mar 23 23:15:24 2023 +0000 lib/posix-futex/test: port the test cases to the new sched apis due to the changes in scheduling apis, it was necessary to update posix-futex tests which still relays on the old apis. GitHub-Fixes: #630 Signed-off-by: Nour-eddine Taleb <contact@noureddine.xyz> Reviewed-by: Adina Smeu <adina.smeu@gmail.com> Approved-by: Cezar Craciunoiu <cezar.craciunoiu@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #809 commit ce2e3dae5f8d876e38dcdcf0c3a83850cfb98dc8 Author: Marco Schlumpp <marco@unikraft.io> Date: Mon Jan 2 11:22:18 2023 +0100 plat/kvm/x86: Stop unwinding at _libkvmplat_entry2 The _libkvmplat_entry2 function is called using assembler code that switches stacks. Therefore, a debugger can't unwind its frame. This inserts a CFI that marks the previous instruction pointer as undefined. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Simon Kuenzer <simon@unikraft.io> Approved-by: Simon Kuenzer <simon@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #700 commit 7f450a9834e4c31a938e8a59e72006ec9389cc18 Author: Marco Schlumpp <marco@unikraft.io> Date: Mon Jan 2 15:15:52 2023 +0100 plat/kvm/x86: Add unwinding information to interrupt/exception handlers This allows debuggers and profilers to unwind past interrupt/exception handlers. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Simon Kuenzer <simon@unikraft.io> Approved-by: Simon Kuenzer <simon@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #700 commit f87e378199fa87c07e77b36c5c979c9194fb1d93 Author: Marco Schlumpp <marco@unikraft.io> Date: Wed Dec 21 11:01:34 2022 +0100 plat/x86: Add unwind information to system call handler Without this information debugging tools do not know how to properly unwind the _ukplat_syscall frame. For example, this causes them to output garbage output for back traces. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Simon Kuenzer <simon@unikraft.io> Approved-by: Simon Kuenzer <simon@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #700 commit b88c21a231243845cbc155e1c7f0bcccd181a1c5 Author: Marco Schlumpp <marco@unikraft.io> Date: Mon Jan 2 11:40:13 2023 +0100 arch/x86: Add helpers for CFI in assembler code This introduces helpers for maintaining frame information when using push and pop in assembler code. Checkpatch-Ignore: SPACING Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Simon Kuenzer <simon@unikraft.io> Approved-by: Simon Kuenzer <simon@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #700 commit 6d07539298dae30eb07f078942563af2be60acd9 Author: Marco Schlumpp <marco.schlumpp@gmail.com> Date: Tue May 24 20:17:14 2022 +0200 lib/nolibc: Define u_(long|int|short_char) for _DEFAULT_SOURCE files These typedefs are commonly used in BSD code. Most libc libraries define them by default or for _DEFAULT_SOURCE files. Because unikraft is usually closer to Linux, this adopts the later approach. Signed-off-by: Marco Schlumpp <marco.schlumpp@gmail.com> Reviewed-by: Razvan Deaconescu <razvand@unikraft.io> Reviewed-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Approved-by: Marc Rittinghaus <marc.…
dragosp27
added a commit
to dragosp27/unikraft
that referenced
this issue
Jun 1, 2023
commit b0da6bfc5286027fd4b77256e4bef5725cbeaba9 Author: Alexander Jung <alex@nder.sh> Date: Mon May 15 23:09:49 2023 +0200 Release: v0.13.0 Atlas Signed-off-by: Razvan Deaconescu <razvand@unikraft.io> Signed-off-by: Marc Rittinghaus <marc@unikraft.io> Signed-off-by: Simon Kuenzer <simon@unikraft.io> Signed-off-by: Alexander Jung <alex@unikraft.io> commit 8da5cbb6cd6e973a4c6cdbb4b113d5fc222a57fb Author: Simon Kuenzer <simon@unikraft.io> Date: Fri Mar 24 17:33:17 2023 +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 commit 7279c2d240e92285aaf2e7ebd48813a70f3d20a7 Author: Costin Sin <sin.costinrobert@gmail.com> Date: Sat May 13 06:48:31 2023 +0000 lib/posix-time: Add clock_nanosleep syscall clock_nanosleep syscall should mimic the nanosleep syscall when the clockid equals CLOCK_REALTIME and the TIMER_ABSTIME flag is missing. Signed-off-by: Costin Sin <sin.costinrobert@gmail.com> 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: #891 commit 8ea48c6f064f62ab007300d87de93bb8f61f854c Author: Tu Dinh Ngoc <dinhngoc.tu@irit.fr> Date: Tue Apr 4 20:17:40 2023 +0000 lib/vfscore: Dynamically allocate mount paths 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 commit a7698597cd20b726dc15405368c3bf23050304c8 Author: Razvan Deaconescu <razvand@unikraft.io> Date: Sat May 13 01:28:57 2023 +0300 lib/vfscore: Initialize lists for stdio_vnode 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 commit 7b76234d3351c4d4414ba341c2d4fb9fd6220b62 Author: Razvan Deaconescu <razvand@unikraft.io> Date: Sat May 13 01:45:43 2023 +0300 lib/vfscore: Add semicolon to DPRINTF macro The `DPRINTF()` macro in `vfscore` requires a semicolon (`;`). If this is not present (once `DEBUG_VFS` is enabled), a build issue occurs. Signed-off-by: Razvan Deaconescu <razvand@unikraft.io> Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com> 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: #890 commit cb35dfff57bdc7b7e2896922fd0743e4f25f5972 Author: Sairaj Kodilkar <skodilkar7@gmail.com> Date: Mon Mar 13 11:12:46 2023 +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 commit 362ddab80a491a4ed3a7d2354813f2fb94282086 Author: Sairaj Kodilkar <skodilkar7@gmail.com> Date: Tue Jan 31 15:49:53 2023 +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 commit edda7dff6f86d94ef46342a3f71974158469826b Author: Sairaj Kodilkar <skodilkar7@gmail.com> Date: Tue Jan 31 15:06:02 2023 +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 commit f205fee3da57c467ce1cf9cf33f88d529e79875b Author: Sairaj Kodilkar <skodilkar7@gmail.com> Date: Tue Jan 31 12:22:01 2023 +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 commit d073d652299d53509d059b60706eee236d5c0d10 Author: Sairaj Kodilkar <skodilkar7@gmail.com> Date: Sun Mar 12 13:25:56 2023 +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 commit a078828e0d7a5d33b3d2c4bd62b79e02ddcf7b9b Author: Sairaj Kodilkar <skodilkar7@gmail.com> Date: Tue Jan 31 16:52:53 2023 +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 commit 3970edf400001f0fb62a86a1dea898e323aafd3e Author: Sairaj Kodilkar <skodilkar7@gmail.com> Date: Tue Jan 31 12:17:50 2023 +0530 include/arch: Add macros for atomic add, sub, or This commit adds macros to atomically add, subtract, and perform a bitwise or based on the builtins provided by GCC. 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 commit dedc1b71eecc0ac25eb60a5d62a7a10f9b7b7c28 Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Date: Fri May 12 17:24:10 2023 +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 commit 55cf96d011284e35fced79e8d8bac4934d0c8d6d Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Date: Fri May 12 16:19:06 2023 +0200 lib/ukswrand: Add missing errno include This commit adds an include for errno.h that might not be included otherwise and causes the build to fail. Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Reviewed-by: Cezar Craciunoiu <cezar.craciunoiu@unikraft.io> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #887 commit dfe489a4f27aff6c74b2c7c8b111e0afb73e5a96 Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Date: Fri May 12 14:00:38 2023 +0200 lib/uk9p: Add workaround for QEMU WSTAT fsync bug This commit adds a workaround for a bug in QEMU where performing an fsync using the WSTAT command in 9P2000.u leads to a zero-sized response. Checkpatch-Ignore: SUSPECT_CODE_INDENT 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 commit d2c0ccd32602e337c12fb50867a2b24530fa0f8f Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Date: Fri May 12 13:58:50 2023 +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 commit d7f598242afd95dceab42983d8d616885e618cbf Author: Razvan Deaconescu <razvand@unikraft.io> Date: Fri Feb 3 13:41:38 2023 +0200 lib/nolibc: Add -ffreestanding flag 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 commit 7eac25ea53ae833294652d6f38d04732612145b6 Author: Florin Postolache <florin.postolache.of@gmail.com> Date: Thu May 11 22:48:53 2023 +0300 lib/posix-process: Fix debug printing of TIDs 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 commit d4100c9dc4dfffdebd48ce8788d04ca3fa75d066 Author: Florin Postolache <florin.postolache.of@gmail.com> Date: Thu May 11 13:07:48 2023 +0300 lib/posix-process: Reserve PID/TID 0 for kernel 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 commit a1c73be910b779b3b57a5ae79435d4f86b488fa2 Author: Florin Postolache <florin.postolache.of@gmail.com> Date: Thu May 11 12:44:58 2023 +0300 lib/posix-process: Correct MAX_PID config option 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 commit ddefe64f12ab4599f0ea3064bbbfedbf5205384f Author: Andra Paraschiv <andra@unikraft.org> Date: Wed May 10 13:40:27 2023 +0300 lib/vfscore: Fix file path resolution for 9pfs setup The path resolution doesn't correctly work for a set of file cases (e.g. symlinks to binaries or shared libraries). One setup example is using 9pfs and the entire root local filesystem, while running the "ls" binary and loading the shared libraries: unikraft/support/scripts/qemu-guest -k build/app-elfloader_qemu-x86_64 -e / -a "/bin/ls /" A "/" character is omitted from the last part of the path e.g. "/binls" instead of "/bin/ls". Update the logic to include the missing character. Signed-off-by: Andra Paraschiv <andra@unikraft.org> Reviewed-by: Florin Postolache <florin.postolache.of@gmail.com> Reviewed-by: Ioan-Teodor Teugea <ioan_teodor.teugea@stud.acs.upb.ro> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #883 commit b2c2164eeb2745325489003dc6b52354c02a9a4d Author: Simon Kuenzer <simon@unikraft.io> Date: Fri May 5 15:44:28 2023 +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 commit 5784d007b1d2b727d3151f84ea70e5dd4683df32 Author: Andrei Tatar <andrei@unikraft.io> Date: Mon May 8 11:02:45 2023 +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 commit cfc103cf6fc09add1291990a8b44a172a54195c5 Author: Stefan Jumarea <stefanjumarea02@gmail.com> Date: Sun May 7 13:53:19 2023 +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 commit c04312c813a9ce47476f3ea7ece77f22cd888dcd Author: Hugo Lefeuvre <hugo.lefeuvre@manchester.ac.uk> Date: Sun Apr 16 15:08:17 2023 +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: @@ expression E; @@ - ALIGN_DOWN(E, __PAGE_SIZE) + PAGE_ALIGN_DOWN(E) @@ expression E; type T; @@ - ALIGN_DOWN(E, (T) __PAGE_SIZE) + PAGE_ALIGN_DOWN(E) @@ expression E; @@ - ALIGN_UP(E, __PAGE_SIZE) + PAGE_ALIGN_UP(E) @@ expression E; type T; @@ - ALIGN_UP(E, (T) __PAGE_SIZE) + PAGE_ALIGN_UP(E) @@ expression E; @@ - (E + PAGE_SIZE - 1) & PAGE_MASK + PAGE_ALIGN(E) Signed-off-by: Hugo Lefeuvre <hugo.lefeuvre@manchester.ac.uk> Reviewed-by: Dragos Petre <dragos.petre27@gmailcom> Reviewed-by: Alexandru Calciu <alxcalciu@gmail.com> Approved-by: Simon Kuenzer <simon@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #842 commit 5d9c4d702ec4a6e9de4e848a727db21e06d5d3b7 Author: Maria Sfiraiala <maria.sfiraiala@gmail.com> Date: Mon May 8 10:49:43 2023 +0300 lib/{nolibc,isrlib}: Modify pointer comparison This commit typecasts `src` and `dst` strings from `memmove()` to ensure that their values are treated as pointers. It also modifies the function implementation to handle overlapping. Co-authored-by: Soumya Ranjan <ranjan42069@gmail.com> Signed-off-by: Maria Sfiraiala <maria.sfiraiala@gmail.com> Signed-off-by: Soumya Ranjan <ranjan42069@gmail.com> Reviewed-by: Radu Nichita <radunichita99@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: #880 commit 4e139b3164bb4ead5cec2760ea0f3fd4aecb762c Author: Marco Schlumpp <marco@unikraft.io> Date: Wed Apr 12 11:09:26 2023 +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. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Checkpatch-Ignore: SPACING Checkpatch-Ignore: COMPLEX_MACRO Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Reviewed-by: Razvan Deaconescu <razvand@unikraft.io> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #833 commit 7255b0ee1209d3309a610d8ea516fbc21ea84e27 Author: Marco Schlumpp <marco@unikraft.io> Date: Wed Apr 12 11:06:17 2023 +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. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Reviewed-by: Razvan Deaconescu <razvand@unikraft.io> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #833 commit d57a4c7cd10ab8d781a089629cb310b8e8de3c91 Author: Diego Alejandro Parra Guzman <diego-alejandro.parra-guzman@tttech.com> Date: Wed May 10 14:12:39 2023 +0300 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 commit 372475c140863dabab697f01ab485c971a3ba054 Author: Diego Alejandro Parra Guzman <diego-alejandro.parra-guzman@tttech.com> Date: Wed May 10 14:12:01 2023 +0300 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 commit d39b30308e957893cd2bed2115aeb056f2b08b59 Author: Alexander Jung <alex@unikraft.io> Date: Mon May 8 07:43:37 2023 +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 commit 47c243c394548b1198951f44af1c7101bd868589 Author: Aryan Verma <aryanvarma7272@gmail.com> Date: Thu Feb 16 15:19:32 2023 +0530 doc: Add Codacy code quality status badge to README.md GitHub-Fixes: #650 Signed-off-by: Aryan Verma <aryanvarma7272@gmail.com> Co-authored-by: Alexander Jung <alex@unikraft.io> Reviewed-by: Cezar Craciunoiu <cezar.craciunoiu@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: #764 commit 84172dbfbe07b91cade20eb6c88f2c4a1c2e6255 Author: Simon Kuenzer <simon@unikraft.io> Date: Mon May 8 16:38:14 2023 +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 commit 275429893d983ff13d9874b310b4566c254631fe Author: Hugo Lefeuvre <hugo.lefeuvre@manchester.ac.uk> Date: Sun Apr 16 11:57:44 2023 +0200 plat/xen: Fix unchecked uk_palloc() value in x86/mm.c The return value of uk_palloc is not checked in _arch_init_p2m. Allocation failure at that point should never happen, but it's not a reason not to check. At this stage, in the event of a failure, we should probably abort the boot altogether. This bug was detected using the following Coccinelle spatch: @call@ expression ptr; position p; @@ ptr@p = uk_palloc(...); @ok@ expression ptr; position call.p; @@ ptr@p = uk_palloc(...); ... when != ptr ( (ptr == NULL || ...) | (ptr != NULL || ...) ) @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 commit b240edc27abe95d22034d1b4ea7d582dd93098c2 Author: Eduard Vintilă <eduard.vintila47@gmail.com> Date: Mon May 1 19:13:55 2023 +0300 lib/vfscore: Handle `FIONBIO` command in `pipe_ioctl()` The current `ioctl` implementation for pipes does not handle the `FIONBIO` command, which leads to a negative error value being returned. This commit introduces a simple case which sets the FNONBLOCK flag when such a command is passed. Signed-off-by: Eduard Vintilă <eduard.vintila47@gmail.com> Reviewed-by: Tu Dinh Ngoc <dinhngoc.tu@irit.fr> 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: #874 commit 0f75e55ba08647b2e398a19aea35f31b06c0da6a Author: Andrei Tudor TOPALĂ (101668) <topala.andrei@gmail.com> Date: Fri Apr 15 00:36:51 2022 +0300 plat/common: Add firecracker shutdown signal Firecracker emulates a PS/2 controller and detects attempted writes to the CPU reset line. Co-authored-by: Marco Schlumpp <marco@unikraft.io> Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #760 commit 59111c4f28254c0614c62d56113e2048300a5549 Author: Marco Schlumpp <marco@unikraft.io> Date: Mon Apr 17 11:19:33 2023 +0200 plat/kvm: Include target hypervisor in image name This makes it more clear on what hypervisor the image works on. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #760 commit 789cdba609d4c879e6b8bfc05c7b89cc85c1f3b7 Author: Marco Schlumpp <marco@unikraft.io> Date: Tue Apr 11 17:58:08 2023 +0200 plat/kvm/x86: Use position independent code for lxboot This should make it easier in the future to extend the entry point to support proper boot loaders such as the one in QEMU. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #760 commit f0ae44de725f698505060756d85558361fcd2abb Author: Marco Schlumpp <marco@unikraft.io> Date: Thu Feb 9 14:47:36 2023 +0100 plat/kvm/x86: Workaround re-mapping low-mem areas The paging code currently does not unmap the memory area before the kernel image, but then tries to re-map any region in that area. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #760 commit e85a0cd860e4166b26269785e229c6676b175a30 Author: Marco Schlumpp <marco@unikraft.io> Date: Thu Feb 9 14:43:51 2023 +0100 plat/kvm/x86: Add an entry point for the firecracker hypervisor This is currently not conforming to the actual Linux boot protocol and only suitable for firecracker. The kernel image would have to include a proper Linux boot protocol header to allow loading with proper bootloaders such as the one in QEMU. Co-authored-by: Marc Rittinghaus <marc@unikraft.io> Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #760 commit ebb4795a3a41e8196f501f5b0b7d7a88361ad7f3 Author: Marco Schlumpp <marco@unikraft.io> Date: Thu Feb 9 14:41:00 2023 +0100 plat/kvm/x86: Add structures/definitions for the linux boot protocol This defines the necessary structures to parse the information passed by a linux boot protocol compatible bootloader. Co-authored-by: Marc Rittinghaus <marc@unikraft.io> Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #760 commit deef081dd04ee254c03266b431befb3ae4d2a329 Author: Marco Schlumpp <marco@unikraft.io> Date: Thu Feb 9 14:38:27 2023 +0100 plat/kvm: Add hypervisor/boot protocol configuration This allows the configuration of a target hypervisor. Depending on the hypervisor a suitable boot protocol is selected. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #760 commit 7190449a7a0bdd0ffcd90c37fa0a8d2fc287c804 Author: Marco Schlumpp <marco@unikraft.io> Date: Mon Feb 13 16:58:19 2023 +0100 plat/common: Extract non-multiboot specific memory region helpers The multiboot entry point had a few internal functions that are also useful for other entry points. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #760 commit 70b260d0668eb0850465c525ac1ca6b697b23ce3 Author: Marco Schlumpp <marco@unikraft.io> Date: Tue Apr 25 10:05:41 2023 +0200 include/uk: Simplify RANGE_OVERLAP macro We can simplify the check by observing that there are only two conditions necessary to check whether a range does *not* overlap: - the end of range 0 is before the start of range 1 [--0--) [--1--) - OR the start of range 0 is after the end of range 1 [--1--) [--0--) Inverting this gives us a simple condition for checking whether ranges *do* overlap. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #760 commit 7346338847c8449389316ffc2c554a5d3637ba69 Author: Marco Schlumpp <marco@unikraft.io> Date: Thu Feb 9 14:34:39 2023 +0100 plat/*: Introduce cmdline length to bootinfo Some boot protocols already have the length information and the internal command line handling works with non-null terminated strings anyway. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #760 commit ad684b5175f70e78dc37ed63d8a124c2b6e53d1c Author: Marco Schlumpp <marco@unikraft.io> Date: Thu Feb 9 13:09:03 2023 +0100 plat/kvm/x86: Don't create fine-grained mapping for low memory Mapping all memory makes the page table more independent of the actual boot protocol. Firecracker currently puts the protocol information at a very low address (0x7000). Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #760 commit c7c221dc66b124752250a39a677e4a9bbe3f2c24 Author: Marco Schlumpp <marco@unikraft.io> Date: Fri Feb 24 17:18:55 2023 +0100 plat/kvm: Remove intermediate relocatable object step This object was previously used to hide all symbols except the entry point. But this step was removed making the relocatable object creation unnecessary. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Simon Kuenzer <simon@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #789 commit 195cc32f7e5e65d8929ae65b8fa9203ddf246ba6 Author: Eduard Vintilă <eduard.vintila47@gmail.com> Date: Thu Mar 16 14:13:06 2023 +0200 plat/drivers/ofw: Fix search in `fdt_node_offset_by_compatible_list` The current implementation returns as soon as a node that matches a compatible string is found. However, we should iterate through all of the compatible list to make sure that we return the node with the least offset value such that future searches will not skip any matching nodes. Signed-off-by: Eduard Vintilă <eduard.vintila47@gmail.com> Reviewed-by: Robert Kuban <robert.kuban@opensynergy.com> Reviewed-by: Razvan Virtan <virtanrazvan@gmail.com> Approved-by: Michalis Pappas <michalis@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #805 commit dfbf3ffd2cf2542e97129e017f4a06afd65b079c Author: Eduard Vintilă <eduard.vintila47@gmail.com> Date: Thu Mar 16 14:10:46 2023 +0200 plat/drivers/ofw: Fix incorrect offset in `fdt_translate_one` When a node is missing the "ranges" property, offset should be set to 0. The current implementation sets offset to the address to be translated, which ignores the fact that `fdt_default_translate` is later called. The latter function adds the offset to the same address, resulting in doubling the effective address, when in fact a 1-to-1 mapping is necessary. Signed-off-by: Eduard Vintilă <eduard.vintila47@gmail.com> Reviewed-by: Robert Kuban <robert.kuban@opensynergy.com> Reviewed-by: Razvan Virtan <virtanrazvan@gmail.com> Approved-by: Michalis Pappas <michalis@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #805 commit 4792af49d89c1c0e141b40720d4ec1b89530411a Author: Takeru Wada <takew@asg.cs.tuat.ac.jp> Date: Mon Mar 13 14:37:51 2023 +0000 lib/nolibc: Remove warnings of timespec This commit fixes the definition of pointer arguments in GCC >= 11. Signed-off-by: Takeru Wada <takew@asg.cs.tuat.ac.jp> Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #800 commit ec2c285ea91fac0a178e6c550c122e6bc82f10dd Author: Simon Kuenzer <simon@unikraft.io> Date: Thu Mar 16 17:31:42 2023 +0100 lib/ukboot: Print environment variables before entering main 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: #868 commit 3f89855cf89e38a009d85da26b1355f167985ca8 Author: Simon Kuenzer <simon@unikraft.io> Date: Tue Mar 14 15:18:12 2023 +0100 lib/posix-environ: Symbol aliases for `environ` In order to comply with common libc behavior, we provide the following symbol aliases for environ`: `_environ`, `__environ`, `___environ`. 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: #868 commit fefaa0591880d69770a869cbc06f85b38872dc61 Author: Simon Kuenzer <simon@unikraft.io> Date: Fri Feb 24 01:45:52 2023 +0100 lib/posix-environ: Variables from kernel command line Introduces the ability to populate additional environment variables via the kernel command line. Checkpatch-Ignore: SPACING 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: #868 commit 6f2798a9f2a95d02c9aec763a3c6e7649350f104 Author: Simon Kuenzer <simon@unikraft.io> Date: Wed Feb 15 00:32:29 2023 +0100 lib/posix-environ: Compiled-in environment variables We introduce the ability to compile-in up to 16 environment variables. The values can be set via `menuconfig`. The initial `environ` array is automatically sized to match the number of compiled-in values. 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: #868 commit a46c0c1d63a71742e79b4fdd1bf690df560abf8d Author: Simon Kuenzer <simon@unikraft.io> Date: Thu Feb 9 21:54:40 2023 +0100 lib/posix-environ: Register and make it compile This commit integrates and enables compiling of the imported environment helper functions (see previous commit). 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: #868 commit e9b7d00e5407dc0c4cfeb912b2f3329cdc5ff28b Author: Simon Kuenzer <simon@unikraft.io> Date: Wed Feb 8 17:01:41 2023 +0100 lib/posix-environ: Import from musl 1.2.3 This commit imports needed code from musl 1.2.3. This concentrates mostly on the following helper functions for environment variables: - `clearenv()` - `getenv()` - `putenv()` - `setenv()` - `unsetenv()` Checkpatch-Ignore: FUNCTION_WITHOUT_ARGS Checkpatch-Ignore: LINE_SPACING Checkpatch-Ignore: SPACING Checkpatch-Ignore: TRAILING_STATEMENTS Checkpatch-Ignore: SIZEOF_PARENTHESIS Checkpatch-Ignore: TYPO_SPELLING 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: #868 commit 7741af977fd2c723272abfce8c166deb125cf6c6 Author: Simon Kuenzer <simon@unikraft.io> Date: Fri Feb 24 01:42:55 2023 +0100 lib/uklibparam: `UK_LIBPARAM_PARAM_ALIAS()`,`UK_LIBPARAM_PARAM_ARR_ALIAS()` This commit provides `UK_LIBPARAM_PARAM_ALIAS()` and `UK_LIBPARAM_PARAM_ARR_ALIAS()` which are variants of `UK_LIBPARAM_PARAM()` and `UK_LIBPARAM_PARAM_ARR()`. These registration macros allow to set a custom parameter name instead of deriving it from the variable name. 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: #868 commit 1cc3a2f6e33d1dbb390d24e79f73b86b34597b23 Author: Simon Kuenzer <simon@unikraft.io> Date: Fri Feb 24 00:42:29 2023 +0100 lib/uklibparam: Rewrite of parser This commit introduces a rewrite of `lib/uklibparam`. The rewrite ensures that it is errno-free, malloc-free, and TLS-free. This makes it ideal for processing library parameters early during boot. It includes an own and modified version of `strtoull` function that is used for parsing integer values from the command line. Additionally, the parser can handle arrays more intuitively (and for any data type of the elements) while fully utilizing pre-processed argument vectors. It relies on the fact that whitespacing and quoting is already handled (e.g., by `lib/ukargparse`). There are new types that are more inline with the ones defined by ukstore. This rewrite introduces the ability to provide a parameter description with updated parameter registration macros: UK_LIBPARAM_PARAM(variable, type, description) UK_LIBPARAM_PARAM_ARR(variable, type, count, description) The description is printed on the help output. The previous interfaces are kept for backwards compatibility. However, it is planned to remove them as soon as the code base is completely adopted. Checkpatch-Ignore: SPACING Checkpatch-Ignore: OPEN_BRACE Checkpatch-Ignore: MACRO_WITH_FLOW_CONTROL 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: #868 commit 243f0c45ca8060a230e0bde34783b75c0fefb47a Author: Simon Kuenzer <simon@unikraft.io> Date: Thu Feb 23 22:21:04 2023 +0100 build: Declare __LIBNAME__, __BASENAME__ and __VARIANT__ for .lds.S .lds.S files are linker script files that use the C preprocessor in order to generate the final .lds file. This commit provides Unikraft's common declarations of `__LIBNAME__`, `__BASENAME__`, `__VARIANT__` to this pre-processing step so that they can be used for generating linker scripts. 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: #868 commit 910b9befc07212f8b1313b234ce162dd6130e0d0 Author: Simon Kuenzer <simon@unikraft.io> Date: Thu Feb 23 21:47:59 2023 +0100 plat/*: Add linker scripts to link dependencies This commit adds needed linker scripts as dependency to the linking rule of the final image. This dependency was mostly indirectly covered via libraries. However, updates to platform linker scripts did not trigger relinking the final image. Additionally, pure API libraries (like `lib/ukfalloc`) would not even cause building a linker script that is shipped with the library or injected with an `EACHOLIB_SRCS` declaration. The library buildrule is generated but because no library object is generated, the linker script was never be part of a dependency list. 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: #868 commit ae0ee99ee2f79b8db511ab97a4f3d3f3218ca121 Author: calex257 <alexandru.calciu@stud.acs.upb.ro> Date: Sat Feb 25 17:53:56 2023 +0200 lib/nolibc: Add README.md Add a brief description of nolibc, providing an overview of its purpose, usage and limitations. This commit also shows a relevant example of how to configure an application to use Unikraft-specific assertions or the ones implemented in nolibc. Signed-off-by: Alexandru Calciu <alexandru.calciu@stud.acs.upb.ro> Reviewed-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: #778 commit 3e7a08afd4147f4f101a72765bf105968cce11f9 Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Date: Tue Apr 25 12:24:08 2023 +0200 lib/vfscore: Cleanup sys_symlink This commit cleans up sys_symlink() according to the current coding conventions and uses separate jump labels for exits depending on if the vnode lock needs to be released or not. Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #866 commit 20a2f602813e407754f217b1804384b9289d21e2 Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Date: Tue Apr 25 12:19:05 2023 +0200 lib/vfscore: Do not copy oldpath in symlink With the changes to the vnode ops definitions the symlink operation takes a constant string. We can thus just pass the input string on without having to copy it. Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #866 commit 429a017dcf3bd3b2429a87c55686cb47d81bb875 Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Date: Tue Apr 25 12:16:06 2023 +0200 lib/ramfs: Switch to const strings for vnops This commit changes all vnode operations to accept constant string parameters to be inline with the changed definitions. Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #866 commit 22c1a55814bd3763ea35285ae75a14ee5accf988 Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Date: Tue Apr 25 12:14:49 2023 +0200 lib/devfs: Switch to const strings for vnops This commit changes all vnode operations to accept constant string parameters to be inline with the changed definitions. Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #866 commit 3ab142f25240e39fe90c8fe97cbc0525e8ede89d Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Date: Tue Apr 25 12:14:11 2023 +0200 lib/9pfs: Switch to const strings for vnops This commit changes all vnode operations to accept constant string parameters to be inline with the changed definitions. Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #866 commit e04174a8eae7eaf16be08b93142ccd3266ce58d6 Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Date: Tue Apr 25 12:12:09 2023 +0200 lib/vfscore: Make vnops strings constant The current vnode operations define strings as mutable, which makes it more difficult to do optimizations. Since no buffer size is supplied the strings can only be modified on a char-for-char basis anyways, which also limits the use-cases. In addition, no implementation of the vnode operations makes use of the mutability of the strings. This commit thus introduces the `const` keyword for all strings passed to vnode operations. Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #866 commit 7ef5bbccffa6592a0d6da0efedd3c63366ba3cbb Author: Marco Schlumpp <marco@unikraft.io> Date: Mon Apr 17 10:04:04 2023 +0200 lib/posix-futex: Check for proper FUTEX_CLOCK_REALTIME usage The documentation specifies a list of operations which support this flag. This adds a check that explicitly rejects all invalid combinations and returns `ENOSYS` according to the documentation. Checkpatch-Ignore: ENOSYS Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Adina Smeu <adina.smeu@gmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #758 commit 54d27549bfa6a0c3aaffe08d10c7e9a5101f8c0d Author: Marco Schlumpp <marco@unikraft.io> Date: Mon Apr 17 09:57:45 2023 +0200 lib/posix-futex: Ignore FUTEX_PRIVATE_FLAG The flag can be specified for all operations and does not make a difference in the context of a single-process scenario. Therefore, we can ignore it. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Adina Smeu <adina.smeu@gmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #758 commit c905e263471c9081e457d1d0041a083dec53f828 Author: Marco Schlumpp <marco@unikraft.io> Date: Thu Feb 9 16:44:35 2023 +0100 lib/posix-futex: Implement subset of FUTEX_WAIT_BITSET Many modern applications use FUTEX_WAIT_BITSET to be able to set an absolute timeout. To accomplish that they set all bits in the val3/mask parameter, which makes the operation equivalent to a normal FUTEX_WAIT (except the absolute timeout value). Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Adina Smeu <adina.smeu@gmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #758 commit 7683671942d29fb5c3cc4c6471f257f0dc290687 Author: Marco Schlumpp <marco@unikraft.io> Date: Thu Feb 9 15:57:30 2023 +0100 lib/uksched: Expose uk_thread_block_until This allows external API clients to specify an absolute deadline for waking up. This is potentially more precise because the `timeout` is relative to whenever uk_thread_block_timeout is actually taking the "current" time. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Adina Smeu <adina.smeu@gmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #758 commit 5223ae6691e0d8ee449ece64f6f9bde3aaeb7643 Author: Nour-eddine Taleb <contact@noureddine.xyz> Date: Sat Mar 25 19:56:47 2023 +0000 lib/uksched: fix docs Signed-off-by: Nour-eddine Taleb <contact@noureddine.xyz> Reviewed-by: Adina Smeu <adina.smeu@gmail.com> Approved-by: Cezar Craciunoiu <cezar.craciunoiu@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #809 commit c00afb4d422af1377374bfee5d4ea52cec0cbea0 Author: Nour-eddine Taleb <contact@noureddine.xyz> Date: Thu Mar 23 23:15:24 2023 +0000 lib/posix-futex/test: port the test cases to the new sched apis due to the changes in scheduling apis, it was necessary to update posix-futex tests which still relays on the old apis. GitHub-Fixes: #630 Signed-off-by: Nour-eddine Taleb <contact@noureddine.xyz> Reviewed-by: Adina Smeu <adina.smeu@gmail.com> Approved-by: Cezar Craciunoiu <cezar.craciunoiu@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #809 commit ce2e3dae5f8d876e38dcdcf0c3a83850cfb98dc8 Author: Marco Schlumpp <marco@unikraft.io> Date: Mon Jan 2 11:22:18 2023 +0100 plat/kvm/x86: Stop unwinding at _libkvmplat_entry2 The _libkvmplat_entry2 function is called using assembler code that switches stacks. Therefore, a debugger can't unwind its frame. This inserts a CFI that marks the previous instruction pointer as undefined. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Simon Kuenzer <simon@unikraft.io> Approved-by: Simon Kuenzer <simon@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #700 commit 7f450a9834e4c31a938e8a59e72006ec9389cc18 Author: Marco Schlumpp <marco@unikraft.io> Date: Mon Jan 2 15:15:52 2023 +0100 plat/kvm/x86: Add unwinding information to interrupt/exception handlers This allows debuggers and profilers to unwind past interrupt/exception handlers. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Simon Kuenzer <simon@unikraft.io> Approved-by: Simon Kuenzer <simon@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #700 commit f87e378199fa87c07e77b36c5c979c9194fb1d93 Author: Marco Schlumpp <marco@unikraft.io> Date: Wed Dec 21 11:01:34 2022 +0100 plat/x86: Add unwind information to system call handler Without this information debugging tools do not know how to properly unwind the _ukplat_syscall frame. For example, this causes them to output garbage output for back traces. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Simon Kuenzer <simon@unikraft.io> Approved-by: Simon Kuenzer <simon@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #700 commit b88c21a231243845cbc155e1c7f0bcccd181a1c5 Author: Marco Schlumpp <marco@unikraft.io> Date: Mon Jan 2 11:40:13 2023 +0100 arch/x86: Add helpers for CFI in assembler code This introduces helpers for maintaining frame information when using push and pop in assembler code. Checkpatch-Ignore: SPACING Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Simon Kuenzer <simon@unikraft.io> Approved-by: Simon Kuenzer <simon@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #700 commit 6d07539298dae30eb07f078942563af2be60acd9 Author: Marco Schlumpp <marco.schlumpp@gmail.com> Date: Tue May 24 20:17:14 2022 +0200 lib/nolibc: Define u_(long|int|short_char) for _DEFAULT_SOURCE files These typedefs are commonly used in BSD code. Most libc libraries define them by default or for _DEFAULT_SOURCE files. Because unikraft is usually closer to Linux, this adopts the later approach. Signed-off-by: Marco Schlumpp <marco.schlumpp@gmail.com> Reviewed-by: Razvan Deaconescu <razvand@unikraft.io> Reviewed-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #627 commit a391affca8dce75d51f487d43babb3551c03b0d1 Author: Marco Schlumpp <marco.schlumpp@gmail.com> Date: Tue Mar 29 17:32:46 2022 +0200 lib/nolibc: Implement fputs and puts functions These functions were still missing from nolibc. Signed-off-by: Marco Schlumpp <marco.schlumpp@gmail.com> Reviewed-by: Razvan Deaconescu <razvand@unikraft.io> Reviewed-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #627 commit 721b9a91e651c0c37dd6b5618dea3f3692713bf9 Author: Marco Schlumpp <marco.schlumpp@gmail.com> Date: Tue Mar 29 15:25:17 2022 +0200 lib/nolibc: Implement syslog functions These functions forward the messages to the ukdebug library. Signed-off-by: Marco Schlumpp <marco.schlumpp@gmail.com> Reviewed-by: Razvan Deaconescu <razvand@unikraft.io> Reviewed-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #627 commit eac4a8dc00c62398eb6eaf54b6eb5f9440bc2230 Author: Marco Schlumpp <marco.schlumpp@gmail.com> Date: Tue Mar 29 14:23:52 2022 +0200 lib/nolibc: Implement strsep function This function is an improvement of strtok that originates from BSD. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Razvan Deaconescu <razvand@unikraft.io> Reviewed-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #627 commit f941a5add83e4023baab26ed1f1c374371bd4e38 Author: Marco Schlumpp <marco.schlumpp@gmail.com> Date: Fri Mar 25 17:23:57 2022 +0100 lib/nolibc: Implement random/srandom These functions provide a PRNG and are based on the musl libc library. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Razvan Deaconescu <razvand@unikraft.io> Reviewed-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #627 commit 2188d8dcd394cca547de25e82905c200e5971a22 Author: Marco Schlumpp <marco.schlumpp@gmail.com> Date: Fri Mar 25 16:40:15 2022 +0100 lib/nolibc: Implement exit function The behaviour is similar to returning a value from main. Checkpatch-Ignore: EMBEDDED_FUNCTION_NAME Signed-off-by: Marco Schlumpp <marco.schlumpp@gmail.com> Reviewed-by: Razvan Deaconescu <razvand@unikraft.io> Reviewed-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #627 commit 2d2104d9d056a50e6bf2dc0bc07b28cd1dc45796 Author: Marco Schlumpp <marco.schlumpp@gmail.com> Date: Fri Mar 25 16:31:43 2022 +0100 lib/nolibc: Export abort function This function was already declared in the public stdlib header, but the symbol name was missing in the exportsyms.uk file. Signed-off-by: Marco Schlumpp <marco.schlumpp@gmail.com> Reviewed-by: Razvan Deaconescu <razvand@unikraft.io> Reviewed-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #627 commit fb70e9f5e09d62cb5eca12702620047ff8e4982c Author: Marco Schlumpp <marco.schlumpp@gmail.com> Date: Fri Mar 25 16:07:17 2022 +0100 lib/nolibc: Implement isblank function This function determines whether the given character is a space or tab. Signed-off-by: Marco Schlumpp <marco.schlumpp@gmail.com> Reviewed-by: Razvan Deaconescu <razvand@unikraft.io> Reviewed-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #627 commit 3f0bc0e8705132f966347d07b0315c8a21fce347 Author: Marco Schlumpp <marco.schlumpp@gmail.com> Date: Thu Mar 24 17:06:03 2022 +0100 lib/nolibc: Add atol function This function is basically atoi with a large output range. Signed-off-by: Marco Schlumpp <marco.schlumpp@gmail.com> Reviewed-by: Razvan Deaconescu <razvand@unikraft.io> Reviewed-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #627 commit 6887b143c9cf7f654503895651d920825a2e535f Author: Marco Schlumpp <marco.schlumpp@gmail.com> Date: Thu Mar 24 17:02:24 2022 +0100 lib/nolibc: strcasecmp function This function compares two strings case insensitively. The implementation was taken from the MUSL libc. Checkpatch-Ignore: TRAILING_STATEMENTS Signed-off-by: Marco Schlumpp <marco.schlumpp@gmail.com> Reviewed-by: Razvan Deaconescu <razvand@unikraft.io> Reviewed-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #627 commit a3c8bdeaedcb428015e53cd4398a3d91624f1cf0 Author: Marco Schlumpp <marco.schlumpp@gmail.com> Date: Tue Mar 22 12:01:57 2022 +0100 lib/nolibc: Introduce strcat/bcopy/bzero functions The bcopy/bzero originate from BSD, but are often provided by libc on other systems for compati…
dragosp27
added a commit
to dragosp27/unikraft
that referenced
this issue
Jun 3, 2023
commit abd35a233677df19c463687405a3973a7eb9a424 Author: Alexander Jung <alex@unikraft.io> Date: Thu Jun 1 14:55:17 2023 +0200 Release: v0.13.1 Atlas Signed-off-by: Razvan Deaconescu <razvand@unikraft.io> Signed-off-by: Simon Kuenzer <simon@unikraft.io> Signed-off-by: Alexander Jung <alex@unikraft.io> commit c31a4b4937f94695d45079d81f3667a129f61650 Author: Stefan Jumarea <stefanjumarea02@gmail.com> Date: Mon May 22 13:06:32 2023 +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 commit cd9dcb4079b53555d3c1333650241f467f4d1cc4 Author: Stefan Jumarea <stefanjumarea02@gmail.com> Date: Sat May 27 11:57:40 2023 +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 commit 31bcc48776be55f94d3f2de408b768de4cdeaa5a Author: Stefan Jumarea <stefanjumarea02@gmail.com> Date: Wed May 17 11:15:32 2023 +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 commit de40bcc1440b324491a5e520523d5af40dc5e66f Author: Michalis Pappas <michalis@unikraft.io> Date: Sat May 27 15:51:57 2023 +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 commit ef5b449be28c69a64da9f82733c03c15c0c28664 Author: Andrei Tatar <andrei.ttr@gmail.com> Date: Fri Apr 21 18:45:16 2023 +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 commit ffdbb486c4dd3fce002607d8de76c8cff4c126c4 Author: Andrei Tatar <andrei.ttr@gmail.com> Date: Fri Apr 21 18:24:12 2023 +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 commit 988b7eddc3601d6a6cc394e71b2a2f9befff99c2 Author: Christiano Haesbaert <haesbaert@haesbaert.org> Date: Wed May 17 10:19:42 2023 +0200 lib/uknetdev: Fix typo in uk_netdev_tx_one Signed-off-by: Christiano Haesbaert <haesbaert@haesbaert.org> Reviewed-by: Cezar Craciunoiu <cezar.craciunoiu@unikraft.io> Approved-by: Alexander Jung <alex@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #901 commit b0da6bfc5286027fd4b77256e4bef5725cbeaba9 Author: Alexander Jung <alex@nder.sh> Date: Mon May 15 23:09:49 2023 +0200 Release: v0.13.0 Atlas Signed-off-by: Razvan Deaconescu <razvand@unikraft.io> Signed-off-by: Marc Rittinghaus <marc@unikraft.io> Signed-off-by: Simon Kuenzer <simon@unikraft.io> Signed-off-by: Alexander Jung <alex@unikraft.io> commit 8da5cbb6cd6e973a4c6cdbb4b113d5fc222a57fb Author: Simon Kuenzer <simon@unikraft.io> Date: Fri Mar 24 17:33:17 2023 +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 commit 7279c2d240e92285aaf2e7ebd48813a70f3d20a7 Author: Costin Sin <sin.costinrobert@gmail.com> Date: Sat May 13 06:48:31 2023 +0000 lib/posix-time: Add clock_nanosleep syscall clock_nanosleep syscall should mimic the nanosleep syscall when the clockid equals CLOCK_REALTIME and the TIMER_ABSTIME flag is missing. Signed-off-by: Costin Sin <sin.costinrobert@gmail.com> 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: #891 commit 8ea48c6f064f62ab007300d87de93bb8f61f854c Author: Tu Dinh Ngoc <dinhngoc.tu@irit.fr> Date: Tue Apr 4 20:17:40 2023 +0000 lib/vfscore: Dynamically allocate mount paths 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 commit a7698597cd20b726dc15405368c3bf23050304c8 Author: Razvan Deaconescu <razvand@unikraft.io> Date: Sat May 13 01:28:57 2023 +0300 lib/vfscore: Initialize lists for stdio_vnode 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 commit 7b76234d3351c4d4414ba341c2d4fb9fd6220b62 Author: Razvan Deaconescu <razvand@unikraft.io> Date: Sat May 13 01:45:43 2023 +0300 lib/vfscore: Add semicolon to DPRINTF macro The `DPRINTF()` macro in `vfscore` requires a semicolon (`;`). If this is not present (once `DEBUG_VFS` is enabled), a build issue occurs. Signed-off-by: Razvan Deaconescu <razvand@unikraft.io> Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com> 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: #890 commit cb35dfff57bdc7b7e2896922fd0743e4f25f5972 Author: Sairaj Kodilkar <skodilkar7@gmail.com> Date: Mon Mar 13 11:12:46 2023 +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 commit 362ddab80a491a4ed3a7d2354813f2fb94282086 Author: Sairaj Kodilkar <skodilkar7@gmail.com> Date: Tue Jan 31 15:49:53 2023 +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 commit edda7dff6f86d94ef46342a3f71974158469826b Author: Sairaj Kodilkar <skodilkar7@gmail.com> Date: Tue Jan 31 15:06:02 2023 +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 commit f205fee3da57c467ce1cf9cf33f88d529e79875b Author: Sairaj Kodilkar <skodilkar7@gmail.com> Date: Tue Jan 31 12:22:01 2023 +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 commit d073d652299d53509d059b60706eee236d5c0d10 Author: Sairaj Kodilkar <skodilkar7@gmail.com> Date: Sun Mar 12 13:25:56 2023 +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 commit a078828e0d7a5d33b3d2c4bd62b79e02ddcf7b9b Author: Sairaj Kodilkar <skodilkar7@gmail.com> Date: Tue Jan 31 16:52:53 2023 +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 commit 3970edf400001f0fb62a86a1dea898e323aafd3e Author: Sairaj Kodilkar <skodilkar7@gmail.com> Date: Tue Jan 31 12:17:50 2023 +0530 include/arch: Add macros for atomic add, sub, or This commit adds macros to atomically add, subtract, and perform a bitwise or based on the builtins provided by GCC. 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 commit dedc1b71eecc0ac25eb60a5d62a7a10f9b7b7c28 Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Date: Fri May 12 17:24:10 2023 +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 commit 55cf96d011284e35fced79e8d8bac4934d0c8d6d Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Date: Fri May 12 16:19:06 2023 +0200 lib/ukswrand: Add missing errno include This commit adds an include for errno.h that might not be included otherwise and causes the build to fail. Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Reviewed-by: Cezar Craciunoiu <cezar.craciunoiu@unikraft.io> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #887 commit dfe489a4f27aff6c74b2c7c8b111e0afb73e5a96 Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Date: Fri May 12 14:00:38 2023 +0200 lib/uk9p: Add workaround for QEMU WSTAT fsync bug This commit adds a workaround for a bug in QEMU where performing an fsync using the WSTAT command in 9P2000.u leads to a zero-sized response. Checkpatch-Ignore: SUSPECT_CODE_INDENT 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 commit d2c0ccd32602e337c12fb50867a2b24530fa0f8f Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Date: Fri May 12 13:58:50 2023 +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 commit d7f598242afd95dceab42983d8d616885e618cbf Author: Razvan Deaconescu <razvand@unikraft.io> Date: Fri Feb 3 13:41:38 2023 +0200 lib/nolibc: Add -ffreestanding flag 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 commit 7eac25ea53ae833294652d6f38d04732612145b6 Author: Florin Postolache <florin.postolache.of@gmail.com> Date: Thu May 11 22:48:53 2023 +0300 lib/posix-process: Fix debug printing of TIDs 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 commit d4100c9dc4dfffdebd48ce8788d04ca3fa75d066 Author: Florin Postolache <florin.postolache.of@gmail.com> Date: Thu May 11 13:07:48 2023 +0300 lib/posix-process: Reserve PID/TID 0 for kernel 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 commit a1c73be910b779b3b57a5ae79435d4f86b488fa2 Author: Florin Postolache <florin.postolache.of@gmail.com> Date: Thu May 11 12:44:58 2023 +0300 lib/posix-process: Correct MAX_PID config option 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 commit ddefe64f12ab4599f0ea3064bbbfedbf5205384f Author: Andra Paraschiv <andra@unikraft.org> Date: Wed May 10 13:40:27 2023 +0300 lib/vfscore: Fix file path resolution for 9pfs setup The path resolution doesn't correctly work for a set of file cases (e.g. symlinks to binaries or shared libraries). One setup example is using 9pfs and the entire root local filesystem, while running the "ls" binary and loading the shared libraries: unikraft/support/scripts/qemu-guest -k build/app-elfloader_qemu-x86_64 -e / -a "/bin/ls /" A "/" character is omitted from the last part of the path e.g. "/binls" instead of "/bin/ls". Update the logic to include the missing character. Signed-off-by: Andra Paraschiv <andra@unikraft.org> Reviewed-by: Florin Postolache <florin.postolache.of@gmail.com> Reviewed-by: Ioan-Teodor Teugea <ioan_teodor.teugea@stud.acs.upb.ro> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #883 commit b2c2164eeb2745325489003dc6b52354c02a9a4d Author: Simon Kuenzer <simon@unikraft.io> Date: Fri May 5 15:44:28 2023 +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 commit 5784d007b1d2b727d3151f84ea70e5dd4683df32 Author: Andrei Tatar <andrei@unikraft.io> Date: Mon May 8 11:02:45 2023 +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 commit cfc103cf6fc09add1291990a8b44a172a54195c5 Author: Stefan Jumarea <stefanjumarea02@gmail.com> Date: Sun May 7 13:53:19 2023 +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 commit c04312c813a9ce47476f3ea7ece77f22cd888dcd Author: Hugo Lefeuvre <hugo.lefeuvre@manchester.ac.uk> Date: Sun Apr 16 15:08:17 2023 +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: @@ expression E; @@ - ALIGN_DOWN(E, __PAGE_SIZE) + PAGE_ALIGN_DOWN(E) @@ expression E; type T; @@ - ALIGN_DOWN(E, (T) __PAGE_SIZE) + PAGE_ALIGN_DOWN(E) @@ expression E; @@ - ALIGN_UP(E, __PAGE_SIZE) + PAGE_ALIGN_UP(E) @@ expression E; type T; @@ - ALIGN_UP(E, (T) __PAGE_SIZE) + PAGE_ALIGN_UP(E) @@ expression E; @@ - (E + PAGE_SIZE - 1) & PAGE_MASK + PAGE_ALIGN(E) Signed-off-by: Hugo Lefeuvre <hugo.lefeuvre@manchester.ac.uk> Reviewed-by: Dragos Petre <dragos.petre27@gmailcom> Reviewed-by: Alexandru Calciu <alxcalciu@gmail.com> Approved-by: Simon Kuenzer <simon@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #842 commit 5d9c4d702ec4a6e9de4e848a727db21e06d5d3b7 Author: Maria Sfiraiala <maria.sfiraiala@gmail.com> Date: Mon May 8 10:49:43 2023 +0300 lib/{nolibc,isrlib}: Modify pointer comparison This commit typecasts `src` and `dst` strings from `memmove()` to ensure that their values are treated as pointers. It also modifies the function implementation to handle overlapping. Co-authored-by: Soumya Ranjan <ranjan42069@gmail.com> Signed-off-by: Maria Sfiraiala <maria.sfiraiala@gmail.com> Signed-off-by: Soumya Ranjan <ranjan42069@gmail.com> Reviewed-by: Radu Nichita <radunichita99@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: #880 commit 4e139b3164bb4ead5cec2760ea0f3fd4aecb762c Author: Marco Schlumpp <marco@unikraft.io> Date: Wed Apr 12 11:09:26 2023 +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. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Checkpatch-Ignore: SPACING Checkpatch-Ignore: COMPLEX_MACRO Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Reviewed-by: Razvan Deaconescu <razvand@unikraft.io> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #833 commit 7255b0ee1209d3309a610d8ea516fbc21ea84e27 Author: Marco Schlumpp <marco@unikraft.io> Date: Wed Apr 12 11:06:17 2023 +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. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Reviewed-by: Razvan Deaconescu <razvand@unikraft.io> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #833 commit d57a4c7cd10ab8d781a089629cb310b8e8de3c91 Author: Diego Alejandro Parra Guzman <diego-alejandro.parra-guzman@tttech.com> Date: Wed May 10 14:12:39 2023 +0300 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 commit 372475c140863dabab697f01ab485c971a3ba054 Author: Diego Alejandro Parra Guzman <diego-alejandro.parra-guzman@tttech.com> Date: Wed May 10 14:12:01 2023 +0300 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 commit d39b30308e957893cd2bed2115aeb056f2b08b59 Author: Alexander Jung <alex@unikraft.io> Date: Mon May 8 07:43:37 2023 +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 commit 47c243c394548b1198951f44af1c7101bd868589 Author: Aryan Verma <aryanvarma7272@gmail.com> Date: Thu Feb 16 15:19:32 2023 +0530 doc: Add Codacy code quality status badge to README.md GitHub-Fixes: #650 Signed-off-by: Aryan Verma <aryanvarma7272@gmail.com> Co-authored-by: Alexander Jung <alex@unikraft.io> Reviewed-by: Cezar Craciunoiu <cezar.craciunoiu@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: #764 commit 84172dbfbe07b91cade20eb6c88f2c4a1c2e6255 Author: Simon Kuenzer <simon@unikraft.io> Date: Mon May 8 16:38:14 2023 +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 commit 275429893d983ff13d9874b310b4566c254631fe Author: Hugo Lefeuvre <hugo.lefeuvre@manchester.ac.uk> Date: Sun Apr 16 11:57:44 2023 +0200 plat/xen: Fix unchecked uk_palloc() value in x86/mm.c The return value of uk_palloc is not checked in _arch_init_p2m. Allocation failure at that point should never happen, but it's not a reason not to check. At this stage, in the event of a failure, we should probably abort the boot altogether. This bug was detected using the following Coccinelle spatch: @call@ expression ptr; position p; @@ ptr@p = uk_palloc(...); @ok@ expression ptr; position call.p; @@ ptr@p = uk_palloc(...); ... when != ptr ( (ptr == NULL || ...) | (ptr != NULL || ...) ) @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 commit b240edc27abe95d22034d1b4ea7d582dd93098c2 Author: Eduard Vintilă <eduard.vintila47@gmail.com> Date: Mon May 1 19:13:55 2023 +0300 lib/vfscore: Handle `FIONBIO` command in `pipe_ioctl()` The current `ioctl` implementation for pipes does not handle the `FIONBIO` command, which leads to a negative error value being returned. This commit introduces a simple case which sets the FNONBLOCK flag when such a command is passed. Signed-off-by: Eduard Vintilă <eduard.vintila47@gmail.com> Reviewed-by: Tu Dinh Ngoc <dinhngoc.tu@irit.fr> 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: #874 commit 0f75e55ba08647b2e398a19aea35f31b06c0da6a Author: Andrei Tudor TOPALĂ (101668) <topala.andrei@gmail.com> Date: Fri Apr 15 00:36:51 2022 +0300 plat/common: Add firecracker shutdown signal Firecracker emulates a PS/2 controller and detects attempted writes to the CPU reset line. Co-authored-by: Marco Schlumpp <marco@unikraft.io> Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #760 commit 59111c4f28254c0614c62d56113e2048300a5549 Author: Marco Schlumpp <marco@unikraft.io> Date: Mon Apr 17 11:19:33 2023 +0200 plat/kvm: Include target hypervisor in image name This makes it more clear on what hypervisor the image works on. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #760 commit 789cdba609d4c879e6b8bfc05c7b89cc85c1f3b7 Author: Marco Schlumpp <marco@unikraft.io> Date: Tue Apr 11 17:58:08 2023 +0200 plat/kvm/x86: Use position independent code for lxboot This should make it easier in the future to extend the entry point to support proper boot loaders such as the one in QEMU. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #760 commit f0ae44de725f698505060756d85558361fcd2abb Author: Marco Schlumpp <marco@unikraft.io> Date: Thu Feb 9 14:47:36 2023 +0100 plat/kvm/x86: Workaround re-mapping low-mem areas The paging code currently does not unmap the memory area before the kernel image, but then tries to re-map any region in that area. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #760 commit e85a0cd860e4166b26269785e229c6676b175a30 Author: Marco Schlumpp <marco@unikraft.io> Date: Thu Feb 9 14:43:51 2023 +0100 plat/kvm/x86: Add an entry point for the firecracker hypervisor This is currently not conforming to the actual Linux boot protocol and only suitable for firecracker. The kernel image would have to include a proper Linux boot protocol header to allow loading with proper bootloaders such as the one in QEMU. Co-authored-by: Marc Rittinghaus <marc@unikraft.io> Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #760 commit ebb4795a3a41e8196f501f5b0b7d7a88361ad7f3 Author: Marco Schlumpp <marco@unikraft.io> Date: Thu Feb 9 14:41:00 2023 +0100 plat/kvm/x86: Add structures/definitions for the linux boot protocol This defines the necessary structures to parse the information passed by a linux boot protocol compatible bootloader. Co-authored-by: Marc Rittinghaus <marc@unikraft.io> Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #760 commit deef081dd04ee254c03266b431befb3ae4d2a329 Author: Marco Schlumpp <marco@unikraft.io> Date: Thu Feb 9 14:38:27 2023 +0100 plat/kvm: Add hypervisor/boot protocol configuration This allows the configuration of a target hypervisor. Depending on the hypervisor a suitable boot protocol is selected. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #760 commit 7190449a7a0bdd0ffcd90c37fa0a8d2fc287c804 Author: Marco Schlumpp <marco@unikraft.io> Date: Mon Feb 13 16:58:19 2023 +0100 plat/common: Extract non-multiboot specific memory region helpers The multiboot entry point had a few internal functions that are also useful for other entry points. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #760 commit 70b260d0668eb0850465c525ac1ca6b697b23ce3 Author: Marco Schlumpp <marco@unikraft.io> Date: Tue Apr 25 10:05:41 2023 +0200 include/uk: Simplify RANGE_OVERLAP macro We can simplify the check by observing that there are only two conditions necessary to check whether a range does *not* overlap: - the end of range 0 is before the start of range 1 [--0--) [--1--) - OR the start of range 0 is after the end of range 1 [--1--) [--0--) Inverting this gives us a simple condition for checking whether ranges *do* overlap. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #760 commit 7346338847c8449389316ffc2c554a5d3637ba69 Author: Marco Schlumpp <marco@unikraft.io> Date: Thu Feb 9 14:34:39 2023 +0100 plat/*: Introduce cmdline length to bootinfo Some boot protocols already have the length information and the internal command line handling works with non-null terminated strings anyway. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #760 commit ad684b5175f70e78dc37ed63d8a124c2b6e53d1c Author: Marco Schlumpp <marco@unikraft.io> Date: Thu Feb 9 13:09:03 2023 +0100 plat/kvm/x86: Don't create fine-grained mapping for low memory Mapping all memory makes the page table more independent of the actual boot protocol. Firecracker currently puts the protocol information at a very low address (0x7000). Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #760 commit c7c221dc66b124752250a39a677e4a9bbe3f2c24 Author: Marco Schlumpp <marco@unikraft.io> Date: Fri Feb 24 17:18:55 2023 +0100 plat/kvm: Remove intermediate relocatable object step This object was previously used to hide all symbols except the entry point. But this step was removed making the relocatable object creation unnecessary. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Simon Kuenzer <simon@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #789 commit 195cc32f7e5e65d8929ae65b8fa9203ddf246ba6 Author: Eduard Vintilă <eduard.vintila47@gmail.com> Date: Thu Mar 16 14:13:06 2023 +0200 plat/drivers/ofw: Fix search in `fdt_node_offset_by_compatible_list` The current implementation returns as soon as a node that matches a compatible string is found. However, we should iterate through all of the compatible list to make sure that we return the node with the least offset value such that future searches will not skip any matching nodes. Signed-off-by: Eduard Vintilă <eduard.vintila47@gmail.com> Reviewed-by: Robert Kuban <robert.kuban@opensynergy.com> Reviewed-by: Razvan Virtan <virtanrazvan@gmail.com> Approved-by: Michalis Pappas <michalis@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #805 commit dfbf3ffd2cf2542e97129e017f4a06afd65b079c Author: Eduard Vintilă <eduard.vintila47@gmail.com> Date: Thu Mar 16 14:10:46 2023 +0200 plat/drivers/ofw: Fix incorrect offset in `fdt_translate_one` When a node is missing the "ranges" property, offset should be set to 0. The current implementation sets offset to the address to be translated, which ignores the fact that `fdt_default_translate` is later called. The latter function adds the offset to the same address, resulting in doubling the effective address, when in fact a 1-to-1 mapping is necessary. Signed-off-by: Eduard Vintilă <eduard.vintila47@gmail.com> Reviewed-by: Robert Kuban <robert.kuban@opensynergy.com> Reviewed-by: Razvan Virtan <virtanrazvan@gmail.com> Approved-by: Michalis Pappas <michalis@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #805 commit 4792af49d89c1c0e141b40720d4ec1b89530411a Author: Takeru Wada <takew@asg.cs.tuat.ac.jp> Date: Mon Mar 13 14:37:51 2023 +0000 lib/nolibc: Remove warnings of timespec This commit fixes the definition of pointer arguments in GCC >= 11. Signed-off-by: Takeru Wada <takew@asg.cs.tuat.ac.jp> Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #800 commit ec2c285ea91fac0a178e6c550c122e6bc82f10dd Author: Simon Kuenzer <simon@unikraft.io> Date: Thu Mar 16 17:31:42 2023 +0100 lib/ukboot: Print environment variables before entering main 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: #868 commit 3f89855cf89e38a009d85da26b1355f167985ca8 Author: Simon Kuenzer <simon@unikraft.io> Date: Tue Mar 14 15:18:12 2023 +0100 lib/posix-environ: Symbol aliases for `environ` In order to comply with common libc behavior, we provide the following symbol aliases for environ`: `_environ`, `__environ`, `___environ`. 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: #868 commit fefaa0591880d69770a869cbc06f85b38872dc61 Author: Simon Kuenzer <simon@unikraft.io> Date: Fri Feb 24 01:45:52 2023 +0100 lib/posix-environ: Variables from kernel command line Introduces the ability to populate additional environment variables via the kernel command line. Checkpatch-Ignore: SPACING 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: #868 commit 6f2798a9f2a95d02c9aec763a3c6e7649350f104 Author: Simon Kuenzer <simon@unikraft.io> Date: Wed Feb 15 00:32:29 2023 +0100 lib/posix-environ: Compiled-in environment variables We introduce the ability to compile-in up to 16 environment variables. The values can be set via `menuconfig`. The initial `environ` array is automatically sized to match the number of compiled-in values. 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: #868 commit a46c0c1d63a71742e79b4fdd1bf690df560abf8d Author: Simon Kuenzer <simon@unikraft.io> Date: Thu Feb 9 21:54:40 2023 +0100 lib/posix-environ: Register and make it compile This commit integrates and enables compiling of the imported environment helper functions (see previous commit). 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: #868 commit e9b7d00e5407dc0c4cfeb912b2f3329cdc5ff28b Author: Simon Kuenzer <simon@unikraft.io> Date: Wed Feb 8 17:01:41 2023 +0100 lib/posix-environ: Import from musl 1.2.3 This commit imports needed code from musl 1.2.3. This concentrates mostly on the following helper functions for environment variables: - `clearenv()` - `getenv()` - `putenv()` - `setenv()` - `unsetenv()` Checkpatch-Ignore: FUNCTION_WITHOUT_ARGS Checkpatch-Ignore: LINE_SPACING Checkpatch-Ignore: SPACING Checkpatch-Ignore: TRAILING_STATEMENTS Checkpatch-Ignore: SIZEOF_PARENTHESIS Checkpatch-Ignore: TYPO_SPELLING 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: #868 commit 7741af977fd2c723272abfce8c166deb125cf6c6 Author: Simon Kuenzer <simon@unikraft.io> Date: Fri Feb 24 01:42:55 2023 +0100 lib/uklibparam: `UK_LIBPARAM_PARAM_ALIAS()`,`UK_LIBPARAM_PARAM_ARR_ALIAS()` This commit provides `UK_LIBPARAM_PARAM_ALIAS()` and `UK_LIBPARAM_PARAM_ARR_ALIAS()` which are variants of `UK_LIBPARAM_PARAM()` and `UK_LIBPARAM_PARAM_ARR()`. These registration macros allow to set a custom parameter name instead of deriving it from the variable name. 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: #868 commit 1cc3a2f6e33d1dbb390d24e79f73b86b34597b23 Author: Simon Kuenzer <simon@unikraft.io> Date: Fri Feb 24 00:42:29 2023 +0100 lib/uklibparam: Rewrite of parser This commit introduces a rewrite of `lib/uklibparam`. The rewrite ensures that it is errno-free, malloc-free, and TLS-free. This makes it ideal for processing library parameters early during boot. It includes an own and modified version of `strtoull` function that is used for parsing integer values from the command line. Additionally, the parser can handle arrays more intuitively (and for any data type of the elements) while fully utilizing pre-processed argument vectors. It relies on the fact that whitespacing and quoting is already handled (e.g., by `lib/ukargparse`). There are new types that are more inline with the ones defined by ukstore. This rewrite introduces the ability to provide a parameter description with updated parameter registration macros: UK_LIBPARAM_PARAM(variable, type, description) UK_LIBPARAM_PARAM_ARR(variable, type, count, description) The description is printed on the help output. The previous interfaces are kept for backwards compatibility. However, it is planned to remove them as soon as the code base is completely adopted. Checkpatch-Ignore: SPACING Checkpatch-Ignore: OPEN_BRACE Checkpatch-Ignore: MACRO_WITH_FLOW_CONTROL 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: #868 commit 243f0c45ca8060a230e0bde34783b75c0fefb47a Author: Simon Kuenzer <simon@unikraft.io> Date: Thu Feb 23 22:21:04 2023 +0100 build: Declare __LIBNAME__, __BASENAME__ and __VARIANT__ for .lds.S .lds.S files are linker script files that use the C preprocessor in order to generate the final .lds file. This commit provides Unikraft's common declarations of `__LIBNAME__`, `__BASENAME__`, `__VARIANT__` to this pre-processing step so that they can be used for generating linker scripts. 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: #868 commit 910b9befc07212f8b1313b234ce162dd6130e0d0 Author: Simon Kuenzer <simon@unikraft.io> Date: Thu Feb 23 21:47:59 2023 +0100 plat/*: Add linker scripts to link dependencies This commit adds needed linker scripts as dependency to the linking rule of the final image. This dependency was mostly indirectly covered via libraries. However, updates to platform linker scripts did not trigger relinking the final image. Additionally, pure API libraries (like `lib/ukfalloc`) would not even cause building a linker script that is shipped with the library or injected with an `EACHOLIB_SRCS` declaration. The library buildrule is generated but because no library object is generated, the linker script was never be part of a dependency list. 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: #868 commit ae0ee99ee2f79b8db511ab97a4f3d3f3218ca121 Author: calex257 <alexandru.calciu@stud.acs.upb.ro> Date: Sat Feb 25 17:53:56 2023 +0200 lib/nolibc: Add README.md Add a brief description of nolibc, providing an overview of its purpose, usage and limitations. This commit also shows a relevant example of how to configure an application to use Unikraft-specific assertions or the ones implemented in nolibc. Signed-off-by: Alexandru Calciu <alexandru.calciu@stud.acs.upb.ro> Reviewed-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: #778 commit 3e7a08afd4147f4f101a72765bf105968cce11f9 Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Date: Tue Apr 25 12:24:08 2023 +0200 lib/vfscore: Cleanup sys_symlink This commit cleans up sys_symlink() according to the current coding conventions and uses separate jump labels for exits depending on if the vnode lock needs to be released or not. Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #866 commit 20a2f602813e407754f217b1804384b9289d21e2 Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Date: Tue Apr 25 12:19:05 2023 +0200 lib/vfscore: Do not copy oldpath in symlink With the changes to the vnode ops definitions the symlink operation takes a constant string. We can thus just pass the input string on without having to copy it. Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #866 commit 429a017dcf3bd3b2429a87c55686cb47d81bb875 Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Date: Tue Apr 25 12:16:06 2023 +0200 lib/ramfs: Switch to const strings for vnops This commit changes all vnode operations to accept constant string parameters to be inline with the changed definitions. Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #866 commit 22c1a55814bd3763ea35285ae75a14ee5accf988 Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Date: Tue Apr 25 12:14:49 2023 +0200 lib/devfs: Switch to const strings for vnops This commit changes all vnode operations to accept constant string parameters to be inline with the changed definitions. Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #866 commit 3ab142f25240e39fe90c8fe97cbc0525e8ede89d Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Date: Tue Apr 25 12:14:11 2023 +0200 lib/9pfs: Switch to const strings for vnops This commit changes all vnode operations to accept constant string parameters to be inline with the changed definitions. Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #866 commit e04174a8eae7eaf16be08b93142ccd3266ce58d6 Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Date: Tue Apr 25 12:12:09 2023 +0200 lib/vfscore: Make vnops strings constant The current vnode operations define strings as mutable, which makes it more difficult to do optimizations. Since no buffer size is supplied the strings can only be modified on a char-for-char basis anyways, which also limits the use-cases. In addition, no implementation of the vnode operations makes use of the mutability of the strings. This commit thus introduces the `const` keyword for all strings passed to vnode operations. Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #866 commit 7ef5bbccffa6592a0d6da0efedd3c63366ba3cbb Author: Marco Schlumpp <marco@unikraft.io> Date: Mon Apr 17 10:04:04 2023 +0200 lib/posix-futex: Check for proper FUTEX_CLOCK_REALTIME usage The documentation specifies a list of operations which support this flag. This adds a check that explicitly rejects all invalid combinations and returns `ENOSYS` according to the documentation. Checkpatch-Ignore: ENOSYS Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Adina Smeu <adina.smeu@gmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #758 commit 54d27549bfa6a0c3aaffe08d10c7e9a5101f8c0d Author: Marco Schlumpp <marco@unikraft.io> Date: Mon Apr 17 09:57:45 2023 +0200 lib/posix-futex: Ignore FUTEX_PRIVATE_FLAG The flag can be specified for all operations and does not make a difference in the context of a single-process scenario. Therefore, we can ignore it. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Adina Smeu <adina.smeu@gmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #758 commit c905e263471c9081e457d1d0041a083dec53f828 Author: Marco Schlumpp <marco@unikraft.io> Date: Thu Feb 9 16:44:35 2023 +0100 lib/posix-futex: Implement subset of FUTEX_WAIT_BITSET Many modern applications use FUTEX_WAIT_BITSET to be able to set an absolute timeout. To accomplish that they set all bits in the val3/mask parameter, which makes the operation equivalent to a normal FUTEX_WAIT (except the absolute timeout value). Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Adina Smeu <adina.smeu@gmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #758 commit 7683671942d29fb5c3cc4c6471f257f0dc290687 Author: Marco Schlumpp <marco@unikraft.io> Date: Thu Feb 9 15:57:30 2023 +0100 lib/uksched: Expose uk_thread_block_until This allows external API clients to specify an absolute deadline for waking up. This is potentially more precise because the `timeout` is relative to whenever uk_thread_block_timeout is actually taking the "current" time. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Adina Smeu <adina.smeu@gmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #758 commit 5223ae6691e0d8ee449ece64f6f9bde3aaeb7643 Author: Nour-eddine Taleb <contact@noureddine.xyz> Date: Sat Mar 25 19:56:47 2023 +0000 lib/uksched: fix docs Signed-off-by: Nour-eddine Taleb <contact@noureddine.xyz> Reviewed-by: Adina Smeu <adina.smeu@gmail.com> Approved-by: Cezar Craciunoiu <cezar.craciunoiu@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #809 commit c00afb4d422af1377374bfee5d4ea52cec0cbea0 Author: Nour-eddine Taleb <contact@noureddine.xyz> Date: Thu Mar 23 23:15:24 2023 +0000 lib/posix-futex/test: port the test cases to the new sched apis due to the changes in scheduling apis, it was necessary to update posix-futex tests which still relays on the old apis. GitHub-Fixes: #630 Signed-off-by: Nour-eddine Taleb <contact@noureddine.xyz> Reviewed-by: Adina Smeu <adina.smeu@gmail.com> Approved-by: Cezar Craciunoiu <cezar.craciunoiu@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #809 commit ce2e3dae5f8d876e38dcdcf0c3a83850cfb98dc8 Author: Marco Schlumpp <marco@unikraft.io> Date: Mon Jan 2 11:22:18 2023 +0100 plat/kvm/x86: Stop unwinding at _libkvmplat_entry2 The _libkvmplat_entry2 function is called using assembler code that switches stacks. Therefore, a debugger can't unwind its frame. This inserts a CFI that marks the previous instruction pointer as undefined. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Simon Kuenzer <simon@unikraft.io> Approved-by: Simon Kuenzer <simon@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #700 commit 7f450a9834e4c31a938e8a59e72006ec9389cc18 Author: Marco Schlumpp <marco@unikraft.io> Date: Mon Jan 2 15:15:52 2023 +0100 plat/kvm/x86: Add unwinding information to interrupt/exception handlers This allows debuggers and profilers to unwind past interrupt/exception handlers. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Simon Kuenzer <simon@unikraft.io> Approved-by: Simon Kuenzer <simon@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #700 commit f87e378199fa87c07e77b36c5c979c9194fb1d93 Author: Marco Schlumpp <marco@unikraft.io> Date: Wed Dec 21 11:01:34 2022 +0100 plat/x86: Add unwind information to system call handler Without this information debugging tools do not know how to properly unwind the _ukplat_syscall frame. For example, this causes them to output garbage output for back traces. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Simon Kuenzer <simon@unikraft.io> Approved-by: Simon Kuenzer <simon@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #700 commit b88c21a231243845cbc155e1c7f0bcccd181a1c5 Author: Marco Schlumpp <marco@unikraft.io> Date: Mon Jan 2 11:40:13 2023 +0100 arch/x86: Add helpers for CFI in assembler code This introduces helpers for maintaining frame information when using push and pop in assembler code. Checkpatch-Ignore: SPACING Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Simon Kuenzer <simon@unikraft.io> Approved-by: Simon Kuenzer <simon@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #700 commit 6d07539298dae30eb07f078942563af2be60acd9 Author: Marco Schlumpp <marco.schlumpp@gmail.com> Date: Tue May 24 20:17:14 2022 +0200 lib/nolibc: Define u_(long|int|short_char) for _DEFAULT_SOURCE files These typedefs are commonly used in BSD code. Most libc libraries define them by default or for _DEFAULT_SOURCE files. Because unikraft is usually closer to Linux, this adopts the later approach. Signed-off-by: Marco Schlumpp <marco.schlumpp@gmail.com> Reviewed-by: Razvan Deaconescu <razvand@unikraft.io> Reviewed-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Approved-by: Marc Rittinghaus <marc.…
dragosp27
added a commit
to dragosp27/unikraft
that referenced
this issue
Jun 3, 2023
commit b0da6bfc5286027fd4b77256e4bef5725cbeaba9 Author: Alexander Jung <alex@nder.sh> Date: Mon May 15 23:09:49 2023 +0200 Release: v0.13.0 Atlas Signed-off-by: Razvan Deaconescu <razvand@unikraft.io> Signed-off-by: Marc Rittinghaus <marc@unikraft.io> Signed-off-by: Simon Kuenzer <simon@unikraft.io> Signed-off-by: Alexander Jung <alex@unikraft.io> commit 8da5cbb6cd6e973a4c6cdbb4b113d5fc222a57fb Author: Simon Kuenzer <simon@unikraft.io> Date: Fri Mar 24 17:33:17 2023 +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 commit 7279c2d240e92285aaf2e7ebd48813a70f3d20a7 Author: Costin Sin <sin.costinrobert@gmail.com> Date: Sat May 13 06:48:31 2023 +0000 lib/posix-time: Add clock_nanosleep syscall clock_nanosleep syscall should mimic the nanosleep syscall when the clockid equals CLOCK_REALTIME and the TIMER_ABSTIME flag is missing. Signed-off-by: Costin Sin <sin.costinrobert@gmail.com> 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: #891 commit 8ea48c6f064f62ab007300d87de93bb8f61f854c Author: Tu Dinh Ngoc <dinhngoc.tu@irit.fr> Date: Tue Apr 4 20:17:40 2023 +0000 lib/vfscore: Dynamically allocate mount paths 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 commit a7698597cd20b726dc15405368c3bf23050304c8 Author: Razvan Deaconescu <razvand@unikraft.io> Date: Sat May 13 01:28:57 2023 +0300 lib/vfscore: Initialize lists for stdio_vnode 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 commit 7b76234d3351c4d4414ba341c2d4fb9fd6220b62 Author: Razvan Deaconescu <razvand@unikraft.io> Date: Sat May 13 01:45:43 2023 +0300 lib/vfscore: Add semicolon to DPRINTF macro The `DPRINTF()` macro in `vfscore` requires a semicolon (`;`). If this is not present (once `DEBUG_VFS` is enabled), a build issue occurs. Signed-off-by: Razvan Deaconescu <razvand@unikraft.io> Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com> 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: #890 commit cb35dfff57bdc7b7e2896922fd0743e4f25f5972 Author: Sairaj Kodilkar <skodilkar7@gmail.com> Date: Mon Mar 13 11:12:46 2023 +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 commit 362ddab80a491a4ed3a7d2354813f2fb94282086 Author: Sairaj Kodilkar <skodilkar7@gmail.com> Date: Tue Jan 31 15:49:53 2023 +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 commit edda7dff6f86d94ef46342a3f71974158469826b Author: Sairaj Kodilkar <skodilkar7@gmail.com> Date: Tue Jan 31 15:06:02 2023 +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 commit f205fee3da57c467ce1cf9cf33f88d529e79875b Author: Sairaj Kodilkar <skodilkar7@gmail.com> Date: Tue Jan 31 12:22:01 2023 +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 commit d073d652299d53509d059b60706eee236d5c0d10 Author: Sairaj Kodilkar <skodilkar7@gmail.com> Date: Sun Mar 12 13:25:56 2023 +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 commit a078828e0d7a5d33b3d2c4bd62b79e02ddcf7b9b Author: Sairaj Kodilkar <skodilkar7@gmail.com> Date: Tue Jan 31 16:52:53 2023 +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 commit 3970edf400001f0fb62a86a1dea898e323aafd3e Author: Sairaj Kodilkar <skodilkar7@gmail.com> Date: Tue Jan 31 12:17:50 2023 +0530 include/arch: Add macros for atomic add, sub, or This commit adds macros to atomically add, subtract, and perform a bitwise or based on the builtins provided by GCC. 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 commit dedc1b71eecc0ac25eb60a5d62a7a10f9b7b7c28 Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Date: Fri May 12 17:24:10 2023 +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 commit 55cf96d011284e35fced79e8d8bac4934d0c8d6d Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Date: Fri May 12 16:19:06 2023 +0200 lib/ukswrand: Add missing errno include This commit adds an include for errno.h that might not be included otherwise and causes the build to fail. Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Reviewed-by: Cezar Craciunoiu <cezar.craciunoiu@unikraft.io> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #887 commit dfe489a4f27aff6c74b2c7c8b111e0afb73e5a96 Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Date: Fri May 12 14:00:38 2023 +0200 lib/uk9p: Add workaround for QEMU WSTAT fsync bug This commit adds a workaround for a bug in QEMU where performing an fsync using the WSTAT command in 9P2000.u leads to a zero-sized response. Checkpatch-Ignore: SUSPECT_CODE_INDENT 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 commit d2c0ccd32602e337c12fb50867a2b24530fa0f8f Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Date: Fri May 12 13:58:50 2023 +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 commit d7f598242afd95dceab42983d8d616885e618cbf Author: Razvan Deaconescu <razvand@unikraft.io> Date: Fri Feb 3 13:41:38 2023 +0200 lib/nolibc: Add -ffreestanding flag 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 commit 7eac25ea53ae833294652d6f38d04732612145b6 Author: Florin Postolache <florin.postolache.of@gmail.com> Date: Thu May 11 22:48:53 2023 +0300 lib/posix-process: Fix debug printing of TIDs 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 commit d4100c9dc4dfffdebd48ce8788d04ca3fa75d066 Author: Florin Postolache <florin.postolache.of@gmail.com> Date: Thu May 11 13:07:48 2023 +0300 lib/posix-process: Reserve PID/TID 0 for kernel 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 commit a1c73be910b779b3b57a5ae79435d4f86b488fa2 Author: Florin Postolache <florin.postolache.of@gmail.com> Date: Thu May 11 12:44:58 2023 +0300 lib/posix-process: Correct MAX_PID config option 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 commit ddefe64f12ab4599f0ea3064bbbfedbf5205384f Author: Andra Paraschiv <andra@unikraft.org> Date: Wed May 10 13:40:27 2023 +0300 lib/vfscore: Fix file path resolution for 9pfs setup The path resolution doesn't correctly work for a set of file cases (e.g. symlinks to binaries or shared libraries). One setup example is using 9pfs and the entire root local filesystem, while running the "ls" binary and loading the shared libraries: unikraft/support/scripts/qemu-guest -k build/app-elfloader_qemu-x86_64 -e / -a "/bin/ls /" A "/" character is omitted from the last part of the path e.g. "/binls" instead of "/bin/ls". Update the logic to include the missing character. Signed-off-by: Andra Paraschiv <andra@unikraft.org> Reviewed-by: Florin Postolache <florin.postolache.of@gmail.com> Reviewed-by: Ioan-Teodor Teugea <ioan_teodor.teugea@stud.acs.upb.ro> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #883 commit b2c2164eeb2745325489003dc6b52354c02a9a4d Author: Simon Kuenzer <simon@unikraft.io> Date: Fri May 5 15:44:28 2023 +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 commit 5784d007b1d2b727d3151f84ea70e5dd4683df32 Author: Andrei Tatar <andrei@unikraft.io> Date: Mon May 8 11:02:45 2023 +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 commit cfc103cf6fc09add1291990a8b44a172a54195c5 Author: Stefan Jumarea <stefanjumarea02@gmail.com> Date: Sun May 7 13:53:19 2023 +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 commit c04312c813a9ce47476f3ea7ece77f22cd888dcd Author: Hugo Lefeuvre <hugo.lefeuvre@manchester.ac.uk> Date: Sun Apr 16 15:08:17 2023 +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: @@ expression E; @@ - ALIGN_DOWN(E, __PAGE_SIZE) + PAGE_ALIGN_DOWN(E) @@ expression E; type T; @@ - ALIGN_DOWN(E, (T) __PAGE_SIZE) + PAGE_ALIGN_DOWN(E) @@ expression E; @@ - ALIGN_UP(E, __PAGE_SIZE) + PAGE_ALIGN_UP(E) @@ expression E; type T; @@ - ALIGN_UP(E, (T) __PAGE_SIZE) + PAGE_ALIGN_UP(E) @@ expression E; @@ - (E + PAGE_SIZE - 1) & PAGE_MASK + PAGE_ALIGN(E) Signed-off-by: Hugo Lefeuvre <hugo.lefeuvre@manchester.ac.uk> Reviewed-by: Dragos Petre <dragos.petre27@gmailcom> Reviewed-by: Alexandru Calciu <alxcalciu@gmail.com> Approved-by: Simon Kuenzer <simon@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #842 commit 5d9c4d702ec4a6e9de4e848a727db21e06d5d3b7 Author: Maria Sfiraiala <maria.sfiraiala@gmail.com> Date: Mon May 8 10:49:43 2023 +0300 lib/{nolibc,isrlib}: Modify pointer comparison This commit typecasts `src` and `dst` strings from `memmove()` to ensure that their values are treated as pointers. It also modifies the function implementation to handle overlapping. Co-authored-by: Soumya Ranjan <ranjan42069@gmail.com> Signed-off-by: Maria Sfiraiala <maria.sfiraiala@gmail.com> Signed-off-by: Soumya Ranjan <ranjan42069@gmail.com> Reviewed-by: Radu Nichita <radunichita99@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: #880 commit 4e139b3164bb4ead5cec2760ea0f3fd4aecb762c Author: Marco Schlumpp <marco@unikraft.io> Date: Wed Apr 12 11:09:26 2023 +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. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Checkpatch-Ignore: SPACING Checkpatch-Ignore: COMPLEX_MACRO Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Reviewed-by: Razvan Deaconescu <razvand@unikraft.io> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #833 commit 7255b0ee1209d3309a610d8ea516fbc21ea84e27 Author: Marco Schlumpp <marco@unikraft.io> Date: Wed Apr 12 11:06:17 2023 +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. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Reviewed-by: Razvan Deaconescu <razvand@unikraft.io> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #833 commit d57a4c7cd10ab8d781a089629cb310b8e8de3c91 Author: Diego Alejandro Parra Guzman <diego-alejandro.parra-guzman@tttech.com> Date: Wed May 10 14:12:39 2023 +0300 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 commit 372475c140863dabab697f01ab485c971a3ba054 Author: Diego Alejandro Parra Guzman <diego-alejandro.parra-guzman@tttech.com> Date: Wed May 10 14:12:01 2023 +0300 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 commit d39b30308e957893cd2bed2115aeb056f2b08b59 Author: Alexander Jung <alex@unikraft.io> Date: Mon May 8 07:43:37 2023 +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 commit 47c243c394548b1198951f44af1c7101bd868589 Author: Aryan Verma <aryanvarma7272@gmail.com> Date: Thu Feb 16 15:19:32 2023 +0530 doc: Add Codacy code quality status badge to README.md GitHub-Fixes: #650 Signed-off-by: Aryan Verma <aryanvarma7272@gmail.com> Co-authored-by: Alexander Jung <alex@unikraft.io> Reviewed-by: Cezar Craciunoiu <cezar.craciunoiu@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: #764 commit 84172dbfbe07b91cade20eb6c88f2c4a1c2e6255 Author: Simon Kuenzer <simon@unikraft.io> Date: Mon May 8 16:38:14 2023 +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 commit 275429893d983ff13d9874b310b4566c254631fe Author: Hugo Lefeuvre <hugo.lefeuvre@manchester.ac.uk> Date: Sun Apr 16 11:57:44 2023 +0200 plat/xen: Fix unchecked uk_palloc() value in x86/mm.c The return value of uk_palloc is not checked in _arch_init_p2m. Allocation failure at that point should never happen, but it's not a reason not to check. At this stage, in the event of a failure, we should probably abort the boot altogether. This bug was detected using the following Coccinelle spatch: @call@ expression ptr; position p; @@ ptr@p = uk_palloc(...); @ok@ expression ptr; position call.p; @@ ptr@p = uk_palloc(...); ... when != ptr ( (ptr == NULL || ...) | (ptr != NULL || ...) ) @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 commit b240edc27abe95d22034d1b4ea7d582dd93098c2 Author: Eduard Vintilă <eduard.vintila47@gmail.com> Date: Mon May 1 19:13:55 2023 +0300 lib/vfscore: Handle `FIONBIO` command in `pipe_ioctl()` The current `ioctl` implementation for pipes does not handle the `FIONBIO` command, which leads to a negative error value being returned. This commit introduces a simple case which sets the FNONBLOCK flag when such a command is passed. Signed-off-by: Eduard Vintilă <eduard.vintila47@gmail.com> Reviewed-by: Tu Dinh Ngoc <dinhngoc.tu@irit.fr> 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: #874 commit 0f75e55ba08647b2e398a19aea35f31b06c0da6a Author: Andrei Tudor TOPALĂ (101668) <topala.andrei@gmail.com> Date: Fri Apr 15 00:36:51 2022 +0300 plat/common: Add firecracker shutdown signal Firecracker emulates a PS/2 controller and detects attempted writes to the CPU reset line. Co-authored-by: Marco Schlumpp <marco@unikraft.io> Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #760 commit 59111c4f28254c0614c62d56113e2048300a5549 Author: Marco Schlumpp <marco@unikraft.io> Date: Mon Apr 17 11:19:33 2023 +0200 plat/kvm: Include target hypervisor in image name This makes it more clear on what hypervisor the image works on. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #760 commit 789cdba609d4c879e6b8bfc05c7b89cc85c1f3b7 Author: Marco Schlumpp <marco@unikraft.io> Date: Tue Apr 11 17:58:08 2023 +0200 plat/kvm/x86: Use position independent code for lxboot This should make it easier in the future to extend the entry point to support proper boot loaders such as the one in QEMU. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #760 commit f0ae44de725f698505060756d85558361fcd2abb Author: Marco Schlumpp <marco@unikraft.io> Date: Thu Feb 9 14:47:36 2023 +0100 plat/kvm/x86: Workaround re-mapping low-mem areas The paging code currently does not unmap the memory area before the kernel image, but then tries to re-map any region in that area. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #760 commit e85a0cd860e4166b26269785e229c6676b175a30 Author: Marco Schlumpp <marco@unikraft.io> Date: Thu Feb 9 14:43:51 2023 +0100 plat/kvm/x86: Add an entry point for the firecracker hypervisor This is currently not conforming to the actual Linux boot protocol and only suitable for firecracker. The kernel image would have to include a proper Linux boot protocol header to allow loading with proper bootloaders such as the one in QEMU. Co-authored-by: Marc Rittinghaus <marc@unikraft.io> Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #760 commit ebb4795a3a41e8196f501f5b0b7d7a88361ad7f3 Author: Marco Schlumpp <marco@unikraft.io> Date: Thu Feb 9 14:41:00 2023 +0100 plat/kvm/x86: Add structures/definitions for the linux boot protocol This defines the necessary structures to parse the information passed by a linux boot protocol compatible bootloader. Co-authored-by: Marc Rittinghaus <marc@unikraft.io> Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #760 commit deef081dd04ee254c03266b431befb3ae4d2a329 Author: Marco Schlumpp <marco@unikraft.io> Date: Thu Feb 9 14:38:27 2023 +0100 plat/kvm: Add hypervisor/boot protocol configuration This allows the configuration of a target hypervisor. Depending on the hypervisor a suitable boot protocol is selected. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #760 commit 7190449a7a0bdd0ffcd90c37fa0a8d2fc287c804 Author: Marco Schlumpp <marco@unikraft.io> Date: Mon Feb 13 16:58:19 2023 +0100 plat/common: Extract non-multiboot specific memory region helpers The multiboot entry point had a few internal functions that are also useful for other entry points. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #760 commit 70b260d0668eb0850465c525ac1ca6b697b23ce3 Author: Marco Schlumpp <marco@unikraft.io> Date: Tue Apr 25 10:05:41 2023 +0200 include/uk: Simplify RANGE_OVERLAP macro We can simplify the check by observing that there are only two conditions necessary to check whether a range does *not* overlap: - the end of range 0 is before the start of range 1 [--0--) [--1--) - OR the start of range 0 is after the end of range 1 [--1--) [--0--) Inverting this gives us a simple condition for checking whether ranges *do* overlap. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #760 commit 7346338847c8449389316ffc2c554a5d3637ba69 Author: Marco Schlumpp <marco@unikraft.io> Date: Thu Feb 9 14:34:39 2023 +0100 plat/*: Introduce cmdline length to bootinfo Some boot protocols already have the length information and the internal command line handling works with non-null terminated strings anyway. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #760 commit ad684b5175f70e78dc37ed63d8a124c2b6e53d1c Author: Marco Schlumpp <marco@unikraft.io> Date: Thu Feb 9 13:09:03 2023 +0100 plat/kvm/x86: Don't create fine-grained mapping for low memory Mapping all memory makes the page table more independent of the actual boot protocol. Firecracker currently puts the protocol information at a very low address (0x7000). Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #760 commit c7c221dc66b124752250a39a677e4a9bbe3f2c24 Author: Marco Schlumpp <marco@unikraft.io> Date: Fri Feb 24 17:18:55 2023 +0100 plat/kvm: Remove intermediate relocatable object step This object was previously used to hide all symbols except the entry point. But this step was removed making the relocatable object creation unnecessary. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Simon Kuenzer <simon@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #789 commit 195cc32f7e5e65d8929ae65b8fa9203ddf246ba6 Author: Eduard Vintilă <eduard.vintila47@gmail.com> Date: Thu Mar 16 14:13:06 2023 +0200 plat/drivers/ofw: Fix search in `fdt_node_offset_by_compatible_list` The current implementation returns as soon as a node that matches a compatible string is found. However, we should iterate through all of the compatible list to make sure that we return the node with the least offset value such that future searches will not skip any matching nodes. Signed-off-by: Eduard Vintilă <eduard.vintila47@gmail.com> Reviewed-by: Robert Kuban <robert.kuban@opensynergy.com> Reviewed-by: Razvan Virtan <virtanrazvan@gmail.com> Approved-by: Michalis Pappas <michalis@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #805 commit dfbf3ffd2cf2542e97129e017f4a06afd65b079c Author: Eduard Vintilă <eduard.vintila47@gmail.com> Date: Thu Mar 16 14:10:46 2023 +0200 plat/drivers/ofw: Fix incorrect offset in `fdt_translate_one` When a node is missing the "ranges" property, offset should be set to 0. The current implementation sets offset to the address to be translated, which ignores the fact that `fdt_default_translate` is later called. The latter function adds the offset to the same address, resulting in doubling the effective address, when in fact a 1-to-1 mapping is necessary. Signed-off-by: Eduard Vintilă <eduard.vintila47@gmail.com> Reviewed-by: Robert Kuban <robert.kuban@opensynergy.com> Reviewed-by: Razvan Virtan <virtanrazvan@gmail.com> Approved-by: Michalis Pappas <michalis@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #805 commit 4792af49d89c1c0e141b40720d4ec1b89530411a Author: Takeru Wada <takew@asg.cs.tuat.ac.jp> Date: Mon Mar 13 14:37:51 2023 +0000 lib/nolibc: Remove warnings of timespec This commit fixes the definition of pointer arguments in GCC >= 11. Signed-off-by: Takeru Wada <takew@asg.cs.tuat.ac.jp> Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #800 commit ec2c285ea91fac0a178e6c550c122e6bc82f10dd Author: Simon Kuenzer <simon@unikraft.io> Date: Thu Mar 16 17:31:42 2023 +0100 lib/ukboot: Print environment variables before entering main 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: #868 commit 3f89855cf89e38a009d85da26b1355f167985ca8 Author: Simon Kuenzer <simon@unikraft.io> Date: Tue Mar 14 15:18:12 2023 +0100 lib/posix-environ: Symbol aliases for `environ` In order to comply with common libc behavior, we provide the following symbol aliases for environ`: `_environ`, `__environ`, `___environ`. 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: #868 commit fefaa0591880d69770a869cbc06f85b38872dc61 Author: Simon Kuenzer <simon@unikraft.io> Date: Fri Feb 24 01:45:52 2023 +0100 lib/posix-environ: Variables from kernel command line Introduces the ability to populate additional environment variables via the kernel command line. Checkpatch-Ignore: SPACING 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: #868 commit 6f2798a9f2a95d02c9aec763a3c6e7649350f104 Author: Simon Kuenzer <simon@unikraft.io> Date: Wed Feb 15 00:32:29 2023 +0100 lib/posix-environ: Compiled-in environment variables We introduce the ability to compile-in up to 16 environment variables. The values can be set via `menuconfig`. The initial `environ` array is automatically sized to match the number of compiled-in values. 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: #868 commit a46c0c1d63a71742e79b4fdd1bf690df560abf8d Author: Simon Kuenzer <simon@unikraft.io> Date: Thu Feb 9 21:54:40 2023 +0100 lib/posix-environ: Register and make it compile This commit integrates and enables compiling of the imported environment helper functions (see previous commit). 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: #868 commit e9b7d00e5407dc0c4cfeb912b2f3329cdc5ff28b Author: Simon Kuenzer <simon@unikraft.io> Date: Wed Feb 8 17:01:41 2023 +0100 lib/posix-environ: Import from musl 1.2.3 This commit imports needed code from musl 1.2.3. This concentrates mostly on the following helper functions for environment variables: - `clearenv()` - `getenv()` - `putenv()` - `setenv()` - `unsetenv()` Checkpatch-Ignore: FUNCTION_WITHOUT_ARGS Checkpatch-Ignore: LINE_SPACING Checkpatch-Ignore: SPACING Checkpatch-Ignore: TRAILING_STATEMENTS Checkpatch-Ignore: SIZEOF_PARENTHESIS Checkpatch-Ignore: TYPO_SPELLING 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: #868 commit 7741af977fd2c723272abfce8c166deb125cf6c6 Author: Simon Kuenzer <simon@unikraft.io> Date: Fri Feb 24 01:42:55 2023 +0100 lib/uklibparam: `UK_LIBPARAM_PARAM_ALIAS()`,`UK_LIBPARAM_PARAM_ARR_ALIAS()` This commit provides `UK_LIBPARAM_PARAM_ALIAS()` and `UK_LIBPARAM_PARAM_ARR_ALIAS()` which are variants of `UK_LIBPARAM_PARAM()` and `UK_LIBPARAM_PARAM_ARR()`. These registration macros allow to set a custom parameter name instead of deriving it from the variable name. 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: #868 commit 1cc3a2f6e33d1dbb390d24e79f73b86b34597b23 Author: Simon Kuenzer <simon@unikraft.io> Date: Fri Feb 24 00:42:29 2023 +0100 lib/uklibparam: Rewrite of parser This commit introduces a rewrite of `lib/uklibparam`. The rewrite ensures that it is errno-free, malloc-free, and TLS-free. This makes it ideal for processing library parameters early during boot. It includes an own and modified version of `strtoull` function that is used for parsing integer values from the command line. Additionally, the parser can handle arrays more intuitively (and for any data type of the elements) while fully utilizing pre-processed argument vectors. It relies on the fact that whitespacing and quoting is already handled (e.g., by `lib/ukargparse`). There are new types that are more inline with the ones defined by ukstore. This rewrite introduces the ability to provide a parameter description with updated parameter registration macros: UK_LIBPARAM_PARAM(variable, type, description) UK_LIBPARAM_PARAM_ARR(variable, type, count, description) The description is printed on the help output. The previous interfaces are kept for backwards compatibility. However, it is planned to remove them as soon as the code base is completely adopted. Checkpatch-Ignore: SPACING Checkpatch-Ignore: OPEN_BRACE Checkpatch-Ignore: MACRO_WITH_FLOW_CONTROL 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: #868 commit 243f0c45ca8060a230e0bde34783b75c0fefb47a Author: Simon Kuenzer <simon@unikraft.io> Date: Thu Feb 23 22:21:04 2023 +0100 build: Declare __LIBNAME__, __BASENAME__ and __VARIANT__ for .lds.S .lds.S files are linker script files that use the C preprocessor in order to generate the final .lds file. This commit provides Unikraft's common declarations of `__LIBNAME__`, `__BASENAME__`, `__VARIANT__` to this pre-processing step so that they can be used for generating linker scripts. 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: #868 commit 910b9befc07212f8b1313b234ce162dd6130e0d0 Author: Simon Kuenzer <simon@unikraft.io> Date: Thu Feb 23 21:47:59 2023 +0100 plat/*: Add linker scripts to link dependencies This commit adds needed linker scripts as dependency to the linking rule of the final image. This dependency was mostly indirectly covered via libraries. However, updates to platform linker scripts did not trigger relinking the final image. Additionally, pure API libraries (like `lib/ukfalloc`) would not even cause building a linker script that is shipped with the library or injected with an `EACHOLIB_SRCS` declaration. The library buildrule is generated but because no library object is generated, the linker script was never be part of a dependency list. 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: #868 commit ae0ee99ee2f79b8db511ab97a4f3d3f3218ca121 Author: calex257 <alexandru.calciu@stud.acs.upb.ro> Date: Sat Feb 25 17:53:56 2023 +0200 lib/nolibc: Add README.md Add a brief description of nolibc, providing an overview of its purpose, usage and limitations. This commit also shows a relevant example of how to configure an application to use Unikraft-specific assertions or the ones implemented in nolibc. Signed-off-by: Alexandru Calciu <alexandru.calciu@stud.acs.upb.ro> Reviewed-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: #778 commit 3e7a08afd4147f4f101a72765bf105968cce11f9 Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Date: Tue Apr 25 12:24:08 2023 +0200 lib/vfscore: Cleanup sys_symlink This commit cleans up sys_symlink() according to the current coding conventions and uses separate jump labels for exits depending on if the vnode lock needs to be released or not. Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #866 commit 20a2f602813e407754f217b1804384b9289d21e2 Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Date: Tue Apr 25 12:19:05 2023 +0200 lib/vfscore: Do not copy oldpath in symlink With the changes to the vnode ops definitions the symlink operation takes a constant string. We can thus just pass the input string on without having to copy it. Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #866 commit 429a017dcf3bd3b2429a87c55686cb47d81bb875 Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Date: Tue Apr 25 12:16:06 2023 +0200 lib/ramfs: Switch to const strings for vnops This commit changes all vnode operations to accept constant string parameters to be inline with the changed definitions. Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #866 commit 22c1a55814bd3763ea35285ae75a14ee5accf988 Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Date: Tue Apr 25 12:14:49 2023 +0200 lib/devfs: Switch to const strings for vnops This commit changes all vnode operations to accept constant string parameters to be inline with the changed definitions. Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #866 commit 3ab142f25240e39fe90c8fe97cbc0525e8ede89d Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Date: Tue Apr 25 12:14:11 2023 +0200 lib/9pfs: Switch to const strings for vnops This commit changes all vnode operations to accept constant string parameters to be inline with the changed definitions. Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #866 commit e04174a8eae7eaf16be08b93142ccd3266ce58d6 Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Date: Tue Apr 25 12:12:09 2023 +0200 lib/vfscore: Make vnops strings constant The current vnode operations define strings as mutable, which makes it more difficult to do optimizations. Since no buffer size is supplied the strings can only be modified on a char-for-char basis anyways, which also limits the use-cases. In addition, no implementation of the vnode operations makes use of the mutability of the strings. This commit thus introduces the `const` keyword for all strings passed to vnode operations. Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #866 commit 7ef5bbccffa6592a0d6da0efedd3c63366ba3cbb Author: Marco Schlumpp <marco@unikraft.io> Date: Mon Apr 17 10:04:04 2023 +0200 lib/posix-futex: Check for proper FUTEX_CLOCK_REALTIME usage The documentation specifies a list of operations which support this flag. This adds a check that explicitly rejects all invalid combinations and returns `ENOSYS` according to the documentation. Checkpatch-Ignore: ENOSYS Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Adina Smeu <adina.smeu@gmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #758 commit 54d27549bfa6a0c3aaffe08d10c7e9a5101f8c0d Author: Marco Schlumpp <marco@unikraft.io> Date: Mon Apr 17 09:57:45 2023 +0200 lib/posix-futex: Ignore FUTEX_PRIVATE_FLAG The flag can be specified for all operations and does not make a difference in the context of a single-process scenario. Therefore, we can ignore it. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Adina Smeu <adina.smeu@gmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #758 commit c905e263471c9081e457d1d0041a083dec53f828 Author: Marco Schlumpp <marco@unikraft.io> Date: Thu Feb 9 16:44:35 2023 +0100 lib/posix-futex: Implement subset of FUTEX_WAIT_BITSET Many modern applications use FUTEX_WAIT_BITSET to be able to set an absolute timeout. To accomplish that they set all bits in the val3/mask parameter, which makes the operation equivalent to a normal FUTEX_WAIT (except the absolute timeout value). Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Adina Smeu <adina.smeu@gmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #758 commit 7683671942d29fb5c3cc4c6471f257f0dc290687 Author: Marco Schlumpp <marco@unikraft.io> Date: Thu Feb 9 15:57:30 2023 +0100 lib/uksched: Expose uk_thread_block_until This allows external API clients to specify an absolute deadline for waking up. This is potentially more precise because the `timeout` is relative to whenever uk_thread_block_timeout is actually taking the "current" time. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Adina Smeu <adina.smeu@gmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #758 commit 5223ae6691e0d8ee449ece64f6f9bde3aaeb7643 Author: Nour-eddine Taleb <contact@noureddine.xyz> Date: Sat Mar 25 19:56:47 2023 +0000 lib/uksched: fix docs Signed-off-by: Nour-eddine Taleb <contact@noureddine.xyz> Reviewed-by: Adina Smeu <adina.smeu@gmail.com> Approved-by: Cezar Craciunoiu <cezar.craciunoiu@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #809 commit c00afb4d422af1377374bfee5d4ea52cec0cbea0 Author: Nour-eddine Taleb <contact@noureddine.xyz> Date: Thu Mar 23 23:15:24 2023 +0000 lib/posix-futex/test: port the test cases to the new sched apis due to the changes in scheduling apis, it was necessary to update posix-futex tests which still relays on the old apis. GitHub-Fixes: #630 Signed-off-by: Nour-eddine Taleb <contact@noureddine.xyz> Reviewed-by: Adina Smeu <adina.smeu@gmail.com> Approved-by: Cezar Craciunoiu <cezar.craciunoiu@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #809 commit ce2e3dae5f8d876e38dcdcf0c3a83850cfb98dc8 Author: Marco Schlumpp <marco@unikraft.io> Date: Mon Jan 2 11:22:18 2023 +0100 plat/kvm/x86: Stop unwinding at _libkvmplat_entry2 The _libkvmplat_entry2 function is called using assembler code that switches stacks. Therefore, a debugger can't unwind its frame. This inserts a CFI that marks the previous instruction pointer as undefined. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Simon Kuenzer <simon@unikraft.io> Approved-by: Simon Kuenzer <simon@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #700 commit 7f450a9834e4c31a938e8a59e72006ec9389cc18 Author: Marco Schlumpp <marco@unikraft.io> Date: Mon Jan 2 15:15:52 2023 +0100 plat/kvm/x86: Add unwinding information to interrupt/exception handlers This allows debuggers and profilers to unwind past interrupt/exception handlers. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Simon Kuenzer <simon@unikraft.io> Approved-by: Simon Kuenzer <simon@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #700 commit f87e378199fa87c07e77b36c5c979c9194fb1d93 Author: Marco Schlumpp <marco@unikraft.io> Date: Wed Dec 21 11:01:34 2022 +0100 plat/x86: Add unwind information to system call handler Without this information debugging tools do not know how to properly unwind the _ukplat_syscall frame. For example, this causes them to output garbage output for back traces. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Simon Kuenzer <simon@unikraft.io> Approved-by: Simon Kuenzer <simon@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #700 commit b88c21a231243845cbc155e1c7f0bcccd181a1c5 Author: Marco Schlumpp <marco@unikraft.io> Date: Mon Jan 2 11:40:13 2023 +0100 arch/x86: Add helpers for CFI in assembler code This introduces helpers for maintaining frame information when using push and pop in assembler code. Checkpatch-Ignore: SPACING Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Simon Kuenzer <simon@unikraft.io> Approved-by: Simon Kuenzer <simon@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #700 commit 6d07539298dae30eb07f078942563af2be60acd9 Author: Marco Schlumpp <marco.schlumpp@gmail.com> Date: Tue May 24 20:17:14 2022 +0200 lib/nolibc: Define u_(long|int|short_char) for _DEFAULT_SOURCE files These typedefs are commonly used in BSD code. Most libc libraries define them by default or for _DEFAULT_SOURCE files. Because unikraft is usually closer to Linux, this adopts the later approach. Signed-off-by: Marco Schlumpp <marco.schlumpp@gmail.com> Reviewed-by: Razvan Deaconescu <razvand@unikraft.io> Reviewed-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #627 commit a391affca8dce75d51f487d43babb3551c03b0d1 Author: Marco Schlumpp <marco.schlumpp@gmail.com> Date: Tue Mar 29 17:32:46 2022 +0200 lib/nolibc: Implement fputs and puts functions These functions were still missing from nolibc. Signed-off-by: Marco Schlumpp <marco.schlumpp@gmail.com> Reviewed-by: Razvan Deaconescu <razvand@unikraft.io> Reviewed-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #627 commit 721b9a91e651c0c37dd6b5618dea3f3692713bf9 Author: Marco Schlumpp <marco.schlumpp@gmail.com> Date: Tue Mar 29 15:25:17 2022 +0200 lib/nolibc: Implement syslog functions These functions forward the messages to the ukdebug library. Signed-off-by: Marco Schlumpp <marco.schlumpp@gmail.com> Reviewed-by: Razvan Deaconescu <razvand@unikraft.io> Reviewed-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #627 commit eac4a8dc00c62398eb6eaf54b6eb5f9440bc2230 Author: Marco Schlumpp <marco.schlumpp@gmail.com> Date: Tue Mar 29 14:23:52 2022 +0200 lib/nolibc: Implement strsep function This function is an improvement of strtok that originates from BSD. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Razvan Deaconescu <razvand@unikraft.io> Reviewed-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #627 commit f941a5add83e4023baab26ed1f1c374371bd4e38 Author: Marco Schlumpp <marco.schlumpp@gmail.com> Date: Fri Mar 25 17:23:57 2022 +0100 lib/nolibc: Implement random/srandom These functions provide a PRNG and are based on the musl libc library. Signed-off-by: Marco Schlumpp <marco@unikraft.io> Reviewed-by: Razvan Deaconescu <razvand@unikraft.io> Reviewed-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #627 commit 2188d8dcd394cca547de25e82905c200e5971a22 Author: Marco Schlumpp <marco.schlumpp@gmail.com> Date: Fri Mar 25 16:40:15 2022 +0100 lib/nolibc: Implement exit function The behaviour is similar to returning a value from main. Checkpatch-Ignore: EMBEDDED_FUNCTION_NAME Signed-off-by: Marco Schlumpp <marco.schlumpp@gmail.com> Reviewed-by: Razvan Deaconescu <razvand@unikraft.io> Reviewed-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #627 commit 2d2104d9d056a50e6bf2dc0bc07b28cd1dc45796 Author: Marco Schlumpp <marco.schlumpp@gmail.com> Date: Fri Mar 25 16:31:43 2022 +0100 lib/nolibc: Export abort function This function was already declared in the public stdlib header, but the symbol name was missing in the exportsyms.uk file. Signed-off-by: Marco Schlumpp <marco.schlumpp@gmail.com> Reviewed-by: Razvan Deaconescu <razvand@unikraft.io> Reviewed-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #627 commit fb70e9f5e09d62cb5eca12702620047ff8e4982c Author: Marco Schlumpp <marco.schlumpp@gmail.com> Date: Fri Mar 25 16:07:17 2022 +0100 lib/nolibc: Implement isblank function This function determines whether the given character is a space or tab. Signed-off-by: Marco Schlumpp <marco.schlumpp@gmail.com> Reviewed-by: Razvan Deaconescu <razvand@unikraft.io> Reviewed-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #627 commit 3f0bc0e8705132f966347d07b0315c8a21fce347 Author: Marco Schlumpp <marco.schlumpp@gmail.com> Date: Thu Mar 24 17:06:03 2022 +0100 lib/nolibc: Add atol function This function is basically atoi with a large output range. Signed-off-by: Marco Schlumpp <marco.schlumpp@gmail.com> Reviewed-by: Razvan Deaconescu <razvand@unikraft.io> Reviewed-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #627 commit 6887b143c9cf7f654503895651d920825a2e535f Author: Marco Schlumpp <marco.schlumpp@gmail.com> Date: Thu Mar 24 17:02:24 2022 +0100 lib/nolibc: strcasecmp function This function compares two strings case insensitively. The implementation was taken from the MUSL libc. Checkpatch-Ignore: TRAILING_STATEMENTS Signed-off-by: Marco Schlumpp <marco.schlumpp@gmail.com> Reviewed-by: Razvan Deaconescu <razvand@unikraft.io> Reviewed-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #627 commit a3c8bdeaedcb428015e53cd4398a3d91624f1cf0 Author: Marco Schlumpp <marco.schlumpp@gmail.com> Date: Tue Mar 22 12:01:57 2022 +0100 lib/nolibc: Introduce strcat/bcopy/bzero functions The bcopy/bzero originate from BSD, but are often provided by libc on other systems for compati…
StefanJum
pushed a commit
to unikraft-upb/unikraft
that referenced
this issue
Jun 5, 2023
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: unikraft#766 Reviewed-by: Razvan Deaconescu <razvand@unikraft.io> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: unikraft#878
razvanvirtan
pushed a commit
to razvanvirtan/unikraft
that referenced
this issue
Jun 6, 2023
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: unikraft#766 Reviewed-by: Razvan Deaconescu <razvand@unikraft.io> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: unikraft#878
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Describe the bug
When running the linuxu application for helloworld, it crashes due to a problem with memory allocator from
boot.c
Steps to reproduce
Run the app-helloworld application with Unikraft v0.12.
Expected behavior
The program to dsplay the message "Hello world".
Which architectures were you using or does this bug affect?
linuxu
Which platforms were you using or does this bug affect?
x86_64
Relevant log output
The text was updated successfully, but these errors were encountered: