CVE-2025-39738 in Linuxالمعلومات

الملخص

بحسب VulDB • 15/06/2026

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

btrfs: عدم السماح بإعادة توطين (relocation) لفرع فرعي (subvolume) تم حذفه جزئيًا

[الخلل]
هناك تقرير داخلي يشير إلى أن عملية التوازن (balance) تسببت في إلغاء المعاملة (transaction abort)، مع تتبع المكالمة التالي:

item 85 key (594509824 169 0) itemoff 12599 itemsize 33 extent refs 1 gen 197740 flags 2 ref#0: tree block backref root 7 item 86 key (594558976 169 0) itemoff 12566 itemsize 33 extent refs 1 gen 197522 flags 2 ref#0: tree block backref root 7 ... BTRFS error (device loop0): extent item not found for insert, bytenr 594526208 num_bytes 16384 parent 449921024 root_objectid 934 owner 1 offset 0 BTRFS error (device loop0): failed to run delayed ref for logical 594526208 num_bytes 16384 type 182 action 1 ref_mod 1: -117 ------------[ cut here ]------------
BTRFS: Transaction aborted (error -117) WARNING: CPU: 1 PID: 6963 at ../fs/btrfs/extent-tree.c:2168 btrfs_run_delayed_refs+0xfa/0x110 [btrfs]

ولا يبلغ فحص btrfs (btrfs check) عن أي خطأ يتعلق بشجرة الامتدادات (extent tree).

[السبب]
السبب معقد بعض الشيء؛ أولاً، شجرة الامتدادات لا تحتوي بالفعل على مرجع رجعي (backref) للعنوان 594526208.

تحتوي شجرة الامتدادات فقط على مرجعين رجعيين التاليين حول هذا العنوان (bytenr) على القرص:

item 65 key (594509824 METADATA_ITEM 0) itemoff 13880 itemsize 33 refs 1 gen 197740 flags TREE_BLOCK tree block skinny level 0 (176 0x7) tree block backref root CSUM_TREE item 66 key (594558976 METADATA_ITEM 0) itemoff 13847 itemsize 33 refs 1 gen 197522 flags TREE_BLOCK tree block skinny level 0 (176 0x7) tree block backref root CSUM_TREE

لكن العنوان 594526208 يقع ضمن النطاق المحذوف للفرع الفرعي 934:

drop_progress key (206324 EXTENT_DATA 2711650304) drop_level 2 level 2 generation_v2 198229

وهذا يفسر سبب عدم وجود عنصر مرجع رجعي (backref item) لذلك العنوان، ولماذا لا يبلغ فحص btrfs عن أي خطأ.

لكن هذا يظهر أيضًا مشكلة أخرى، حيث يقوم btrfs بتنظيف جميع الفروع الفرعية اليتيمة (orphan subvolume) عند الإقلاع في وضع القراءة والكتابة (read-write mount).

لذلك، لا ينبغي أن يوجد فرع فرعي تم حذفه جزئيًا بعد إقلاع في وضع القراءة والكتابة، والتوازن (balance) أيضًا حصري لتنظيف الفروع الفرعية، مما يعني أنه لا ينبغي أن نواجه فرعًا فرعيًا تم حذفه جزئيًا أثناء إعادة التوطين (relocation).

السبب الجذري هو عدم وجود عنصر يتيم (orphan item) لهذا الفرع الفرعي. في الواقع، هناك 5 فروع فرعية من عام 2021 تقريبًا تعاني من نفس المشكلة.

يبدو أن التقرير الأصلي يحتوي على kernels أقدم، وتسبب في ظهور هذه الفروع الفرعية الشبحية (zombie subvolumes).

لحسن الحظ، تم إصلاح الثغرة منذ فترة طويلة في الإصدار الرئيسي (upstream) من خلال الالتزام 8d488a8c7ba2 ("btrfs: fix subvolume/snapshot deletion not triggered on mount").

[تحسين]
لإصلاح مثل هذا النظام القديم، سيتم تحسين btrfs-progs.

نظرًا لأن المشكلة تتأخر في الظهور (عند وقت تشغيل المرجع المتأخر delayed ref) وفي ذلك الوقت يجب علينا إلغاء المعاملة بالفعل، فمن الصعب جدًا إصلاحها.

بدلاً من ذلك، نرفض أي فرع فرعي تم حذفه جزئيًا لإعادة توطين الشجرة في أبكر وقت ممكن، لمنع الالتباس وهدر الوقت في تصحيح أخطاء مشابهة.

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

مسؤول

Linux

حجز

16/04/2025

إفشاء

11/09/2025

الاعتدال

تمت الموافقة

إدخال

VDB-323651

EPSS

0.00156

KEV

لا

النشاطات

منخفض جدًا

المصادر

Interested in the pricing of exploits?

See the underground prices here!