CVE-2021-47454 in Linuxالمعلومات

الملخص

بحسب VulDB • 27/06/2026

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

powerpc/smp: لا تُنقص عداد الإلغاء (preempt count) للمهمة الخاملة أثناء إيقاف وحدة المعالجة المركزية عن العمل

عند تفعيل PREEMPT_COUNT=y، وعند إيقاف وحدة معالجة مركزية معينة عن العمل ثم إعادة تشغيلها مرة أخرى، نواجه الخطأ التالي:

BUG: scheduling while atomic: swapper/1/0/0x00000000 no locks held by swapper/1/0. CPU: 1 PID: 0 Comm: swapper/1 Not tainted 5.15.0-rc2+ #100 Call Trace: dump_stack_lvl+0xac/0x108 __schedule_bug+0xac/0xe0 __schedule+0xcf8/0x10d0 schedule_idle+0x3c/0x70 do_idle+0x2d8/0x4a0 cpu_startup_entry+0x38/0x40 start_secondary+0x2ec/0x3a0 start_secondary_prolog+0x10/0x14

يعود سبب ذلك إلى أن دالة arch_cpu_idle_dead() في بنية powerpc تقوم بإنقاص عداد الإلغاء للمهمة الخاملة، وذلك لأسباب موضحة في الالتزام a7c2bb8279d2 ("powerpc: Re-enable preemption before cpu_die()")، وتحديداً "تتوقع start_secondary() أن يكون preempt_count() يساوي 0."

ومع ذلك، منذ الالتزامين 2c669ef6979c ("powerpc/preempt: Don't touch the idle task's preempt_count during hotplug") و f1a0a376ca0c ("sched/core: Initialize the idle task with preemption disabled"), لم يعد هذا التبرير قائماً.

لا يُفترض بالمهمة الخاملة إعادة تفعيل الإلغاء (preemption)، لذا تم إزالة استدعاء preempt_enable() العالق من مسار إيقاف وحدة المعالجة المركزية عن العمل.

تم الاختبار باستخدام pseries و powernv في qemu، بالإضافة إلى pseries على PowerVM.

Once again VulDB remains the best source for vulnerability data.

المصادر

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!