When a notification is bound to an IRQ that arrives on a different core than where the VCPU is running, x86 uses a special IPI to notify the other core about this. (For performance reasons you would try to avoid this setup. Nevertheless, it should work.) When an IpiRemoteCall_VMCheckBoundNotification arrives during a VM exit, the notification reply set by VMCheckBoundNotification() gets overwritten by the handleVmexit() reply, leading to lost notification events. This happens when VMCheckBoundNotification() gets called by the IPI handling code within NODE_LOCK_SYS. As there is no way to postpone the VM exit handling and the IPI code doesn't know whether it races with a VM exit, doing nothing if the current task is the target is the safest choice: Either the IPI itself caused a VM exit, or there was a VM exit happening already. To handle the first case, explicitly call VMCheckBoundNotification() in handleVmexit(). This must be done while holding the kernel lock, as the other core can release the lock any moment after it received our IPI reply. In the latter case, pending notifications will be detected and returned to user space by the next seL4_VMEnter() call. Fix tested by Alessandro Legnani. Resolves issue #1148. Signed-off-by: Indan Zupancic <indan@nul.nu> |
||
|---|---|---|
| .github/workflows | ||
| .reuse | ||
| configs | ||
| include | ||
| libsel4 | ||
| LICENSES | ||
| manual | ||
| src | ||
| tools | ||
| .cmake-format.yaml | ||
| .gitignore | ||
| CAVEATS.md | ||
| CHANGES.md | ||
| CMakeLists.txt | ||
| CODE_OF_CONDUCT.md | ||
| config.cmake | ||
| CONTRIBUTING.md | ||
| CONTRIBUTORS.md | ||
| FindseL4.cmake | ||
| gcc.cmake | ||
| gdb-macros | ||
| LICENSE.md | ||
| llvm.cmake | ||
| README.md | ||
| SECURITY.md | ||
| VERSION | ||
The seL4 microkernel
This project contains the source code of seL4 microkernel.
For details about the seL4 microkernel, including details about its formal
correctness proof, please see the sel4.systems website and associated
FAQ.
DOIs for citing recent releases of this repository:
We welcome contributions to seL4. Please see the website for information on how to contribute.
This repository is usually not used in isolation, but as part of the build system in a larger project.
seL4 Basics
- Tutorials
- Overview
- Doc Site
- seL4 libraries
- seL4Test
- Debugging guide
- Benchmarking guide
- Virtualization on seL4
- Host Build Dependencies
- Porting seL4
Community
- Open-source help and support:
See also the contact links on the seL4 website.
Reporting security vulnerabilities
If you believe you have found a security vulnerability in seL4 or related software, we ask you to follow our vulnerability disclosure policy.
Manual
A hosted PDF version of the manual for the most recent release can be found here.
A web version of the API documentation is available as well.
Repository Overview
includeandsrc: C and ASM source code of seL4tools: build toolslibsel4: C bindings for the seL4 ABImanual: LaTeX sources of the seL4 reference manual
Build Instructions
See the seL4 website for build instructions.
Status
- Releases: list of available seL4 releases
- Roadmap: new features in development
- Hardware Support: information about hardware platform ports
- Kernel Options: information about available config options and features
License
See the file LICENSE.md.