kernel: fix COW page write + signal delivery; add 6 new tests
Kernel fixes:
- uaccess: x86_user_page_writable_user() now recognizes COW pages as
logically writable (checks X86_PTE_COW flag bit 9). Previously,
copy_to_user() rejected writes to forked COW pages, preventing
signal frame delivery after fork().
- idt: handle COW faults in kernel mode before uaccess_try_recover().
A write from copy_to_user() to a COW page now triggers page fault
resolution (private copy) instead of returning -EFAULT.
- scheduler: fork inherits sigactions and sig_blocked_mask from parent
(POSIX requirement). Pending signals stay 0 per POSIX spec.
- syscall: sigprocmask how values now match POSIX (0=BLOCK, 1=UNBLOCK,
2=SETMASK). sigsuspend no longer restores old mask before signal
delivery, allowing the handler to run.
New tests (fulltest.c):
- I12: clone — CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND thread
creation with shared memory verification
- I13: sigqueue — send SIGUSR1 with value via sigsuspend
- I14: inotify_init1 — basic inotify with flags=0
- I15: dlopen/dlsym/dlclose — dynamic linker via libpietest.so
- I16: execveat — execute /bin/echo with AT_FDCWD
- I17: pivot_root — mount tmpfs, pivot, verify in isolated fork