Reporting issues - KekkoTech-Softwares/K-ernel GitHub Wiki
Reporting issues
File it in
Issues — have a quick
look at the open ones first, including the ones filed as debt: several known
gaps already have a number, and a comment on the right issue is worth more than
a new one.
What a usable report contains
Kernel bugs are reproduced on someone else's machine, under emulation, from a toolchain built from source. Half the useful information is about your setup, so say it plainly:
- Host OS and CPU architecture. "macOS 15, Apple Silicon" and "Ubuntu 24.04, x86_64" are different machines in a way that matters here: on ARM the container is emulated.
- Commit.
git rev-parse --short HEADon the tree you built. "Latestmain" ages badly. - QEMU version, from inside the container:
qemu-system-i386 --version. It comes from the distro packages in the image, so it is not fixed forever. If the problem is in the build rather than the run,i686-elf-gcc --versioninstead. - The exact command, and where you ran it.
make runinside the container is not the same report as a hand-writtenqemu-system-i386line, and both are fine — but not interchangeable. - Whether you did a clean rebuild.
make clean && make isobefore reproducing. An incremental build hides warnings and can boot a stale ISO (Troubleshooting covers both), and the first question will be this one. - The serial output, pasted verbatim in a fenced code block, from the
banner line (it carries the version) down to where things stop. Not
summarised, not "then it panicked", not a screenshot of a terminal: the
register dump is the bug report.
make runputs it in your terminal;make run-vgaleaves it inbuild/serial.log. - What you expected instead. Sometimes the answer is that the kernel is behaving as intended for this phase, and knowing what you expected is what makes that answer useful rather than dismissive.
If the kernel reboots with no output at all, say that too — silence is a symptom with its own short list of causes.
Leave the milestone empty; issues get sorted into the phase that has to settle them during triage.
Labels
Most are GitHub's defaults, used as expected: bug, enhancement,
documentation, question, duplicate, invalid, wontfix,
help wanted, good first issue.
Three are the project's own:
| Label | Meaning |
|---|---|
security |
Privilege boundaries, untrusted input, and constraints to respect before ring 3 exists. |
portability |
Keeps the generic kernel independent from one architecture or one target. |
debt |
A deliberate shortcut or a known gap, written down so it is not rediscovered later. |
What a security label does not mean
None of the security issues are open holes. There is no ring 3 yet, no
users, no processes, no paging and no system call interface: today the kernel
is the only thing running, and everything it runs is its own code. There is no
privilege boundary to cross, so there is nothing to escalate from.
They are design constraints with a deadline. Each one records something
that is harmless now and would be a real vulnerability the moment the boundary
appears — flat user segments, a TSS whose esp0 is still the boot stack,
EFLAGS that must be masked on the way back, Multiboot data that must be
validated as outside input before anything trusts it. That is why they sit in
the phase 4 and phase 5 milestones rather than being marked urgent: they have
to be settled before the first iret into ring 3, not after someone finds them
from the other side.
So: a security issue here is a promise to keep, and new ones are welcome in
the same spirit — "this will not hold once there are two privilege levels" is
exactly the kind of report that is cheap now and expensive later. If you do
believe you have found something exploitable in the kernel as it stands today,
say so explicitly in the issue; it would be the first.