การเปิดตัวเคอร์เนล Linux 5.18

หลังจากสองเดือนของการพัฒนา Linus Torvalds ได้เปิดตัว Linux kernel 5.18 การเปลี่ยนแปลงที่โดดเด่นที่สุด ได้แก่ การล้างข้อมูลฟังก์ชันการทำงานที่ล้าสมัยครั้งใหญ่ Reiserfs FS ได้รับการประกาศว่าล้าสมัย กิจกรรมการติดตามกระบวนการของผู้ใช้ถูกใช้งาน มีการเพิ่มการสนับสนุนกลไกในการบล็อกการหาประโยชน์จาก Intel IBT โหมดการตรวจจับบัฟเฟอร์ล้นถูกเปิดใช้งานเมื่อ การใช้ฟังก์ชัน memcpy() มีการเพิ่มกลไกในการติดตามการเรียกใช้ฟังก์ชัน fprobe ประสิทธิภาพของตัวกำหนดเวลางานบน CPU AMD Zen ได้รับการปรับปรุง มีไดรเวอร์สำหรับจัดการฟังก์ชันการทำงานของ Intel CPU (SDS) รวมอยู่ด้วย มีการรวมแพตช์บางส่วนเข้าด้วยกัน สำหรับการปรับโครงสร้างไฟล์ส่วนหัวและได้รับการอนุมัติการใช้มาตรฐาน C11

เวอร์ชันใหม่ประกอบด้วยการแก้ไข 16206 รายการจากนักพัฒนา 2127 คน (ในรุ่นล่าสุดมีการแก้ไข 14203 รายการจากนักพัฒนา 1995 คน) ขนาดแพตช์คือ 108 MB (การเปลี่ยนแปลงส่งผลกระทบต่อไฟล์ 14235 ไฟล์, เพิ่มโค้ด 1340982 บรรทัด, ลบ 593836 บรรทัด) ประมาณ 44% ของการเปลี่ยนแปลงทั้งหมดที่นำมาใช้ใน 5.18 เกี่ยวข้องกับไดรเวอร์อุปกรณ์ ประมาณ 16% ของการเปลี่ยนแปลงเกี่ยวข้องกับการอัปเดตโค้ดเฉพาะสำหรับสถาปัตยกรรมฮาร์ดแวร์ 11% เกี่ยวข้องกับสแต็กเครือข่าย 3% เกี่ยวข้องกับระบบไฟล์ และ 3% เกี่ยวข้องกับระบบย่อยเคอร์เนลภายใน

