ایک ریش فکس کے نتیجے میں لینکس کرنل میں سپیکٹر کے خطرے کے لیے ایک نامکمل حل ہو گیا

Grsecurity پروجیکٹ کے ڈویلپرز مشترکہ ایک احتیاطی کہانی یہ ظاہر کرتی ہے کہ کمپائلر انتباہات کو کس طرح سوچے سمجھے ختم کرنا کوڈ میں کمزوریوں کا باعث بن سکتا ہے۔ مئی کے آخر میں، ptrace سسٹم کال کے ذریعے سپیکٹر کمزوری کے استحصال کے ایک نئے ویکٹر کے لیے لینکس کرنل کے لیے ایک فکس تجویز کیا گیا تھا۔

پیچ کی جانچ کے دوران، ڈویلپرز نے دیکھا کہ تعمیر کرتے وقت، کمپائلر اختلاط کوڈ اور تعریفوں کے بارے میں ایک انتباہ دکھاتا ہے (سٹرکچر کو کوڈ کے بعد بیان کیا گیا تھا، موجودہ متغیر کو قدر تفویض کرتے ہوئے):

int index = n;
اگر (n < HBP_NUM) { index = array_index_nospec(index, HBP_NUM)؛ struct perf_event *bp = تھریڈ->ptrace_bps[انڈیکس]؛

لینس نے قبول کیا۔ اصلاح آپ کی ماسٹر برانچ میں، چھٹکارا حاصل کرنے کے بعد متغیر تعریف کو if بلاک میں منتقل کرکے وارننگ سے:

اگر (n < HBP_NUM) { int index = array_index_nospec(n, HBP_NUM)؛ struct perf_event *bp = تھریڈ->ptrace_bps[انڈیکس]؛

جولائی میں، فکس کو مستحکم کرنل برانچز 4.4، 4.9، 4.14، 4.19 اور 5.2 پر بھی پورٹ کیا گیا تھا۔ مستحکم برانچوں کے مینٹینرز کو بھی انتباہ کا سامنا کرنا پڑا اور، یہ دیکھنے کے بجائے کہ آیا یہ لینس کی ماسٹر برانچ میں پہلے سے ہی ٹھیک ہو چکا ہے، انہوں نے خود ہی ٹھیک کر لیا۔ مسئلہ یہ ہے کہ واقعی اس کے بارے میں سوچے بغیر، وہ صرف چلا گیا ڈھانچے کی وضاحت کرنا، تاکہ array_index_nospec کو کال، جو براہ راست خطرے کے خلاف تحفظ فراہم کرتی ہے، ڈھانچہ کی وضاحت کرتے وقت استعمال نہیں کیا جاتا ہے، اور متغیر "انڈیکس" کی بجائے متغیر "n" ہمیشہ استعمال ہوتا ہے:

int index = n;
اگر (n <HBP_NUM ){ struct perf_event *bp = تھریڈ->ptrace_bps[انڈیکس]؛
index = array_index_nospec(انڈیکس، HBP_NUM)؛

ماخذ: opennet.ru

نیا تبصرہ شامل کریں