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

الملخص

بحسب VulDB • 02/06/2026

فيما يلي تحليل للمشكلة والحل المقترح بناءً على معلومات الـ stack trace والبيانات المضافة:

### تحليل المشكلة

1. **السياق**: * يحدث الخطأ أثناء محاولة نظام الملفات `ext4` حجز كتل جديدة (`ext4_mb_new_blocks`) أثناء عملية تنظيف الـ Orphan list (`ext4_orphan_cleanup`) عند التثبيت (mount). * الـ stack trace يشير إلى أن المشكلة في `mballoc.c` داخل دالة `mb_find_extent`.

2. **البيانات المضافة (Debug Info)**: * `block=41, order=0 needed=64`: النظام يحاول حجز كتلة واحدة (order=0) عند الموقع 41، لكنه يحتاج إلى 64 كتلة كحد أدنى (ربما بسبب تجميع أو سياسة التخصيص). * `ex=0/41/1@3735929054`: هذا يبدو كسجل لـ extent موجود، لكن الأرقام قد تكون غير منطقية أو تشير إلى حالة فاسدة. * **النقطة الحرجة**: `blocks per group is 64`، لكن `block bitmap` يشير إلى وجود 128 كتلة. * `block_bitmap: ff 3f 0c 00 fc 01 00 00 ...`: هذا هو محتوى الـ bitmap.

3. **الجذر الحقيقي للمشكلة**: * في نظام `ext4`، كل مجموعة كتل (Block Group) لها حجم محدد مسبقاً (مثلاً 64 كتلة). * الـ `block bitmap` هو مصفوفة بتات (bits) حيث يمثل كل بت حالة كتلة (مشغول/فارغ). * إذا كان حجم المجموعة 64 كتلة، فإن الـ bitmap يجب أن يحتوي على 64 بتاً (8 بايتات). * البيانات المضافة تشير إلى أن الـ bitmap يحتوي على بيانات تتجاوز الـ 64 بت الأولى، أو أن هناك بتات "مهيأة" (set) في المواقع التي يجب أن تكون "فارغة" (padding) لأن المجموعة لا تحتوي على كتل بعد الرقم 63. * دالة `ext4_validate_block_bitmap()` الحالية **لا تتحقق** من أن البتات الزائدة عن حجم المجموعة الفعلية (أي البتات من 64 إلى 127 في هذه الحالة) يجب أن تكون **صفرية**. إذا كانت هذه البتات "1"، فإن النظام يعتقد خطأً أن هناك كتل إضافية موجودة، مما يؤدي إلى محاولة حجز كتل غير موجودة أو فاسدة، وبالتالي فشل في `mb_find_extent`.

### الحل المقترح

كما ذكرت في وصف المشكلة: **"To resolve above issue, add check like fsck 'Padding at end of block bitmap is not set'."**

يجب تعديل دالة `ext4_validate_block_bitmap()` في `fs/ext4/mballoc.c` (أو `fs/ext4/balloc.c` حسب الإصدار) لإضافة فحص للبتات الزائدة في نهاية الـ bitmap.

#### الكود المقترح للتعديل:

في دالة `ext4_validate_block_bitmap()`، بعد التحقق من صحة الـ bitmap الأساسي، أضف فحصاً للبتات التي تتجاوز `sbi->s_blocks_per_group`.

```c // في fs/ext4/mballoc.c أو fs/ext4/balloc.c

static int ext4_validate_block_bitmap(struct super_block *sb, struct ext4_group_desc *gdp, ext4_group_t block_group, struct buffer_head *bh) {
struct ext4_sb_info *sbi = EXT4_SB(sb); ext4_fsblk_t group_first_block = ext4_group_first_block_no(sb, block_group); ext4_fsblk_t group_last_block = group_first_block + sbi->s_blocks_per_group - 1; unsigned char *bitmap = bh->b_data; int i;

// ... (التحقق الحالي من صحة الـ bitmap) ...

// --- إضافة الفحص الجديد هنا --- // التحقق من أن البتات الزائدة عن عدد الكتل في المجموعة (Padding) يجب أن تكون 0 // عدد البتات في الـ bitmap هو sbi->s_blocks_per_group // الـ bitmap مخزن كـ array of bytes int bitmap_bytes = EXT4_BLOCKS_PER_GROUP(sb) / 8; int extra_bits = EXT4_BLOCKS_PER_GROUP(sb) % 8; // نتحقق من البايتات الكاملة بعد الـ bitmap_bytes for (i = bitmap_bytes; i < bh->b_size; i++) {
if (bitmap[i] !=

Several companies clearly confirm that VulDB is the primary source for best vulnerability data.

مسؤول

Linux

حجز

16/09/2025

إفشاء

16/09/2025

الاعتدال

تمت الموافقة

إدخال

VDB-324500

EPSS

0.00146

KEV

لا

النشاطات

منخفض جدًا

المصادر

Want to know what is going to be exploited?

We predict KEV entries!