นวัตกรรมที่สำคัญในเคอร์เนล 5.18:

  • ระบบย่อยของดิสก์ I/O และระบบไฟล์
    • ระบบไฟล์ Btrfs ได้เพิ่มการสนับสนุนสำหรับการส่งต่อข้อมูลที่บีบอัดเมื่อดำเนินการส่งและรับ ก่อนหน้านี้ เมื่อใช้การส่ง/รับ ฝั่งส่งจะขยายข้อมูลที่จัดเก็บในรูปแบบบีบอัด และฝั่งรับจะบีบอัดข้อมูลใหม่ก่อนที่จะเขียน ในเคอร์เนล 5.18 แอปพลิเคชันพื้นที่ผู้ใช้ที่ใช้การส่ง/รับสายได้รับความสามารถในการส่งข้อมูลที่ถูกบีบอัดโดยไม่ต้องทำการบรรจุใหม่ ฟังก์ชันการทำงานได้รับการติดตั้งด้วยการดำเนินการ ioctl ใหม่ BTRFS_IOC_ENCODED_READ และ BTRFS_IOC_ENCODED_WRITE ซึ่งช่วยให้คุณสามารถอ่านและเขียนข้อมูลในขอบเขตได้โดยตรง

      นอกจากนี้ Btrfs ยังปรับปรุงประสิทธิภาพ fsync เพิ่มความสามารถในการขจัดข้อมูลซ้ำซ้อนและดำเนินการลิงก์ซ้ำ (การโคลนข้อมูลเมตาของไฟล์โดยการสร้างลิงก์ไปยังข้อมูลที่มีอยู่โดยไม่ต้องคัดลอกจริง) สำหรับพื้นที่เก็บข้อมูลทั้งหมด ไม่จำกัดเฉพาะจุดเชื่อมต่อ

    • ในโหมด Direct I/O คุณสามารถเข้าถึงไฟล์ที่เข้ารหัสได้เมื่อ fscrypt ใช้การเข้ารหัสแบบอินไลน์ ซึ่งการดำเนินการเข้ารหัสและถอดรหัสจะดำเนินการโดยตัวควบคุมไดรฟ์แทนที่จะเป็นเคอร์เนล ด้วยการเข้ารหัสเคอร์เนลแบบปกติ การเข้าถึงไฟล์ที่เข้ารหัสโดยใช้ Direct I/O ยังคงเป็นไปไม่ได้ เนื่องจากไฟล์ถูกเข้าถึงโดยผ่านกลไกการบัฟเฟอร์ในเคอร์เนล
    • เซิร์ฟเวอร์ NFS มีการรองรับโปรโตคอล NFSv3 ตามค่าเริ่มต้น ซึ่งตอนนี้ไม่จำเป็นต้องเปิดใช้งานแยกต่างหาก และจะพร้อมใช้งานเมื่อเปิดใช้งาน NFS โดยทั่วไป NFSv3 ถือเป็นเวอร์ชันหลักและได้รับการสนับสนุนเสมอของ NFS และการสนับสนุนสำหรับ NFSv2 อาจยุติลงในอนาคต ประสิทธิภาพของการอ่านเนื้อหาไดเร็กทอรีได้รับการปรับปรุงอย่างมาก
    • ระบบไฟล์ ReiserFS เลิกใช้งานแล้วและคาดว่าจะถูกลบออกในปี 2025 การเลิกใช้งาน ReiserFS จะลดความพยายามที่จำเป็นในการรักษาการเปลี่ยนแปลงทั้งระบบไฟล์ที่เกี่ยวข้องกับการรองรับ API ใหม่สำหรับการติดตั้ง iomap และ tomes
    • สำหรับระบบไฟล์ F2FS ความสามารถในการแมป ID ผู้ใช้ของระบบไฟล์ที่เมาท์ได้ถูกนำมาใช้ ซึ่งใช้เพื่อเปรียบเทียบไฟล์ของผู้ใช้เฉพาะบนพาร์ติชันต่างประเทศที่เมาท์กับผู้ใช้อื่นบนระบบปัจจุบัน
    • รหัสสำหรับการคำนวณสถิติในตัวจัดการ Device-mapper ได้รับการปรับปรุงใหม่ ซึ่งปรับปรุงความแม่นยำของการบัญชีในตัวจัดการเช่น dm-crypt อย่างมาก
    • ขณะนี้อุปกรณ์ NVMe รองรับการตรวจสอบความถูกต้อง 64 บิตสำหรับการตรวจสอบความสมบูรณ์
    • สำหรับระบบไฟล์ exfat มีการเสนอตัวเลือกการเมานต์ใหม่ "keep_last_dots" ซึ่งจะปิดใช้งานการล้างจุดที่ท้ายชื่อไฟล์ (ใน Windows จุดที่ท้ายชื่อไฟล์จะถูกลบออกตามค่าเริ่มต้น)
    • EXT4 ปรับปรุงประสิทธิภาพของโหมด fast_commit และเพิ่มความสามารถในการปรับขนาด ตัวเลือกการเมานต์ "mb_optimize_scan" ซึ่งช่วยให้เพิ่มประสิทธิภาพในสภาวะที่มีการกระจายตัวของระบบไฟล์ขนาดใหญ่ ได้รับการปรับให้ทำงานกับไฟล์ที่มีส่วนขยาย
    • การสนับสนุนการเขียนสตรีมในระบบย่อยที่รองรับอุปกรณ์บล็อกถูกยกเลิกแล้ว คุณลักษณะนี้ถูกนำเสนอสำหรับ SSD แต่ไม่แพร่หลาย และขณะนี้ไม่มีอุปกรณ์ที่ใช้งานที่รองรับโหมดนี้ และไม่น่าจะปรากฏในอนาคต
  • บริการหน่วยความจำและระบบ
    • การรวมชุดแพตช์ได้เริ่มขึ้นแล้ว ซึ่งช่วยลดเวลาในการสร้างเคอร์เนลใหม่ได้อย่างมากด้วยการปรับโครงสร้างลำดับชั้นของไฟล์ส่วนหัวใหม่ และลดจำนวนการพึ่งพาข้ามกัน Kernel 5.18 มีแพตช์ที่ปรับโครงสร้างของไฟล์ส่วนหัวของตัวกำหนดเวลางานให้เหมาะสม (เคอร์เนล/กำหนดเวลา) เมื่อเทียบกับรุ่นก่อนหน้า การใช้เวลา CPU เมื่อประกอบเคอร์เนล/กำหนดเวลา/โค้ดลดลง 61% และเวลาจริงลดลง 3.9% (จาก 2.95 เป็น 2.84 วินาที)
    • รหัสเคอร์เนลได้รับอนุญาตให้ใช้มาตรฐาน C11 ซึ่งเผยแพร่ในปี 2011 ก่อนหน้านี้ โค้ดที่เพิ่มลงในเคอร์เนลต้องเป็นไปตามข้อกำหนด ANSI C (C89) ซึ่งก่อตั้งขึ้นเมื่อปี 1989 ในสคริปต์การสร้างเคอร์เนล 5.18 ตัวเลือก '—std=gnu89' จะถูกแทนที่ด้วย '—std=gnu11 -Wno-shift-negative-value' มีการพิจารณาความเป็นไปได้ในการใช้มาตรฐาน C17 แต่ในกรณีนี้ จำเป็นต้องเพิ่มเวอร์ชันขั้นต่ำที่รองรับของ GCC ในขณะที่การรวมการรองรับ C11 เข้ากับข้อกำหนดปัจจุบันสำหรับเวอร์ชัน GCC (5.1)
    • ปรับปรุงประสิทธิภาพการกำหนดเวลางานบนโปรเซสเซอร์ AMD ด้วยสถาปัตยกรรมไมโคร Zen ซึ่งมี Last Level Cache (LLC) หลายรายการสำหรับแต่ละโหนดที่มีช่องหน่วยความจำภายใน เวอร์ชันใหม่ขจัดความไม่สมดุลของ LLC ระหว่างโหนด NUMA ซึ่งทำให้ประสิทธิภาพเพิ่มขึ้นอย่างมากสำหรับภาระงานบางประเภท
    • มีการขยายเครื่องมือสำหรับการติดตามแอปพลิเคชันในพื้นที่ผู้ใช้ เคอร์เนลเวอร์ชันใหม่เพิ่มความสามารถสำหรับกระบวนการผู้ใช้ในการสร้างเหตุการณ์ผู้ใช้และเขียนข้อมูลลงในบัฟเฟอร์การติดตาม ซึ่งสามารถดูได้ผ่านยูทิลิตี้การติดตามเคอร์เนลมาตรฐาน เช่น ftrace และ perf เหตุการณ์การติดตามพื้นที่ผู้ใช้จะถูกแยกออกจากเหตุการณ์การติดตามเคอร์เนล สถานะเหตุการณ์สามารถดูได้ผ่านไฟล์ /sys/kernel/debug/tracing/user_events_status และการลงทะเบียนเหตุการณ์และการบันทึกข้อมูลผ่านไฟล์ /sys/kernel/debug/tracing/user_events_data
    • เพิ่มกลไกสำหรับการติดตามการเรียกใช้ฟังก์ชัน (โพรบ) - fprobe fprobe API ขึ้นอยู่กับ ftrace แต่ถูกจำกัดโดยความสามารถในการแนบตัวจัดการการเรียกกลับเข้ากับจุดเข้าใช้งานและจุดออกของฟังก์ชันเท่านั้น ต่างจาก kprobes และ kretprobes ตรงที่กลไกใหม่อนุญาตให้คุณใช้ตัวจัดการตัวเดียวสำหรับหลายฟังก์ชันในคราวเดียว
    • การสนับสนุนโปรเซสเซอร์ ARM รุ่นเก่า (ARMv4 และ ARMv5) ที่ไม่ได้ติดตั้งหน่วยจัดการหน่วยความจำ (MMU) ถูกยกเลิกแล้ว การรองรับระบบ ARMv7-M ที่ไม่มี MMU ยังคงอยู่
    • การสนับสนุนสถาปัตยกรรม NDS32 ที่คล้ายกับ RISC ที่ใช้ในโปรเซสเซอร์ Andes Technologies ถูกยกเลิกแล้ว รหัสถูกลบออกเนื่องจากขาดการบำรุงรักษาและขาดความต้องการการสนับสนุน NDS32 ในเคอร์เนล Linux หลัก (ผู้ใช้ที่เหลือใช้เคอร์เนลเฉพาะที่สร้างจากผู้ผลิตฮาร์ดแวร์)
    • ตามค่าเริ่มต้น การสร้างเคอร์เนลที่รองรับรูปแบบไฟล์ปฏิบัติการ a.out จะถูกปิดใช้งานสำหรับสถาปัตยกรรม alpha และ m68k ซึ่งยังคงใช้รูปแบบนี้ต่อไป มีแนวโน้มว่าการรองรับรูปแบบ a.out แบบเดิมจะถูกลบออกจากเคอร์เนลในเร็วๆ นี้ มีการพูดคุยถึงแผนการลบรูปแบบ a.out ออกตั้งแต่ปี 2019
    • สถาปัตยกรรม PA-RISC ให้การสนับสนุนน้อยที่สุดสำหรับกลไก vDSO (Virtual Dynamic Shared Objects) ซึ่งมีชุดการเรียกของระบบที่จำกัดในพื้นที่ผู้ใช้โดยไม่มีการสลับบริบท การสนับสนุน vDSO ทำให้สามารถใช้ความสามารถในการรันกับสแต็กที่ไม่สามารถเรียกทำงานได้
    • เพิ่มการรองรับกลไก Intel HFI (Hardware Feedback Interface) ซึ่งช่วยให้ฮาร์ดแวร์สามารถส่งข้อมูลไปยังเคอร์เนลเกี่ยวกับประสิทธิภาพปัจจุบันและประสิทธิภาพการใช้พลังงานของ CPU แต่ละตัว
    • เพิ่มไดรเวอร์สำหรับกลไก Intel SDSi (Software-Defined Silicon) ซึ่งช่วยให้คุณควบคุมการรวมคุณสมบัติเพิ่มเติมในโปรเซสเซอร์ (เช่น คำแนะนำพิเศษและหน่วยความจำแคชเพิ่มเติม) แนวคิดก็คือสามารถจัดหาชิปได้ในราคาที่ต่ำกว่าโดยมีการล็อคฟังก์ชันขั้นสูง ซึ่งสามารถ "ซื้อ" และเปิดใช้งานความสามารถเพิ่มเติมได้โดยไม่ต้องเปลี่ยนฮาร์ดแวร์ของชิป
    • ไดรเวอร์ amd_hsmp ได้รับการเพิ่มเพื่อรองรับอินเทอร์เฟซ AMD HSMP (Host System Management Port) ซึ่งให้การเข้าถึงฟังก์ชันการจัดการโปรเซสเซอร์ผ่านชุดการลงทะเบียนพิเศษที่ปรากฏในโปรเซสเซอร์เซิร์ฟเวอร์ AMD EPYC ที่เริ่มต้นด้วยรุ่น Fam19h ตัวอย่างเช่น ผ่าน HSMP คุณสามารถรับข้อมูลเกี่ยวกับการใช้พลังงานและอุณหภูมิ ตั้งค่าขีดจำกัดความถี่ เปิดใช้งานโหมดการเพิ่มประสิทธิภาพต่างๆ และจัดการพารามิเตอร์หน่วยความจำ
    • อินเทอร์เฟซ I/O แบบอะซิงโครนัส io_uring ใช้ตัวเลือก IORING_SETUP_SUBMIT_ALL เพื่อลงทะเบียนชุดตัวอธิบายไฟล์ในบัฟเฟอร์ริง และการดำเนินการ IORING_OP_MSG_RING เพื่อส่งสัญญาณจากบัฟเฟอร์วงแหวนหนึ่งไปยังบัฟเฟอร์วงแหวนอื่น
    • กลไก DAMOS (แผนการดำเนินงานที่ใช้การตรวจสอบการเข้าถึงข้อมูล) ซึ่งช่วยให้หน่วยความจำถูกปล่อยออกมาโดยคำนึงถึงความถี่ในการเข้าถึงหน่วยความจำ ได้ขยายขีดความสามารถในการตรวจสอบการทำงานของหน่วยความจำจากพื้นที่ผู้ใช้
    • แพตช์ชุดที่สามได้รับการรวมเข้ากับการนำแนวคิดของเพจโฟลิโอมาใช้ ซึ่งคล้ายกับเพจแบบผสม แต่มีการปรับปรุงอรรถศาสตร์และการจัดระเบียบงานที่ชัดเจนยิ่งขึ้น การใช้ Tomes ช่วยให้คุณเร่งความเร็วการจัดการหน่วยความจำในระบบย่อยเคอร์เนลบางระบบได้ ในแพตช์ที่นำเสนอ ฟังก์ชันการจัดการหน่วยความจำภายในได้รับการแปลเป็นโฟลิโอ รวมถึงฟังก์ชัน get_user_pages() ในรูปแบบต่างๆ ให้การสนับสนุนสำหรับการสร้างวอลุ่มขนาดใหญ่ในโค้ดแบบอ่านล่วงหน้า
    • ขณะนี้ระบบแอสเซมบลีสนับสนุนตัวแปรสภาพแวดล้อม USERCFLAGS และ USERLDFLAGS ซึ่งคุณสามารถส่งแฟล็กเพิ่มเติมไปยังคอมไพลเลอร์และตัวเชื่อมโยงได้
    • ในระบบย่อย eBPF กลไก BTF (รูปแบบ BPF) ซึ่งจัดเตรียมข้อมูลการตรวจสอบประเภทในรหัสเทียม BPF จัดเตรียมความสามารถในการเพิ่มคำอธิบายประกอบให้กับตัวแปรที่อ้างอิงถึงพื้นที่หน่วยความจำในพื้นที่ผู้ใช้ คำอธิบายประกอบช่วยให้ระบบตรวจสอบรหัส BPF ระบุและตรวจสอบการเข้าถึงหน่วยความจำได้ดีขึ้น
    • มีการเสนอตัวจัดการการจัดสรรหน่วยความจำใหม่สำหรับการจัดเก็บโปรแกรม BPF ที่โหลด ซึ่งช่วยให้การใช้หน่วยความจำมีประสิทธิภาพมากขึ้นในสถานการณ์ที่โหลดโปรแกรม BPF จำนวนมาก
    • มีการเพิ่มแฟล็ก MADV_DONTNEED_LOCKED ในการเรียกระบบ madvise() ซึ่งมีเครื่องมือสำหรับเพิ่มประสิทธิภาพการจัดการหน่วยความจำกระบวนการ ซึ่งช่วยเสริมแฟล็ก MADV_DONTNEED ที่มีอยู่ ซึ่งสามารถแจ้งเคอร์เนลล่วงหน้าเกี่ยวกับการเปิดตัวบล็อกหน่วยความจำที่กำลังจะเกิดขึ้น เช่น ว่าบล็อกนี้ไม่จำเป็นอีกต่อไปและเคอร์เนลสามารถใช้ได้ ต่างจาก MADV_DONTNEED ตรงที่อนุญาตให้ใช้แฟล็ก MADV_DONTNEED_LOCKED สำหรับเพจหน่วยความจำที่ปักหมุดไว้ใน RAM ซึ่งเมื่อเรียก madvise จะถูกไล่ออกโดยไม่เปลี่ยนสถานะที่ปักหมุดไว้ และในกรณีที่มีการเข้าถึงบล็อกและการสร้าง "เพจในภายหลัง ความผิด” จะถูกส่งกลับโดยคงการผูกมัดไว้ นอกจากนี้ การเปลี่ยนแปลงได้ถูกเพิ่มเพื่ออนุญาตให้ใช้ค่าสถานะ MADV_DONTNEED กับเพจหน่วยความจำขนาดใหญ่ใน HugeTLB
  • การจำลองเสมือนและความปลอดภัย
    • สำหรับสถาปัตยกรรม x86 มีการเพิ่มการรองรับกลไกการป้องกันโฟลว์คำสั่ง Intel IBT (Indirect Branch Tracking) ซึ่งป้องกันการใช้เทคนิคการสร้างช่องโหว่โดยใช้เทคนิคการเขียนโปรแกรมแบบ return-Oriented (ROP, Return-Oriented Programming) ซึ่งช่องโหว่ดังกล่าว ถูกสร้างขึ้นในรูปแบบของสายการเรียกที่มีอยู่ในหน่วยความจำของคำสั่งเครื่องที่ลงท้ายด้วยคำสั่งส่งคืนการควบคุม (ตามกฎแล้วสิ่งเหล่านี้คือจุดสิ้นสุดของฟังก์ชัน) สาระสำคัญของวิธีการป้องกันที่นำมาใช้คือการบล็อกการเปลี่ยนทางอ้อมไปยังเนื้อความของฟังก์ชันโดยการเพิ่มคำสั่ง ENDBR พิเศษที่จุดเริ่มต้นของฟังก์ชัน และอนุญาตให้ดำเนินการการเปลี่ยนแปลงทางอ้อมเฉพาะในกรณีที่มีการเปลี่ยนแปลงไปยังคำสั่งนี้ (ทางอ้อม การเรียกผ่าน JMP และ CALL จะต้องอยู่ในคำสั่ง ENDBR เสมอ ซึ่งวางไว้ที่ฟังก์ชันเริ่มต้น)
    • เปิดใช้งานการตรวจสอบขอบเขตบัฟเฟอร์ที่เข้มงวดยิ่งขึ้นในฟังก์ชัน memcpy(), memmove() และ memset() ซึ่งดำเนินการในเวลาคอมไพล์เมื่อเปิดใช้งานโหมด CONFIG_FORTIFY_SOURCE การเปลี่ยนแปลงที่เพิ่มเข้ามานั้นเกี่ยวข้องกับการตรวจสอบว่าองค์ประกอบของโครงสร้างที่ทราบขนาดนั้นอยู่เกินขอบเขตหรือไม่ มีข้อสังเกตว่าฟีเจอร์ที่นำมาใช้จะอนุญาตให้บล็อกโอเวอร์โฟลว์เคอร์เนลบัฟเฟอร์ที่เกี่ยวข้องกับ memcpy() ทั้งหมดที่ระบุอย่างน้อยในช่วงสามปีที่ผ่านมา
    • เพิ่มส่วนที่สองของโค้ดสำหรับการใช้งานที่อัปเดตของตัวสร้างตัวเลขสุ่มหลอก RDRAND ซึ่งรับผิดชอบการทำงานของอุปกรณ์ /dev/random และ /dev/urandom การใช้งานใหม่นี้มีความโดดเด่นในด้านการรวมการดำเนินการของ /dev/random และ /dev/urandom เพิ่มการป้องกันการปรากฏตัวของรายการที่ซ้ำกันในสตรีมของตัวเลขสุ่มเมื่อเริ่มต้นเครื่องเสมือน และสลับไปใช้ฟังก์ชันแฮช BLAKE2s แทน SHA1 สำหรับ การดำเนินการผสมเอนโทรปี การเปลี่ยนแปลงนี้ปรับปรุงความปลอดภัยของตัวสร้างตัวเลขสุ่มหลอกโดยกำจัดอัลกอริทึม SHA1 ที่เป็นปัญหาและกำจัดการเขียนทับเวกเตอร์การเริ่มต้น RNG เนื่องจากอัลกอริทึม BLAKE2s เหนือกว่า SHA1 ในด้านประสิทธิภาพ การใช้งานจึงส่งผลเชิงบวกต่อประสิทธิภาพด้วย
    • สำหรับสถาปัตยกรรม ARM64 มีการเพิ่มการรองรับอัลกอริธึมการรับรองความถูกต้องของตัวชี้ใหม่ - “QARMA3” ซึ่งเร็วกว่าอัลกอริธึม QARMA ในขณะที่ยังคงรักษาระดับความปลอดภัยที่เหมาะสม เทคโนโลยีนี้ช่วยให้คุณใช้คำสั่งเฉพาะของ ARM64 เพื่อตรวจสอบที่อยู่ผู้ส่งโดยใช้ลายเซ็นดิจิทัลที่จัดเก็บไว้ในบิตบนของตัวชี้ที่ไม่ได้ใช้
    • สำหรับสถาปัตยกรรม ARM64 มีการใช้การสนับสนุนสำหรับการประกอบโดยรวมอยู่ใน GCC 12 ของโหมดการป้องกันจากการเขียนทับที่อยู่ผู้ส่งจากฟังก์ชันในกรณีที่บัฟเฟอร์ล้นบนสแต็ก สาระสำคัญของการป้องกันคือการบันทึกที่อยู่ผู้ส่งไว้ในสแต็ก "เงา" แยกต่างหากหลังจากถ่ายโอนการควบคุมไปยังฟังก์ชันและรับที่อยู่นี้ก่อนออกจากฟังก์ชัน
    • เพิ่มพวงกุญแจใหม่ - “เครื่องจักร” ซึ่งมีคีย์เจ้าของระบบ (MOK, คีย์เจ้าของเครื่อง) ที่รองรับใน shim bootloader คีย์เหล่านี้สามารถใช้เพื่อเซ็นชื่อองค์ประกอบเคอร์เนลแบบดิจิทัลที่โหลดในขั้นตอนหลังการบูต (เช่น โมดูลเคอร์เนล)
    • ลบการสนับสนุนคีย์ส่วนตัวแบบอสมมาตรสำหรับ TPM ซึ่งนำเสนอใน TPM เวอร์ชันเดิม ซึ่งมีปัญหาด้านความปลอดภัยที่ทราบ และไม่ได้รับการนำไปใช้อย่างกว้างขวางในทางปฏิบัติ
    • เพิ่มการป้องกันข้อมูลประเภท size_t จากจำนวนเต็มล้น โค้ดนี้ประกอบด้วยตัวจัดการ size_mul(), size_add() และ size_sub() ซึ่งช่วยให้คุณสามารถคูณ เพิ่ม และลบขนาดด้วยประเภท size_t ได้อย่างปลอดภัย
    • เมื่อสร้างเคอร์เนล จะมีการเปิดใช้งานแฟล็ก “-Warray-bounds” และ “-Wzero-length-bounds” ซึ่งจะแสดงคำเตือนเมื่อดัชนีเกินขอบเขตอาเรย์ และเมื่อใช้อาเรย์ที่มีความยาวเป็นศูนย์
    • อุปกรณ์ virtio-crypto ได้เพิ่มการรองรับการเข้ารหัสโดยใช้อัลกอริทึม RSA
  • ระบบย่อยของเครือข่าย
    • ในการใช้งานบริดจ์เครือข่ายได้มีการเพิ่มการรองรับโหมดการรวมพอร์ต (โหมดล็อค) ซึ่งผู้ใช้สามารถส่งการรับส่งข้อมูลผ่านพอร์ตจากที่อยู่ MAC ที่ได้รับอนุญาตเท่านั้น นอกจากนี้ยังเพิ่มความสามารถในการใช้โครงสร้างต่างๆ เพื่อประเมินสถานะของโปรโตคอล STP (Spanning Tree Protocol) อีกด้วย ก่อนหน้านี้ VLAN สามารถแมปโดยตรงกับ STP (1:1) เท่านั้น โดยแต่ละ VLAN ได้รับการจัดการอย่างเป็นอิสระ เวอร์ชันใหม่เพิ่มพารามิเตอร์ mst_enable เมื่อเปิดใช้งาน สถานะของ VLAN จะถูกควบคุมโดยโมดูล MST (Multiple Spanning Trees) และการโยงของ VLAN สามารถสอดคล้องกับโมเดล M:N
    • ทำงานอย่างต่อเนื่องในการรวมเครื่องมือเข้ากับสแต็กเครือข่ายเพื่อติดตามสาเหตุของการทิ้งแพ็กเก็ต (รหัสเหตุผล) รหัสเหตุผลจะถูกส่งเมื่อหน่วยความจำที่เกี่ยวข้องกับแพ็กเก็ตว่าง และอนุญาตในสถานการณ์ต่างๆ เช่น การละทิ้งแพ็กเก็ตเนื่องจากข้อผิดพลาดของส่วนหัว การตรวจจับการปลอมแปลง rp_filter การตรวจสอบผลรวมไม่ถูกต้อง หน่วยความจำไม่เพียงพอ กฎ IPSec XFRM ถูกทริกเกอร์ หมายเลขลำดับ TCP ที่ไม่ถูกต้อง ฯลฯ
    • เป็นไปได้ที่จะถ่ายโอนแพ็กเก็ตเครือข่ายจากโปรแกรม BPF ที่เรียกใช้จากพื้นที่ผู้ใช้ในโหมด BPF_PROG_RUN ซึ่งโปรแกรม BPF ดำเนินการในเคอร์เนล แต่ส่งคืนผลลัพธ์ไปยังพื้นที่ผู้ใช้ แพ็กเก็ตจะถูกส่งโดยใช้ระบบย่อย XDP (eXpress Data Path) รองรับโหมดการประมวลผลแพ็กเก็ตสด ซึ่งโปรเซสเซอร์ XDP สามารถเปลี่ยนเส้นทางแพ็กเก็ตเครือข่ายได้ทันทีไปยังสแต็กเครือข่ายหรือไปยังอุปกรณ์อื่น ๆ นอกจากนี้ยังสามารถสร้างซอฟต์แวร์กำเนิดการรับส่งข้อมูลภายนอกหรือทดแทนเฟรมเครือข่ายลงในสแต็กเครือข่ายได้
    • สำหรับโปรแกรม BPF ที่แนบมากับกลุ่ม cgroup เครือข่าย มีการเสนอฟังก์ชันตัวช่วยเพื่อตั้งค่าส่งคืนของการเรียกของระบบอย่างชัดเจน ซึ่งทำให้สามารถถ่ายทอดข้อมูลที่ครบถ้วนมากขึ้นเกี่ยวกับสาเหตุของการบล็อกการเรียกของระบบ
    • ระบบย่อย XDP (eXpress Data Path) ได้เพิ่มการรองรับแพ็กเก็ตที่กระจัดกระจายที่วางอยู่ในบัฟเฟอร์หลายตัว ซึ่งช่วยให้คุณประมวลผลเฟรม Jumbo ใน XDP และใช้ TSO/GRO (การถ่ายการแบ่งส่วน TCP/การถ่ายรับทั่วไป) สำหรับ XDP_REDIRECT
    • กระบวนการลบเนมสเปซเครือข่ายได้รับการเร่งความเร็วอย่างมาก ซึ่งเป็นที่ต้องการในระบบขนาดใหญ่บางระบบที่มีปริมาณการรับส่งข้อมูลจำนวนมาก
  • Оборудование
    • ไดรเวอร์ amdgpu ตามค่าเริ่มต้นมีเทคโนโลยีการซิงโครไนซ์แบบปรับตัว FreeSync ซึ่งช่วยให้คุณปรับอัตราการรีเฟรชข้อมูลบนหน้าจอ เพื่อให้มั่นใจว่าภาพที่ราบรื่นและปราศจากการฉีกขาดในขณะที่เล่นเกมและดูวิดีโอ การรองรับ GPU ของ Aldebaran ได้รับการประกาศว่าเสถียร
    • ไดรเวอร์ i915 เพิ่มการรองรับชิป Intel Alderlake N และการ์ดกราฟิกแยก Intel DG2-G12 (Arc Alchemist)
    • ไดรเวอร์ Nouveau ให้การสนับสนุนบิตเรตที่สูงขึ้นสำหรับอินเทอร์เฟซ DP/eDP และรองรับส่วนขยายสายเคเบิล lttprs (Link-Training Tunable PHY Repeaters)
    • ในระบบย่อย drm (Direct Rendering Manager) ในไดรเวอร์ armada, exynos, gma500, hyperv, imx, ingenic, mcde, mediatek, msm, omap, rcar-du, rockchip, sprd, sti, tegra, tilcdc, xen และ vc4 รองรับพารามิเตอร์ ได้รับการเพิ่ม nomodeset ซึ่งช่วยให้คุณสามารถปิดใช้งานการสลับโหมดวิดีโอในระดับเคอร์เนลและการใช้เครื่องมือเร่งความเร็วในการเรนเดอร์ฮาร์ดแวร์ เหลือเพียงฟังก์ชันการทำงานที่เกี่ยวข้องกับบัฟเฟอร์เฟรมของระบบ
    • เพิ่มการรองรับ ARM SoС Qualcomm Snapdragon 625/632 (ใช้ในสมาร์ทโฟน LG Nexus 5X และ Fairphone FP3), Samsung Exynos 850, Samsung Exynos 7885 (ใช้ใน Samsung Galaxy A8), Airoha (Mediatek/EcoNet) EN7523, Mediatek mt6582 (Prestigio PMT5008 แท็บเล็ต 3G), Microchip Lan966, Renesas RZ/G2LC, RZ/V2L, Tesla FSD, TI K3/AM62 และ i.MXRTxxxx
    • เพิ่มการรองรับอุปกรณ์และบอร์ด ARM จาก Broadcom (Raspberry Pi Zero 2 W), Qualcomm (Google Herobrine R1 Chromebook, SHIFT6mq, Samsung Galaxy Book2), Rockchip (Pine64 PineNote, Bananapi-R2-Pro, STM32 Emtrion emSBS, Samsung Galaxy Tab S , แท็บเล็ต Prestigio PMT5008 3G), Allwinner (A20-Marsboard), Amlogic (Amediatek X96-AIR, CYX A95XF3-AIR, Haochuangy H96-Max, Amlogic AQ222 และ OSMC Vero 4K+), Aspeed (Quanta S6Q, ASRock ROMED8HM3), Marvell MVEBU / Armada (Ctera C200 V1 และ V2 NAS), Mstar (DongShanPiOne, Miyoo Mini), NXP i.MX (Protonic PRT8MM, emCON-MX8M Mini, Toradex Verdin, Gateworks GW7903)
    • เพิ่มการรองรับระบบเสียงและตัวแปลงสัญญาณ AMD PDM, Atmel PDMC, Awinic AW8738, i.MX TLV320AIC31xx, Intel CS35L41, ESSX8336, Mediatek MT8181, nVidia Tegra234, Qualcomm SC7280, Renesas RZ/V2L, Texas Instruments TAS585M เพิ่มการใช้งานไดรเวอร์เสียงเบื้องต้นสำหรับชิป Intel AVS DSP อัปเดตการรองรับไดรเวอร์สำหรับ Intel ADL และ Tegra234 และทำการเปลี่ยนแปลงเพื่อปรับปรุงการรองรับเสียงบนอุปกรณ์ Dell, HP, Lenovo, ASUS, Samsung และ Clevo

    ในเวลาเดียวกันมูลนิธิซอฟต์แวร์เสรีลาตินอเมริกาได้ก่อตั้งเวอร์ชันของเคอร์เนลฟรี 5.18 - Linux-libre 5.18-gnu ซึ่งล้างองค์ประกอบของเฟิร์มแวร์และไดรเวอร์ที่มีส่วนประกอบหรือส่วนโค้ดที่ไม่ฟรีซึ่งมีขอบเขตจำกัด โดยผู้ผลิต รุ่นใหม่จะล้างไดรเวอร์สำหรับแผง MIPI DBI, VPU Amphion, WiFi MediaTek MT7986 WMAC, Mediatek MT7921U (USB) และ Realtek 8852a/8852c, ชิปเสียง Intel AVS และ Texas Instruments TAS5805M ไฟล์ DTS ได้รับการทำความสะอาดสำหรับ Qualcomm SoC ต่างๆ ด้วยโปรเซสเซอร์ที่ใช้สถาปัตยกรรม AArch64 อัปเดตโค้ดการทำความสะอาดหยดในไดรเวอร์และระบบย่อยของ AMD GPU, MediaTek MT7915, Silicon Labs WF200+ WiFi, Mellanox Spectru Ethernet, Realtek rtw8852c, Qualcomm Q6V5, Wolfson ADSP, MediaTek HCI UART

ที่มา: opennet.ru

เพิ่มความคิดเห็น