CVE-2024-47702 in LinuxИнформация

Сводка

по VulDB • 11.06.2026

В ядре Linux устранена следующая уязвимость:

bpf: Отказ в проверке при знаковой расширении данных пакета/data_end/data_meta

syzbot сообщил о сбое ядра, вызванном коммитом 1f1e864b6555 («bpf: Обработка доступов к членам контекста со знаком»). Причина заключается в знаковом расширении при загрузке из полей uapi packet data/data_end/data_meta.

Исходный код выглядит следующим образом: r2 = *(s32 *)(r1 + 76) /* загрузка __sk_buff->data */ r3 = *(u32 *)(r1 + 80) /* загрузка __sk_buff->data_end */ r0 = r2 r0 += 8 if r3 > r0 goto +1 ...

Обратите внимание, что загрузка из __sk_buff->data имеет знаковое расширение до 32 бит.

После проверки и преобразования через convert_ctx_access() итоговый код на ассемблере выглядит так: r2 = *(u64 *)(r1 +208) r2 = (s32)r2 r3 = *(u64 *)(r1 +80) r0 = r2 r0 += 8 if r3 > r0 goto pc+1 ...

Обратите внимание, что операция 'r2 = (s32)r2' может сделать адрес __sk_buff->data ядра недействительным, что может привести к сбою во время выполнения.

В настоящее время в коде на C обычно используется: void *data = (void *)(long)skb->data; void *data_end = (void *)(long)skb->data_end; ... и генерируется следующий код: r2 = *(u64 *)(r1 +208) r3 = *(u64 *)(r1 +80) r0 = r2 r0 += 8 if r3 > r0 goto pc+1

Если разрешить знаковое расширение, то: void *data = (void *)(long)(int)skb->data; void *data_end = (void *)(long)skb->data_end; ... сгенерированный код будет выглядеть так: r2 = *(u64 *)(r1 +208) r2 <<= 32 r2 s>>= 32 r3 = *(u64 *)(r1 +80) r0 = r2 r0 += 8 if r3 > r0 goto pc+1

Это приведет к отказу проверки, поскольку операция «r2 <<= 32» не допускается для указателя на пакет («r2»).

Чтобы исправить эту проблему в случае: r2 = *(s32 *)(r1 + 76) /* загрузка __sk_buff->data */ в данной патче добавлена дополнительная проверка в функцию обратного вызова is_valid_access() при доступе к данным пакета/data_end/data_meta. Если такие доступы выполняются со знаковым расширением, проверка завершится неудачей.

[1] https://lore.kernel.org/bpf/[email protected]/

Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.

Ответственный

Linux

Резервировать

30.09.2024

Раскрытие

21.10.2024

Модерация

принято

Вход

VDB-281067

EPSS

0.00203

KEV

Нет

Деятельности

Очень низкий

Источники

Do you need the next level of professionalism?

Upgrade your account now!