Zhvilluesit e projektit Grsecurity një histori udhëzuese që tregon se si eliminimi i pamenduar i paralajmërimeve të kompilatorit mund të çojë në shfaqjen e cenueshmërive në kod. Në fund të majit, për kernelin Linux u propozua një rregullim për një vektor të ri shfrytëzimi të cenueshmërisë Spectre përmes thirrjes së sistemit ptrace.
Gjatë testimit të patch-it, zhvilluesit vunë re se gjatë kompilimit kompileri shfaqte një paralajmërim për përzierje të kodit dhe përkufizimeve (struktura ishte përcaktuar pas kodit me caktimin e vlerës për një ndryshore ekzistuese):
int index = n;
if (n ptrace_bps[index];
Linus e pranoi në degën e tij master, paralajmërimin duke zhvendosur përkufizimin e ndryshores në bllokun if:
if (n ptrace_bps[index];
Në korrik, rregullimi u portua gjithashtu në degët stabile të kernelit 4.4, 4.9, 4.14, 4.19 dhe 5.2. Mirëmbajtësit e degëve stabile hasën po ashtu në këtë paralajmërim dhe, në vend që të kontrollonin nëse ai ishte eliminuar tashmë në degën master të Linus-it, bënë vetë një rregullim. Problemi është se, pa u menduar shumë, ata thjesht përkufizimin e strukturës më lart, në mënyrë që thirrja e array_index_nospec, e cila siguron drejtpërdrejt mbrojtjen nga cenueshmëria, të mos përdorej më gjatë përcaktimit të strukturës, dhe në vend të ndryshores «index» të përdorej gjithmonë ndryshorja «n»:
int index = n;
if (n ptrace_bps[index];
index = array_index_nospec(index, HBP_NUM);
Burimi: opennet.ru
