Isang pangit na hack sa loob ng Linux kernel na nasa mainline nang higit sa tatlong taon ay tinawag. Dahil sa isang buggy X.Org Server/xf86-video-modesetting DDX, ang Linux kernel ay nagpapataw ng iba’t ibang pag-uugali sa kung ang isang proseso ay nagsisimula sa”X”at sa turn ay hindi paganahin ang atomic mode-setting na suporta.

Ang tagapagpananaliksik sa seguridad ng Linux na si Jason Donenfeld (na kilala rin sa pagbuo ng WireGuard), ay natisod sa pangit na code hack na ito sa loob ng kernel.

Nagkomento si Donenfeld nitong weekend sa ang kernel mailing list:

Ibinalik nito ang 26b1d3b527e7 (“drm/atomic: Alisin ang mga atomic na laruan mula sa X”), isang rootkit-like na kludge na walang negosyo na nasa loob ng isang kernel ng pangkalahatang layunin. Ito ang uri ng pag-debug ng hack na gagamitin ko saglit ngunit hindi ko gagawin, o isang uri ng pandaraya ng malware ng babbies-first-process-hider.

Ang backstory ay ang ilang userspace code–xorg-server–ay may modesetting DDX na hindi talaga naka-code nang tama. Dahil wala nang gustong magpanatili ng X11, sa halip na ayusin ang buggy code, inayos ang kernel upang maiwasang hawakan ang X11. Nakakainis, ngunit sapat na: kung ayaw nang suportahan ng kernel ang ilang userspace API, ang tamang gawin ay ayusin ang magandang fallback kung saan sa tingin ng userspace ay hindi ito available sa isang napapamahalaang paraan.

Gayunpaman, ang *paraan* na ginagawa nito ay upang suriin lamang ang `current->comm[0]==’X’`, at huwag paganahin ito para lamang sa kasong iyon. Kaya ibig sabihin, ito ay *hindi* lamang isang bagay ng kernel na ayaw na suportahan ang isang partikular na userspace API, ngunit ito ay ang kernel ay hindi gustong suportahan ang xorg-server, sa teorya, ngunit sa totoo lang, ito ay lumiliko, iyon ang lahat ng mga proseso na magsimula sa’X’.

Malinaw na mali ang paglalaro gamit ang kasalukuyang->comm na tulad nito, at nakakagulat na nagawa ito.

Ang commit sa kernel na ito na may”X”na unang character check ay ginawa noong Setyembre 2019. Ang argumento sa Linux kernel commit noong panahong iyon ay:

Ang-modesetting ddx ay may ganap na sirang ideya kung paano gumagana ang atomic:
-hindi pinapagana ang mga lumang connector, sa pag-aakalang na-auto-disable ang mga ito tulad ng sa legacy na setcrtc
-ipinapalagay na ang ASYNC_FLIP ay naka-wire sa pamamagitan ng para sa atomic ioctl
-walang isang tawag sa TEST_ONLY

[Sa madaling salita] ang pagpapatupad ay isang 1:1 na pagsasalin ng legacy ioctls sa atomic, na a) nasira b) walang kabuluhan.

Mayroon na kaming mga bug sa parehong i915 at amdgpu-DC kung saan pinipigilan kami nito na i-enable ang mga maayos na feature.

Kung may sinumang nagmamalasakit sa atomic sa X madali tayong magdagdag ng bagong atomic level (req->value==2) para maibalik ng X ang makintab na mga laruan.

Dahil ang mga sirang bersyon na ito ng-modesetting ay naipadala na, talagang wala nang ibang paraan para makaalis sa pagkakatali na ito.

Ang”mabuting”balita ay mula noon sa gilid ng user-space noong 2019 ang xf86-video-modesetting code ay nagpatuloy at na-disable ang atomic na suporta bilang default. Kaya sa teknikal na paraan kung nagpapatakbo ng na-update na X.Org stack sa loob ng nakaraang tatlong taon, hindi na kailangan ang kernel hack na ito dahil iniiwasan na ng user-space ang atomic API.

Tingnan natin kung okay lang si Linus Torvalds sa pag-aalis ng hack na ito dahil labag ito sa kanyang prinsipyo ng”not breaking user-space”sa pamamagitan ng regressing sa system kung mananatili sa isang lumang X.Org Server stack at gustong tumakbo sa hinaharap na bersyon ng kernel. Makikita natin ngunit nakakagulat na tumagal ng tatlong taon para mapuna ang maruming code na ito.

Categories: IT Info