FreeBSD-Entwicklungsbericht Q2019 XNUMX

Veröffentlicht Bericht über die Entwicklung des FreeBSD-Projekts von Juli bis September 2019. Unter den Änderungen können wir Folgendes feststellen:

  • Allgemeine und systemische Probleme
    • Das Kernteam hat der Möglichkeit, Code in das System aufzunehmen, der unter der BSD-Lizenz vertrieben wird, im Allgemeinen mit einer zusätzlichen Patentvereinbarung zugestimmt (BSD+Patent), aber die Entscheidung, jede Komponente in das System unter dieser Lizenz aufzunehmen, muss separat genehmigt werden;
    • Es fand das erste Treffen der Arbeitsgruppe statt, die zur Durchführung der Migration von Quellcodes vom zentralen Quellcodeverwaltungssystem Subversion auf das dezentrale System Git eingerichtet wurde. Die Diskussion über die Durchführbarkeit der Migration ist noch im Gange und Entscheidungen zu vielen Fragen müssen noch getroffen werden (z. B. was mit contrib/ geschehen soll, ob es notwendig ist, Hashes im aktuellen Git-Repository neu zu generieren und wie man das Testen am besten implementiert begeht);
    • Von NetBSD portiert KCSAN-Toolkit (Kernel Concurrency Sanitizer), mit dem Sie Race-Bedingungen zwischen Kernel-Threads erkennen können, die auf verschiedenen CPUs ausgeführt werden;
    • Derzeit wird daran gearbeitet, den integrierten Assembler (IAS) von Clang anstelle des GNU-Binutils-Assemblers zu verwenden.
    • Die Linux-Umgebungsemulationsinfrastruktur (Linuxulator) ist für die Arbeit auf der ARM64-Architektur angepasst. Der Systemaufruf „renameat2“ wurde implementiert. Das Dienstprogramm Strace wurde verbessert, um Probleme in ausführbaren Linux-Dateien zu diagnostizieren, die im Linuxulator ausgeführt werden. Das Problem mit Abstürzen beim Verknüpfen ausführbarer Dateien mit der neuen Glibc wurde behoben. Ports mit Linux-Komponenten für Linuxulator wurden auf CentOS 7.7 aktualisiert;
    • Im Rahmen des Google Summer of Code-Programms haben die Studierenden sechs Projekte erfolgreich abgeschlossen: Eine Implementierung eines einheitlichen (IPv4/IPv6) Ping-Dienstprogramms wurde vorbereitet, Tools zum Testen von Firewalls und zur Identifizierung von Fehlern im Kernel (Kernel Sanitizer) wurden entwickelt, das mac_ipacl Modul wurde vorgeschlagen, Code für die Komprimierung des virtuellen Speichers geschrieben und daran gearbeitet, den Port-Build-Prozess von der lokalen Installation zu trennen;
    • Das Projekt zum Fuzzing-Testen des FreeBSD-Kernels mithilfe des Systems entwickelt sich weiter syzkaller. Im Berichtszeitraum wurden mit syzkaller mehr als zehn Fehler identifiziert und behoben. Um Syzkaller in virtuellen Maschinen auf Basis von Bhyve auszuführen, wird ein separater Server dediziert und verwendet
      syzbot hat das Testen verschiedener FreeBSD-Subsysteme in der Google-Infrastruktur etabliert. Organisierte die Übertragung von Informationen über alle Abstürze an den Dienst backtrace.io, um deren Gruppierung und Analyse zu vereinfachen;

    • Derzeit wird daran gearbeitet, die zlib-Implementierung auf Kernel-Ebene zu aktualisieren.
      Komprimierungsbezogener Code wurde von zlib 1.0.4, das vor über 20 Jahren veröffentlicht wurde, auf die aktuelle zlib 1.2.11-Codebasis migriert. Um den Zugriff auf zlib zu vereinheitlichen, wurden dem Kernel die Funktionen compress, compress2 und uncompress hinzugefügt. Der Code, der den Betrieb des PPP-Protokolls vom Netgraph-Subsystem gewährleistet, wurde übertragen, um die Systemimplementierung von zlib anstelle einer eigenen Edition dieser Bibliothek zu verwenden. Die Subsysteme kern_ctf.c, opencryptodeflate, geom_uzip, subr_compressor wurden ebenfalls in die neue zlib übertragen.
      if_mxge, bxe aktualisiert und ng_deflate;

    • Eine neue Kernel-Schnittstelle wird entwickelt sysctlinfo, mit dem Sie Elemente in der sysctl-Parameterdatenbank finden, in Form einer MIB (Management Information Base) verarbeitet werden, und Informationen über Objekte in den Benutzerbereich übertragen können.
  • Sicherheit
    • Kernel-Modul entwickelt mac_ipacl, basierend auf dem TrustedBSD MAC Framework und implementiert ein Zugriffskontrollsystem für Netzwerk-Stack-Einstellungen für Gefängnisumgebungen. Mithilfe von mac_ipacl kann ein Hostsystemadministrator beispielsweise verhindern, dass der Root-Benutzer in einer Jail-Umgebung IP-Adressen oder Subnetzeinstellungen für bestimmte Netzwerkschnittstellen ändert oder festlegt. Vorgeschlagenes obligatorisches Zugangskontrollsystem ermöglicht Legen Sie Listen mit für das Gefängnis zugelassenen IP-Adressen und Subnetzen fest, verbieten Sie die Installation bestimmter IP-Adressen und Subnetze im Gefängnis oder beschränken Sie die Änderung von Parametern nur für bestimmte Netzwerkschnittstellen.
    • Intel spendete dem Projekt einen Software-Stack-Port TPM 2.0 (Trusted Platform Module) zur Schnittstelle mit dem sicheren Computerchip, der normalerweise zum verifizierten Laden von Firmware und Betriebssystem-Bootloader verwendet wird. Die Stack-Komponenten werden in Form der Ports security/tpm2-tss, security/tpm2-tools und security/tpm2-abrmd dargestellt. Der tpm2-tss-Port enthält Bibliotheken für die Verwendung der TPM2-API, tpm2-tools stellt Befehlszeilendienstprogramme zum Ausführen von TPM-Vorgängen bereit und tpm2-abrmd enthält eine Hintergrundprozessimplementierung der TPM Access Broker- und Resource Manager-Komponenten, die Anforderungen von verschiedenen TPM-Benutzern multiplext auf ein einzelnes Gerät. Zusätzlich zum verifizierten Booten unter FreeBSD kann TPM verwendet werden, um die Sicherheit von Strongswan IPsec, SSH und TLS zu verbessern, indem kryptografische Vorgänge auf einem separaten Chip ausgeführt werden;
    • Der Kernel für die amd64-Architektur ist so angepasst, dass er mit der Schutztechnik W^X (Write ist verboten). Die neue Kernel-Schutzmethode ist im HEAD-Zweig enthalten und wird in den FreeBSD-Versionen 13.0 und 12.2 enthalten sein;
    • Für mmap- und mprotect-Systemaufrufe implementiert Makro PROT_MAX(), mit dem Sie den Satz von Zugriffsbeschränkungsflags bestimmen können, die für weitere Änderungen zulässig sind (PROT_READ, PROT_WRITE, PROT_EXEC). Mit PROT_MAX() kann ein Entwickler die Übertragung eines Speicherbereichs in die ausführbare Kategorie verbieten oder Speicher anfordern, der keine Ausführung zulässt, aber später in eine ausführbare Datei konvertiert werden kann. Beispielsweise kann ein Speicherbereich nur für die Dauer der dynamischen Verknüpfung oder der JIT-Codegenerierung zum Schreiben geöffnet sein. Sobald der Schreibvorgang jedoch abgeschlossen ist, ist er nur noch zum Lesen und Ausführen und in der Zukunft, wenn er kompromittiert wird, für den Angreifer eingeschränkt kann das Schreiben für diesen Speicherblock nicht aktivieren. Zusätzlich zu PROT_MAX() ist auch sysctl vm.imply_prot_max implementiert, das bei Aktivierung den Satz gültiger Flags basierend auf den Anfangsparametern des ersten Aufrufs von mmap bestimmt;
    • Um den Schutz vor der Ausnutzung von Schwachstellen zu verbessern, gibt es zusätzlich zur Adressraum-Randomisierungstechnik (ASLR) einen Mechanismus zur Randomisierung der Offsets von Zeigern, die den anfänglichen Stapelrahmen und die auf dem Stapel platzierten Strukturen mit Informationen über die Umgebung, Programmstartparameter und Daten adressieren für ausführbare Bilder wird das ELF-Format vorgeschlagen;
    • Es wurde daran gearbeitet, die unsichere Gets-Funktion aus libc zu entfernen (ab dem C11-Standard wurde diese Funktion aus der Spezifikation ausgeschlossen) und die Ports zu korrigieren, die diese Funktion noch verwenden. Die Änderung soll in FreeBSD 13.0 angeboten werden;
    • Ein experimentelles Projekt wurde gestartet, um Tools zur Orchestrierung von Gefängnisumgebungen auf Basis des Frameworks zu erstellen können zum Erstellen und Exportieren von Bildern, ähnlich wie Docker implementiert, und einem Treiber Nomade, das eine Schnittstelle zum dynamischen Starten von Anwendungen in einer Gefängnisumgebung bietet. Das vorgeschlagene Modell ermöglicht es uns, die Prozesse der Erstellung von Gefängnisumgebungen und der Bereitstellung von Anwendungen darin zu trennen. Eines der Ziele des Projekts besteht darin, eine Möglichkeit bereitzustellen, Gefängnisse als Container im Docker-Stil zu manipulieren.
  • Speicher- und Dateisysteme
    • Von NetBSD zum Dienstprogramm „makefs“. gerührt Unterstützung für FAT-Dateisysteme (msdosfs). Mit den vorbereiteten Änderungen können Sie FS-Images mit FAT erstellen, ohne den MD-Treiber zu verwenden und ohne Root-Berechtigung;
    • Die Überarbeitung des FUSE-Subsystemtreibers (File system in USErspace) wurde abgeschlossen und ermöglicht die Erstellung von Dateisystemimplementierungen im Userspace. Der ursprünglich ausgelieferte Treiber enthielt viele Fehler und basierte auf FUSE 7.8, das vor 11 Jahren veröffentlicht wurde. Im Rahmen des Treibermodernisierungsprojekts wurde die Unterstützung des FUSE 7.23-Protokolls implementiert, Code zur Überprüfung der Zugriffsrechte auf der Kernelseite („-o default_permissions“) hinzugefügt, Aufrufe an VOP_MKNOD, VOP_BMAP und VOP_ADVLOCK hinzugefügt, die Möglichkeit zum Unterbrechen von FUSE-Vorgängen wurde bereitgestellt, Unterstützung für unbenannte Pipes und Unix-Sockets wurde in Fusefs hinzugefügt, es wurde möglich, kqueue für /dev/fuse zu verwenden, es war möglich, Mount-Parameter über „mount -u“ zu aktualisieren, Unterstützung hinzugefügt für den Export von Fusefs über NFS, RLIMIT_FSIZE-Buchhaltung implementiert, die Flags FOPEN_KEEP_CACHE und FUSE_ASYNC_READ hinzugefügt, erhebliche Leistungsoptimierungen vorgenommen und die Caching-Organisation verbessert. Der neue Treiber ist in den Zweigen head und Stable/12 enthalten (in FreeBSD 12.1 enthalten);
    • Die Implementierung von NFSv4.2 (RFC-7862) für FreeBSD ist fast abgeschlossen. Im Berichtszeitraum lag der Schwerpunkt auf dem Testen. Die Tests zur Überprüfung der Kompatibilität mit der Linux-Implementierung wurden abgeschlossen, die Tests des pNFS-Servers mit NFSv4.2 sind jedoch noch im Gange. Im Allgemeinen gilt der Code bereits als bereit für die Integration in die FreeBSD-Kopf-/aktuellen Zweige. Die neue Version von NFS bietet Unterstützung für die Funktionen posix_fadvise, posix_fallocate, SEEKHOLE/SEEKDATA-Modi in lseek, den Vorgang des lokalen Kopierens von Teilen einer Datei auf dem Server (ohne Übertragung an den Client);
  • Hardware-Unterstützung
    • Es wurde ein Projekt gestartet, um die Leistung von FreeBSD auf Laptops zu verbessern. Das erste Gerät, das auf Hardware-Unterstützung in FreeBSD geprüft wurde, war der Lenovo X1 Carbon-Laptop der siebten Generation;
    • CheriBSD, eine Abzweigung von FreeBSD für die Architektur von Forschungsprozessoren CHERI (Capability Hardware Enhanced RISC Instructions), aktualisiert, um den kommenden ARM-Morello-Prozessor zu unterstützen, der das CHERI-Speicherzugriffskontrollsystem basierend auf dem Sicherheitsmodell des Capsicum-Designs unterstützen wird. Morello-Chip planen Veröffentlichung im Jahr 2021. Die CheriBSD-Entwickler überwachen außerdem weiterhin die Entwicklung des CHERI-Referenzprototyps auf Basis der MIPS-Architektur;
    • Erweiterte Unterstützung für RockChip RK3399-Chips, die in RockPro64- und NanoPC-T4-Boards verwendet werden. Die bedeutendste Verbesserung war die Unterstützung von eMMC und die Entwicklung eines neuen Treibers für den auf der Platine verwendeten eMMC-Controller;
    • Es wird weiterhin an der Implementierung der Unterstützung für den ARM64-SoC Broadcom BCM5871X mit ARMv8-Cortex-A57-Prozessoren gearbeitet, der auf den Einsatz in Routern, Gateways und Netzwerkspeichern abzielt. Im Berichtszeitraum
      Die iProc PCIe-Unterstützung wurde erweitert und die Möglichkeit hinzugefügt, Hardware-Kryptografieoperationen zur Beschleunigung von IPsec zu verwenden.
      Die Code-Integration in den HEAD-Zweig wird im vierten Quartal erwartet;

    • Bei der Entwicklung eines FreeBSD-Ports für die PowerPC64-Plattform wurden erhebliche Fortschritte erzielt. Der Schwerpunkt liegt auf der Bereitstellung hochwertiger Leistung auf Systemen mit IBM POWER8- und POWER9-Prozessoren, unterstützt optional jedoch den Betrieb auf älteren Apple Power Macs, x500 und Amiga A1222. Der powerpc*/12-Zweig wird weiterhin mit gcc 4.2.1 ausgeliefert und der powerpc*/13-Zweig wird bald auf llvm90 migriert. Von 33306 Ports wurden 30514 erfolgreich assembliert;
    • Die FreeBSD-Portierung wird für den 64-Bit-SoC NXP LS1046A basierend auf dem ARMv8 Cortex-A72-Prozessor mit einer integrierten Beschleunigungs-Engine für die Netzwerkpaketverarbeitung, 10 Gbit Ethernet, PCIe 3.0, SATA 3.0 und USB 3.0 fortgesetzt. Im Berichtszeitraum wurde die Unterstützung der Netzwerkschnittstellen USB 3.0, SD/MMC, I2C, DPAA und GPIO implementiert. Es ist geplant, QSPI zu unterstützen und die Leistung der Netzwerkschnittstelle zu optimieren. Der Abschluss der Arbeiten und die Aufnahme in die HEAD-Niederlassung werden im 4. Quartal 2019 erwartet;
    • Der ena-Treiber wurde aktualisiert, um die zweite Generation von ENAv2-Netzwerkadaptern (Elastic Network Adapter) zu unterstützen, die in der Elastic Compute Cloud (EC2)-Infrastruktur verwendet werden, um die Kommunikation zwischen EC2-Knoten mit Geschwindigkeiten von bis zu 25 Gbit/s zu organisieren. Dem ena-Treiber wurde NETMAP-Unterstützung hinzugefügt und getestet, und das Speicherlayout wurde angepasst, um den LLQ-Modus in Amazon EC2 A1-Umgebungen zu ermöglichen;
  • Anwendungen und Portsystem
    • Aktualisierte Grafik-Stack-Komponenten und xorg-bezogene Ports. Ports, die USE_XORG und XORG_CAT verwenden, wurden in das USES-Framework verschoben, anstatt bsd.xorg.mk über bsd.port.mk aufzurufen. Solche Ports enthalten jetzt das Flag „USES=xorg“ in ihren Makefiles. Die XORG_CAT-Funktionalität wurde von bsd.xorg.mk getrennt und wird jetzt durch das Flag „USES=xorg-cat“ aktiviert. Tools zum direkten Generieren von Xorg-Ports aus einem Git-Repository hinzugefügt
      freedesktop.org, mit dem Sie beispielsweise Portierungen für noch nicht veröffentlichte Versionen erstellen können. In Zukunft planen wir, Tools für die Verwendung des Meson-Assembly-Systems anstelle von Autotools zum Erstellen von Xorg-Ports vorzubereiten.

      Es wurden Arbeiten durchgeführt, um alte xorg-Ports zu bereinigen, die mit Komponenten verknüpft sind, die nicht mehr unterstützt werden. Beispielsweise wurde der x11/libXp-Port entfernt und die x11/Xxf86misc-, x11-fonts/libXfontcache- und Graphics/libGLw-Ports wurden veraltet ;

    • Es wurde daran gearbeitet, die Unterstützung für Java 11 und neuere Versionen in FreeBSD zu verbessern und einige Änderungen auf den Java 8-Zweig zu portieren. Nachdem die Unterstützung für neue Java 11-Funktionen wie Java Flight Recorder, HotSpot Serviceability Agent und HotSpot Debugger implementiert wurde Für FreeBSD, DTrace, Javac Server, Java Sound und SCTP wurde die Arbeit darauf verlagert, sicherzustellen, dass alle Kompatibilitätstests bestanden wurden. Die Anzahl der Fehler beim Bestehen von Tests wurde von 50 auf 2 reduziert;
    • Der KDE Plasma-Desktop, die KDE-Frameworks, die KDE-Anwendungen und Qt werden auf dem neuesten Stand gehalten und auf die neuesten Versionen aktualisiert.
    • Ports mit Xfce-Desktop auf Version aktualisiert 4.14;
    • Der FreeBSD-Ports-Baum hat die Grenze von 38000 Ports überschritten, die Anzahl der nicht geschlossenen PRs liegt bei etwas über 2000, von denen 400 PRs noch nicht gelöst wurden. Im Berichtszeitraum wurden 7340 Änderungen von 169 Entwicklern vorgenommen. Zwei neue Teilnehmer (Santhosh Raju und Dmitri Goutnik) erhielten Committer-Rechte. Eine neue Version des Paketmanagers pkg 1.12 wurde veröffentlicht, mit Unterstützung für Overlays im Ports-Baum und Bereinigung von bsd.sites.mk. Zu den bedeutenden Versionsaktualisierungen in den Ports gehören: 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;
    • Die Projektentwicklung geht weiter ClonOS, Entwicklung eine spezialisierte Distribution für die Bereitstellung einer virtuellen Serverinfrastruktur. In Bezug auf die gelösten Aufgaben ähnelt ClonOS Systemen wie Proxmox, Triton (Joyent), OpenStack, OpenNebula und Amazon AWS. Der Hauptunterschied besteht in der Verwendung von FreeBSD und der Möglichkeit, FreeBSD-Jail-Container zu verwalten, bereitzustellen und zu verwalten virtuelle Umgebungen basierend auf Bhyve- und Xen-Hypervisoren. Zu den jüngsten Änderungen gehört die Unterstützung
      cloud-init für Linux/BSD-VM und cloudbase-init für Windows-VM, Beginn des Übergangs zur Verwendung nativer Images, Verwendung von Jenkins CI zum Testen von Builds und eines neuen pkg-Repositorys für die Installation
      ClonOS aus Paketen.

Source: opennet.ru

Kommentar hinzufügen