Informe de desenvolupament de FreeBSD 2019T XNUMX

publicat informe sobre el desenvolupament del projecte FreeBSD de juliol a setembre de 2019. Entre els canvis podem destacar:

  • Problemes generals i sistèmics
    • L'equip principal ha aprovat en general la possibilitat d'incloure codi al sistema que es distribueix sota la llicència BSD amb un acord de patent addicional (BSD + patent), però la decisió d'incloure cada component al sistema sota aquesta llicència s'ha d'aprovar per separat;
    • Va tenir lloc la primera reunió del grup de treball creat per dur a terme la migració de codis font des del sistema centralitzat de control de fonts Subversion al sistema descentralitzat Git. La discussió sobre la viabilitat de la migració encara està en curs i encara s'han de prendre decisions sobre moltes qüestions (per exemple, què fer amb contrib/, si és necessari regenerar els hash al repositori git actual i la millor manera d'implementar les proves). de compromisos);
    • De NetBSD portat Kit d'eines KCSAN (Kernel Concurrency Sanitizer), que us permet detectar condicions de carrera entre fils del nucli que s'executen en diferents CPU;
    • S'està treballant per utilitzar l'assemblador integrat (IAS) de Clang en lloc de l'assemblador binutils de GNU;
    • La infraestructura d'emulació de l'entorn Linux (Linuxulator) està adaptada per treballar amb l'arquitectura ARM64. S'ha implementat la crida al sistema "renameat2". La utilitat strace s'ha millorat per diagnosticar problemes en els executables de Linux executats al Linuxulator. S'ha resolt el problema dels bloquejos en enllaçar fitxers executables amb glibc nou. Els ports amb components Linux per a Linuxulator s'han actualitzat a CentOS 7.7;
    • Com a part del programa Google Summer of Code, els estudiants van completar amb èxit sis projectes: es va preparar una implementació d'una utilitat de ping unificada (IPv4/IPv6), es van desenvolupar eines per provar tallafocs i identificar errors al nucli (Kernel sanitizer), el mac_ipacl es va proposar el mòdul, es va escriure codi per a la compressió de memòria virtual i s'ha treballat per separar el procés de construcció del port de la instal·lació local;
    • El projecte per a les proves fuzzing del nucli de FreeBSD utilitzant el sistema continua desenvolupant-se syzkaller. Durant el període d'informe, es van identificar i eliminar més de deu errors mitjançant syzkaller. Per executar syzkaller en màquines virtuals basades en bhyve, es dedica un servidor separat i s'utilitza
      syzbot ha establert proves de diversos subsistemes FreeBSD a la infraestructura de Google. Va organitzar la transferència d'informació sobre tots els bloquejos al servei backtrace.io per simplificar-ne l'agrupació i anàlisi;

    • S'està treballant per actualitzar la implementació de zlib a nivell del nucli.
      El codi relacionat amb la compressió s'ha migrat de zlib 1.0.4, llançat fa més de 20 anys, a la base de codi zlib 1.2.11 actual. Per unificar l'accés a zlib, s'han afegit al nucli les funcions comprimir, comprimir2 i descomprimir. El codi que assegura el funcionament del protocol PPP des del subsistema netgraph s'ha transferit per utilitzar la implementació del sistema de zlib, en lloc de la seva pròpia edició d'aquesta biblioteca. Els subsistemes kern_ctf.c, opencryptodeflate, geom_uzip, subr_compressor també s'han transferit al nou zlib.
      if_mxge, bxe actualitzat i ng_deflate;

    • S'està desenvolupant una nova interfície del nucli sysctlinfo, que permet trobar elements a la base de dades de paràmetres sysctl, processats en forma de MIB (Management Information Base), i transferir informació sobre objectes a l'espai d'usuari.
  • Безопасность
    • Mòdul del nucli desenvolupat mac_ipacl, basat en el TrustedBSD MAC Framework i que implementa un sistema de control d'accés per a la configuració de la pila de xarxa per a entorns de presó. Per exemple, amb mac_ipacl, un administrador del sistema amfitrió pot evitar que l'usuari root en un entorn de presó canviï o estableixi les adreces IP o la configuració de la subxarxa per a determinades interfícies de xarxa. Sistema de control d'accés obligatori proposat permet establir llistes d'adreces IP i subxarxes permeses per a la presó, prohibir la instal·lació de determinades IP i subxarxes a la presó o limitar el canvi de paràmetres només per a determinades interfícies de xarxa;
    • Intel va donar un port de pila de programari al projecte TPM 2.0 (Mòdul de plataforma de confiança) per connectar amb el xip informàtic segur, que s'utilitza normalment per a la càrrega verificada del firmware i del carregador d'arrencada del sistema operatiu. Els components de la pila es presenten en forma de ports security/tpm2-tss, security/tpm2-tools i security/tpm2-abrmd. El port tpm2-tss inclou biblioteques per utilitzar l'API TPM2, tpm2-tools proporciona utilitats de línia d'ordres per realitzar operacions de TPM i tpm2-abrmd conté una implementació de procés en segon pla dels components TPM Access Broker i Resource Manager que multiplexa les sol·licituds de diferents usuaris de TPM. a un únic dispositiu. A més de l'arrencada verificada a FreeBSD, TPM es pot utilitzar per millorar la seguretat de Strongswan IPsec, SSH i TLS mitjançant la realització d'operacions criptogràfiques en un xip separat;
    • El nucli per a l'arquitectura amd64 s'adapta per arrencar utilitzant la tècnica de protecció W^X (escriptura XOR execute), la qual cosa significa que no es pot accedir a les pàgines de memòria simultàniament per escriure i executar (el nucli ara es pot carregar utilitzant pàgines de memòria executables per a les quals escrivint). està prohibit). El nou mètode de protecció del nucli s'inclou a la branca HEAD i s'inclourà a les versions de FreeBSD 13.0 i 12.2;
    • Per a les trucades al sistema mmap i mprotect implementat macro PROT_MAX(), que us permet determinar el conjunt de senyals de restricció d'accés permesos per a més canvis (PROT_READ, PROT_WRITE, PROT_EXEC). Amb PROT_MAX(), un desenvolupador pot prohibir la transferència d'una regió de memòria a la categoria executable o sol·licitar memòria que no permet l'execució, però que després es pot convertir a executable. Per exemple, una regió de memòria pot estar oberta per escriure només durant la durada de l'enllaç dinàmic o de la generació de codi JIT, però un cop completada l'escriptura, només es limita a llegir i executar, i en el futur, si es veu compromès, l'atacant no podrà habilitar l'escriptura per a aquest bloc de memòria. A més de PROT_MAX(), també s'implementa sysctl vm.imply_prot_max, que quan s'activa, determina el conjunt de senyaladors vàlids en funció dels paràmetres inicials de la primera crida a mmap;
    • Per millorar la protecció contra l'explotació de vulnerabilitats, a més de la tècnica d'aleatorització de l'espai d'adreces (ASLR), un mecanisme per aleatoritzar els desplaçaments dels punters que s'adrecen al marc de la pila inicial i les estructures col·locades a la pila amb informació sobre l'entorn, els paràmetres de llançament del programa i les dades. per a imatges executables en format ELF es proposa;
    • S'ha treballat per eliminar la funció d'obtenció no segura de libc (a partir de l'estàndard C11, aquesta funció s'ha exclòs de l'especificació) i per corregir els ports que encara utilitzen aquesta funció. Es preveu que el canvi s'ofereixi a FreeBSD 13.0;
    • S'ha llançat un projecte experimental per crear eines per orquestrar entorns de presó basats en el framework olla per crear i exportar imatges, implementat de manera similar a Docker, i un controlador nòmada, que proporciona una interfície per llançar aplicacions dinàmicament en un entorn de presó. El model proposat ens permet separar els processos de creació d'entorns presó i de desplegament d'aplicacions en ells. Un dels objectius del projecte és proporcionar un mitjà per manipular les presons com a contenidors a l'estil Docker;
  • Sistemes d'emmagatzematge i fitxers
    • De NetBSD a la utilitat "makefs". mogut Suport del sistema de fitxers FAT (msdosfs). Els canvis preparats us permeten crear imatges FS amb FAT sense utilitzar el controlador md i sense autoritat root;
    • S'ha completat la reelaboració del controlador del subsistema FUSE (File system in USErspace), que permet la creació d'implementacions del sistema de fitxers a l'espai d'usuari. El controlador que es va enviar originalment contenia molts errors i es basava en FUSE 7.8, que es va publicar fa 11 anys. Com a part del projecte de modernització del controlador, s'ha implementat suport per al protocol FUSE 7.23, s'ha afegit codi per comprovar els drets d'accés al costat del nucli (“-o default_permissions”), s'han afegit trucades a VOP_MKNOD, VOP_BMAP i VOP_ADVLOCK, s'ha proporcionat la possibilitat d'interrompre les operacions de FUSE, s'ha afegit suport per a canonades sense nom i endolls Unix a fusefs, es va fer possible utilitzar kqueue per a /dev/fuse, es va poder actualitzar els paràmetres de muntatge mitjançant "mount -u", suport afegit per exportar fusefs mitjançant NFS, va implementar la comptabilitat RLIMIT_FSIZE, va afegir els indicadors FOPEN_KEEP_CACHE i FUSE_ASYNC_READ, va fer optimitzacions significatives de rendiment i va millorar l'organització de la memòria cau. El nou controlador s'inclou a les branques head i stable/12 (incloses a FreeBSD 12.1);
    • La implementació de NFSv4.2 (RFC-7862) per a FreeBSD està gairebé completada. El focus principal durant el període de l'informe va ser la prova. S'han completat les proves per comprovar la compatibilitat amb la implementació de Linux, però les proves del servidor pNFS amb NFSv4.2 encara estan en curs. En general, el codi ja es considera llest per a la integració a les branques actuals/cap de FreeBSD. La nova versió de NFS afegeix suport per a les funcions posix_fadvise, posix_fallocate, els modes SEEKHOLE/SEEKDATA a lseek, l'operació de còpia local de parts d'un fitxer al servidor (sense transferir al client);
  • Suport de maquinari
    • S'ha llançat un projecte per millorar el rendiment de FreeBSD als portàtils. El primer dispositiu que es va auditar per al suport de maquinari a FreeBSD va ser el portàtil Lenovo X1 Carbon de setena generació;
    • CheriBSD, una bifurcació de FreeBSD per a l'arquitectura de processadors de recerca CHERI (Instruccions RISC de capacitat de maquinari millorada), actualitzada per donar suport al proper processador ARM Morello, que donarà suport al sistema de control d'accés a la memòria CHERI basat en el model de seguretat del disseny Capsicum. Xip de morello estan planejant llançament el 2021. Els desenvolupadors de CheriBSD també continuen supervisant el desenvolupament del prototip de referència CHERI basat en l'arquitectura MIPS;
    • Suport ampliat per als xips RockChip RK3399 utilitzats a les plaques RockPro64 i NanoPC-T4. La millora més significativa va ser el suport per a eMMC i el desenvolupament d'un nou controlador per al controlador eMMC utilitzat a la placa;
    • Es continua treballant per implementar el suport per a ARM64 SoC Broadcom BCM5871X amb processadors ARMv8 Cortex-A57, destinats a l'ús en encaminadors, passarel·les i emmagatzematge de xarxa. Durant el període d'informe
      S'ha ampliat el suport iProc PCIe i s'ha afegit la possibilitat d'utilitzar operacions criptogràfiques de maquinari per accelerar IPsec.
      La integració del codi a la branca HEAD està prevista per al quart trimestre;

    • Hi ha hagut avenços significatius en el desenvolupament d'un port FreeBSD per a la plataforma powerpc64. L'objectiu és oferir un rendiment de qualitat en sistemes amb processadors IBM POWER8 i POWER9, però opcionalment admet el funcionament en Apple Power Macs més antics, x500 i Amiga A1222. La branca powerpc*/12 continua enviant-se amb gcc 4.2.1 i la branca powerpc*/13 es migrarà a llvm90 aviat. Dels 33306 ports, 30514 s'han muntat correctament;
    • La portabilitat FreeBSD continua per al SoC NXP LS64A de 1046 bits basat en el processador ARMv8 Cortex-A72 amb un motor d'acceleració de processament de paquets de xarxa integrat, Ethernet de 10 Gb, PCIe 3.0, SATA 3.0 i USB 3.0. Durant el període d'informe, es va implementar el suport per a la interfície de xarxa USB 3.0, SD/MMC, I2C, DPAA i GPIO. Hi ha plans per donar suport a QSPI i optimitzar el rendiment de la interfície de xarxa. Es preveu la finalització dels treballs i la inclusió a la delegació de HEAD el 4t trimestre de 2019;
    • El controlador ena s'ha actualitzat per donar suport a la segona generació d'adaptadors de xarxa ENAv2 (Elastic Network Adapter) utilitzats a la infraestructura d'Elastic Compute Cloud (EC2) per organitzar la comunicació entre nodes EC2 a velocitats de fins a 25 Gb/s. S'ha afegit i provat el suport NETMAP al controlador ena i la disposició de la memòria s'ha adaptat per habilitar el mode LLQ als entorns Amazon EC2 A1;
  • Aplicacions i sistema portuari
    • Components de la pila de gràfics actualitzats i ports relacionats amb xorg. Els ports que utilitzen USE_XORG i XORG_CAT s'han mogut al marc USES en lloc de cridar a bsd.xorg.mk a través de bsd.port.mk. Aquests ports ara inclouen el senyalador "USES=xorg" als seus fitxers de creació. La funcionalitat XORG_CAT s'ha separat de bsd.xorg.mk i ara està habilitada per la marca "USES=xorg-cat". S'han afegit eines per generar directament ports xorg des d'un repositori git
      freedesktop.org, que, per exemple, us permet crear ports per a versions encara no publicades. En el futur, tenim previst preparar eines per utilitzar el sistema d'assemblatge mesó en lloc d'autotools per crear ports xorg.

      S'ha treballat per netejar els ports xorg antics vinculats a components que ja no són compatibles, per exemple, el port x11/libXp s'ha eliminat i els ports x11/Xxf86misc, x11-fonts/libXfontcache i graphics/libGLw han quedat obsolets. ;

    • S'ha treballat per millorar la compatibilitat amb Java 11 i versions més recents a FreeBSD, així com per portar alguns canvis a la branca de Java 8. Després d'haver implementat el suport per a noves funcions de Java 11 com ara Java Flight Recorder, HotSpot Serviceability Agent, HotSpot Debugger. per a FreeBSD, DTrace, Javac Server, Java Sound i SCTP, el treball es va canviar per assegurar-se que totes les proves de compatibilitat passaven. S'ha reduït de 50 a 2 el nombre de falles en superar les proves;
    • L'escriptori KDE Plasma, KDE Frameworks, les aplicacions KDE i Qt es mantenen actualitzats i actualitzats amb les últimes versions;
    • Ports amb l'escriptori Xfce actualitzats per al seu llançament 4.14;
    • L'arbre de ports de FreeBSD ha superat els 38000 ports, el nombre de PR no tancats és lleugerament superior a 2000, dels quals 400 PR encara no s'han resolt. Durant el període d'informe, es van fer 7340 canvis de 169 desenvolupadors. Dos nous participants (Santhosh Raju i Dmitri Goutnik) van rebre drets de committer. S'ha publicat una nova versió del gestor de paquets pkg 1.12, amb suport per a superposicions a l'arbre de ports i neteja de bsd.sites.mk. Entre les actualitzacions de versions importants als ports hi ha: 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;
    • El desenvolupament del projecte continua ClonOS, desenvolupament una distribució especialitzada per desplegar la infraestructura de servidors virtuals. Pel que fa a les tasques que resol, ClonOS s'assembla a sistemes com Proxmox, Triton (Joyent), OpenStack, OpenNebula i Amazon AWS, la principal diferència entre les quals és l'ús de FreeBSD i la capacitat de gestionar, desplegar i gestionar els contenidors de la presó de FreeBSD i entorns virtuals basats en hipervisors Bhyve i Xen. Els canvis recents inclouen el suport
      cloud-init per a VM Linux/BSD i cloudbase-init per a VM Windows, començant la transició a l'ús d'imatges natives, utilitzant Jenkins CI per provar les compilacions i un nou dipòsit de paquets per a la instal·lació
      ClonOS dels paquets.

Font: opennet.ru

Afegeix comentari