rapporto sullo sviluppo del progetto FreeBSD da luglio a settembre 2019. Tra le modifiche si possono notare:
- Questioni generali e sistemiche
- Il core team ha approvato in linea di massima la possibilità di includere nel sistema codice fornito sotto licenza BSD con un accordo aggiuntivo sull'uso dei brevetti (), ma la decisione di includere nel sistema ciascun componente con tale licenza deve essere approvata separatamente;
- Si è tenuta la prima riunione del gruppo di lavoro creato per la migrazione dei sorgenti dal sistema di controllo centralizzato Subversion a un sistema decentrato Git. La discussione sulla convenienza della migrazione è ancora in corso e molte questioni devono ancora trovare risposta (ad esempio, come procedere con contrib/, se è necessario rigenerare gli hash nel repository git attuale e come implementare al meglio il testing dei commit);
- Da NetBSD l'utensile KCSAN (Kernel Concurrency Sanitizer), che consente di rilevare la comparsa di condizioni di race tra i thread del kernel eseguiti su diverse CPU;
- Si sta lavorando all'uso dell'assemblatore integrato in Clang (IAS) al posto dell'assemblatore dei GNU binutils;
- L'infrastruttura di emulazione dell'ambiente Linux (Linuxulator) è stata adattata per funzionare sull'architettura ARM64. È stata implementata la chiamata di sistema «renameat2». L'utilità strace è stata migliorata per diagnosticare problemi nei file eseguibili Linux eseguiti su Linuxulator. È stato risolto il problema dei crash durante il collegamento di file eseguibili con un nuovo glibc. I port con componenti Linux per Linuxulator sono stati aggiornati a CentOS 7.7;
- Nell'ambito del programma Google Summer of Code, gli studenti hanno completato con successo sei progetti: è stata preparata l'implementazione di un'utilità unificata (IPv4/IPv6) per il ping, sono stati sviluppati strumenti per il testing dei firewall e la rilevazione di errori nel kernel (Kernel sanitizer), è stato proposto un modulo mac_ipacl, è stato scritto codice per la compressione della memoria virtuale ed è stata portata avanti l'attività di separazione del processo di costruzione dei port dalla installazione locale;
- Continua lo sviluppo del progetto di fuzzing testing del kernel FreeBSD utilizzando il sistema . Durante il periodo di riferimento, grazie a syzkaller, sono stati individuati e risolti oltre dieci errori. Per eseguire syzkaller su macchine virtuali basate su bhyve è stato dedicato un server specifico, e tramite
La verifica dei diversi sottosistemi FreeBSD è stata organizzata nell'infrastruttura di Google. È stata organizzata la trasmissione di informazioni su tutti i crash al servizio backtrace.io per semplificare la loro aggregazione e analisi; - È in corso il lavoro di aggiornamento dell'implementazione di zlib a livello di kernel.
Il codice relativo alla compressione è stato trasferito da zlib 1.0.4, rilasciato oltre 20 anni fa, alla base codificata attuale zlib 1.2.11. Per uniformare l'accesso a zlib, sono state aggiunte al kernel le funzioni compress, compress2 e uncompress. Il codice che garantisce il funzionamento del protocollo PPP, proveniente dal sottosistema netgraph, è stato adattato all'implementazione di sistema di zlib, anziché alla propria revisione di questa libreria. Anche i sottosistemi kern_ctf.c, opencryptodeflate, geom_uzip, subr_compressor,
if_mxge, bxe aggiornato e ng_deflate; - È in fase di sviluppo una nuova interfaccia del kernel , che consente di trovare elementi nella base dei parametri sysctl, elaborati sotto forma di MIB (Management Information Base), e trasmettere informazioni sugli oggetti allo spazio utente.
- Sicurezza
- È stato sviluppato un modulo del kernel , basato su TrustedBSD MAC Framework e implementa un sistema di gestione degli accessi alle impostazioni dello stack di rete per gli ambienti jail. Ad esempio, con mac_ipacl, l'amministratore del sistema host può impedire all'utente root nell'ambiente jail di modificare o impostare indirizzi IP o parametri di sottorete per determinate interfacce di rete. Il sistema di controllo degli accessi proposto permette di impostare elenchi di indirizzi IP e sottoreti consentiti per il Jail, vietare l'impostazione di determinati IP e sottoreti nel Jail o limitare la modifica dei parametri solo a determinate interfacce di rete;
- L'azienda Intel ha trasferito al progetto il porto dello stack software (Trusted Platform Module) per interagire con il chip per computazioni sicure, comunemente usato per il caricamento verificato di firmware e bootloader del sistema operativo. I componenti dello stack sono rappresentati sotto forma di porte security/tpm2-tss, security/tpm2-tools e security/tpm2-abrmd. La porta tpm2-tss include librerie per l'uso dell'API TPM2, tpm2-tools fornisce utilità da linea di comando per eseguire operazioni con TPM, mentre tpm2-abrmd contiene un processo in background che implementa i componenti TPM Access Broker e Resource Manager, multiplexando le richieste da diversi utenti TPM a un unico dispositivo. Oltre al caricamento verificato, in FreeBSD, TPM può essere utilizzato per migliorare la sicurezza di Strongswan IPsec, SSH e TLS attraverso l'esecuzione di operazioni crittografiche su un chip separato;
- Il kernel per l'architettura amd64 è adattato per il caricamento utilizzando la tecnica di protezione W^X (write XOR execute), che implica che le pagine di memoria non possono essere accessibili sia in scrittura che in esecuzione (il kernel ora può essere caricato utilizzando pagine di memoria eseguibili per cui la scrittura è vietata). Il nuovo metodo di protezione del kernel è incluso nel ramo HEAD e farà parte delle versioni di FreeBSD 13.0 e 12.2;
- Per le chiamate di sistema mmap e mprotect macro PROT_MAX(), che consente di determinare l'insieme di flag di limitazione dell'accesso (PROT_READ, PROT_WRITE, PROT_EXEC) che possono essere modificati successivamente. Utilizzando PROT_MAX(), lo sviluppatore può vietare il passaggio di una zona di memoria nella categoria eseguibile o richiedere memoria che non permette l'esecuzione, ma che in seguito può essere trasformata in eseguibile. Ad esempio, una zona di memoria può essere aperta in scrittura solo durante il binding dinamico o la generazione di codice JIT, ma dopo il termine della scrittura sarà limitata solo alla lettura e all'esecuzione, e in caso di compromissione, un attaccante non potrà autorizzare la scrittura per quel blocco di memoria. In aggiunta a PROT_MAX(), è stato implementato anche sysctl vm.imply_prot_max, il cui attivamento determina l'insieme di flag consentiti in base ai parametri originali della prima chiamata a mmap;
- Per rafforzare la protezione contro lo sfruttamento delle vulnerabilità, oltre alla tecnica di randomizzazione dello spazio degli indirizzi (ASLR), è stato proposto un meccanismo di randomizzazione degli offset dei puntatori che indirizzano il frame iniziale dello stack e le strutture collocate nello stack con informazioni sull'ambiente, parametri di avvio del programma e dati per le immagini eseguibili in formato ELF;
- È stata svolta un'attività di rimozione della funzione non sicura gets da libc (a partire dallo standard C11, questa funzione è stata esclusa dalle specifiche) e di correzione dei porting che utilizzano ancora questa funzione. La modifica è prevista per FreeBSD 13.0;
- È stato avviato un progetto sperimentale per la creazione di strumenti per l'orchestrazione di ambienti jail basati su un framework per la creazione ed esportazione di immagini, implementato in analogia con Docker, e del driver , che fornisce un'interfaccia per l'avvio dinamico di applicazioni in un ambiente jail. Il modello proposto consente di separare i processi di creazione degli ambienti jail e il dispiegamento delle applicazioni in essi. Uno degli obiettivi del progetto è fornire uno strumento per la manipolazione dei jail come contenitori nello stile di Docker;
- Sistemi di archiviazione e file system
- Da NetBSD nell'utilità "makefs" il supporto per il file system FAT (msdosfs). Le modifiche preparate consentono di creare immagini FS con FAT senza utilizzare il driver md e senza i privilegi di root;
- È stata completata la riprogettazione del driver del sottosistema FUSE (File system in USErspace), che consente di creare implementazioni di file system nello spazio utente. Il driver fornito inizialmente conteneva molti errori ed era basato su una versione di FUSE 7.8, rilasciata 11 anni fa. Nell'ambito del progetto di modernizzazione del driver è stata implementata la compatibilità con il protocollo FUSE 7.23, è stato aggiunto codice per la verifica dei diritti di accesso lato kernel ("-o default_permissions"), sono state aggiunte chiamate VOP_MKNOD, VOP_BMAP e VOP_ADVLOCK, è stata garantita la possibilità di interrompere le operazioni FUSE, è stato aggiunto il supporto per canali anonimi e socket unix in fusefs, è stata introdotta la possibilità di utilizzare kqueue per /dev/fuse, è stata autorizzata la modifica dei parametri di montaggio tramite "mount -u", è stato aggiunto il supporto per l'esportazione di fusefs tramite NFS, è stata implementata la contabilizzazione di RLIMIT_FSIZE, sono stati aggiunti i flag FOPEN_KEEP_CACHE e FUSE_ASYNC_READ, sono state apportate significative ottimizzazioni delle prestazioni e migliorata l'organizzazione della cache. Il nuovo driver è stato incluso nei rami head e stable/12 (è entrato a far parte di FreeBSD 12.1);
- Quasi completato il lavoro per l'implementazione di NFSv4.2 (RFC-7862) per FreeBSD. Durante il periodo di riferimento, l'attenzione principale è stata dedicata ai test. Sono stati completati i test per verificare la compatibilità con l'implementazione di Linux, ma è ancora in corso la verifica del funzionamento del server pNFS con NFSv4.2. In generale, il codice è già considerato pronto per l'integrazione nei rami head/current di FreeBSD.
- Supporto hardware
- È iniziato un progetto per migliorare il funzionamento di FreeBSD sui laptop. Il primo dispositivo per il quale è stata condotta un'audit del supporto hardware su FreeBSD è stato il laptop Lenovo X1 Carbon di settima generazione.
- CheriBSD, un ramo di FreeBSD per l'architettura di processore di ricerca (Capability Hardware Enhanced RISC Instructions), aggiornato per supportare il futuro processore ARM Morello, che supporterà un sistema di gestione dell'accesso alla memoria CHERI, basato sul modello di protezione del progetto Capsicum. Il chip Morello sarà rilasciato nel 2021. Gli sviluppatori di CheriBSD continuano anche a monitorare lo sviluppo del prototipo di riferimento CHERI basato su architettura MIPS.
- Espansa la compatibilità con i chip RockChip RK3399, utilizzati nelle schede RockPro64 e NanoPC-T4. Il miglioramento più significativo è stata l'introduzione del supporto per eMMC e lo sviluppo di un nuovo driver per il controller eMMC utilizzato sulla scheda.
- Continuato il lavoro per l'implementazione del supporto per ARM64 SoC Broadcom BCM5871X con processori ARMv8 Cortex-A57, destinati all'uso in router, gateway e sistemi di archiviazione di rete. Durante il periodo di riferimento
è stato ampliato il supporto per iPCIe iProc e aggiunta la possibilità di utilizzare operazioni crittografiche hardware per accelerare il lavoro di IPsec.
L'integrazione del codice nel ramo HEAD è prevista per il quarto trimestre. - Si segnalano significativi progressi nello sviluppo del porto FreeBSD per la piattaforma powerpc64. L'attenzione principale è rivolta a garantire un funzionamento di alta qualità sui sistemi con processori IBM POWER8 e POWER9, ma è supportato anche il funzionamento su vecchie Apple Power Mac, x500 e Amiga A1222. Il ramo powerpc* /12 continua a essere fornito con gcc 4.2.1, mentre il ramo powerpc* /13 sarà presto migrato a llvm90. Su 33306 port ci sono 30514 che si compilano con successo.
- Proseguita la portazione di FreeBSD per SoC NXP LS1046A a 64 bit basato su processore ARMv8 Cortex-A72 con motore integrato per l'accelerazione del trattamento dei pacchetti di rete, Ethernet 10 Gb, PCIe 3.0, SATA 3.0 e USB 3.0. Nel periodo di riferimento è stato implementato il supporto per USB 3.0, SD/MMC, I2C, interfaccia di rete DPAA e GPIO. Nei piani è previsto il supporto per QSPI e l'ottimizzazione delle prestazioni dell'interfaccia di rete. Il completamento del lavoro e l'inclusione nel ramo HEAD è attesa per il quarto trimestre del 2019;
- Aggiornato il driver ena con supporto per la seconda generazione di adattatori di rete ENAv2 (Elastic Network Adapter), utilizzati nell'infrastruttura Elastic Compute Cloud (EC2) per organizzare la comunicazione tra i nodi EC2 a velocità fino a 25 Gb/s. Nel driver ena è stato aggiunto e testato il supporto per NETMAP, e sono stati effettuati adattamenti della disposizione della memoria per integrare la modalità LLQ negli ambienti Amazon EC2 A1;
- Applicazioni e sistema dei porti
- Aggiornati i componenti dello stack grafico e le porte associate a xorg. Le porte che utilizzano USE_XORG e XORG_CAT sono state trasferite al framework USES anziché richiamare bsd.xorg.mk tramite bsd.port.mk. Tali porte ora includono il flag “USES=xorg” nei makefile. La funzionalità XORG_CAT è stata estratta da bsd.xorg.mk e ora può essere attivata con il flag “USES=xorg-cat”. È stato aggiunto un toolset per la creazione diretta di porte xorg da un repository git
freedesktop.org, il che, ad esempio, consente di creare porte per versioni non ancora rilasciate. In futuro, si prevede di preparare un toolset per utilizzare il sistema di build meson al posto di autotools per la creazione delle porte xorg.È stato svolto un lavoro di pulizia delle vecchie porte xorg legate a componenti già non supportati, ad esempio, è stata rimossa la porta x11/libXp, e le porte x11/Xxf86misc, x11-fonts/libXfontcache e graphics/libGLw sono state classificate come obsolete;
- È stato effettuato un lavoro per migliorare il supporto per Java 11 e versioni successive su FreeBSD, nonché per portare alcune modifiche nella branch di Java 8. Dopo che è stato realizzato per FreeBSD il supporto per nuove funzionalità di Java 11 come Java Flight Recorder, HotSpot Serviceability Agent, HotSpot Debugger, DTrace, Javac Server, Java Sound e SCTP, il lavoro è passato a garantire il superamento di tutti i test di compatibilità. Il numero di fallimenti nei test è stato ridotto da 50 a 2;
- Il desktop KDE Plasma, KDE Frameworks, KDE Applications e Qt sono mantenuti aggiornati e portati alle versioni più recenti;
- Le porte con desktop Xfce sono state aggiornate all'ultima release ;
- L'albero dei porti FreeBSD ha superato i 38000 porti, il numero di PR aperti supera leggermente i 2000, di cui 400 PR non sono ancora stati trattati. Durante il periodo di riferimento sono state apportate 7340 modifiche da 169 sviluppatori. Due nuovi membri (Santhosh Raju e Dmitri Goutnik) hanno ricevuto i diritti di commit. È stata pubblicata una nuova versione del gestore di pacchetti pkg 1.12, con supporto per overlay nell'albero dei porti e pulizia di bsd.sites.mk. Tra gli aggiornamenti significativi delle versioni nei porti si segnalano: Lazarus 2.0.4, LLVM 9.0, Perl5.30, PostgreSQL 11, Ruby 2.6, Firefox 69.0.1, Firefox-esr 68.1.0, Chromium 76.0;
- Continua lo sviluppo del progetto , una distribuzione specializzata per il dispiegamento di infrastrutture di server virtuali. Per le problematiche affrontate, ClonOS ricorda sistemi come Proxmox, Triton (Joyent), OpenStack, OpenNebula e Amazon AWS, con la principale differenza nell'uso di FreeBSD e nella possibilità di gestire, distribuire e amministrare i container Jail di FreeBSD e ambienti virtuali basati su hypervisor Bhyve e Xen. Tra le recenti modifiche si evidenzia il supporto
di cloud-init per VM Linux/BSD e cloudbase-init per VM Windows, l'inizio della transizione all'uso di immagini personali, l'impiego di Jenkins CI per il testing delle build e un nuovo repository pkg per l'installazione
di ClonOS da pacchetti.
- Aggiornati i componenti dello stack grafico e le porte associate a xorg. Le porte che utilizzano USE_XORG e XORG_CAT sono state trasferite al framework USES anziché richiamare bsd.xorg.mk tramite bsd.port.mk. Tali porte ora includono il flag “USES=xorg” nei makefile. La funzionalità XORG_CAT è stata estratta da bsd.xorg.mk e ora può essere attivata con il flag “USES=xorg-cat”. È stato aggiunto un toolset per la creazione diretta di porte xorg da un repository git
Fonte: opennet.ru
