หลังจากสองเดือนของการพัฒนา Linus Torvalds ได้เปิดตัวเคอร์เนล Linux 6.9 ท่ามกลางการเปลี่ยนแปลงที่โดดเด่นที่สุด: โมดูล dm-vdo สำหรับการขจัดข้อมูลซ้ำซ้อนและการบีบอัดอุปกรณ์บล็อก, โหมดการเข้าถึงไฟล์โดยตรงใน FUSE, รองรับการสร้าง pidfds สำหรับแต่ละเธรด, กลไกโทเค็น BPF, รองรับ Rust บนระบบ ARM64, การเลิกใช้ Ext2 ระบบไฟล์, ลบไดรเวอร์ NTFS เก่า, รองรับกลไก Intel FRED
เวอร์ชันใหม่ประกอบด้วยการแก้ไข 15680 รายการจากนักพัฒนา 2106 ราย ขนาดแพตช์คือ 54 MB (การเปลี่ยนแปลงส่งผลกระทบต่อไฟล์ 11825 ไฟล์ เพิ่มโค้ด 687954 บรรทัด และลบ 225344 บรรทัด) รุ่นล่าสุดมีการแก้ไข 15641 รายการจากนักพัฒนาปี 2018 ขนาดแพตช์คือ 44 MB ประมาณ 42% ของการเปลี่ยนแปลงทั้งหมดที่นำมาใช้ใน 6.9 เกี่ยวข้องกับไดรเวอร์อุปกรณ์ ประมาณ 17% ของการเปลี่ยนแปลงเกี่ยวข้องกับการอัปเดตโค้ดเฉพาะสำหรับสถาปัตยกรรมฮาร์ดแวร์ 13% เกี่ยวข้องกับสแต็กเครือข่าย 7% เกี่ยวข้องกับระบบไฟล์ และ 4% เกี่ยวข้องกับระบบย่อยเคอร์เนลภายใน
นวัตกรรมที่สำคัญในเคอร์เนล 6.9:
- ระบบย่อยของดิสก์ I/O และระบบไฟล์
- มีการเพิ่มตัวจัดการ dm-vdo (เครื่องมือเพิ่มประสิทธิภาพข้อมูลเสมือน) ใหม่ให้กับ Device Mapper (DM) ซึ่งช่วยให้คุณสามารถใช้งานอุปกรณ์บล็อกเสมือนตามอุปกรณ์บล็อกที่มีอยู่ ซึ่งมีความสามารถต่างๆ เช่น การขจัดข้อมูลซ้ำซ้อน การบีบอัดข้อมูล การกำจัด ของบล็อกว่างและเพิ่มขนาดของอุปกรณ์บล็อกตามความจำเป็น (thin provisioning) ความสามารถเหล่านี้ถูกนำไปใช้ในระดับอุปกรณ์บล็อกและไม่ขึ้นอยู่กับระบบไฟล์ที่ใช้ (เช่น การใช้ dm-vdo คุณสามารถรวมข้อมูลที่ซ้ำกันโดยอัตโนมัติและจัดเก็บข้อมูลในรูปแบบที่บีบอัดสำหรับระบบไฟล์ใดก็ได้) รองรับการใช้ dm-vdo สำหรับพื้นที่จัดเก็บฟิสิคัลที่มีขนาดสูงสุด 256TB และการสร้างโลจิคัลวอลุ่มที่มีขนาดสูงสุด 4PB ขอแนะนำให้ใช้ lvm เพื่อจัดการพาร์ติชั่น vdo เทคโนโลยี VDO ได้รับการพัฒนาโดย Permabit และเปิดตัวหลังจาก Red Hat เข้าซื้อกิจการในปี 2017
- ในระบบย่อย FUSE ที่ใช้ในการปรับใช้ระบบไฟล์ในพื้นที่ผู้ใช้ มีการเพิ่มการใช้งานเริ่มต้นของโหมด "ส่งผ่าน" ซึ่งช่วยให้สามารถรับข้อมูลไฟล์ได้โดยตรงที่ระดับเคอร์เนล โดยข้ามกระบวนการที่ทำงานในพื้นที่ผู้ใช้ซึ่งสามารถ ปรับปรุงประสิทธิภาพอย่างมากในบางสถานการณ์ ตัวอย่างเช่น การใช้งาน FUSE ของระบบไฟล์ที่ทำงานในโหมดอ่านอย่างเดียวและจำกัดการเข้าถึงไฟล์สามารถให้บริการเนื้อหาของไฟล์จากระบบไฟล์ต้นทางโดยไม่ต้องถ่ายโอนไปยังกระบวนการ FUSE
- ไดรเวอร์ที่ใช้ระบบไฟล์ Ext2 ถูกย้ายไปยังหมวดหมู่ที่เลิกใช้แล้ว เหตุผลที่ให้ไว้คือไดรเวอร์รองรับตัวนับเวลาไอโหนด 32 บิตเท่านั้น ซึ่งจะล้นในวันที่ 19 มกราคม 2038 แทนที่จะใช้ไดรเวอร์ ext2 ขอเสนอให้ใช้ไดรเวอร์ ext4 ซึ่งรองรับการทำงานกับระบบไฟล์ Ext2 และเข้ากันได้อย่างสมบูรณ์ แต่สามารถใช้การประทับเวลาในพาร์ติชัน ext2 ที่ไม่อยู่ภายใต้ปัญหา 2038 หากระบบไฟล์เป็น สร้างด้วยไอโหนดที่มีขนาดใหญ่กว่า 255 ไบต์ (ในไดรเวอร์ ext2 จะใช้ตัวนับเวลา 32 บิตโดยไม่คำนึงถึงขนาดไอโหนด)
- ไดรเวอร์ระบบไฟล์ NTFS เก่าถูกลบออกและถูกแทนที่ด้วยไดรเวอร์ NTFS5.15 ใหม่ตั้งแต่รีลีส 3 การจัดหาไดรเวอร์สองตัวที่มีการใช้งาน NTFS ในเคอร์เนลถือว่าไม่เหมาะสมโดยคำนึงถึงข้อเท็จจริงที่ว่าไดรเวอร์เก่าไม่ได้รับการอัพเดตมาหลายปีแล้วอยู่ในสถานะน่าเสียดายและสามารถทำงานได้ในโหมดอ่านเท่านั้น
- เพิ่มการสนับสนุนการแมป ID ผู้ใช้ของระบบไฟล์ที่เมาท์เข้ากับระบบไฟล์ Zonefs และ Hugetlbfs ซึ่งใช้เพื่อจับคู่ไฟล์ของผู้ใช้เฉพาะบนพาร์ติชันต่างประเทศที่เมาท์กับผู้ใช้อื่นบนระบบปัจจุบัน
- NFSv4 ช่วยให้ผู้ดูแลระบบสามารถล้างสถานะการเปิดและล็อกไฟล์ได้
- สำหรับระบบไฟล์ Ext4 จะมีการบันทึกเฉพาะการแก้ไขข้อบกพร่องและการอัปเดตการทดสอบ kunit เท่านั้น
- Btrfs ยังคงเปลี่ยนฟังก์ชันเพื่อใช้หน้าโฟลิโอ
- ในระบบไฟล์ XFS งานยังคงใช้ความสามารถในการใช้ยูทิลิตี fsck เพื่อตรวจสอบและแก้ไขปัญหาที่ระบุทางออนไลน์ โดยไม่ต้องยกเลิกการต่อเชื่อมระบบไฟล์
- เพิ่มแฟล็ก RWF_NOAPPEND ให้กับการเรียกระบบ pwritev2() ซึ่งช่วยให้คุณสามารถระบุออฟเซ็ตการเขียนได้ แม้ว่าไฟล์จะเปิดในโหมดต่อท้ายอย่างเดียวก็ตาม
- มีการเพิ่มคำสั่ง ioctl ใหม่: FS_IOC_GETUUID - ส่งคืนตัวระบุ UUID ของระบบไฟล์ที่ระบุ และ FS_IOC_GETFSSYSFSPATH - กำหนดตำแหน่งใน /sys/fs ของระบบไฟล์ที่เมาท์ที่ระบุ
- ระบบไฟล์ efs, qnx4 และ coda ได้รับการแปลงเพื่อใช้ API การเมาต์พาร์ติชันใหม่
- ปรับปรุงการดำเนินการกับไฟล์ที่ทำในโหมดไม่คำนึงถึงขนาดตัวพิมพ์ ปรับปรุงประสิทธิภาพโดยดำเนินการเปรียบเทียบที่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ก่อน และกลับไปใช้การค้นหาที่ไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ ปัญหาในการติดตั้งโอเวอร์เลย์บนไดเร็กทอรีที่ตั้งค่าเป็นไม่สนใจตัวพิมพ์ได้รับการแก้ไขแล้ว
- บริการหน่วยความจำและระบบ
- มีการใช้งานการสนับสนุนสำหรับกลไก Intel FRED (Flexible Return and Event Delivery) ซึ่งสร้างขึ้นเพื่อเพิ่มประสิทธิภาพและความน่าเชื่อถือในการส่งข้อมูลเกี่ยวกับเหตุการณ์ระดับต่ำ เมื่อเปรียบเทียบกับกลไก IDT (Interrupt Descriptor Table) ที่ใช้อยู่ในปัจจุบัน ปรับปรุงประสิทธิภาพและลดเวลาแฝงโดยการส่งคืนเหตุการณ์ผ่านคำสั่งตัวประมวลผล IRET แทนที่จะส่งเหตุการณ์ผ่านตาราง IDT ความน่าเชื่อถือที่เพิ่มขึ้นเกิดขึ้นได้จากการประมวลผลเหตุการณ์ที่มาถึงในเคอร์เนลและบริบทผู้ใช้แยกจากกัน การป้องกันจากการดำเนินการ NMI ที่ซ้อนกัน และการจัดเก็บการลงทะเบียน CPU ที่เกี่ยวข้องกับข้อยกเว้นทั้งหมดในเฟรมสแต็กแบบขยาย
- เพิ่มความสามารถในการเพิ่มประสิทธิภาพการเข้าถึงข้อมูลของแกน CPU แต่ละตัวผ่านการใช้ Named Address Spaces ในโค้ดเคอร์เนล ซึ่งนำไปใช้ใน GCC ในรูปแบบของส่วนขยาย GNU C
- เพิ่มแฟล็ก PIDFD_THREAD ในฟังก์ชัน pidfd_open() ซึ่งช่วยให้สามารถสร้าง pidfds สำหรับแต่ละเธรด แทนที่จะใช้ pidfd ในบริบทของผู้นำกลุ่มเธรดเท่านั้น มีการเสนอการใช้งาน pseudo-FS สำหรับการเข้าถึง pidfd ผ่านระบบไฟล์เสมือน ต่างจากการระบุกระบวนการโดยใช้ pid ตรงที่ pidfd มีความเชื่อมโยงกับกระบวนการเฉพาะและไม่มีการเปลี่ยนแปลง ในขณะที่ PID สามารถเชื่อมโยงกับกระบวนการอื่นได้หลังจากที่กระบวนการปัจจุบันสิ้นสุดลง
- มีการเพิ่มกลไกโทเค็น BPF ให้กับระบบย่อย BPF ซึ่งอนุญาตให้คุณเลือกมอบหมายสิทธิ์การเข้าถึงให้กับการดำเนินการ BPF ที่มีสิทธิพิเศษให้กับโปรแกรมได้ ตัวอย่างเช่น คุณสามารถให้แอปพลิเคชันที่ไม่มีสิทธิ์เข้าถึงระบบย่อย BPF แต่ละระบบโดยไม่ต้องให้สิทธิ์ CAP_BPF แบบเต็ม
- ประเภทหน่วยความจำแบบแบ่งใช้ใหม่ bpf_arena ได้รับการเพิ่มให้กับระบบย่อย BPF ซึ่งกำหนดพื้นที่ที่สามารถแบ่งใช้ระหว่างโปรแกรม BPF และกระบวนการในพื้นที่ผู้ใช้ เพิ่มคำสั่ง may_goto แล้ว ช่วยให้คุณสามารถจัดระเบียบการทำงานของลูปที่ผู้ตรวจสอบสามารถขัดจังหวะได้ เพิ่มความสามารถในการสร้างคุกกี้ TCP SYN โดยพลการจากโปรแกรม BPF และสร้างตัวจัดการ BPF เพื่อต่อสู้กับ SYN Flooding
- การโยกย้ายการเปลี่ยนแปลงอย่างต่อเนื่องจากสาขา Rust-for-Linux ที่เกี่ยวข้องกับการใช้ภาษา Rust เป็นภาษาที่สองสำหรับการพัฒนาไดรเวอร์และโมดูลเคอร์เนล (การสนับสนุน Rust จะไม่ทำงานตามค่าเริ่มต้น และไม่นำไปสู่การรวม Rust ไว้ใน การพึ่งพาแอสเซมบลีที่จำเป็นสำหรับเคอร์เนล) เพิ่มการรองรับการใช้ภาษา Rust เมื่อทำงานบนโปรเซสเซอร์ ARM 64 บิต มีการเปลี่ยนไปใช้รุ่น Rust 1.76 แล้ว เพิ่มมาโคร 'container_of!' แทนที่จะใช้ฟังก์ชัน 'ptr_metadata' ที่ไม่เสถียร จะใช้เมธอด 'byte_sub' ที่เสถียรแทน เพิ่มโมดูล 'เวลา' พร้อมด้วยฟังก์ชันการแปลงเวลา 'msecs_to_jiffies()'
- ความสามารถในการตัดทอนไฟล์ (ftruncate_file) ได้ถูกเพิ่มให้กับระบบย่อย io_uring
- เพิ่มคิวงานประเภทใหม่ WQ_BH (ครึ่งล่างของคิวงาน) สำหรับการเรียกใช้โค้ดแบบอะซิงโครนัสในบริบทของการขัดจังหวะของซอฟต์แวร์ โดยมีวัตถุประสงค์เพื่อใช้แทนงานที่ล้าสมัย
- ระบบย่อยตัวจับเวลาได้รับการออกแบบใหม่อย่างมีนัยสำคัญ โดยมีการปรับปรุงตรรกะสำหรับการเลือกคอร์ CPU ที่ใช้งานอยู่เพื่อดำเนินการตัวจับเวลาที่ทริกเกอร์ เพื่อไม่ให้ปลุกคอร์ที่ไม่ได้ใช้งานออกจากโหมดสลีป
- ความสามารถในการอัปเดตโมเดลการใช้พลังงานหลัก (EM, Energy Model) ในระหว่างการดำเนินการได้ถูกนำมาใช้แล้ว ซึ่งสามารถนำมาใช้ได้ เช่น เพื่อคำนึงถึงผลกระทบของอุณหภูมิในการทำงานต่อประสิทธิภาพการใช้พลังงานของ CPU ประสิทธิภาพของฟังก์ชัน em_cpu_energy() ได้รับการปรับปรุงอย่างมีนัยสำคัญ ซึ่งขณะนี้เร็วขึ้น 1.43 เท่าในการทดสอบบนระบบที่อยู่กับที่ และเร็วขึ้น 4 เท่าในการทดสอบบนบอร์ด RockPi 1.69B
- เพิ่มการรองรับระบบปฏิบัติการที่ใช้สถาปัตยกรรม ARM64 ในโหมด LPA2 พร้อมพื้นที่ที่อยู่เสมือน 52 บิต
- สำหรับระบบ ARM64 มีการรองรับรายการ PTE (Page Table Entry) ที่ต่อเนื่องกัน ซึ่งปรับปรุงประสิทธิภาพโดยการเพิ่มประสิทธิภาพของการใช้ TLB (Translation Lookaside Buffer)
- โปรแกรมปรับปรุงถูกนำมาใช้เพื่อปรับปรุงประสิทธิภาพของระบบย่อยการจัดการหน่วยความจำโดยการลดการเกิดการล็อคที่เกิดขึ้นพร้อมกันใน vmalloc()
- สำหรับสถาปัตยกรรม LoongArch ได้มีการนำกลไกสำหรับการแพตช์เคอร์เนลแบบร้อน (การแพตช์แบบสด) มาใช้ ซึ่งช่วยให้สามารถใช้แพตช์กับเคอร์เนลได้โดยไม่ต้องรีบูตเครื่อง
- สำหรับระบบ RISC-V มีการนำการสนับสนุนมาใช้สำหรับการเรียกระบบ membarrier() ซึ่งช่วยให้มั่นใจได้ว่ามีการติดตั้งอุปสรรคหน่วยความจำสำหรับเธรดที่ทำงานอยู่ในระบบ
- ข้อกำหนดสำหรับเวอร์ชันของ LLVM/Clang ที่สามารถใช้สร้างเคอร์เนลได้ถูกเพิ่มสูงขึ้น ตอนนี้บิลด์ต้องการรีลีส LLVM 13.0.1 เป็นอย่างน้อย (บิลด์ที่รองรับก่อนหน้านี้ใน LLVM 11+)
- กลไก “เหตุการณ์การติดตามผู้ใช้” ซึ่งช่วยให้คุณสามารถสร้างเหตุการณ์การติดตามจากกระบวนการของผู้ใช้เพื่อติดตามกิจกรรมในพื้นที่ผู้ใช้ ได้เพิ่มการรองรับสำหรับการส่งออกข้อมูลเหตุการณ์ในรูปแบบต่างๆ (USER_EVENT_REG_MULTI_FORMAT)
- ความสามารถในการติดตามสถานะของอาร์กิวเมนต์ฟังก์ชันขาเข้าเมื่อมีการเพิ่มฟังก์ชันการติดตามออกจากกลไกการติดตามการเรียกใช้ฟังก์ชัน ขณะนี้ค่าของคำสั่ง return สามารถจับคู่กับอาร์กิวเมนต์ที่ใช้ในการเรียกใช้ฟังก์ชันได้แล้ว
- ยูทิลิตี้ perf ได้เพิ่มการรองรับสำหรับโหมดการรวมเอาต์พุต "คลัสเตอร์" ("perf stat -a —per-cluster") สำหรับการรวมสถิติของทรัพยากรที่ใช้ร่วมกัน ความสามารถในการใช้ไลบรารี libcapstone เพื่อแยกส่วนคำสั่งโปรเซสเซอร์ (“perf script -F disasm”) ได้ถูกนำมาใช้แล้ว การใช้หน่วยความจำได้รับการปรับให้เหมาะสมเมื่อรันคำสั่ง perf report' และ 'perf annotate'
- การจำลองเสมือนและความปลอดภัย
- เพิ่มการป้องกันช่องโหว่ RFDS (Register File Data Sampling) ในโปรเซสเซอร์ Intel Atom ซึ่งช่วยให้คุณสามารถดึงข้อมูลที่เหลือจากไฟล์รีจิสเตอร์ (RF, ไฟล์รีจิสเตอร์) ของโปรเซสเซอร์ซึ่งใช้ในการจัดเก็บเนื้อหาของรีจิสเตอร์ร่วมกันทั้งหมด งานบนแกน CPU เดียวกัน การบล็อกช่องโหว่จำเป็นต้องอัปเดตไมโครโค้ดและใช้คำสั่ง VERW เพื่อล้างเนื้อหาของบัฟเฟอร์ไมโครสถาปัตยกรรมเมื่อกลับจากเคอร์เนลไปยังพื้นที่ผู้ใช้ หากต้องการเปิดใช้งานการป้องกันเมื่อโหลดเคอร์เนล คุณสามารถระบุแฟล็ก “reg_file_data_sampling=on” ได้ ข้อมูลเกี่ยวกับช่องโหว่และการมีอยู่ของไมโครโค้ดที่จำเป็นสำหรับการป้องกันสามารถประเมินได้ในไฟล์ “/sys/devices/system/cpu/vulnerabilities/reg_file_data_sampling”
- เพิ่มการสนับสนุนขั้นพื้นฐานสำหรับการปกป้องระบบแขกโดยใช้ส่วนขยาย AMD SEV-SNP (Secure Nested Paging) ซึ่งช่วยให้การทำงานกับตารางเพจหน่วยความจำแบบซ้อนกันมีความปลอดภัย และป้องกันการโจมตี "undeSErVed" และ "SEVerity" บนโปรเซสเซอร์ AMD EPYC ซึ่งอนุญาตให้ข้ามกลไกการป้องกัน AMD SEV (Secure Encrypted Virtualization) ได้ KVM การเปลี่ยนแปลงที่จำเป็นสำหรับการใช้งาน SNP จะถูกเพิ่มเข้าไปในเวอร์ชัน 6.10
- โมดูลที่ใช้เทคโนโลยี IMA (Integrity Measuring Architecture) และ EVM (Extensed Verification Module) ได้ถูกโอนไปยังเฟรมเวิร์ก LSM (Linux Security Modules) ซึ่งไม่มีการสูญเสียฟังก์ชันการทำงาน ทำให้สามารถลดความซับซ้อนของโค้ดได้อย่างมาก รวมฟังก์ชันการทำงานที่ซ้ำกัน และใช้มาตรฐาน ความสามารถที่มีให้ผ่าน LSM โมดูล IMA ได้รับการออกแบบมาเพื่อตรวจสอบความสมบูรณ์ของส่วนประกอบระบบปฏิบัติการโดยใช้ลายเซ็นดิจิทัลและแฮช โมดูล EVM ช่วยให้คุณสามารถปกป้องคุณลักษณะไฟล์เพิ่มเติม (xattrs) จากการโจมตีที่มีจุดมุ่งหมายเพื่อละเมิดความสมบูรณ์ (EVM จะไม่อนุญาตให้มีการโจมตีแบบออฟไลน์ซึ่งผู้โจมตีสามารถเปลี่ยนข้อมูลเมตาได้ เช่น โดยการบูตจากไดรฟ์ของเขา)
- การเรียกระบบ lsm_list_modules(), lsm_get_self_attr() และ lsm_set_self_attr() ได้รับการออกแบบมาเพื่อแสดงรายการโมดูล LSM ที่โหลด (โมดูลความปลอดภัยของ Linux) และการรับ/ตั้งค่าคุณลักษณะโมดูล LSM ได้รับการออกแบบใหม่เพื่อให้เข้ากันได้มากขึ้นกับสภาพแวดล้อม 32 บิต การเปลี่ยนแปลงนี้ทำลายความเข้ากันได้แบบย้อนหลัง แต่เนื่องจากมีการเพิ่มการเรียกระบบใหม่ในเคอร์เนลรุ่นล่าสุดและยังไม่ได้ใช้ในแอปพลิเคชัน Linus Torvalds จึงถือว่าการเปลี่ยนแปลงนั้นยอมรับได้
- มีความพยายามในการกลับมาใช้กลไก UBSAN (Unknown Behavior Sanitizer) อีกครั้ง ปมของปัญหาคือคอมไพเลอร์จัดการจำนวนเต็มล้นของประเภทที่ลงนามและไม่ได้ลงนามแตกต่างกัน การโอเวอร์โฟลว์ที่ลงชื่อและตัวชี้ถูกจัดประเภทเป็นพฤติกรรมที่ไม่ได้กำหนด ในขณะที่การโอเวอร์โฟลว์ที่ไม่ได้ลงนามจะถูกตัดทอนแบบโมดูโล 2n โดยจะคงไว้เฉพาะบิตลำดับต่ำของผลลัพธ์ ("แบบวนรอบ") และไม่อยู่ภายใต้พฤติกรรมที่ไม่ได้กำหนด เพื่อกำจัดสถานการณ์ที่เกิดพฤติกรรมที่ไม่ได้กำหนดไว้ เคอร์เนลจะถูกสร้างขึ้นด้วยตัวเลือก "-fno-strict-overflow" ซึ่งทำให้มีการใช้ "wrap-around" สำหรับจำนวนเต็มล้นทั้งหมด GCC และ Clang ไม่สามารถวินิจฉัยปัญหาบางอย่างได้อย่างถูกต้องเมื่อใช้แฟล็ก -fno-strict-overflow และการรวม UBSAN มีวัตถุประสงค์เพื่อทำงานร่วมกับนักพัฒนาคอมไพเลอร์เพื่อกำจัดผลบวกลวงและระบุจำนวนเต็มล้นในสถานที่ที่ไม่มีการตรวจสอบที่ชัดเจน
ในการตรวจสอบโอเวอร์โฟลว์ที่เป็นไปได้ เคอร์เนลใช้โครงสร้างเช่น “var + offset < var” (เช่น “if (pgoff + (size > PAGE_SHIFT) < pgoff){..}”) ซึ่งเชื่อมโยงกับชุดประกอบด้วย “ -fno-strict” ตั้งค่าสถานะ -overflow" และไม่ครอบคลุมโค้ดทั้งหมดที่อาจล้นได้ ปัญหาคือเมื่อใช้ UBSAN การตรวจสอบดังกล่าวส่งผลให้เกิดคำเตือนที่ผิดพลาดจำนวนมาก และด้วยเหตุนี้ UBSAN จึงต้องปิดการใช้งานใน 2021 การใช้งานที่อัปเดตแนะนำให้ใช้คำอธิบายประกอบพิเศษ __signed_wrap และ __unsigned_wrap รวมถึงมาโครสำเร็จรูปพร้อมการตรวจสอบ add_would_overflow(a, b) และ add_wrap(a, b) ซึ่งช่วยให้คุณแยกการใช้งานตามตั้งใจของจำนวนเต็มล้นโดยนักพัฒนา จากการเกิดโอเวอร์โฟลว์แบบสุ่มที่อาจนำไปสู่ช่องโหว่ ข้อเสนอสำหรับการปรับปรุงเคอร์เนลที่ครอบคลุมมากขึ้นด้วยการแนะนำคำจำกัดความประเภทเพิ่มเติมถูกปฏิเสธโดย Linus Torvalds
- ระบบย่อยของเครือข่าย
- ในระบบย่อยของเครือข่าย มีการดำเนินการเพื่อลดการเกิดการล็อกที่แข่งขันกัน (“การช่วงชิงการล็อก” ซึ่งเป็นความพยายามที่จะขอรับการล็อกที่ถือโดยเธรดอื่น) ลดการใช้การล็อก RTNL
- เพิ่มความสามารถในการเปิดใช้งานการสนับสนุนการสำรวจซ็อกเก็ตที่ใช้งานอยู่ในบริบทของการเรียก epoll แต่ละรายการ พารามิเตอร์ขนาดพูลและงบประมาณสามารถตั้งค่าแยกจากพารามิเตอร์เริ่มต้นของระบบได้
- ใช้โครงสร้าง net_hotdata เพื่อปรับปรุงประสิทธิภาพของการแคชตัวแปรการกำหนดค่าเครือข่ายที่ใช้บ่อยที่สุด
- MPTCP ได้เพิ่มการสนับสนุนสำหรับการตั้งค่าตัวเลือก TCP_NOTSENT_LOWAT สำหรับซ็อกเก็ต ซึ่งช่วยให้คุณสามารถจำกัดขนาดของบัฟเฟอร์การส่งได้ API สำหรับซ็อกเก็ต MCTP ได้เพิ่มการรองรับรหัสเครือข่าย ทำให้สามารถใช้เครือข่าย MCTP ที่ไม่ทับซ้อนกันหลายเครือข่ายบนโฮสต์เดียวได้
- IPSec เพิ่มการสนับสนุนสำหรับการเปลี่ยนเส้นทางข้อความแสดงข้อผิดพลาด ICMP (RFC 4301)
- มีการเร่งกระบวนการสแกนเส้นทางที่หมดอายุแล้ว
- ปรับปรุงประสิทธิภาพ XDP โดยการหลีกเลี่ยงการจัดสรรหน่วยความจำขนาดใหญ่อย่างจริงจังมากขึ้น
- เพิ่มความสามารถในการแนบข้อมูลเมตากับข้อความ netconsole
- Netfilter อนุญาตให้กำหนดตารางจากพื้นที่ผู้ใช้ที่เชื่อมโยงกับกระบวนการควบคุมพื้นหลัง และจะไม่ถูกลบโดยอัตโนมัติเมื่อแอปพลิเคชันผู้ใช้ยุติลง
- ใน nftables การเพิ่มองค์ประกอบให้กับชุดที่มีช่วงที่ผสานกันได้รับการเร่งให้เร็วขึ้น
- Оборудование
- ในไดรเวอร์ i915 งานยังคงใช้การรองรับชิป Intel LunarLake (Xe 2) ต่อไป มีการเพิ่มตัวระบุ PCI ใหม่สำหรับอุปกรณ์ที่ใช้ชิป Intel Arrow Lake และ Alder Lake N โหมด Fastboot ถูกเปิดใช้งานสำหรับทุกแพลตฟอร์ม เพิ่มการสนับสนุนสำหรับการดีบักเอาต์พุตที่เกี่ยวข้องกับอุปกรณ์แต่ละชิ้น
- ไดรเวอร์ AMDGPU ได้รับการจัดเตรียมเพื่อรองรับ GPU AMD RDNA3.5 และ RDNA4 เพิ่มการรองรับ ATHUB 4.1, LSDMA 7.0, JPEG DPG, IH 7.0, HDP 7.0, VCN 5.0, SMU 13.0.6, NBIO 7.11, SDMA 6.1, MMHUB 3.3, DCN 3.5.1, NBIF 6.3.1, VPE 6.1.1 และ เฟรมเวิร์ก RAS ACA มีการเพิ่มพารามิเตอร์ freesync_video ลงในโมดูลเคอร์เนลเพื่อเปิดใช้งานการสนับสนุนการทดลองเพื่อเพิ่มประสิทธิภาพการสลับโหมดวิดีโอโดยใช้เทคโนโลยีการซิงโครไนซ์แบบปรับตัว FreeSync
- ในไดรเวอร์ Nouveau รหัสควบคุมหน้าจอได้รับการแปลงเพื่อใช้ฟังก์ชัน kmemdup()
- ทำงานอย่างต่อเนื่องกับไดรเวอร์ Xe drm (Direct Rendering Manager) สำหรับ GPU ที่ใช้สถาปัตยกรรม Intel Xe ซึ่งใช้ในการ์ดวิดีโอตระกูล Intel Arc และกราฟิกรวม โดยเริ่มจากโปรเซสเซอร์ Tiger Lake
- เพิ่มไดรเวอร์ DRM สำหรับชิป Mediatek MT8188 VDOSYS1
- การตั้งค่าเคอร์เนลที่เกี่ยวข้องกับระบบย่อยของวิดีโอถูกย้ายไปยังส่วน CONFIG_VIDEO
- เพิ่มการรองรับ ARM64 SoC: Mediatek MT7981B (Filogic 820), MT7988A (Filogic 880), NXP i.MX8DXP, Renesas R8A779G2 (R-Car V4H ES2.0), R8A779H0 (R-Car V4M), TI J722S
- เพิ่มการรองรับบอร์ดและอุปกรณ์ ARM: โทรศัพท์ Android ที่ใช้ชิป Tegra30, รุ่น Chromebook ที่ใช้ Mediatek MT8186, NAS, แท็บเล็ตและเครื่องเล่นเกมที่ใช้ Rockchips RK35xx, บอร์ด White Hawk ที่ใช้ Renesas SoC, บอร์ดที่ใช้ Qualcomm SM8550 (Snapdragon 8 Gen 2), คณะกรรมการประเมิน Apalis, บอร์ดเดี่ยว Sielaff i.MX6, Samsung Galaxy Tab 4 10.1 LTE
- รหัสระบบย่อยเสียง ALSA ได้รับการปรับโครงสร้างใหม่ เพิ่มการรองรับระบบเสียง Microchip SAM9x7, NXP i.MX95 และ Qualcomm WCD939x ไดรเวอร์ SoundWire ได้เพิ่มการรองรับ ASoC ด้วยตัวประมวลผลเสียง AMD ACP 6.3 และมีการใช้โหมด DSPless สำหรับระบบ Intel เพิ่มการรองรับตัวแปลงสัญญาณเสียง Cirrus HD เพิ่มเติม ไดรเวอร์ virtio ได้ปรับปรุงการจัดการอุปกรณ์เสียง
- เพิ่มการรองรับ Marvell Octeon PCI Endpoint NIC VF และคอนโทรลเลอร์อีเธอร์เน็ต Intel E825-C 100G
ในเวลาเดียวกันมูลนิธิซอฟต์แวร์เสรีลาตินอเมริกาได้ก่อตั้งเวอร์ชันของเคอร์เนลฟรี 6.9 - Linux-libre 6.9-gnu ซึ่งล้างองค์ประกอบของเฟิร์มแวร์และไดรเวอร์ที่มีส่วนประกอบหรือส่วนโค้ดที่ไม่ฟรีซึ่งมีขอบเขตจำกัด โดยผู้ผลิต ในรีลีส 6.9 รหัสการทำความสะอาด blob ในไดรเวอร์ amdgpu, ath12k, adreno, btusb และ r8169 ได้รับการอัพเดตแล้ว ไดรเวอร์ ptp_fc3 ใหม่ได้รับการทำความสะอาดแล้ว ทำความสะอาดชื่อหยดในไฟล์ dts (devicetree) สำหรับสถาปัตยกรรม Aarch64 แก้ไขปัญหาในการทำความสะอาดไดรเวอร์ i915 ซึ่งทำให้ค้างระหว่างการเริ่มต้น มีการเปลี่ยนแปลงที่เกี่ยวข้องกับการประมวลผลของ blobs ที่จัดทำเป็นดัมพ์ฐานสิบหก
ที่มา: opennet.ru
