Rapport om utvecklingen av FreeBSD-projektet frÄn juli till september 2019. Bland Àndringarna kan nÀmnas:
- AllmÀnna och systemfrÄgor
- KÀrnteamet har i stort sett godkÀnt möjligheten att inkludera kod som levereras under BSD-licens med ett tillÀggsavtal om anvÀndning av patent (), men beslutet om att inkludera varje komponent under denna licens mÄste godkÀnnas separat;
- Det första mötet för arbetsgruppen, som skapades för att genomföra migreringen av kÀllkoder frÄn det centraliserade versionshanteringssystemet Subversion till det decentraliserade systemet Git, har Àgt rum. Diskussionen om lÀmpligheten av migreringen pÄgÄr fortfarande och det ÄterstÄr att lösa mÄnga frÄgor (till exempel hur man ska hantera contrib/, huruvida man behöver regenerera hashar i det aktuella git-repositoriet och hur man bÀst implementerar testning av commits);
- FrÄn NetBSD KCSAN-verktyget (Kernel Concurrency Sanitizer), som möjliggör att upptÀcka uppkomsten av race-conditions mellan kÀrntrÄdar som körs pÄ olika CPU;
- Arbetet pÄgÄr för att anvÀnda den inbyggda assemblatorn i Clang (IAS) istÀllet för assemblatorn frÄn GNU binutils;
- Infrastrukturen för Linux-miljöemulering (Linuxulator) har anpassats för att fungera pÄ ARM64-arkitektur. Systemanropet "renameat2" har implementerats. Verktyget strace har förbÀttrats för att diagnostisera problem i Linux-exekverbara filer som körs i Linuxulator. Problemet med buggningar vid lÀnking av exekverbara filer med den fÀrska glibc har lösts. Portar med Linux-komponenter för Linuxulator har uppdaterats till CentOS 7.7;
- Inom ramen för Google Summer of Code-programmet har studenterna framgÄngsrikt genomfört sex projekt: en enhetlig (IPv4/IPv6) ping-verktyg har utvecklats, verktyg för att testa brandvÀggar och upptÀckta buggar i kÀrnan (Kernel sanitizer) har tagits fram, en modul för mac_ipacl har föreslagits, kod för komprimering av virtuell minne har skrivits och arbetet med att separera portbyggnadsprocessen frÄn lokal installation har genomförts;
- Projektet för fuzzing-testning av FreeBSD-kÀrnan fortsÀtter att utvecklas med hjÀlp av systemet . Under den rapporterade perioden har över tio fel upptÀckts och ÄtgÀrdats med hjÀlp av syzkaller. För att köra syzkaller i virtuella maskiner baserade pÄ bhyve har en separat server avsatts, och med hjÀlp av
Syzbot har implementerat övervakning av olika FreeBSD-subsystem i Googles infrastruktur. Information om alla kraschade hÀndelser överförs till tjÀnsten backtrace.io för att förenkla deras gruppering och analys; - Arbetet pÄgÄr för att uppdatera implementeringen av zlib pÄ kÀrnnivÄ.
Koden relaterad till komprimering har översatts frÄn zlib 1.0.4, som slÀpptes för över 20 Är sedan, till den aktuella kodbasen zlib 1.2.11. För att enhetliggöra Ätkomsten till zlib har funktionerna compress, compress2 och uncompress lagts till kÀrnan. Koden som möjliggör funktionen av PPP-protokollet frÄn netgraph-subsystemet har översatts till att anvÀnda systemimplementeringen av zlib, istÀllet för sin egen version av detta bibliotek. De nya zlib implementeringarna inkluderar ocksÄ subsystemen kern_ctf.c, opencryptodeflate, geom_uzip, subr_compressor,
if_mxge, bxe updated och ng_deflate; - Ett nytt kernelgrÀnssnitt utvecklas , som gör det möjligt att hitta element i sysctl-parametrars databas, som bearbetas i form av MIB (Management Information Base), och överföra information om objekt till anvÀndarutrymmet.
- SĂ€kerhet
- En kÀrnmodul har utvecklats , baserad pÄ TrustedBSD MAC Framework och implementerar ett system för Ätkomstkontroll till instÀllningarna i nÀtverksstacken för jail-miljöer. Till exempel kan administratören av vÀrdsystemet med hjÀlp av mac_ipacl förbjuda anvÀndaren root i jail-miljön att Àndra eller stÀlla in IP-adresser eller parametrar för nÀtverksdelar för vissa nÀtverksgrÀnssnitt. Det föreslagna systemet för mandatÄtkomstkontroll kan ange listor över IP-adresser och delnÀt som Àr tillÄtna för Jail, förbjuda installerandet av vissa IP och delnÀt i Jail eller begrÀnsa Àndringen av parametrar endast för vissa nÀtverksgrÀnssnitt;
- Företaget Intel har överlÄtit projektet för portningen av programvarustack (Trusted Platform Module) för interaktion med en sÀkerhetschip för sÀker berÀkning, som vanligtvis anvÀnds för verifierad laddning av firmware och OS-laddare. Komponenterna i stacken presenteras i form av portarna security/tpm2-tss, security/tpm2-tools och security/tpm2-abrmd. Porten tpm2-tss inkluderar bibliotek för att anvÀnda TPM2 API, tpm2-tools tillhandahÄller kommandoradsverktyg för att utföra operationer med TPM, och tpm2-abrmd innehÄller en bakgrundsprocess med implementation av komponenterna TPM Access Broker och Resource Manager, som multiplexar förfrÄgningar frÄn olika anvÀndare av TPM till en enhet. Förutom verifierad laddning kan TPM i FreeBSD anvÀndas för att förstÀrka sÀkerheten för Strongswan IPsec, SSH och TLS genom att utföra kryptografiska operationer pÄ en separat chip.
- KÀrnan för amd64-arkitekturen har anpassats för att kunna laddas med metoden W^X (write XOR execute), som innebÀr att minnessidor inte kan vara tillgÀngliga för bÄde skrivning och exekvering samtidigt (kÀrnan kan nu laddas med exekverbara minnessidor dÀr skrivning Àr förbjuden). Den nya skyddsmekanismen för kÀrnan har lagts till i HEAD-grenen och kommer att ingÄ i utgÄvorna av FreeBSD 13.0 och 12.2.
- För systemanropen mmap och mprotect. makro PROT_MAX(), som gör det möjligt att definiera en tillÄten uppsÀttning av flaggor för ÄtkomstbegrÀnsning (PROT_READ, PROT_WRITE, PROT_EXEC) vid framtida modifieringar. Med PROT_MAX() kan utvecklaren förbjuda att ett minnesomrÄde klassificeras som exekverbart eller begÀra minne som inte tillÄter exekvering, men som senare kan Àndras till exekverbart. Till exempel kan ett minnesomrÄde öppnas för skrivning endast under den dynamiska lÀnkningen eller JIT-kodgenereringen, men efter att skrivningen Àr klar begrÀnsas det bara till lÀsning och exekvering, och dÀrför, i hÀndelse av en kompromiss, kan inte angriparen tillÄta skrivning för den aktuella minnesblocket. Förutom PROT_MAX() finns ocksÄ sysctl vm.imply_prot_max, vars aktivering definierar uppsÀttningen av tillÄtna flaggor baserat pÄ de ursprungliga parametrarna för det första mmap-anropet.
- För att förstÀrka skyddet mot utnyttjande av sÄrbarheter har en mekanism för randomisering av förskjutningar av pekare, som adresserar den initiala stackramen och de strukturer som placeras pÄ stacken med information om omgivningen, programmets startparametrar och data för körbara bilder i ELF-format föreslagits utöver tekniken för randomisering av adressutrymmet (ASLR);
- Arbetet med att ta bort den osĂ€kra funktionen gets frĂ„n libc (frĂ„n och med C11-standarden har denna funktion uteslutits frĂ„n specifikationen) och justeringen av portar som fortfarande anvĂ€nder denna funktion har genomförts. Ăndringen planeras att föreslĂ„s i FreeBSD 13.0;
- Ett experimentellt projekt har startats för att skapa verktyg för orkestrering av jail-miljöer baserat pÄ ramen för att skapa och exportera bilder, utformat pÄ liknande sÀtt som Docker, samt drivrutinen , som tillhandahÄller ett grÀnssnitt för dynamisk körning av applikationer i jail-miljöer. Den föreslagna modellen möjliggör separation av processerna för att skapa jail-miljöer och distribuera applikationer i dem. Ett av projektets mÄl Àr att tillhandahÄlla ett verktyg för att manipulera jail som containrar i stil med Docker;
- Lagringssystem och filsystem
- FrÄn NetBSD till verktyget "makefs" stöd för filsystemet FAT (msdosfs). De förberedda Àndringarna möjliggör skapandet av FS-bilder med FAT utan att anvÀnda drivrutinen md och utan root-behörigheter;
- Omarbetningen av drivrutinen för FUSE (File system in USErspace) subsystemet som tillÄter skapandet av filsystemimplementationer i anvÀndarutrymmet har slutförts. Den ursprungliga drivrutinen hade mÄnga fel och var baserad pÄ version FUSE 7.8, som slÀpptes för 11 Är sedan. Inom ramen för uppgraderingsprojektet för drivrutinen har stöd för protokollet FUSE 7.23 införts, kod för att kontrollera behörigheter pÄ kÀrnans sida har lagts till ("-o default_permissions"), anrop till VOP_MKNOD, VOP_BMAP och VOP_ADVLOCK har lagts till, möjligheten att avbryta FUSE-operationer har sÀkerstÀllts, stöd för namnlösa kanaler och unix-socketar i fusefs har lagts till, möjligheten att anvÀnda kqueue för \/dev\/fuse har införts, uppdatering av monteringsparametrar via "mount -u" har godkÀnts, stöd för export av fusefs via NFS har implementerats, RLIMIT_FSIZE har beaktats, flaggorna FOPEN_KEEP_CACHE och FUSE_ASYNC_READ har lagts till, betydande prestandaoptimeringar har genomförts och caching-strukturen har förbÀttrats. Den nya drivrutinen Àr inkluderad i brancherna head och stable\/12 (har ingÄtt i FreeBSD 12.1);
- Arbetet med att implementera NFSv4.2 (RFC-7862) för FreeBSD Àr nÀstan klart. Under rapporteringsperioden lades huvudfokus pÄ testning. Tester för att kontrollera kompatibiliteten med implementationen frÄn Linux har slutförts, men verifieringen av servern pNFS med NFSv4.2 pÄgÄr fortfarande. I allmÀnhet anses koden nu vara redo för integration i grenen FreeBSD head/current. Den nya versionen av NFS har fÄtt stöd för funktionerna posix_fadvise, posix_fallocate, lÀgena SEEKHOLE/SEEKDATA i lseek, samt operationer för lokal kopiering av filavsnitt pÄ servern (utan överföring till klienten);
- Stöd för hÄrdvara
- Projektet för att förbÀttra FreeBSD:s prestanda pÄ bÀrbara datorer har inletts. Den första enheten som genomgÄtt en granskning av hÄrdvarustödet i FreeBSD Àr Lenovo X1 Carbon sjunde generationen;
- CheriBSD, en avknoppning frÄn FreeBSD för forskningsprocessorns arkitektur (Capability Hardware Enhanced RISC Instructions), har uppdaterats för att stödja den kommande ARM Morello-processorn, som kommer att stödja CHERI-minneshanteringssystemet baserat pÄ Capsicum-projektets skyddsmodell. Morello-chipet berÀknas slÀppas under 2021. Utvecklarna av CheriBSD fortsÀtter ocksÄ att följa utvecklingen av den referensprototypen av CHERI baserad pÄ MIPS-arkitekturen;
- Stödet för RockChip RK3399-chips, som anvÀnds i RockPro64- och NanoPC-T4-kort, har utökats. Den mest betydande förbÀttringen har varit stödet för eMMC och utvecklingen av en ny drivrutin för den anvÀnda eMMC-kontrollern;
- Arbetet med att implementera stödet för ARM64 SoC Broadcom BCM5871X med ARMv8 Cortex-A57-processorer, som Àr avsedda för anvÀndning i routrar, gateways och nÀtverkslagring, har fortsatt. Under rapporteringsperioden
har stödet för iProc PCIe utökats och möjligheten att anvÀnda hÄrdvarukryptografiska operationer för att accelerera IPsec-arbetet har lagts till.
Koden förvÀntas integreras i HEAD-grenen under fjÀrde kvartalet; - Betydande framsteg har noterats i utvecklingen av FreeBSD-porten för powerpc64-plattformen. Fokus ligger pÄ att sÀkerstÀlla bra prestanda pÄ system med IBM POWER8 och POWER9-processorer, men valfritt stöds Àven drift pÄ Àldre Apple Power Mac, x500 och Amiga A1222. Grenen powerpc*/12 fortsÀtter att distribueras med gcc 4.2.1, medan branch powerpc*/13 snart kommer att övergÄ till llvm90. Av 33306 portar byggs 30514 framgÄngsrikt;
- Porteringen av FreeBSD för 64-bitars SoC NXP LS1046A baserat pÄ ARMv8 Cortex-A72-processorn med integrerad nÀtverkspaketaccelerationsmotor, 10 Gb Ethernet, PCIe 3.0, SATA 3.0 och USB 3.0 har fortsatt. Under rapportperioden implementerades stöd för USB 3.0, SD/MMC, I2C, nÀtverksgrÀnssnittet DPAA och GPIO. Planer finns för att stödja QSPI och optimera prestandan för nÀtverksgrÀnssnittet. Arbetet förvÀntas bli klart och inkluderas i HEAD-grenen under fjÀrde kvartalet 2019.
- Drivern ena har uppdaterats med stöd för andra generationens ENAv2 (Elastic Network Adapter) nÀtverksadapter som anvÀnds i infrastrukturen Elastic Compute Cloud (EC2) för att möjliggöra kommunikation mellan EC2-noder med hastigheter upp till 25 Gb/s. Stödet för NETMAP har lagts till och testats i ena-drivern, samt har minneslayoutanpassningen genomförts för att aktivera LLQ-lÀget i Amazon EC2 A1-miljöer.
- Applikationer och portsystem
- Komponenterna i grafikstacken och portar relaterade till xorg har uppdaterats. Portar som anvÀnder USE_XORG och XORG_CAT har övergÄtt till USES-ramverket istÀllet för att anropa bsd.xorg.mk via bsd.port.mk. SÄdana portar inkluderar nu flaggan "USES=xorg" i make-filer. Funktionaliteten av XORG_CAT har separerats frÄn bsd.xorg.mk och aktiveras nu med flaggan "USES=xorg-cat". Verktyg har lagts till för att direkt skapa xorg-portar frÄn git-repositoriet.
freedesktop.org, vilket exempelvis gör det möjligt att skapa portar för Ànnu icke slÀppta versioner. I framtiden planeras verktyg för att anvÀnda byggsystemet meson istÀllet för autotools för att bygga xorg-portar.Arbetet med att rensa bort gamla xorg-portar kopplade till redan avvecklade komponenter har genomförts; exempelvis har porten x11/libXp tagits bort, medan portarna x11/Xxf86misc, x11-fonts/libXfontcache och graphics/libGLw har klassificerats som förÄldrade.
- Arbetet med att förbÀttra stödet för Java 11 och nyare versioner pÄ FreeBSD samt portering av vissa förÀndringar till Java 8 har genomförts. Efter att stöd för nya funktioner i Java 11 som Java Flight Recorder, HotSpot Serviceability Agent, HotSpot Debugger, DTrace, Javac Server, Java Sound och SCTP implementerades pÄ FreeBSD, har fokus flyttats till att sÀkerstÀlla att alla kompatibilitetstester passerar. Antalet fel under tester har minskat frÄn 50 till 2.
- Skrivbordet KDE Plasma, KDE Frameworks, KDE Applications och Qt hÄlls uppdaterade och har uppgraderas till de senaste versionerna.
- Portarna med skrivbordet Xfce har uppdaterats till den senaste versionen. ;
- FreeBSD-porttrÀdet har passerat grÀnsen pÄ 38000 portar, antalet öppna PR överstiger lite mer Àn 2000, varav 400 PR fortfarande inte har behandlats. Under rapporteringsperioden har 7340 Àndringar gjorts av 169 utvecklare. TvÄ nya deltagare (Santhosh Raju och Dmitri Goutnik) har fÄtt committers rÀttigheter. En ny version av paketförvaltaren pkg 1.12 har publicerats med stöd för overlay i porttrÀdet och stÀdning av bsd.sites.mk. Bland de betydande versionuppdateringarna i portarna mÀrks: 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;
- Utvecklingen av projektet fortsÀtter , Àr en specialiserad distribution för distribution av infrastruktur för virtuella servrar. NÀr det gÀller de uppgifter som löses liknar ClonOS system som Proxmox, Triton (Joyent), OpenStack, OpenNebula och Amazon AWS, med den huvudsakliga skillnaden att det anvÀnder FreeBSD och ger möjlighet att hantera, distribuera och administrera Jail-containrar i FreeBSD och virtuella miljöer baserade pÄ hypervisorerna Bhyve och Xen. Bland de senaste förÀndringarna mÀrks stödet för
cloud-init för Linux/BSD VM och cloudbase-init för Windows VM, pÄbörjad övergÄng till att anvÀnda egna bilder, anvÀndning av Jenkins CI för testning av byggen och nytt pkg-repo för installation av
ClonOS frÄn paketen.
- Komponenterna i grafikstacken och portar relaterade till xorg har uppdaterats. Portar som anvÀnder USE_XORG och XORG_CAT har övergÄtt till USES-ramverket istÀllet för att anropa bsd.xorg.mk via bsd.port.mk. SÄdana portar inkluderar nu flaggan "USES=xorg" i make-filer. Funktionaliteten av XORG_CAT har separerats frÄn bsd.xorg.mk och aktiveras nu med flaggan "USES=xorg-cat". Verktyg har lagts till för att direkt skapa xorg-portar frÄn git-repositoriet.
KĂ€lla: opennet.ru
