SchOS/kernel/dev
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Nexoniarz 75ccf9841c errno: -1 is EPERM, and four places were saying it by accident
Ctrl-C killed the shell. consoleread() breaks off the read in progress when
SIGINT arrives and returned -1 to do it -- and -1 is -EPERM by the time it
reaches a program, so every program that handles SIGINT by carrying on saw a
permanent error instead of an interrupted call:

    zsh: error on TTY read: operation not permitted
    schinitd: restarting os.schos.console-shell

and the next Ctrl-C did it to the replacement. EINTR now, which is what a
signal-interrupted read is required to give. Verified: Ctrl-C an interruptible
command, shell survives, zero restarts.

Same mistake, same file family: link, unlink, rename and renameat returned -1
on every error path. Callers branch on errno -- `if (unlink(p) < 0 && errno !=
ENOENT)` is the standard shape, and against EPERM it always complains -- which
is why zsh reported failures for things that had worked. They return ENOENT,
EEXIST, EXDEV, EISDIR, ENOTEMPTY and EFAULT now. About ninety other `return -1`s
remain in sys_fs.c; these four are done because these four were what a program
tripped over. /dev/mem's unknown minors return ENODEV rather than -1 too.

/dev/urandom was a linear congruential generator seeded with a **constant**, so
every boot produced the same bytes in the same order -- not weak, the same. A
key, a nonce, a temporary filename: shared with every SchOS machine that had
ever run. Seeded at boot from RDRAND where the CPU has it, from the cycle
counter and the wall clock where it does not, and re-stirred per byte. Still an
LCG and still not a CSPRNG; what changed is the part that was dangerous rather
than merely poor.

**Not fixed, and recorded as such:** rename() still will not replace an existing
target, so zsh's history save fails on every exit after the first. An attempt to
unlink the target first was reverted -- the directory is an HTree, dirunlink
followed by dirlink of the same name did not behave, and it panicked in
filewrite with the old file already gone. Losing both files is worse than
refusing, so it refuses until the HTree's slot reuse is understood.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VQ7Qx8E1q1M1bbCq8QLHS2
2026-09-14 22:12:28 +02:00
..
bio.c fs: timestamps come from the clock, and /proc/fsstat says how full the tables are 2026-09-12 17:14:14 +02:00
cdev.c errno: -1 is EPERM, and four places were saying it by accident 2026-09-14 22:12:28 +02:00
dbg.c debugger: D5, the network transport -- and the plan closes 2026-09-14 15:33:53 +02:00
device.c net: a network *class*, so the stack stops knowing what an e1000 is 2026-08-15 16:42:34 +02:00
disk.c dev: raw disks are 64-bit, so a real drive stops wrapping at 4 GB 2026-08-11 12:15:38 +02:00
fb.c gfx: the console and the crash screen stop drawing on a driver by name 2026-08-15 17:04:10 +02:00
gfx.c tty: the grid was 80x24 on a 160x50 screen, and wrapping was eager 2026-09-13 12:49:13 +02:00
ide.c ide: idewait spun for a minute on any machine with no legacy drive 2026-09-13 14:43:35 +02:00
input.c kernel: the clock ran 7x slow because the GPU never acknowledged its interrupt 2026-09-12 21:34:36 +02:00
irq.c hybrid: interrupts to userspace, and a crashed driver that stays crashed 2026-09-13 18:11:00 +02:00
kbd.c tty: AltGr+F1..F6 by default, and AltGr+-/+ to step 2026-09-13 13:22:01 +02:00
mouse.c gfx: the console and the crash screen stop drawing on a driver by name 2026-08-15 17:04:10 +02:00
netuser.c ldls: a network, in a process 2026-09-14 08:31:06 +02:00
pci.c boot: one line when it works, all of it when it does not 2026-09-14 21:19:50 +02:00
pciuser.c ldls: a second driver, and everything it found 2026-09-14 15:20:07 +02:00
procfs.c boot: one line when it works, all of it when it does not 2026-09-14 21:19:50 +02:00
ramdisk.c Initial commit: Schunix as it stands before the SchOS rename 2026-08-09 13:47:01 +02:00
text.c Initial commit: Schunix as it stands before the SchOS rename 2026-08-09 13:47:01 +02:00
ttf.c Rename Schunix to SchOS; the kernel becomes SchIFT 2026-08-09 14:09:59 +02:00
uart.c boot: one line when it works, all of it when it does not 2026-09-14 21:19:50 +02:00
vt.c console: put the kernel log on screen from the first line 2026-09-13 14:59:14 +02:00