Informe de desarrollo de FreeBSD Q2019 XNUMX

publicado Informe sobre el desarrollo del proyecto FreeBSD de julio a septiembre de 2019. Entre los cambios podemos destacar:

  • Preguntas generales y de sistema.
    • El equipo Core ha aprobado en general la posibilidad de incluir código en el sistema que se distribuye bajo la licencia BSD con un acuerdo de patente adicional (BSD+Patente), pero la decisión de incluir cada componente en el sistema bajo esta licencia debe aprobarse por separado;
    • Se llevó a cabo la primera reunión del grupo de trabajo creado para realizar la migración de códigos fuente del sistema de control de fuente centralizado Subversion al sistema descentralizado Git. La discusión sobre la viabilidad de la migración aún está en curso y aún deben tomarse decisiones sobre muchas cuestiones (por ejemplo, qué hacer con contrib/, si es necesario regenerar hashes en el repositorio git actual y cuál es la mejor manera de implementar las pruebas). de confirmaciones);
    • Desde NetBSD portado Kit de herramientas KCSAN (Kernel Concurrency Sanitizer), que le permite detectar condiciones de carrera entre subprocesos del kernel que se ejecutan en diferentes CPU;
    • Se está trabajando para utilizar el ensamblador integrado (IAS) de Clang en lugar del ensamblador GNU binutils;
    • La infraestructura de emulación del entorno Linux (Linuxulator) está adaptada para funcionar sobre la arquitectura ARM64. Implementada la llamada al sistema “renameat2”. La utilidad strace se ha mejorado para diagnosticar problemas en los ejecutables de Linux que se ejecutan en Linuxulator. Se ha resuelto el problema de los fallos al vincular archivos ejecutables con glibc nuevo. Los puertos con componentes de Linux para Linuxulator se actualizaron a CentOS 7.7;
    • Como parte del programa Google Summer of Code, los estudiantes completaron con éxito seis proyectos: se preparó una implementación de una utilidad de ping unificada (IPv4/IPv6), se desarrollaron herramientas para probar firewalls e identificar errores en el kernel (Kernel Sanitizer), mac_ipacl se propuso el módulo, se escribió código para la compresión de memoria virtual y se trabajó para separar el proceso de construcción del puerto de la instalación local;
    • El proyecto para realizar pruebas fuzzing del kernel de FreeBSD utilizando el sistema continúa desarrollándose sizkaller. Durante el período del informe, se identificaron y eliminaron más de diez errores utilizando syzkaller. Para ejecutar syzkaller en máquinas virtuales basadas en bhyve, se dedica un servidor separado y se utiliza
      syzbot ha iniciado pruebas de varios subsistemas de FreeBSD en la infraestructura de Google. Organizó la transferencia de información sobre todas las fallas al servicio backtrace.io para simplificar su agrupación y análisis;

    • Se está trabajando para actualizar la implementación de zlib a nivel del kernel.
      El código relacionado con la compresión se ha migrado desde zlib 1.0.4, lanzado hace más de 20 años, al código base actual zlib 1.2.11. Para unificar el acceso a zlib, se han agregado al kernel las funciones comprimir, comprimir2 y descomprimir. El código que garantiza el funcionamiento del protocolo PPP desde el subsistema netgraph se ha transferido para utilizar la implementación del sistema zlib, en lugar de su propia edición de esta biblioteca. Los subsistemas kern_ctf.c, opencryptodeflate, geom_uzip, subr_compressor también se han transferido al nuevo zlib.
      if_mxge, bxe actualizado y ng_deflate;

    • Se está desarrollando una nueva interfaz del kernel información del sistema, que le permite encontrar elementos en la base de datos de parámetros sysctl, procesados ​​​​en forma de MIB (Base de información de administración) y transferir información sobre objetos al espacio del usuario.
  • seguridad
    • Módulo kernel desarrollado mac_ipacl, basado en TrustedBSD MAC Framework e implementando un sistema de control de acceso para la configuración de la pila de red para entornos carcelarios. Por ejemplo, utilizando mac_ipacl, un administrador del sistema host puede evitar que el usuario raíz en un entorno de cárcel cambie o establezca direcciones IP o configuraciones de subred para ciertas interfaces de red. Sistema de control de acceso obligatorio propuesto permite establecer listas de direcciones IP y subredes permitidas para Jail, prohibir la instalación de ciertas IP y subredes en Jail, o limitar el cambio de parámetros solo para ciertas interfaces de red;
    • Intel donó un puerto de pila de software al proyecto TPM 2.0 (Módulo de plataforma segura) para interactuar con el chip informático seguro, que generalmente se usa para la carga verificada de firmware y cargador de arranque del sistema operativo. Los componentes de la pila se presentan en forma de puertos seguridad/tpm2-tss, seguridad/tpm2-tools y seguridad/tpm2-abrmd. El puerto tpm2-tss incluye bibliotecas para usar la API de TPM2, tpm2-tools proporciona utilidades de línea de comandos para realizar operaciones de TPM y tpm2-abrmd contiene una implementación de proceso en segundo plano de los componentes TPM Access Broker y Resource Manager que multiplexa solicitudes de diferentes usuarios de TPM. a un solo dispositivo. Además del arranque verificado en FreeBSD, TPM se puede utilizar para mejorar la seguridad de Strongswan IPsec, SSH y TLS realizando operaciones criptográficas en un chip separado;
    • El kernel para la arquitectura AMD64 está adaptado para arrancar usando la técnica de protección W^X (escribir XOR ejecutar), lo que significa que no se puede acceder a las páginas de memoria simultáneamente para escribir y ejecutar (el kernel ahora se puede cargar usando páginas de memoria ejecutables para las cuales se escribe). esta prohibido). El nuevo método de protección del kernel está incluido en la rama HEAD y se incluirá en las versiones FreeBSD 13.0 y 12.2;
    • Para llamadas al sistema mmap y mprotect implementado macro PROT_MAX(), que le permite determinar el conjunto de indicadores de restricción de acceso permitidos para cambios adicionales (PROT_READ, PROT_WRITE, PROT_EXEC). Usando PROT_MAX(), un desarrollador puede prohibir la transferencia de una región de memoria a la categoría ejecutable o solicitar memoria que no permite la ejecución, pero que luego puede convertirse en ejecutable. Por ejemplo, una región de memoria puede estar abierta para escritura solo mientras dure el enlace dinámico o la generación de código JIT, pero una vez que se completa la escritura, está restringida para lectura y ejecución únicamente y, en el futuro, si se ve comprometida, el atacante no podrá habilitar la escritura para ese bloque de memoria. Además de PROT_MAX(), también se implementa sysctl vm.imply_prot_max, que cuando se activa, determina el conjunto de indicadores válidos en función de los parámetros iniciales de la primera llamada a mmap;
    • Para mejorar la protección contra la explotación de vulnerabilidades, además de la técnica de aleatorización del espacio de direcciones (ASLR), se ha creado un mecanismo para aleatorizar los desplazamientos de los punteros que abordan el marco de la pila inicial y las estructuras colocadas en la pila con información sobre el entorno, los parámetros de inicio del programa y los datos. para imágenes ejecutables se propone formato ELF;
    • Se ha trabajado para eliminar la función de obtención insegura de libc (a partir del estándar C11, esta función ha sido excluida de la especificación) y para corregir los puertos que todavía usan esta función. Está previsto que el cambio se ofrezca en FreeBSD 13.0;
    • Se ha lanzado un proyecto experimental para crear herramientas para orquestar entornos carcelarios basados ​​en el marco lata para crear y exportar imágenes, implementado de manera similar a Docker, y un controlador nomad, que proporciona una interfaz para iniciar aplicaciones dinámicamente en un entorno de cárcel. El modelo propuesto nos permite separar los procesos de creación de entornos de cárcel y de implementación de aplicaciones en ellos. Uno de los objetivos del proyecto es proporcionar un medio para manipular cárceles como contenedores estilo Docker;
  • Sistemas de almacenamiento y archivos.
    • De NetBSD a la utilidad "makefs" movido Soporte del sistema de archivos FAT (msdosfs). Los cambios preparados le permiten crear imágenes FS con FAT sin utilizar el controlador md y sin autoridad de root;
    • Se ha completado la reelaboración del controlador del subsistema FUSE (Sistema de archivos en USErspace), lo que permite la creación de implementaciones de sistemas de archivos en el espacio del usuario. El controlador que se envió originalmente contenía muchos errores y estaba basado en FUSE 7.8, que se lanzó hace 11 años. Como parte del proyecto de modernización de controladores, se implementó soporte para el protocolo FUSE 7.23, se agregó código para verificar los derechos de acceso en el lado del kernel (“-o default_permissions”), se agregaron llamadas a VOP_MKNOD, VOP_BMAP y VOP_ADVLOCK, se agregaron Se ha proporcionado la capacidad de interrumpir las operaciones de FUSE, se ha agregado soporte para tuberías sin nombre y sockets Unix en fusefs, se hizo posible usar kqueue para /dev/fuse, fue posible actualizar los parámetros de montaje a través de "mount -u", se agregó soporte para exportar fusefs a través de NFS, implementó la contabilidad RLIMIT_FSIZE, agregó los indicadores FOPEN_KEEP_CACHE y FUSE_ASYNC_READ, realizó importantes optimizaciones de rendimiento y mejoró la organización del almacenamiento en caché. El nuevo controlador está incluido en las ramas head y stable/12 (incluidas en FreeBSD 12.1);
    • La implementación de NFSv4.2 (RFC-7862) para FreeBSD está casi completa. La atención principal durante el período que abarca el informe estuvo en las pruebas. Se han completado pruebas para verificar la compatibilidad con la implementación de Linux, pero las pruebas del servidor pNFS con NFSv4.2 aún están en curso. En general, el código ya se considera listo para la integración en las ramas principales/actuales de FreeBSD. La nueva versión de NFS agrega soporte para las funciones posix_fadvise, posix_fallocate, modos SEEKHOLE/SEEKDATA en lseek, la operación de copia local de partes de un archivo en el servidor (sin transferencia al cliente);
  • Soporte de hardware
    • Se ha lanzado un proyecto para mejorar el rendimiento de FreeBSD en portátiles. El primer dispositivo en ser auditado para soporte de hardware en FreeBSD fue la computadora portátil Lenovo X1 Carbon de séptima generación;
    • CheriBSD, una bifurcación de FreeBSD para arquitectura de procesadores de investigación CHERI (Instrucciones RISC mejoradas de capacidad de hardware), actualizado para admitir el próximo procesador ARM Morello, que admitirá el sistema de control de acceso a memoria CHERI basado en el modelo de seguridad del diseño de Capsicum. chip morello están planeando lanzamiento en 2021. Los desarrolladores de CheriBSD también continúan monitoreando el desarrollo del prototipo de referencia CHERI basado en la arquitectura MIPS;
    • Soporte ampliado para chips RockChip RK3399 utilizados en placas RockPro64 y NanoPC-T4. La mejora más significativa fue la compatibilidad con eMMC y el desarrollo de un nuevo controlador para el controlador eMMC utilizado en la placa;
    • Se continúa trabajando para implementar soporte para el SoC ARM64 Broadcom BCM5871X con procesadores ARMv8 Cortex-A57, orientado a su uso en routers, gateways y almacenamiento en red. Durante el período del informe
      Se ha ampliado el soporte de iProc PCIe y se ha agregado la capacidad de utilizar operaciones criptográficas de hardware para acelerar IPsec.
      Se espera la integración del código en la rama HEAD en el cuarto trimestre;

    • Ha habido avances significativos en el desarrollo de un puerto FreeBSD para la plataforma powerpc64. La atención se centra en proporcionar un rendimiento de calidad en sistemas con procesadores IBM POWER8 y POWER9, pero opcionalmente admite el funcionamiento en Apple Power Macs, x500 y Amiga A1222 más antiguos. La rama powerpc*/12 continúa incluyéndose con gcc 4.2.1 y la rama powerpc*/13 se migrará pronto a llvm90. De 33306 puertos, 30514 se ensamblan con éxito;
    • Continúa la portabilidad de FreeBSD para el SoC NXP LS64A de 1046 bits basado en el procesador ARMv8 Cortex-A72 con un motor de aceleración de procesamiento de paquetes de red integrado, Ethernet de 10 Gb, PCIe 3.0, SATA 3.0 y USB 3.0. Durante el período del informe, se implementó soporte para interfaz de red USB 3.0, SD/MMC, I2C, DPAA y GPIO. Hay planes para admitir QSPI y optimizar el rendimiento de la interfaz de red. Se espera la finalización del trabajo y la inclusión en la sucursal HEAD en el cuarto trimestre de 4;
    • El controlador ena se ha actualizado para admitir la segunda generación de adaptadores de red ENAv2 (Elastic Network Adapter) utilizados en la infraestructura Elastic Compute Cloud (EC2) para organizar la comunicación entre nodos EC2 a velocidades de hasta 25 Gb/s. Se agregó y probó compatibilidad con NETMAP al controlador ena y se adaptó el diseño de la memoria para habilitar el modo LLQ en entornos Amazon EC2 A1;
  • Sistema de aplicaciones y puertos.
    • Componentes de pila de gráficos actualizados y puertos relacionados con xorg. Los puertos que usan USE_XORG y XORG_CAT se han movido al marco USES en lugar de llamar a bsd.xorg.mk a través de bsd.port.mk. Estos puertos ahora incluyen el indicador "USES=xorg" en sus archivos MAKE. La funcionalidad XORG_CAT se ha separado de bsd.xorg.mk y ahora está habilitada por el indicador "USES=xorg-cat". Se agregaron herramientas para generar puertos xorg directamente desde un repositorio git
      freedesktop.org, que, por ejemplo, le permite crear ports para versiones aún no publicadas. En el futuro, planeamos preparar herramientas para usar el sistema de ensamblaje de mesones en lugar de herramientas automáticas para construir puertos xorg.

      Se ha trabajado para limpiar los puertos xorg antiguos vinculados a componentes que ya no son compatibles, por ejemplo, se ha eliminado el puerto x11/libXp y los puertos x11/Xxf86misc, x11-fonts/libXfontcache y Graphics/libGLw han quedado obsoletos. ;

    • Se ha trabajado para mejorar el soporte para Java 11 y versiones más recientes en FreeBSD, así como para trasladar algunos cambios a la rama Java 8. Después de que se implementó el soporte para nuevas funciones de Java 11 como Java Flight Recorder, HotSpot Serviceability Agent y HotSpot Debugger para FreeBSD, DTrace, Javac Server, Java Sound y SCTP, el trabajo se centró en garantizar que todas las pruebas de compatibilidad pasaran. El número de suspensos al superar las pruebas se ha reducido de 50 a 2;
    • El escritorio KDE Plasma, KDE Frameworks, KDE Applications y Qt se mantienen actualizados y actualizados con las últimas versiones;
    • Puertos con escritorio Xfce actualizados para su lanzamiento 4.14;
    • El árbol de ports de FreeBSD ha superado los 38000 ports, el número de PR no cerrados supera ligeramente los 2000, de los cuales 400 PR aún no se han resuelto. Durante el período del informe, 7340 desarrolladores realizaron 169 cambios. Dos nuevos participantes (Santhosh Raju y Dmitri Goutnik) recibieron derechos de comprometido. Se ha publicado una nueva versión del administrador de paquetes pkg 1.12, con soporte para superposiciones en el árbol de puertos y limpieza de bsd.sites.mk. Entre las actualizaciones de versión importantes en los ports se encuentran: 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 desarrollo del proyecto continúa ClonOS, desarrollando una distribución especializada para implementar infraestructura de servidores virtuales. En cuanto a las tareas que resuelve, ClonOS se parece a sistemas como Proxmox, Triton (Joyent), OpenStack, OpenNebula y Amazon AWS, cuya principal diferencia es el uso de FreeBSD y la capacidad de administrar, implementar y administrar contenedores FreeBSD Jail y Entornos virtuales basados ​​en hipervisores Bhyve y Xen. Los cambios recientes incluyen soporte
      cloud-init para Linux/BSD VM y cloudbase-init para Windows VM, comenzando la transición al uso de imágenes nativas, usando Jenkins CI para probar compilaciones y un nuevo repositorio de paquetes para la instalación
      ClonOS de paquetes.

Fuente: opennet.ru

Añadir un comentario