Plano ng Linux kernel 5.18 na payagan ang paggamit ng C language standard na C11

Habang tinatalakay ang isang hanay ng mga patch upang ayusin ang mga problemang nauugnay sa Spectre sa naka-link na code ng listahan, naging malinaw na ang problema ay maaaring malutas nang mas maganda kung ang C code na sumusunod sa isang mas bagong bersyon ng pamantayan ay pinapayagan sa kernel. Sa kasalukuyan, ang idinagdag na kernel code ay dapat sumunod sa detalye ng ANSI C (C89), na nabuo noong 1989.

Ang isang problemang nauugnay sa Spectre sa code ay sanhi ng patuloy na paggamit ng isang hiwalay na tinukoy na iterator pagkatapos ng loop-isang macro ay ginagamit upang umulit sa mga elemento ng isang naka-link na listahan, at dahil ang loop iterator ay ipinasa sa macro na iyon, ito ay tinukoy sa labas ng loop mismo at nananatiling magagamit pagkatapos ng loop. Ang paggamit ng pamantayang C99 ay magbibigay-daan sa mga variable ng loop na tukuyin sa isang for() block, na malulutas ang problema nang hindi kinakailangang gumawa ng mga workaround.

Sumang-ayon si Linus Torvalds sa ideya ng pagpapatupad ng suporta para sa mas bagong mga pagtutukoy at iminungkahi na ilipat ang 5.18 kernel upang gamitin ang pamantayang C11, na inilathala noong 2011. Sa panahon ng paunang pagsubok, ang pagpupulong sa GCC at Clang sa bagong mode ay pumasa nang walang mga paglihis. Kung walang mga hindi inaasahang problema na lumitaw sa panahon ng mas masusing pagsubok, ang '--std=gnu5.18' na opsyon sa 89 kernel build script ay papalitan ng '--std=gnu11 -Wno-shift-negative-value'. Ang posibilidad ng paggamit ng pamantayan ng C17 ay isinasaalang-alang din, ngunit sa kasong ito ay kinakailangan upang taasan ang minimum na suportadong bersyon ng GCC. Ang pagsasama ng suporta sa C11 ay umaangkop sa kasalukuyang mga kinakailangan para sa bersyon ng GCC (5.1).

Pinagmulan: opennet.ru

Magdagdag ng komento