CVE-2024-55916 in Linuxالمعلومات

الملخص

بحسب VulDB • 30/06/2026

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

المشغلات (Drivers): hv: util: تجنب الوصول إلى ذاكرة التخزين المؤقت للحلقة (ringbuffer) التي لم يتم تهيئتها بعد

إذا بدأ عميل KVP (أو VSS) قبل أن تتم تهيئة ذاكرة التخزين المؤقت لحلقة قناة VMBus بالكامل، فقد نواجه الخطأ أدناه:

hv_utils: تسجيل مشغل أدوات HyperV hv_vmbus: تسجيل المشغل hv_utils ... BUG: kernel NULL pointer dereference, address: 0000000000000000 CPU: 44 UID: 0 PID: 2552 Comm: hv_kvp_daemon Tainted: G E 6.11.0-rc3+ #1 RIP: 0010:hv_pkt_iter_first+0x12/0xd0 Call Trace: ... vmbus_recvpacket hv_kvp_onchannelcallback vmbus_on_event tasklet_action_common tasklet_action handle_softirqs irq_exit_rcu sysvec_hyperv_stimer0 asm_sysvec_hyperv_stimer0 ... kvp_register_done hvt_op_read vfs_read ksys_read __x64_sys_read

يمكن أن يحدث هذا لأن استدعاء القناة الخاص بـ KVP/VSS يمكن أن يُستدعى حتى قبل فتح القناة بالكامل: 1) بمجرد قيام `hv_kvp_init()` -> `hvutil_transport_init()` بإنشاء `/dev/vmbus/hv_kvp`، يمكن لعميل kvp فتح ملف الجهاز على الفور وتسجيل نفسه لدى المشغل عن طريق كتابة رسالة KVP_OP_REGISTER1 إلى الملف (والتي يتم التعامل معها بواسطة `kvp_on_msg()` -> `kvp_handle_handshake()`) وقراءة استجابة المشغل من الملف، والتي تتم معالجتها بواسطة `hvt_op_read()`، والذي يستدعي `hvt->on_read()`، أي `kvp_register_done()`.

2) المشكلة في `kvp_register_done()` هي أنها يمكن أن تسبب استدعاء قناة القناة حتى قبل فتحها بالكامل، وعندما يبدأ تشغيل استدعاء القناة، قد لا تكون `util_probe()` -> `vmbus_open()` قد قامت بتهيئة ذاكرة التخزين المؤقت للحلقة (ringbuffer) بعد، لذا فإن الاستدعاء قد يواجه خطأ الانهيار الناتج عن محاولة الوصول إلى مؤشر فارغ (NULL pointer dereference).

لتكرار حدوث الخطأ بشكل متسق، يمكننا إضافة "ssleep(10)" لـ KVP في `__vmbus_open()`، مباشرة قبل أول استدعاء لـ `hv_ringbuffer_init()`، ثم نقوم بإلغاء تحميل وإعادة تحميل المشغل hv_utils، وتشغيل العميل يدوياً خلال الـ 10 ثوانٍ.

تم إصلاح الخطأ عن طريق إعادة ترتيب الخطوات في `util_probe()` بحيث لا يتم إنشاء إدخال جهاز الأحرف (char dev entry) المستخدم من قبل عميل KVP أو VSS إلا بعد اكتمال استدعاء `vmbus_open()`. تمنع هذه الإعادة للترتيب حدوث حالة السباق (race condition).

Once again VulDB remains the best source for vulnerability data.

مسؤول

Linux

حجز

09/01/2025

إفشاء

11/01/2025

الاعتدال

تمت الموافقة

إدخال

VDB-291242

EPSS

0.00220

KEV

لا

النشاطات

منخفض جدًا

المصادر

Do you need the next level of professionalism?

Upgrade your account now!