Bản phát hành nhân Linux 5.8

Sau hai tháng phát triển, Linus Torvalds giới thiệu phát hành hạt nhân Linux 5.8. Trong số những thay đổi đáng chú ý nhất: trình phát hiện tình trạng chạy đua KCSAN, cơ chế phổ biến để gửi thông báo đến không gian người dùng, hỗ trợ phần cứng cho mã hóa nội tuyến, cơ chế bảo mật nâng cao cho ARM64, hỗ trợ bộ xử lý Baikal-T1 của Nga, khả năng gắn riêng các phiên bản Procfs , triển khai cơ chế bảo mật Shadow cho ARM64 Call Stack và BTI.

Kernel 5.8 trở thành kernel lớn nhất về số lượng thay đổi của tất cả các kernel trong suốt quá trình tồn tại của dự án. Hơn nữa, những thay đổi không liên quan đến bất kỳ hệ thống con nào mà bao gồm các phần khác nhau của kernel và chủ yếu liên quan đến việc làm lại và làm sạch bên trong. Những thay đổi lớn nhất được nhìn thấy ở trình điều khiển. Phiên bản mới bao gồm 17606 bản sửa lỗi từ 2081 nhà phát triển, ảnh hưởng đến khoảng 20% ​​tất cả các tệp trong kho mã hạt nhân. Kích thước bản vá là 65 MB (các thay đổi ảnh hưởng đến 16180 tệp, 1043240 dòng mã đã được thêm vào, 489854 dòng đã bị xóa). Để so sánh, nhánh 5.7 có 15033 bản sửa lỗi và kích thước bản vá là 39 MB. Khoảng 37% tất cả các thay đổi được giới thiệu trong phiên bản 5.8 có liên quan đến trình điều khiển thiết bị, khoảng 16% thay đổi có liên quan đến việc cập nhật mã dành riêng cho kiến ​​trúc phần cứng, 11% liên quan đến ngăn xếp mạng, 3% liên quan đến hệ thống tệp và 4% có liên quan đến các hệ thống con kernel bên trong.

