FreeBSD Development Report Q2019 XNUMX

offentliggjort rapport om udviklingen af ​​FreeBSD-projektet fra juli til september 2019. Blandt ændringerne kan vi bemærke:

  • Generelle og systemiske problemstillinger
    • Kerneteamet har generelt godkendt muligheden for at inkludere kode i systemet, der distribueres under BSD-licensen med en yderligere patentaftale (BSD+Patent), men beslutningen om at inkludere hver komponent i systemet under denne licens skal godkendes separat;
    • Det første møde i den arbejdsgruppe, der blev oprettet for at udføre migreringen af ​​kildekoder fra det centraliserede kildekontrolsystem Subversion til det decentrale system Git, fandt sted. Diskussionen om gennemførligheden af ​​migration er stadig i gang, og beslutninger om mange spørgsmål mangler endnu at blive udviklet (f.eks. hvad skal man gøre med contrib/, om det er nødvendigt at regenerere hashes i det nuværende git-lager, og hvordan man bedst implementerer testning af forpligtelser);
    • Fra NetBSD porteret KCSAN (Kernel Concurrency Sanitizer) værktøjssæt, som giver dig mulighed for at detektere raceforhold mellem kernetråde, der kører på forskellige CPU'er;
    • Der arbejdes på at bruge Clangs indbyggede assembler (IAS) i stedet for GNU binutils assembler;
    • Linux-miljøemuleringsinfrastrukturen (Linuxulator) er tilpasset til at fungere på ARM64-arkitekturen. Implementerede "renameat2"-systemkaldet. Strace-værktøjet er blevet forbedret til at diagnosticere problemer i Linux-eksekverbare filer, der kører i Linuxulator. Problemet med nedbrud ved sammenkædning af eksekverbare filer med frisk glibc er blevet løst. Porte med Linux-komponenter til Linuxulator er blevet opdateret til CentOS 7.7;
    • Som en del af Google Summer of Code-programmet gennemførte eleverne med succes seks projekter: en implementering af et samlet (IPv4/IPv6) ping-værktøj blev forberedt, værktøjer til at teste firewalls og identificere fejl i kernen (Kernel sanitizer) blev udviklet, mac_ipacl modul blev foreslået, kode blev skrevet til virtuel hukommelseskomprimering, og der er blevet arbejdet på at adskille portbygningsprocessen fra den lokale installation;
    • Projektet for fuzzing-test af FreeBSD-kernen ved hjælp af systemet fortsætter med at udvikle sig syzkaller. I løbet af rapporteringsperioden blev mere end ti fejl identificeret og elimineret ved hjælp af syzkaller. For at køre syzkaller i virtuelle maskiner baseret på bhyve, er en separat server dedikeret, og bruger
      syzbot har etableret test af forskellige FreeBSD-undersystemer i Googles infrastruktur. Organiseret overførsel af information om alle nedbrud til backtrace.io-tjenesten for at forenkle deres gruppering og analyse;

    • Der arbejdes på at opdatere zlib-implementeringen på kerneniveau.
      Kompressionsrelateret kode er blevet migreret fra zlib 1.0.4, udgivet for over 20 år siden, til den nuværende zlib 1.2.11 kodebase. For at forene adgangen til zlib er funktionerne compress, compress2 og uncompress blevet tilføjet til kernen. Koden, der sikrer driften af ​​PPP-protokollen fra netgraph-undersystemet, er blevet overført til at bruge systemimplementeringen af ​​zlib i stedet for sin egen udgave af dette bibliotek. Kern_ctf.c, opencryptodflate, geom_uzip, subr_compressor, undersystemer er også blevet overført til det nye zlib.
      if_mxge, bxe opdateret og ng_deflate;

    • En ny kernegrænseflade er under udvikling sysctlinfo, som giver dig mulighed for at finde elementer i sysctl-parameterdatabasen, behandlet i form af en MIB (Management Information Base), og overføre information om objekter til brugerrum.
  • Безопасность
    • Kernelmodul udviklet mac_ipacl, baseret på TrustedBSD MAC Framework og implementering af et adgangskontrolsystem til netværksstackindstillinger til jail-miljøer. For eksempel, ved at bruge mac_ipacl, kan en værtssystemadministrator forhindre root-brugeren i et jail-miljø i at ændre eller indstille IP-adresser eller undernetindstillinger for visse netværksgrænseflader. Foreslået obligatorisk adgangskontrolsystem Det gør det muligt sæt lister over IP-adresser og undernet tilladt for Jail, forbyd installation af visse IP'er og undernet i Jail, eller begrænse ændring af parametre kun for visse netværksgrænseflader;
    • Intel donerede en softwarestack-port til projektet TPM 2.0 (Trusted Platform Module) til grænseflade med den sikre computerchip, som normalt bruges til verificeret indlæsning af firmware og OS bootloader. Stakkomponenterne præsenteres i form af ports security/tpm2-tss, security/tpm2-tools og security/tpm2-abrmd. tpm2-tss-porten inkluderer biblioteker til brug af TPM2 API, tpm2-tools giver kommandolinjeværktøjer til at udføre TPM-operationer, og tpm2-abrmd indeholder en baggrundsprocesimplementering af TPM Access Broker og Resource Manager-komponenterne, der multiplekser anmodninger fra forskellige TPM-brugere til en enkelt enhed. Ud over verificeret opstart på FreeBSD kan TPM bruges til at øge sikkerheden for Strongswan IPsec, SSH og TLS ved at udføre kryptografiske operationer på en separat chip;
    • Kernen til amd64-arkitekturen er tilpasset til at starte op ved hjælp af W^X (write XOR execute) beskyttelsesteknikken, hvilket betyder, at hukommelsessider ikke kan tilgås samtidigt til skrivning og eksekvering (kernen kan nu indlæses ved hjælp af eksekverbare hukommelsessider, hvortil skrivning er forbudt). Den nye kernebeskyttelsesmetode er inkluderet i HEAD-grenen og vil blive inkluderet i FreeBSD 13.0 og 12.2-udgivelserne;
    • Til mmap og mprotect systemopkald implementeret makro PROT_MAX(), som giver dig mulighed for at bestemme det sæt af adgangsbegrænsningsflag, der er tilladt for yderligere ændringer (PROT_READ, PROT_WRITE, PROT_EXEC). Ved at bruge PROT_MAX() kan en udvikler forbyde overførslen af ​​et hukommelsesområde til den eksekverbare kategori eller anmode om hukommelse, der ikke tillader udførelse, men som senere kan konverteres til eksekverbar. For eksempel kan et hukommelsesområde kun være åbent for skrivning under varigheden af ​​dynamisk linking eller JIT-kodegenerering, men når først skrivningen er færdig, er den begrænset til kun at læse og udføre, og i fremtiden, hvis den kompromitteres, angriberen vil ikke være i stand til at aktivere skrivning for denne hukommelsesblok. Ud over PROT_MAX() er sysctl vm.imply_prot_max også implementeret, som, når den er aktiveret, bestemmer sættet af gyldige flag baseret på de indledende parametre for det første kald til mmap;
    • For at forbedre beskyttelsen mod udnyttelse af sårbarheder, ud over adresserumsrandomiseringsteknikken (ASLR), en mekanisme til randomisering af forskydninger af pointere, der adresserer den indledende stakramme og strukturer placeret på stakken med information om miljøet, programstartparametre og data for eksekverbare billeder i ELF-format foreslås;
    • Der er arbejdet på at fjerne unsafe gets-funktionen fra libc (startende fra C11-standarden, denne funktion er blevet udelukket fra specifikationen) og for at rette de porte, der stadig bruger denne funktion. Ændringen er planlagt til at blive tilbudt i FreeBSD 13.0;
    • Et eksperimentelt projekt er iværksat for at skabe værktøjer til at orkestrere fængselsmiljøer baseret på rammerne pot til oprettelse og eksport af billeder, implementeret svarende til Docker, og en driver nomade, som giver en grænseflade til dynamisk lancering af applikationer i et fængselsmiljø. Den foreslåede model giver os mulighed for at adskille processerne med at skabe fængselsmiljøer og implementere applikationer i dem. Et af målene med projektet er at give et middel til at manipulere fængsler som containere i Docker-stil;
  • Opbevaring og filsystemer
    • Fra NetBSD til "makefs"-værktøjet flyttet FAT filsystem support (msdosfs). De forberedte ændringer giver dig mulighed for at oprette FS-billeder med FAT uden at bruge md-driveren og uden root-autorisation;
    • Omarbejdningen af ​​FUSE (Filsystem i USErspace) undersystemdriveren er afsluttet, hvilket muliggør oprettelse af filsystemimplementeringer i brugerrummet. Driveren, der oprindeligt blev sendt, indeholdt mange fejl og var baseret på FUSE 7.8, som blev udgivet for 11 år siden. Som en del af drivermoderniseringsprojektet er understøttelse af FUSE 7.23-protokollen blevet implementeret, kode til kontrol af adgangsrettigheder på kernesiden ("-o default_permissions") er tilføjet, opkald til VOP_MKNOD, VOP_BMAP og VOP_ADVLOCK er blevet tilføjet, mulighed for at afbryde FUSE-operationer er tilvejebragt, understøttelse af unavngivne rør og unix-sokler er blevet tilføjet i fusefs, det blev muligt at bruge kqueue til /dev/fuse, det var muligt at opdatere mount-parametre via "mount -u", tilføjet support til eksport af fusefs via NFS, implementerede RLIMIT_FSIZE-regnskab, tilføjede FOPEN_KEEP_CACHE- og FUSE_ASYNC_READ-flag, lavede betydelige ydeevneoptimeringer og forbedrede caching-organisation. Den nye driver er inkluderet i hoved- og stald/12-grenene (inkluderet i FreeBSD 12.1);
    • Implementeringen af ​​NFSv4.2 (RFC-7862) til FreeBSD er næsten afsluttet. Hovedfokus i rapporteringsperioden var på test. Tests er blevet gennemført for at verificere kompatibilitet med Linux-implementeringen, men test af pNFS-serveren med NFSv4.2 er stadig i gang. Generelt anses koden allerede for at være klar til integration i FreeBSD-hovedet/aktuelle grene. Den nye version af NFS tilføjer understøttelse af posix_fadvise, posix_fallocate-funktioner, SEEKHOLE/SEEKDATA-tilstande i lseek, driften af ​​lokal kopiering af dele af en fil på serveren (uden overførsel til klienten);
  • Hardware support
    • Et projekt er blevet lanceret for at forbedre ydeevnen af ​​FreeBSD på bærbare computere. Den første enhed, der blev revideret for hardwaresupport i FreeBSD, var den syvende generation af Lenovo X1 Carbon bærbare;
    • CheriBSD, en forgrening af FreeBSD til forskningsprocessorarkitektur CHERI (Capability Hardware Enhanced RISC Instructions), opdateret til at understøtte den kommende ARM Morello-processor, som vil understøtte CHERI-hukommelsesadgangskontrolsystemet baseret på Capsicum-designets sikkerhedsmodel. Morello chip planlægger udgivelse i 2021. CheriBSD-udviklerne fortsætter også med at overvåge udviklingen af ​​CHERI-referenceprototypen baseret på MIPS-arkitekturen;
    • Udvidet understøttelse af RockChip RK3399-chips brugt i RockPro64- og NanoPC-T4-kort. Den væsentligste forbedring var understøttelse af eMMC og udviklingen af ​​en ny driver til eMMC-controlleren, der blev brugt på kortet;
    • Arbejdet fortsætter med at implementere understøttelse af ARM64 SoC Broadcom BCM5871X med ARMv8 Cortex-A57-processorer, rettet mod brug i routere, gateways og netværkslagring. I rapporteringsperioden
      iProc PCIe-understøttelse er blevet udvidet, og muligheden for at bruge hardwarekryptering til at fremskynde IPsec er blevet tilføjet.
      Kodeintegration i HEAD-grenen forventes i fjerde kvartal;

    • Der er sket betydelige fremskridt i udviklingen af ​​en FreeBSD-port til powerpc64-platformen. Fokus er på at levere kvalitetsydeevne på systemer med IBM POWER8- og POWER9-processorer, men understøtter valgfri drift på ældre Apple Power Macs, x500 og Amiga A1222. Powerpc*/12-grenen fortsætter med at sende med gcc 4.2.1, og powerpc*/13-grenen vil snart blive migreret til llvm90. Ud af 33306 porte er 30514 samlet;
    • FreeBSD-porting fortsætter for 64-bit SoC NXP LS1046A baseret på ARMv8 Cortex-A72-processoren med en integreret netværkspakkebehandlingsaccelerationsmotor, 10 Gb Ethernet, PCIe 3.0, SATA 3.0 og USB 3.0. I løbet af rapporteringsperioden blev understøttelse af USB 3.0, SD/MMC, I2C, DPAA og GPIO netværksinterface implementeret. Der er planer om at understøtte QSPI og optimere ydeevnen af ​​netværksgrænsefladen. Afslutning af arbejde og inklusion i HEAD-grenen forventes i 4. kvartal 2019;
    • Ena-driveren er blevet opdateret til at understøtte anden generation af ENAv2 (Elastic Network Adapter) netværksadaptere, der bruges i Elastic Compute Cloud (EC2) infrastrukturen til at organisere kommunikation mellem EC2 noder med hastigheder på op til 25 Gb/s. NETMAP-understøttelse er blevet tilføjet og testet til ena-driveren, og hukommelseslayoutet er blevet tilpasset til at aktivere LLQ-tilstand i Amazon EC2 A1-miljøer;
  • Applikationer og havnesystem
    • Opdaterede grafikstakkomponenter og xorg-relaterede porte. Porte, der bruger USE_XORG og XORG_CAT, er blevet flyttet til USES frameworket i stedet for at kalde bsd.xorg.mk via bsd.port.mk. Sådanne porte inkluderer nu flaget "USES=xorg" i deres make-filer. XORG_CAT-funktionaliteten er blevet adskilt fra bsd.xorg.mk og er nu aktiveret af flaget "USES=xorg-cat". Tilføjede værktøjer til direkte generering af xorg-porte fra et git-lager
      freedesktop.org, som for eksempel giver dig mulighed for at oprette porte til endnu ikke udgivne versioner. I fremtiden planlægger vi at forberede værktøjer til at bruge meson-samlingssystemet i stedet for autoværktøjer til at bygge xorg-porte.

      Der er blevet arbejdet med at rydde op i gamle xorg-porte, der er knyttet til komponenter, der ikke længere understøttes, f.eks. er x11/libXp-porten blevet fjernet, og x11/Xxf86misc-, x11-fonts/libXfontcache og graphics/libGLw-portene er blevet forældet. ;

    • Der er blevet arbejdet på at forbedre understøttelsen af ​​Java 11 og nyere udgivelser i FreeBSD, samt at portere nogle ændringer til Java 8-grenen. Efter understøttelse af nye Java 11-funktioner som Java Flight Recorder, HotSpot Serviceability Agent, blev HotSpot Debugger implementeret for FreeBSD , DTrace, Javac Server, Java Sound og SCTP blev arbejdet flyttet til at sikre, at alle kompatibilitetstests bestod. Antallet af fejl ved beståelse af prøver er reduceret fra 50 til 2;
    • KDE Plasma desktop, KDE Frameworks, KDE Applications og Qt holdes opdateret og opdateret til de seneste udgivelser;
    • Porte med Xfce desktop opdateret til frigivelse 4.14;
    • FreeBSD-ports-træet har passeret 38000 porte, antallet af ulukkede PR'er er lidt over 2000, hvoraf 400 PR'er endnu ikke er blevet løst. I løbet af rapporteringsperioden blev der foretaget 7340 ændringer fra 169 udviklere. To nye deltagere (Santhosh Raju og Dmitri Goutnik) modtog committer-rettigheder. En ny udgivelse af pakkehåndteringen pkg 1.12 er blevet offentliggjort, med understøttelse af overlejringer i ports-træet og rensning af bsd.sites.mk. Blandt de væsentlige versionsopdateringer i portene er: 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;
    • Projektudviklingen fortsætter ClonOS, udvikler sig en specialiseret distribution til implementering af virtuel serverinfrastruktur. Med hensyn til de opgaver, det løser, ligner ClonOS systemer som Proxmox, Triton (Joyent), OpenStack, OpenNebula og Amazon AWS, hvor den største forskel er brugen af ​​FreeBSD og evnen til at administrere, implementere og administrere FreeBSD Jail-containere og virtuelle miljøer baseret på Bhyve og Xen hypervisorer. De seneste ændringer omfatter support
      cloud-init til Linux/BSD VM og cloudbase-init til Windows VM, begynder overgangen til at bruge native billeder, bruger Jenkins CI til test af builds og et nyt pkg-lager til installation
      ClonOS fra pakker.

Kilde: opennet.ru

Tilføj en kommentar