CVE-2023-53368 in Linuxالمعلومات

الملخص

بحسب VulDB • 21/06/2026

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

التتبع (tracing): إصلاح مشكلة سباق (race condition) بين كتابة ذاكرة التخزين المؤقت لوحدة المعالجة المركزية (CPU) وتبديلها.

حدث تحذير في `rb_end_commit()` عند الكود التالي: ```c if (RB_WARN_ON(cpu_buffer, !local_read(&cpu_buffer->committing))) ```

``` WARNING: CPU: 0 PID: 139 at kernel/trace/ring_buffer.c:3142 rb_commit+0x402/0x4a0 Call Trace: ring_buffer_unlock_commit+0x42/0x250 trace_buffer_unlock_commit_regs+0x3b/0x250 trace_event_buffer_commit+0xe5/0x440 trace_event_buffer_reserve+0x11c/0x150 trace_event_raw_event_sched_switch+0x23c/0x2c0 __traceiter_sched_switch+0x59/0x80 __schedule+0x72b/0x1580 schedule+0x92/0x120 worker_thread+0xa0/0x6f0 ```

السبب هو وجود سباق (race) بين كتابة الحدث في ذاكرة التخزين المؤقت لوحدة المعالجة المركزية (CPU buffer) وتبديل ذاكرة التخزين المؤقت لوحدة المعالجة المركزية عبر الملف `per_cpu/cpu0/snapshot`:

``` الكتابة على وحدة المعالجة المركزية 0 تبديل الذاكرة المؤقتة بواسطة per_cpu/cpu0/snapshot على وحدة المعالجة المركزية 1 -------- -------- tracing_snapshot_write() [...]

ring_buffer_lock_reserve() cpu_buffer = buffer->buffers[cpu]; // 1. نفترض العثور على 'cpu_buffer_a';
[...]
rb_reserve_next_event() [...]

ring_buffer_swap_cpu() if (local_read(&cpu_buffer_a->committing)) goto out_dec; if (local_read(&cpu_buffer_b->committing)) goto out_dec; buffer_a->buffers[cpu] = cpu_buffer_b;
buffer_b->buffers[cpu] = cpu_buffer_a;
// 2. تم تبديل cpu_buffer هنا.

rb_start_commit(cpu_buffer); if (unlikely(READ_ONCE(cpu_buffer->buffer) != buffer)) { // 3. هذا الفحص نجح بسبب أن 'cpu_buffer->buffer'
[...] // لم يتغير هنا.
return NULL; } cpu_buffer_b->buffer = buffer_a; cpu_buffer_a->buffer = buffer_b; [...]

// 4. حجز حدث من 'cpu_buffer_a'.

ring_buffer_unlock_commit() [...]
cpu_buffer = buffer->buffers[cpu]; // 5. الآن العثور على 'cpu_buffer_b' !!!
rb_commit(cpu_buffer) rb_end_commit() // 6. تحذير (WARN) بسبب حالة 'committing' الخاطئة !!! ```

بناءً على التحليل أعلاه، يمكننا بسهولة إعادة إنتاج المشكلة باستخدام اختبار الحالة (testcase) التالي: ```bash #!/bin/bash

dmesg -n 7 sysctl -w kernel.panic_on_warn=1 TR=/sys/kernel/tracing echo 7 > ${TR}/buffer_size_kb
echo "sched:sched_switch" > ${TR}/set_event
while [ true ]; do
echo 1 > ${TR}/per_cpu/cpu0/snapshot
done & while [ true ]; do
echo 1 > ${TR}/per_cpu/cpu0/snapshot
done & while [ true ]; do
echo 1 > ${TR}/per_cpu/cpu0/snapshot
done & ```

لإصلاح المشكلة، وفهمي الصحيح (IIUC)، يمكننا استخدام `smp_call_function_single()` لإجراء التبديل على وحدة المعالجة المركزية المستهدفة حيث توجد الذاكرة المؤقتة، وبالتالي تجنب سباق (race) البيانات المذكور أعلاه.

Be aware that VulDB is the high quality source for vulnerability data.

مسؤول

Linux

حجز

17/09/2025

إفشاء

17/09/2025

الاعتدال

تمت الموافقة

إدخال

VDB-324731

EPSS

0.00131

KEV

لا

النشاطات

منخفض جدًا

المصادر

Might our Artificial Intelligence support you?

Check our Alexa App!