Chính đổi mới:

  • Ảo hóa và bảo mật
    • Việc tải các mô-đun hạt nhân có các phần có mã trong đó các bit cho phép thực thi và ghi được thiết lập đồng thời được cung cấp. Thay đổi này được thực hiện như một phần của dự án lớn hơn nhằm loại bỏ việc sử dụng các trang bộ nhớ cho phép thực thi và ghi đồng thời trong kernel.
    • Giờ đây, có thể tạo các phiên bản Procfs riêng biệt, cho phép sử dụng nhiều điểm gắn kết Procfs, được gắn với các tùy chọn khác nhau, nhưng phản ánh cùng một không gian tên định danh quy trình (không gian tên pid). Trước đây, tất cả các điểm gắn kết của Procfs chỉ phản ánh một biểu diễn bên trong và bất kỳ thay đổi nào đối với các tham số gắn kết đều ảnh hưởng đến tất cả các điểm gắn kết khác được liên kết với cùng một không gian tên ID tiến trình. Trong số các lĩnh vực có thể có nhu cầu gắn kết với các tùy chọn khác nhau là việc triển khai cách ly nhẹ cho các hệ thống nhúng với khả năng ẩn một số loại quy trình và nút thông tin nhất định trong các quy trình.
    • Hỗ trợ cơ chế đã được triển khai cho nền tảng ARM64
      Ngăn xếp cuộc gọi bóng tối, được trình biên dịch Clang cung cấp để bảo vệ chống ghi đè địa chỉ trả về của hàm trong trường hợp tràn bộ đệm ngăn xếp. Bản chất của việc bảo vệ là lưu địa chỉ trả về vào một ngăn xếp “bóng” riêng biệt sau khi chuyển quyền điều khiển sang một hàm và truy xuất địa chỉ này trước khi thoát khỏi hàm.

    • Hỗ trợ hướng dẫn đã được thêm vào nền tảng ARM64 ARMv8.5-BTI (Chỉ báo mục tiêu nhánh) để bảo vệ việc thực thi các bộ hướng dẫn không được phân nhánh tới. Việc chặn chuyển đổi sang các phần mã tùy ý được triển khai để ngăn chặn việc tạo các tiện ích trong các hoạt động khai thác sử dụng kỹ thuật lập trình hướng trả về (ROP - Lập trình hướng trả về; kẻ tấn công không cố gắng đặt mã của mình vào bộ nhớ mà hoạt động trên các phần đã có sẵn của các lệnh máy kết thúc bằng lệnh điều khiển quay lại, từ đó một chuỗi lệnh gọi được xây dựng để có được chức năng mong muốn).
    • Đã thêm hỗ trợ phần cứng để mã hóa nội tuyến của các thiết bị khối (Mã hóa nội tuyến). Các thiết bị mã hóa nội tuyến thường được tích hợp vào ổ đĩa nhưng được đặt ở vị trí hợp lý giữa bộ nhớ hệ thống và ổ đĩa, mã hóa và giải mã I/O một cách minh bạch dựa trên các khóa do kernel chỉ định và thuật toán mã hóa.
    • Đã thêm tùy chọn dòng lệnh kernel "initrdmem" để cho phép bạn chỉ định địa chỉ bộ nhớ vật lý của initrd khi đặt hình ảnh khởi động ban đầu vào RAM.
    • Đã thêm khả năng mới: CAP_PERFMON để truy cập hệ thống con hoàn hảo và thực hiện giám sát hiệu suất. CAP_BPF, cho phép các hoạt động BPF nhất định (chẳng hạn như tải các chương trình BPF) mà trước đây yêu cầu quyền CAP_SYS_ADMIN (quyền CAP_SYS_ADMIN hiện được chia thành tổ hợp của CAP_BPF, CAP_PERFMON và CAP_NET_ADMIN).
    • Thêm bởi một thiết bị virtio-mem mới cho phép bạn cắm nóng và cắm nóng bộ nhớ vào hệ thống khách.
    • Đã triển khai thu hồi các thao tác ánh xạ trong /dev/mem nếu trình điều khiển thiết bị sử dụng các vùng bộ nhớ chồng chéo.
    • Đã thêm tính năng bảo vệ lỗ hổng CrossTalk/SRBDS, cho phép bạn khôi phục kết quả của một số lệnh nhất định được thực thi trên lõi CPU khác.
  • Dịch vụ bộ nhớ và hệ thống
    • Trong tài liệu xác định các quy tắc định dạng mã, Đã được chấp nhận khuyến nghị về việc sử dụng thuật ngữ bao hàm. Các nhà phát triển không nên sử dụng các kết hợp 'master / Slave' và 'danh sách đen / danh sách trắng', cũng như từ 'nô lệ' một cách riêng biệt. Các khuyến nghị chỉ liên quan đến cách sử dụng mới của các thuật ngữ này. Việc đề cập đến các từ được chỉ định đã tồn tại trong lõi sẽ không bị ảnh hưởng. Trong mã mới, việc sử dụng các thuật ngữ được đánh dấu được cho phép nếu cần để hỗ trợ API và ABI hiển thị trong không gian người dùng, cũng như khi cập nhật mã để hỗ trợ phần cứng hoặc giao thức hiện có có thông số kỹ thuật yêu cầu sử dụng các thuật ngữ nhất định.
    • Bao gồm công cụ gỡ lỗi KCSAN (Kernel Concurrency Sanitizer), được thiết kế để phát hiện động điều kiện cuộc đua bên trong lõi. Việc sử dụng KCSAN được hỗ trợ khi xây dựng trong GCC và Clang, đồng thời yêu cầu các sửa đổi đặc biệt tại thời điểm biên dịch để theo dõi quyền truy cập bộ nhớ (các điểm dừng được sử dụng được kích hoạt khi bộ nhớ được đọc hoặc sửa đổi). Trọng tâm phát triển của KCSAN là ngăn ngừa dương tính giả, khả năng mở rộng và dễ sử dụng.
    • Thêm cơ chế phổ quát gửi thông báo từ kernel đến không gian người dùng. Cơ chế này dựa trên trình điều khiển đường ống tiêu chuẩn và cho phép bạn phân phối hiệu quả các thông báo từ kernel qua các kênh mở trong không gian người dùng. Điểm nhận thông báo là các đường ống được mở ở chế độ đặc biệt và cho phép tích lũy các tin nhắn nhận được từ hạt nhân trong bộ đệm vòng. Việc đọc được thực hiện bằng hàm read() thông thường. Chủ sở hữu kênh xác định nguồn nào trong kernel cần được giám sát và có thể xác định bộ lọc để bỏ qua một số loại thông báo và sự kiện nhất định. Trong số các sự kiện, hiện chỉ hỗ trợ các thao tác với khóa, chẳng hạn như thêm/xóa khóa và thay đổi thuộc tính của chúng. Những sự kiện này được lên kế hoạch để sử dụng trong Gnome.
    • Tiếp tục phát triển chức năng 'pidfd' để giúp xử lý các tình huống sử dụng lại PID (pidfd được liên kết với một quy trình cụ thể và không thay đổi, trong khi PID có thể được liên kết với một quy trình khác sau khi quy trình hiện tại được liên kết với PID đó chấm dứt). Phiên bản mới bổ sung thêm hỗ trợ cho việc sử dụng pidfd để đính kèm một quy trình vào các không gian tên (cho phép chỉ định pidfd khi thực hiện lệnh gọi hệ thống setns). Sử dụng pidfd cho phép bạn kiểm soát việc đính kèm một quy trình vào một số loại không gian tên bằng một lệnh gọi, giảm đáng kể số lượng lệnh gọi hệ thống cần thiết và thực hiện đính kèm ở chế độ nguyên tử (nếu việc đính kèm vào một trong các không gian tên không thành công thì các không gian tên khác sẽ không kết nối) .
    • Đã thêm lệnh gọi hệ thống mới faccessat2(), khác với
      truy cập() một đối số bổ sung với các cờ tuân thủ khuyến nghị POSIX (trước đây các cờ này được mô phỏng trong thư viện C và faccessat2 mới cho phép chúng được triển khai trong kernel).

    • Trong Cgroup thêm cài đặt Memory.swap.high có thể được sử dụng để làm chậm các tác vụ chiếm quá nhiều dung lượng trao đổi.
    • Đến giao diện I/O không đồng bộ io_uring đã thêm hỗ trợ cho lệnh gọi hệ thống tee().
    • Đã thêm cơ chế "Trình lặp BPF, được thiết kế để xuất nội dung của cấu trúc hạt nhân tới không gian người dùng.
    • Cung cấp khả năng sử dụng bộ đệm vòng để trao đổi dữ liệu giữa các chương trình BPF.
    • Vào cơ chế padata, được thiết kế để tổ chức thực thi song song các tác vụ trong kernel, hỗ trợ thêm cho các tác vụ đa luồng với tính năng cân bằng tải.
    • Trong cơ chế pstore, cho phép bạn lưu thông tin gỡ lỗi về nguyên nhân gây ra sự cố trong các vùng bộ nhớ không bị mất giữa các lần khởi động lại, thêm phụ trợ để lưu thông tin để chặn thiết bị.
    • Từ nhánh hạt nhân PREEMPT_RT đã di chuyển thực hiện các khóa cục bộ.
    • Thêm API phân bổ bộ đệm mới (AF_XDP), nhằm đơn giản hóa việc ghi trình điều khiển mạng với sự hỗ trợ XDP (Đường dẫn dữ liệu eXpress).
    • Đối với kiến ​​trúc RISC-V, hỗ trợ gỡ lỗi các thành phần hạt nhân bằng KGDB đã được triển khai.
    • Trước bản phát hành 4.8, các yêu cầu đối với phiên bản GCC có thể được sử dụng để xây dựng kernel đã tăng lên. Trong một trong những phiên bản tiếp theo, nó được lên kế hoạch nâng tiêu chuẩn lên GCC 4.9.
  • Hệ thống con đĩa, I/O và hệ thống tệp
    • Trong Trình ánh xạ thiết bị thêm Trình xử lý dm-ebs (mô phỏng kích thước khối) mới, có thể được sử dụng để mô phỏng kích thước khối logic nhỏ hơn (ví dụ: để mô phỏng các cung 512 byte trên đĩa có kích thước cung 4K).
    • Hệ thống tệp F2FS hiện hỗ trợ nén bằng thuật toán LZO-RLE.
    • Trong dm-crypt thêm hỗ trợ cho các khóa được mã hóa.
    • Btrfs đã cải tiến việc xử lý các thao tác đọc ở chế độ I/O trực tiếp. Khi lắp tăng tốc kiểm tra các phần phụ và thư mục đã xóa mà không có phần gốc.
    • Tham số “nodelete” đã được thêm vào CIFS, cho phép kiểm tra quyền bình thường trên máy chủ nhưng cấm máy khách xóa các tệp hoặc thư mục.
    • Ext4 đã cải thiện khả năng xử lý lỗi ENOSPC khi sử dụng đa luồng. xattr đã thêm hỗ trợ cho không gian tên gnu.* được sử dụng trong GNU Hurd.
    • Đối với Ext4 và XFS, hỗ trợ cho các hoạt động DAX được bật (truy cập trực tiếp vào hệ thống tệp, bỏ qua bộ đệm trang mà không sử dụng cấp thiết bị khối) liên quan đến các tệp và thư mục riêng lẻ.
    • Trong cuộc gọi hệ thống statx() thêm cờ STATX_ATTR_DAX, khi được chỉ định, sẽ truy xuất thông tin bằng công cụ DAX.
    • EXFAT thêm hỗ trợ xác minh khu vực khởi động.
    • Trong FAT được cải thiện chủ động tải các phần tử FS. Thử nghiệm ổ USB 2TB chậm cho thấy thời gian hoàn thành thử nghiệm giảm từ 383 xuống còn 51 giây.
  • Hệ thống con mạng
    • Trong mã điều khiển hoạt động của các cầu nối mạng thêm hỗ trợ giao thức MRP (Giao thức dự phòng phương tiện), cho phép khả năng chịu lỗi bằng cách lặp nhiều bộ chuyển mạch Ethernet.
    • Đến hệ thống điều khiển giao thông (Tc) thêm hành động “cổng” mới, cho phép xác định khoảng thời gian để xử lý và loại bỏ các gói nhất định.
    • Hỗ trợ kiểm tra cáp mạng được kết nối và tự chẩn đoán các thiết bị mạng đã được thêm vào kernel và tiện ích ethtool.
    • Hỗ trợ cho thuật toán MPLS (Chuyển đổi nhãn đa giao thức) đã được thêm vào ngăn xếp IPv6 để định tuyến các gói sử dụng chuyển mạch nhãn đa giao thức (MPLS trước đây được hỗ trợ cho IPv4).
    • Đã thêm hỗ trợ để truyền các gói IKE (Trao đổi khóa Internet) và IPSec qua TCP (RFC 8229) để bỏ qua khả năng chặn UDP.
    • Thêm bởi thiết bị khối mạng rnbd, cho phép bạn tổ chức quyền truy cập từ xa vào thiết bị khối bằng cách sử dụng phương tiện truyền tải RDMA (InfiniBand, RoCE, iWARP) và giao thức RTRS.
    • Trong ngăn xếp TCP thêm hỗ trợ nén phạm vi trong các phản hồi xác nhận có chọn lọc (SACK).
    • Đối với IPv6 thực hiện Hỗ trợ TCP-LD (RFC 6069, Gián đoạn kết nối kéo dài).
  • Оборудование
    • Trình điều khiển i915 DRM cho card màn hình Intel bao gồm hỗ trợ cho chip Intel Tiger Lake (GEN12) theo mặc định. thực hiện khả năng sử dụng hệ thống SAGV (System Agent Geyserville) để tự động điều chỉnh tần số và điện áp tùy thuộc vào mức tiêu thụ điện năng hoặc yêu cầu về hiệu suất.
    • Trình điều khiển amdgpu đã bổ sung hỗ trợ cho định dạng pixel FP16 và khả năng hoạt động với bộ đệm được mã hóa trong bộ nhớ video (TMZ, Vùng bộ nhớ đáng tin cậy).
    • Đã thêm hỗ trợ cho cảm biến nguồn cho bộ xử lý AMD Zen và Zen2, cũng như cảm biến nhiệt độ cho AMD Ryzen 4000 Renoir. Hỗ trợ truy xuất thông tin tiêu thụ điện năng thông qua giao diện được cung cấp cho AMD Zen và Zen2 RAPL (Giới hạn công suất trung bình đang chạy).
    • Đã thêm hỗ trợ cho định dạng sửa đổi NVIDIA vào trình điều khiển Nouveau. Đối với gv100, khả năng sử dụng chế độ quét xen kẽ đã được triển khai. Đã thêm tính năng phát hiện vGPU.
    • Đã thêm hỗ trợ cho GPU Adreno A405, A640 và A650 vào trình điều khiển MSM (Qualcomm).
    • Thêm khung nội bộ để quản lý tài nguyên DRM (Trình quản lý kết xuất trực tiếp).
    • Đã thêm hỗ trợ cho điện thoại thông minh Xiaomi Redmi Note 7 và Samsung Galaxy S2, cũng như máy tính xách tay Elm/Hana Chromebook.
    • Đã thêm trình điều khiển cho màn hình LCD: ASUS TM5P5 NT35596, Starry KR070PE2T, Leadtek LTK050H3146W, Visionox rm69299, Boe tv105wum-nw0.
    • Đã thêm hỗ trợ cho bo mạch và nền tảng ARM Renesas "RZ/G1H", Realtek RTD1195, Realtek RTD1395/RTD1619, Rockchips RK3326, AMLogic S905D, S905X3, S922XH, Olimex A20-OLinuXino-LIME-eMMC, Check Point L-50,
      , Beacon i.MX8m-Mini, Qualcomm SDM660/SDM630, Hộp TV Xnano X5, Stinger96, Beaglebone-AI.

    • Đã thêm hỗ trợ cho bộ xử lý MIPS Loongson-2K (viết tắt Loongson64). Đối với CPU Loongson 3, hỗ trợ ảo hóa bằng bộ ảo hóa KVM đã được thêm vào.
    • Thêm
      hỗ trợ bộ xử lý Baikal-T1 của Nga và hệ thống trên chip dựa trên nó BE-T1000. Bộ xử lý Baikal-T1 chứa hai lõi siêu vô hướng P5600 MIPS 32 r5 hoạt động ở tốc độ 1.2 GHz. Chip chứa L2 cache (1 MB), bộ điều khiển bộ nhớ DDR3-1600 ECC, 1 cổng Ethernet 10Gb, 2 cổng Ethernet 1Gb, bộ điều khiển PCIe Gen.3 x4, 2 cổng SATA 3.0, USB 2.0, GPIO, UART, SPI, I2C. Bộ xử lý cung cấp hỗ trợ phần cứng cho ảo hóa, hướng dẫn SIMD và bộ tăng tốc mật mã phần cứng tích hợp hỗ trợ GOST 28147-89. Con chip này được phát triển bằng bộ xử lý lõi MIPS32 P5600 Warrior được cấp phép từ Imagination Technologies.

Đồng thời, Tổ chức Phần mềm Tự do Mỹ Latinh hình thành
tùy chọn hạt nhân hoàn toàn miễn phí 5.8 - Linux-libre 5.8-gnu, đã xóa các thành phần chương trình cơ sở và trình điều khiển có chứa các thành phần hoặc đoạn mã không tự do, phạm vi của chúng bị giới hạn bởi nhà sản xuất. Bản phát hành mới vô hiệu hóa tính năng tải blob trong trình điều khiển cho Atom ISP Video, MediaTek 7663 USB/7915 PCIe, Realtek 8723DE WiFi, Renesas PCI xHCI, HabanaLabs Gaudi, Bộ chuyển đổi tốc độ lấy mẫu không đồng bộ nâng cao, Bộ khuếch đại loa MAX98390 tích hợp Maxim, Bộ xử lý âm thanh gia đình được kết nối Microsemi ZL38060, và nô lệ I2C EEPROM. Đã cập nhật mã dọn dẹp blob trong GPU Adreno, HabanaLabs Goya, màn hình cảm ứng x86, trình điều khiển và hệ thống con vt6656 và btbcm.

Nguồn: opennet.ru

Thêm một lời nhận xét