มีการเรียกแฮ็คที่น่าเกลียดภายในเคอร์เนล Linux ที่อยู่ในสายหลักมานานกว่าสามปีแล้ว เนื่องจากเซิร์ฟเวอร์ X.Org แบบบั๊ก/xf86-video-modesetting DDX เคอร์เนลของ Linux จึงกำหนดพฤติกรรมที่แตกต่างกันว่ากระบวนการเริ่มต้นด้วย”X”หรือไม่ และจะปิดใช้งานการสนับสนุนการตั้งค่าโหมดอะตอมมิก
นักวิจัยด้านความปลอดภัยของ Linux Jason Donenfeld (ซึ่งเป็นที่รู้จักกันดีในเรื่องการคิดค้น WireGuard) ได้บังเอิญพบการแฮ็กโค้ดที่น่าเกลียดภายในเคอร์เนล
Donenfeld แสดงความคิดเห็นในสุดสัปดาห์นี้ใน รายชื่อผู้รับจดหมายเคอร์เนล:
การดำเนินการนี้จะคืนค่า 26b1d3b527e7 (“drm/atomic: Take the atomic toys away from X”) ซึ่งเป็น kludge ที่เหมือนรูทคิตที่ไม่มีธุรกิจอยู่ภายในเคอร์เนลวัตถุประสงค์ทั่วไป เป็นประเภทของแฮ็กการดีบักที่ฉันจะใช้ชั่วขณะแต่ไม่เคยคอมมิต หรือเป็นกลลวงมัลแวร์ที่ซ่อนมัลแวร์
เบื้องหลังคือโค้ด userspace บางตัว–xorg-server–มี DDX ของ modesetting ซึ่งไม่ได้เข้ารหัสอย่างถูกต้อง เมื่อไม่มีใครต้องการรักษา X11 อีกต่อไป แทนที่จะแก้ไขรหัสบั๊ก เคอร์เนลจึงถูกปรับเพื่อหลีกเลี่ยงไม่ให้ต้องสัมผัส X11 คนเกียจคร้าน แต่ยุติธรรมเพียงพอ: หากเคอร์เนลไม่ต้องการรองรับ API ของ userspace อีกต่อไป สิ่งที่ต้องทำคือจัดเตรียมทางเลือกสำรองที่สวยงามซึ่ง userspace คิดว่าไม่พร้อมใช้งานในลักษณะที่สามารถจัดการได้
อย่างไรก็ตาม *วิธี* ที่ทำนั้นเป็นเพียงการตรวจสอบ `current->comm[0]==’X’` และปิดการใช้งานสำหรับกรณีนั้นเท่านั้น นั่นหมายความว่า *ไม่ใช่* เป็นเพียงเรื่องของเคอร์เนลที่ไม่ต้องการรองรับ API ผู้ใช้เฉพาะอีกต่อไป แต่เป็นเคอร์เนลที่ไม่ต้องการรองรับเซิร์ฟเวอร์ xorg ในทางทฤษฎี แต่จริงๆ แล้ว กลับกลายเป็นว่า นั่นคือกระบวนการทั้งหมดที่ ขึ้นต้นด้วย’X’
การเล่นเกมด้วยกระแส->การสื่อสารแบบนี้เห็นได้ชัดว่าผิด และค่อนข้างน่าตกใจที่สิ่งนี้เคยเกิดขึ้น
The commit กับเคอร์เนลนี้ด้วยการตรวจสอบอักขระ”X”ตัวแรกในเดือนกันยายน 2019 อาร์กิวเมนต์ในเคอร์เนล Linux ที่คอมมิตในขณะนั้นคือ:
The-modesetting ddx มีแนวคิดที่แตกสลายโดยสิ้นเชิงว่าอะตอมทำงานอย่างไร:
-จะไม่ปิดใช้งานตัวเชื่อมต่อเก่า สมมติว่ามีการปิดใช้งานอัตโนมัติเหมือนกับ setcrtc ดั้งเดิม
-ถือว่า ASYNC_FLIP ต่อสายผ่าน สำหรับ atomic ioctl
-ไม่ใช่การเรียก TEST_ONLY เพียงครั้งเดียว[ในคำอื่น ๆ ] การใช้งานคือการแปล 1:1 ของ ioctls ดั้งเดิมเป็น atomic ซึ่ง a) เสีย b) ไม่มีจุดหมาย
เรามีจุดบกพร่องอยู่แล้วทั้งใน i915 และ amdgpu-DC ซึ่งทำให้เราไม่สามารถเปิดใช้งานฟีเจอร์ที่เรียบร้อยได้
ถ้าใครเคยสนใจเกี่ยวกับอะตอมใน X เราสามารถเพิ่มระดับอะตอมใหม่ (req->value==2) เพื่อให้ X ได้ของเล่นที่แวววาวกลับคืนมา
เนื่องจาก-modesetting เวอร์ชันที่ใช้งานไม่ได้เหล่านี้ได้ถูกจัดส่งไปแล้ว จึงไม่มีทางอื่นที่จะหลุดพ้นจากการเชื่อมโยงนี้ได้เลย
ข่าวดีก็คือตั้งแต่นั้นมา ที่ด้านพื้นที่ผู้ใช้ย้อนกลับไปในปี 2019 โค้ด xf86-video-modesetting ดำเนินการต่อไปและปิดใช้งานการสนับสนุนอะตอมมิกตามค่าเริ่มต้น ดังนั้นในทางเทคนิค หากเรียกใช้ X.Org stack ที่อัปเดตภายในสามปีที่ผ่านมา แฮ็คเคอร์เนลนี้ไม่จำเป็นอีกต่อไป เนื่องจากพื้นที่ผู้ใช้เป็นเพียงการหลีกเลี่ยง atomic API
เราจะมาดูกันว่า Linus Torvalds นั้นโอเคหรือไม่กับการแฮ็คนี้จะถูกลบออก เพราะมันขัดกับหลักการของเขาที่”ไม่ทำลายพื้นที่ผู้ใช้”จากนั้นจึงทำการถดถอยระบบหากติดอยู่กับ X.Org Server stack ที่ล้าสมัยและ ต้องการรันด้วยเคอร์เนลเวอร์ชันในอนาคต จะเห็นแต่น่าประหลาดใจที่ต้องใช้เวลาสามปีในการวิพากษ์วิจารณ์โค้ดสกปรกนี้