Zhvilluesit e projektit Grsecurity një histori mësimore që tregon se si heqja e pa shqetësuar e paralajmërimeve të kompilatorit mund të çojë në shfaqjen e vulnerabiliteteve në kod. Në fund të majit, një korrigjim për një vektor të ri shfrytëzimi të vulnerabilitetit Spectre për kernelin Linux u propozua përmes thirrjes së sistemit ptrace.
Gjatë testimit të patch-it, zhvilluesit vunë re se gjatë ndërtimit kompiliatori lëshonte një paralajmërim për përzierjen e kodit dhe definicioneve (struktura ishte e përcaktuar pas kodit me atribucionin e vlerës një variabli ekzistues):
int index = n;
if (n ptrace_bps[index];
Linus pranoi në degën e tij master, nga paralajmërimi duke e shëmbur definicionin e variablit në bllokun if:
if (n ptrace_bps[index];
Në korrik, korigjimi uportua gjithashtu në degët e stabilizuara të bërthamës 4.4, 4.9, 4.14, 4.19 dhe 5.2. Mbikëqyrësit e degëve të stabilizuara gjithashtu hasën një paralajmërim dhe, në vend që të verifikonin nëse ishte zgjidhur tashmë në degën master të Linusit, e bënë korrigjimin vetë. Problemi është se ata, pa u menduar shumë, thjesht përcaktimin e strukturës më lart, në mënyrë që thirrja array_index_nospec, e cila ofronte mbrojtje nga vulnerabiliteti, të ndalonte së përdoruri gjatë përcaktimit të strukturës, dhe në vend të ndryshores "index", gjithmonë u përdor ndryshorja "n":
int index = n;
if (n ptrace_bps[index];
index = array_index_nospec(index, HBP_NUM);
Burimi: opennet.ru
