Informe de progreso de FreeBSD para o 2019T XNUMX

publicado informe sobre o desenvolvemento do proxecto FreeBSD de xullo a setembro de 2019. Entre os cambios podemos sinalar:

  • Cuestións xerais e sistémicas
    • O equipo Core aprobou en xeral a posibilidade de incluír código no sistema que se distribúe baixo a licenza BSD cun acordo de patente adicional (BSD+Patente), pero a decisión de incluír cada compoñente no sistema baixo esta licenza debe aprobarse por separado;
    • Tivo lugar a primeira reunión do grupo de traballo creado para levar a cabo a migración dos códigos fonte do sistema centralizado de control de fontes Subversion ao sistema descentralizado Git. A discusión sobre a viabilidade da migración aínda está en curso e as decisións sobre moitas cuestións aínda non se desenvolveron (por exemplo, que facer con contrib/, se é necesario rexenerar hash no repositorio git actual e a mellor forma de implementar as probas de compromete);
    • Desde NetBSD portado Kit de ferramentas KCSAN (Kernel Concurrency Sanitizer), que permite detectar as condicións de carreira entre fíos do núcleo que se executan en diferentes CPU;
    • Estase traballando para usar o ensamblador integrado (IAS) de Clang en lugar do ensamblador binutils de GNU;
    • A infraestrutura de emulación do entorno Linux (Linuxulator) está adaptada para traballar na arquitectura ARM64. Implementouse a chamada ao sistema "renameat2". Mellorouse a utilidade strace para diagnosticar problemas nos executables de Linux que se executan no Linuxulator. Resolveuse o problema dos fallos ao ligar ficheiros executables con glibc novo. Actualizáronse os portos con compoñentes Linux para Linuxulator a CentOS 7.7;
    • Como parte do programa Google Summer of Code, os estudantes completaron con éxito seis proxectos: preparouse unha implementación dunha utilidade de ping unificada (IPv4/IPv6), desenvolvéronse ferramentas para probar firewalls e identificar erros no núcleo (Kernel sanitizer), o mac_ipacl. propúxose un módulo, escribiuse código para a compresión da memoria virtual e traballouse para separar o proceso de construción do porto da instalación local;
    • O proxecto para probas fuzzing do núcleo de FreeBSD usando o sistema segue a desenvolverse syzkaller. Durante o período de informe, identificáronse e elimináronse máis de dez erros mediante syzkaller. Para executar syzkaller en máquinas virtuais baseadas en bhyve, dedícase un servidor separado e úsase
      syzbot estableceu probas de varios subsistemas FreeBSD na infraestrutura de Google. Organizou a transferencia de información sobre todos os fallos ao servizo backtrace.io para simplificar a súa agrupación e análise;

    • Estase traballando para actualizar a implementación de zlib a nivel do núcleo.
      O código relacionado coa compresión migrouse de zlib 1.0.4, lanzado hai máis de 20 anos, á base de código zlib 1.2.11 actual. Para unificar o acceso a zlib, engadíronse ao núcleo as funcións comprimir, comprimir2 e descomprimir. O código que garante o funcionamento do protocolo PPP do subsistema netgraph foi transferido para utilizar a implementación do sistema de zlib, en lugar da súa propia edición desta biblioteca. Os subsistemas kern_ctf.c, opencryptodeflate, geom_uzip, subr_compressor tamén foron transferidos ao novo zlib.
      if_mxge, bxe actualizado e ng_deflate;

    • Estase a desenvolver unha nova interface do núcleo sysctlinfo, que permite atopar elementos na base de datos de parámetros sysctl, procesados ​​en forma de MIB (Management Information Base), e transferir información sobre obxectos ao espazo do usuario.
  • Безопасность
    • Módulo kernel desenvolvido mac_ipacl, baseado no TrustedBSD MAC Framework e implementando un sistema de control de acceso para a configuración da pila de rede para contornas de cárcere. Por exemplo, usando mac_ipacl, un administrador do sistema anfitrión pode evitar que o usuario root nun ambiente de cárcere cambie ou configure os enderezos IP ou as opcións de subrede para determinadas interfaces de rede. Sistema de control de acceso obrigatorio proposto permite establecer listas de enderezos IP e subredes permitidas para Jail, prohibir a instalación de determinadas IPs e subredes en Jail ou limitar o cambio de parámetros só para determinadas interfaces de rede;
    • Intel doou un porto de pila de software ao proxecto TPM 2.0 (Módulo de plataforma de confianza) para interactuar co chip informático seguro, que normalmente se usa para a carga verificada do firmware e do cargador de arranque do SO. Os compoñentes da pila preséntanse en forma de ports security/tpm2-tss, security/tpm2-tools e security/tpm2-abrmd. O porto tpm2-tss inclúe bibliotecas para usar a API de TPM2, tpm2-tools ofrece utilidades de liña de comandos para realizar operacións de TPM e tpm2-abrmd contén unha implementación do proceso en segundo plano dos compoñentes de TPM Access Broker e Resource Manager que multiplexa as solicitudes de diferentes usuarios de TPM. a un único dispositivo. Ademais do arranque verificado en FreeBSD, o TPM pódese usar para mellorar a seguridade de Strongswan IPsec, SSH e TLS realizando operacións criptográficas nun chip separado;
    • O núcleo para a arquitectura amd64 está adaptado para arrincar mediante a técnica de protección W^X (escribir XOR executar), o que significa que non se pode acceder simultáneamente ás páxinas de memoria para a escritura e a execución (agora pódese cargar o núcleo usando páxinas de memoria executables para as que se escribe. está prohibido). O novo método de protección do núcleo inclúese na rama HEAD e incluirase nas versións 13.0 e 12.2 de FreeBSD;
    • Para chamadas de sistema mmap e mprotect implementado macro PROT_MAX(), que permite determinar o conxunto de marcas de restrición de acceso permitidas para máis cambios (PROT_READ, PROT_WRITE, PROT_EXEC). Usando PROT_MAX(), un desenvolvedor pode prohibir a transferencia dunha rexión de memoria á categoría executable ou solicitar memoria que non permite a execución, pero que posteriormente pode converterse en executable. Por exemplo, unha rexión de memoria pode estar aberta para escribir só mentres dure a ligazón dinámica ou a xeración de código JIT, pero unha vez completada a escritura, restrinxirase só para ler e executar, e no futuro, se está comprometida, o atacante. non poderá habilitar a escritura para ese bloque de memoria. Ademais de PROT_MAX(), tamén se implementa sysctl vm.imply_prot_max, que cando se activa, determina o conxunto de bandeiras válidas en función dos parámetros iniciais da primeira chamada a mmap;
    • Para mellorar a protección contra a explotación de vulnerabilidades, ademais da técnica de asignación ao azar do espazo de dirección (ASLR), un mecanismo para aleatorizar os desplazamentos dos punteiros que abordan o marco da pila inicial e as estruturas colocadas na pila con información sobre o ambiente, os parámetros de lanzamento do programa e os datos. proponse para imaxes executables en formato ELF;
    • Traballouse para eliminar a función de obtención non segura de libc (a partir do estándar C11, esta función foi excluída da especificación) e para corrixir os portos que aínda usan esta función. Está previsto que o cambio se ofreza en FreeBSD 13.0;
    • Lanzouse un proxecto experimental para crear ferramentas para orquestrar contornas de cárceres baseadas no framework pote para crear e exportar imaxes, implementado de forma similar a Docker, e un controlador nómada, que proporciona unha interface para lanzar aplicacións de forma dinámica nun ambiente de prisión. O modelo proposto permítenos separar os procesos de creación de contornas de cárcere e de implantación de aplicacións neles. Un dos obxectivos do proxecto é proporcionar un medio para manipular os cárceres como contedores ao estilo Docker;
  • Almacenamento e sistemas de ficheiros
    • Desde NetBSD ata a utilidade "makefs". movido Compatibilidade do sistema de ficheiros FAT (msdosfs). Os cambios preparados permítenche crear imaxes FS con FAT sen usar o controlador md e sen autorización de root;
    • Completouse a reelaboración do controlador do subsistema FUSE (File system in USErspace), permitindo a creación de implementacións do sistema de ficheiros no espazo do usuario. O controlador que se enviou orixinalmente contiña moitos erros e estaba baseado en FUSE 7.8, que foi lanzado hai 11 anos. Como parte do proxecto de modernización do controlador, implementouse soporte para o protocolo FUSE 7.23, engadiuse código para comprobar os dereitos de acceso no lado do núcleo ("-o default_permissions"), engadíronse chamadas a VOP_MKNOD, VOP_BMAP e VOP_ADVLOCK, o proporcionouse a capacidade de interromper as operacións de FUSE, engadiuse soporte para tubos sen nome e sockets Unix en fusefs, fíxose posible usar kqueue para /dev/fuse, foi posible actualizar os parámetros de montaxe a través de "mount -u", engadiu soporte. para exportar fusefs a través de NFS, implementou a contabilidade RLIMIT_FSIZE, engadiu as marcas FOPEN_KEEP_CACHE e FUSE_ASYNC_READ, realizou importantes optimizacións de rendemento e mellorou a organización da caché. O novo controlador está incluído nas ramas cabeza e estable/12 (incluída en FreeBSD 12.1);
    • A implementación de NFSv4.2 (RFC-7862) para FreeBSD está case rematada. O foco principal durante o período de informe foi nas probas. Completáronse as probas para verificar a compatibilidade coa implementación de Linux, pero as probas do servidor pNFS con NFSv4.2 aínda están en curso. En xeral, o código xa se considera listo para a súa integración nas ramas xefe/actual de FreeBSD. A nova versión de NFS engade soporte para as funcións posix_fadvise, posix_fallocate, modos SEEKHOLE/SEEKDATA en lseek, a operación de copia local de partes dun ficheiro no servidor (sen transferencia ao cliente);
  • Soporte de hardware
    • Lanzouse un proxecto para mellorar o rendemento de FreeBSD nos portátiles. O primeiro dispositivo que se auditou para compatibilidade de hardware en FreeBSD foi o portátil Lenovo X1 Carbon de sétima xeración;
    • CheriBSD, un fork de FreeBSD para arquitectura de procesadores de investigación CHERI (Instrucións RISC melloradas por hardware de capacidade), actualizada para admitir o próximo procesador ARM Morello, que admitirá o sistema de control de acceso á memoria CHERI baseado no modelo de seguridade do deseño Capsicum. Chip Morello están planificando lanzamento en 2021. Os desenvolvedores de CheriBSD tamén seguen supervisando o desenvolvemento do prototipo de referencia CHERI baseado na arquitectura MIPS;
    • Compatibilidade ampliada para os chips RockChip RK3399 utilizados nas placas RockPro64 e NanoPC-T4. A mellora máis significativa foi o soporte para eMMC e o desenvolvemento dun novo controlador para o controlador eMMC utilizado na placa;
    • Continúa o traballo para implementar soporte para ARM64 SoC Broadcom BCM5871X con procesadores ARMv8 Cortex-A57, destinado ao seu uso en routers, pasarelas e almacenamento de rede. Durante o período de informe
      Ampliouse a compatibilidade con iProc PCIe e engadiuse a posibilidade de utilizar operacións criptográficas de hardware para acelerar IPsec.
      Espérase a integración do código na rama HEAD no cuarto trimestre;

    • Houbo avances significativos no desenvolvemento dun porto FreeBSD para a plataforma powerpc64. O foco está en ofrecer un rendemento de calidade en sistemas con procesadores IBM POWER8 e POWER9, pero opcionalmente admite o funcionamento en Macs Power Mac anteriores, x500 e Amiga A1222 de Apple. A rama powerpc*/12 segue a enviarse con gcc 4.2.1 e a rama powerpc*/13 migrarase a llvm90 en breve. De 33306 portos, 30514 ensamblaron correctamente;
    • A portabilidade FreeBSD continúa para o SoC NXP LS64A de 1046 bits baseado no procesador ARMv8 Cortex-A72 cun motor de aceleración de procesamento de paquetes de rede integrado, Ethernet de 10 Gb, PCIe 3.0, SATA 3.0 e USB 3.0. Durante o período de informe, implementouse o soporte para interfaces de rede USB 3.0, SD/MMC, I2C, DPAA e GPIO. Hai plans para admitir QSPI e optimizar o rendemento da interface de rede. Prevese a finalización dos traballos e a súa inclusión na rama HEAD no 4o trimestre de 2019;
    • Actualizouse o controlador ena para admitir a segunda xeración de adaptadores de rede ENAv2 (adaptador de rede elástico) utilizados na infraestrutura de Elastic Compute Cloud (EC2) para organizar a comunicación entre os nodos EC2 a velocidades de ata 25 Gb/s. Engadiuse e probouse o soporte de NETMAP ao controlador ena e adaptouse a disposición da memoria para habilitar o modo LLQ en ambientes Amazon EC2 A1;
  • Aplicacións e sistema portuario
    • Actualizáronse os compoñentes da pila de gráficos e os portos relacionados con xorg. Os portos que usan USE_XORG e XORG_CAT movéronse ao marco USES en lugar de chamar a bsd.xorg.mk a través de bsd.port.mk. Estes portos inclúen agora a bandeira "USES=xorg" nos seus ficheiros de creación. A funcionalidade XORG_CAT separouse de bsd.xorg.mk e agora está habilitada pola marca "USES=xorg-cat". Ferramentas engadidas para xerar directamente portos xorg desde un repositorio git
      freedesktop.org, que, por exemplo, permite crear portos para versións aínda non publicadas. No futuro, pensamos preparar ferramentas para usar o sistema de ensamblaxe meson en lugar de ferramentas automáticas para construír portos xorg.

      Traballouse para limpar os antigos portos xorg vinculados a compoñentes que xa non son compatibles, por exemplo, eliminouse o porto x11/libXp e os portos x11/Xxf86misc, x11-fonts/libXfontcache e graphics/libGLw quedaron en desuso. ;

    • Traballouse para mellorar a compatibilidade con Java 11 e versións máis recentes en FreeBSD, así como para levar algúns cambios á rama Java 8. Despois do soporte para novas funcións de Java 11 como Java Flight Recorder, HotSpot Serviceability Agent, HotSpot Debugger implementouse para FreeBSD, DTrace, Javac Server, Java Sound e SCTP, o traballo cambiou para garantir que todas as probas de compatibilidade pasasen. O número de fallos ao superar as probas reduciuse de 50 a 2;
    • O escritorio KDE Plasma, KDE Frameworks, KDE Applications e Qt mantéñense actualizados e actualízanse coas últimas versións;
    • Portos con escritorio Xfce actualizados para lanzar 4.14;
    • A árbore de portos de FreeBSD superou os 38000 portos, o número de PR non pechados é lixeiramente superior a 2000, dos cales 400 PR aínda non foron resoltos. Durante o período de informe, realizáronse 7340 cambios de 169 desenvolvedores. Dous novos participantes (Santhosh Raju e Dmitri Goutnik) recibiron dereitos de compromiso. Publicouse unha nova versión do xestor de paquetes pkg 1.12, con soporte para superposicións na árbore de portos e limpeza de bsd.sites.mk. Entre as actualizacións de versións significativas nos portos están: 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;
    • O desenvolvemento do proxecto continúa ClonOS, desenvolvendo unha distribución especializada para a implantación de infraestruturas de servidores virtuais. En canto ás tarefas que resolve, ClonOS aseméllase a sistemas como Proxmox, Triton (Joyent), OpenStack, OpenNebula e Amazon AWS, cuxa principal diferenza é o uso de FreeBSD e a capacidade de xestionar, despregar e xestionar os contedores de FreeBSD Jail e entornos virtuais baseados en hipervisores Bhyve e Xen. Os cambios recentes inclúen soporte
      cloud-init para VM Linux/BSD e cloudbase-init para VM Windows, comezando a transición ao uso de imaxes nativas, usando Jenkins CI para probar compilacións e un novo repositorio de pkg para a instalación
      ClonOS desde paquetes.

Fonte: opennet.ru

Engadir un comentario