CVE-2026-93287 in Linuxالمعلومات

الملخص

بحسب VulDB • 25/09/2026

في نواة لينكس، تم إصلاح الثغرة التالية:

i2c: smbus: رفض عمليات نقل الكتل ذات الطول الزائد في المسار المشترك (common path)

يتم التحقق من صحة طول بيانات نقل كتلة SMBus (`data->block[0]`) داخل الدالة `i2c_smbus_xfer_emulated()`، لكن هذا الفحص يحدث متأخراً جداً بالنسبة لنقاط التتبع (tracepoints)، ويتم تخطيه تماماً عندما يوفر المحول (adapter) تنفيذًا أصلياً لـ `smbus_xfer`. يسمح ذلك لطوال كتل ضخمة يتم التحكم فيها من قبل المستخدم بالوصول إلى استدعاءات `memcpy` في نقاط التتبع واستدعاءات السائق دون أي تحقق.

أضف فحصاً مبكراً داخل `__i2c_smbus_xfer()` يرفض عمليات نقل الكتل التي يكون طولها الذي قدمه المتصل صفراً أو يتجاوز الحد الأقصى المحدد بـ `I2C_SMBUS_BLOCK_MAX`، وذلك قبل إطلاق أي نقطة تتبع أو تشغيل استدعاء السائق. يتم ملء `data->block[0]` بواسطة الجهاز أثناء قراءات كتلة SMBus، لذا فإن الفحص مقتصر على العمليات التي يكون الطول فيها مقدمًا فعلياً من قبل المتصل. يتوافق هذا مع اتفاقية `-EINVAL` الموجودة في المسار المحاكي (emulated path) ويحمي جميع المستهلكين اللاحقين دفعة واحدة: نقطة تتبع `smbus_write`، وكل التطبيقات الأصلية لـ `smbus_xfer` الخاصة بالسائقين، والمسار المحاكي.

تم إصلاح ثغرتين مختلفتين بواسطة هذا التغيير:

الثغرة 1: تجاوز خارج الحدود (OOB) في نقطة تتبع smbus_write (include/trace/events/smbus.h) تُطلق الدالة `trace_smbus_write()` قبل أي تحقق وتنسخ `data->block[0]+1` بايتاً إلى مخزن أحداث بحجم 34 بايت. مع قيمة `block[0]=0xfe`، تنسخ نقطة التتبع 255 بايت، مما يتسبب في تجاوز بمقدار 221 بايت.

BUG: KASAN: stack-out-of-bounds in trace_event_raw_event_smbus_write+0x27c/0x530 Read of size 255 at addr ffff88800d98fcf8 by task poc_smbus/91 Call Trace: <TASK> __asan_memcpy+0x23/0x80 trace_event_raw_event_smbus_write+0x27c/0x530 __i2c_smbus_xfer+0x43a/0xa40 i2c_smbus_xfer+0x19e/0x340 i2cdev_ioctl_smbus+0x38f/0x7f0 i2cdev_ioctl+0x35e/0x680 __x64_sys_ioctl+0x147/0x1e0 do_syscall_64+0xcf/0x15a0 entry_SYSCALL_64_after_hwframe+0x76/0x7e </TASK>

الثغرة 2: تجاوز خارج الحدود (OOB) في i2c-stub لـ I2C_SMBUS_I2C_BLOCK_DATA (drivers/i2c/i2c-stub.c) تنفذ الدالة `stub_xfer()` `.smbus_xfer` مباشرة وتقتصر فقط على قيمة `block[0]` مقابل 256 أمراً، وليس ضد الحد الأقصى لـ I2C_SMBUS_BLOCK_MAX. مع قيمتي `block[0]=0xff` و `command=0`، يصل الحلقة إلى `block[1+i]` حيث تصل i إلى 254، وهو ما يتجاوز بكثير اتحاد (union) بحجم 34 بايتاً.

UBSAN: array-index-out-of-bounds in drivers/i2c/i2c-stub.c:223:44 index 34 is out of range for type '__u8 [34]'
Call Trace: <TASK> __ubsan_handle_out_of_bounds+0xd7/0x120 stub_xfer+0x1971/0x198f [i2c_stub]
__i2c_smbus_xfer+0x306/0xa40 i2c_smbus_xfer+0x19e/0x340 i2cdev_ioctl_smbus+0x38f/0x7f0 i2cdev_ioctl+0x35e/0x680 __x64_sys_ioctl+0x147/0x1e0 do_syscall_64+0xcf/0x15a0 entry_SYSCALL_64_after_hwframe+0x76/0x7e </TASK>

تم إعادة إنتاج كلا التتبعين على الإصدار v7.0-rc6+i2c/for-current مع تفعيل KASAN و UBSAN.

If you want to get best quality of vulnerability data, you may have to visit VulDB.

مسؤول

Linux

حجز

17/09/2026

إفشاء

24/09/2026

الاعتدال

تمت الموافقة

إدخال

VDB-409484

EPSS

0.00000

KEV

لا

النشاطات

منخفض جدًا

المصادر

Want to know what is going to be exploited?

We predict KEV entries!