]> Projects (at) Tadryanom (dot) Me - AdrOS.git/commitdiff
docs: remove URGENT_SECURITY_STATUS_2026-06-09.md
authorTulio A M Mendes <[email protected]>
Thu, 11 Jun 2026 03:19:18 +0000 (00:19 -0300)
committerTulio A M Mendes <[email protected]>
Thu, 11 Jun 2026 03:19:18 +0000 (00:19 -0300)
All items from this TODO document have been completed:
- H1: AIO validation (fd mode, read-only mount)
- H3: SHM_RDONLY attach
- H6: Fixed VAs removed (kva_alloc_pages)
- H7: Tmpfs quotas + overflow hardening
- M2: access() with real IDs
- M6: Overlayfs wrapper lifetime
- M8: CSPRNG (ChaCha20-based DRBG)
- UID Infrastructure: /etc/passwd, auth, login, utmp/wtmp
- L1: ENAMETOOLONG standardization
- L2: getlogin/who/utmp

Document is no longer needed as reference.

docs/URGENT_SECURITY_STATUS_2026-06-09.md [deleted file]

diff --git a/docs/URGENT_SECURITY_STATUS_2026-06-09.md b/docs/URGENT_SECURITY_STATUS_2026-06-09.md
deleted file mode 100644 (file)
index d9f3438..0000000
+++ /dev/null
@@ -1,371 +0,0 @@
-# Urgent Security Status - 2026-06-09
-
-## Objetivo
-
-Este documento substitui a checklist antiga de fases 2-5 como referência operacional do estado atual do AdrOS.
-
-A lista anterior ficou parcialmente desatualizada: vários itens já foram implementados, alguns ficaram parcialmente resolvidos e ainda restam gaps reais que merecem ataque prioritário.
-
-Este documento foi construído com base em verificação direta do código-fonte atual.
-
-## Resumo Executivo
-
-### Já implementado
-
-- SOCK_RAW privilege check
-- rumpuser_free alignment handling
-- VFS permission checks principais
-- execve com verificação de bit executável
-- O_NOFOLLOW retornando -ELOOP
-- truncate/ftruncate sem fallback permissivo
-- fb0_mmap respeitando prot e NX
-- mkstemp com retry em colisão
-- fcntl varargs em ulibc
-- fcntl/openat varargs em newlib/libgloss
-- scanf com suporte a field width
-- grande parte da infraestrutura de UID/GID no kernel
-- SHM com uid/gid/mode básicos e NX por default
-- path_resolve_user/copy_user_cstr retornando ENAMETOOLONG em caminhos importantes
-
-### Parcialmente implementado
-
-- AIO validation
-- /proc access control
-- SHM permissions completas
-- futex robusto
-- tmpfs locking/quotas/overflow hardening
-- overlayfs wrapper lifetime
-- socket copy_to_user hardening
-- POSIX access() estrito
-- infraestrutura UID completa de userspace/sessão
-- padronização total de ENAMETOOLONG
-
-### Ainda pendente de verdade
-
-- remover fixed VAs (KVA_PHYS_MAP / VIRTIO_VRING_VA)
-- futex robusto com locking e shared keying correto
-- /proc hardening completo
-- AIO mode/mount validation completa
-- tmpfs quotas e proteção explícita contra overflow no growth path
-- CSPRNG real
-- getlogin()/who/utmp reais
-- revisão final dos copyouts de socket
-
-## Classificação Atual por Item
-
-## Fase 2 - Isolamento e Políticas de Segurança
-
-### H1: AIO fd Mode e Read-Only Mount Validation
-Status: PARCIAL
-
-Evidência atual:
-- `src/kernel/syscall.c`: `syscall_aio_rw_impl()` valida ponteiros, tamanho e usa bounce buffer.
-
-O que falta:
-- rejeitar `aio_read` em fd `O_WRONLY`
-- rejeitar `aio_write` em fd `O_RDONLY`
-- rejeitar escrita em mount `MS_RDONLY`
-- idealmente reutilizar a mesma política usada por `read/write/pread/pwrite`
-
-Prioridade recomendada: ALTA
-
-### H2: /proc Access Control
-Status: PARCIAL
-
-Evidência atual:
-- `src/kernel/procfs.c`: existe `proc_access_check(pid)`
-- `/proc/<pid>/status`, `/proc/<pid>/maps`, `/proc/<pid>/cmdline` usam esse check
-
-O que falta:
-- proteger `/proc/dmesg`
-- proteger `/proc/cmdline`
-- implementar hidepid ou equivalente
-- redigir endereços em `/proc/<pid>/maps` para não-root
-- revisar lifetime/snapshot dos dados lidos
-
-Prioridade recomendada: ALTA
-
-### H3: SHM Permissões Completas
-Status: PARCIAL
-
-Evidência atual:
-- `src/kernel/shm.c` contém `uid`, `gid`, `mode`
-- `shm_perm_check()` já usa owner/group/other
-- `IPC_STAT`, `IPC_SET`, `IPC_RMID` fazem checagens
-- mapeamento aplica `VMM_FLAG_NX`
-
-O que falta:
-- attach read-only no estilo `SHM_RDONLY`
-- revisar completude da modelagem SysV/POSIX
-- checar se faltam casos de permissão e compatibilidade fina
-
-Prioridade recomendada: MÉDIA
-
-### H4: SOCK_RAW Privilege Check
-Status: IMPLEMENTADO
-
-Evidência atual:
-- `src/kernel/socket.c`: `SOCK_RAW` exige `current_process->euid == 0`
-
-Prioridade recomendada: FECHADO
-
-### H5: Futex Robusto com Spinlock e Shared Memory Keying
-Status: PARCIAL
-
-Evidência atual:
-- `src/kernel/syscall.c`: waiters registram `addr`, `addr_space`, `proc`
-- isso evita parte do aliasing entre address spaces diferentes
-
-O que falta:
-- spinlock protegendo a tabela global
-- chaveamento shared por backing físico ou inode+offset
-- coordenação mais robusta entre wait/wake e scheduler
-- revisão SMP da tabela e wakeup paths
-
-Prioridade recomendada: ALTA
-
-### H6: Remover Fixed VAs
-Status: PENDENTE
-
-Evidência atual:
-- `src/hal/x86/mm.c`: ainda usa `KVA_PHYS_MAP`
-- `src/drivers/virtio_blk.c`: ainda usa `VIRTIO_VRING_VA 0xC0340000U`
-
-O que falta:
-- alocador de VA kernel para MMIO / DMA / mapeamentos temporários
-- remoção de VAs fixas locais
-- revisão de colisões potenciais com outros dispositivos
-
-Prioridade recomendada: ALTA
-
-### H7: Tmpfs Locking, Quotas e Overflow Validation
-Status: PARCIAL
-
-Evidência atual:
-- `src/kernel/tmpfs.c`: existe `g_tmpfs_lock`
-- várias operações usam spinlock
-
-O que falta:
-- quota global
-- validação explícita de overflow no crescimento de `new_cap *= 2`
-- revisar metadados `uid/gid/mode` e consistência completa
-
-Prioridade recomendada: ALTA
-
-### H8: rumpuser_free Alignment Handling
-Status: IMPLEMENTADO
-
-Evidência atual:
-- `src/rump/rumpuser_adros.c`: aligned allocations guardam magic + raw pointer
-- `rumpuser_free()` recupera o ponteiro bruto antes do `kfree`
-
-Prioridade recomendada: FECHADO
-
-## Fase 3 - Polimento de VFS e Userspace
-
-### M1: VFS Permissions / execve Bit Check
-Status: IMPLEMENTADO
-
-Evidência atual:
-- `src/kernel/fs.c`: `vfs_check_permission()` usa uid/gid/euid/egid
-- `src/kernel/syscall.c`: `execve` verifica execute permission com `vfs_check_permission(node, 1)`
-
-Prioridade recomendada: FECHADO
-
-### M2: POSIX access() Completo
-Status: PARCIAL
-
-Evidência atual:
-- `src/kernel/syscall.c`: `F_OK/R_OK/W_OK/X_OK` já são tratados
-
-O que falta:
-- usar uid/gid reais, não efetivos, para aderência POSIX estrita
-
-Prioridade recomendada: MÉDIA
-
-### M3: O_NOFOLLOW -ELOOP Return
-Status: IMPLEMENTADO
-
-Evidência atual:
-- `src/kernel/syscall.c`: final symlink com `O_NOFOLLOW` retorna `-ELOOP`
-
-Prioridade recomendada: FECHADO
-
-### M4: Truncate Fallback Remoção
-Status: IMPLEMENTADO
-
-Evidência atual:
-- `src/kernel/fs.c`: `vfs_truncate()` e `vfs_truncate_node()` retornam `-ENOSYS` sem backend
-
-Prioridade recomendada: FECHADO
-
-### M5: Socket copy_to_user Ignored Failures
-Status: PARCIAL
-
-Evidência atual:
-- `src/kernel/syscall.c`: vários caminhos de socket já verificam `copy_to_user`
-- `recv`, `recvfrom`, `recvmsg`, `getsockname`, `getpeername`, `accept` foram endurecidos parcialmente
-
-Risco remanescente:
-- alguns paths parecem usar condição invertida com `user_range_ok(...) == 0` antes do `copy_to_user`
-- isso precisa revisão manual e correção pontual
-
-Prioridade recomendada: ALTA
-
-### M6: Overlayfs Wrapper Lifetime/Refcount
-Status: PARCIAL
-
-Evidência atual:
-- `src/kernel/overlayfs.c`: wrapper nodes têm `refcount`
-- `overlay_wrap_close()` decrementa e libera
-
-O que falta:
-- revisão de ownership/lifetime em todos os caminhos de uso
-- confirmar ausência de wrappers órfãos ou double-free/UAF em cenários complexos
-
-Prioridade recomendada: MÉDIA
-
-### M7: fb0_mmap Respeitar prot e NX
-Status: IMPLEMENTADO
-
-Evidência atual:
-- `src/drivers/vbe.c`: rejeita `PROT_EXEC`, aplica `VMM_FLAG_NX`, respeita `prot`
-
-Prioridade recomendada: FECHADO
-
-### M8: CSPRNG Implementation
-Status: PENDENTE
-
-Evidência atual:
-- `src/kernel/devfs.c`: `/dev/random` e `/dev/urandom` usam PRNG simples, não criptográfico
-- `src/kernel/kaslr.c`: usa xorshift32 seeded from TSC
-
-O que falta:
-- fonte real de entropia
-- CSPRNG central de kernel
-- consumidores do sistema apontando para essa fonte
-
-Prioridade recomendada: ALTA
-
-### M9: mkstemp Retry Multiple Names
-Status: IMPLEMENTADO
-
-Evidência atual:
-- `user/ulibc/src/stdlib.c`: tenta até 100 vezes em caso de `EEXIST`
-
-Prioridade recomendada: FECHADO
-
-### M10: fcntl Varargs em ulibc
-Status: IMPLEMENTADO
-
-Evidência atual:
-- `user/ulibc/src/unistd.c`: vararg só é lido para comandos que precisam
-
-Prioridade recomendada: FECHADO
-
-### M11: newlib libgloss Varargs
-Status: IMPLEMENTADO
-
-Evidência atual:
-- `newlib/libgloss/adros/posix_stubs.c`: `fcntl` e `openat` já fazem leitura condicional
-
-Prioridade recomendada: FECHADO
-
-### M12: scanf Field Width e Buffer Size
-Status: IMPLEMENTADO
-
-Evidência atual:
-- `user/ulibc/src/stdio.c`: `scanf`, `sscanf` e `fscanf` tratam field width explícita
-
-Prioridade recomendada: FECHADO
-
-## Fase 4 - Infraestrutura UID
-
-### UID Infrastructure Completa
-Status: PARCIAL
-
-Evidência atual:
-- kernel já possui `getuid/getgid/geteuid/getegid`
-- kernel já possui `setuid/setgid/seteuid/setegid/setreuid/setregid`
-- fork/clone herdam `uid/gid/euid/egid/suid/sgid`
-- job control, sessão e pgrp já existem no kernel
-
-O que falta:
-- `/etc/passwd` real
-- autenticação/login real
-- integração com utmp/wtmp
-- `getlogin()` real
-- `who` real
-- stubs de passwd/group ainda são hardcoded em partes do userspace/newlib
-
-Prioridade recomendada: MÉDIA
-
-## Fase 5 - Low Priority
-
-### L1: Path Truncation - ENAMETOOLONG
-Status: PARCIAL AVANÇADO
-
-Evidência atual:
-- `src/kernel/syscall.c`: `copy_user_cstr()` retorna `-ENAMETOOLONG`
-- `src/kernel/syscall.c`: `path_resolve_user()` retorna `-ENAMETOOLONG`
-
-O que falta:
-- padronizar o mesmo comportamento em todos os helpers de path em `fs.c`
-- alguns caminhos ainda retornam `-EINVAL` ou operam com truncamento em buffers fixos
-
-Prioridade recomendada: MÉDIA-BAIXA
-
-### L2: getlogin/who Session/TTY/utmp
-Status: PENDENTE
-
-Evidência atual:
-- `user/ulibc/src/unistd.c`: `getlogin()` retorna fallback fixo
-- `user/cmds/who/who.c`: saída fixa placeholder
-- `user/ulibc/src/utmp.c`: implementação stub
-
-Prioridade recomendada: BAIXA
-
-## Lista Urgente Recomendada
-
-## Prioridade 1 - Atacar já
-
-- H1: AIO validation completa
-- H2: /proc hardening completo
-- H5: futex robusto
-- H6: remover fixed VAs
-- H7: tmpfs quotas + overflow hardening
-- M5: revisão final dos socket copyouts
-- M8: CSPRNG real
-
-## Prioridade 2 - Em seguida
-
-- H3: SHM permissões/comportamento completos
-- M2: access() com real IDs
-- M6: overlayfs wrapper lifetime
-- Fase 4 restante de userspace/login/passwd
-- L1: padronização total de ENAMETOOLONG
-
-## Prioridade 3 - Baixa
-
-- L2: getlogin/who/utmp reais
-
-## Conclusão
-
-A checklist antiga não deve mais ser usada como retrato fiel do estado atual do projeto.
-
-O estado real hoje é:
-
-- muitos itens relevantes já foram corrigidos
-- alguns itens centrais ainda estão parciais
-- os gaps urgentes se concentram em isolamento, concorrência e política de segurança:
-  - AIO policy
-  - /proc hardening
-  - futex robusto
-  - fixed VA removal
-  - tmpfs hardening
-  - CSPRNG
-  - revisão final dos copyouts de socket
-
-## Status do documento
-
-Documento urgente criado para substituir a checklist desatualizada como referência de planejamento imediato.