CVE-2025-38166

Yüksək

Təsvir

Linux kernel-də aşağıdakı zəiflik aradan qaldırılmışdır: bpf: sockmap ilə ktls panic probleminin həlli [ 2172.936997] ------------[ cut here ]------------ [ 2172.936999] kernel BUG at lib/iov_iter.c:629! ...... [ 2172.944996] PKRU: 55555554 [ 2172.945155] Call Trace: [ 2172.945299] <TASK> [ 2172.945428] ? die+0x36/0x90 [ 2172.945601] ? do_trap+0xdd/0x100 [ 2172.945795] ? iov_iter_revert+0x178/0x180 [ 2172.946031] ? iov_iter_revert+0x178/0x180 [ 2172.946267] ? do_error_trap+0x7d/0x110 [ 2172.946499] ? iov_iter_revert+0x178/0x180 [ 2172.946736] ? exc_invalid_op+0x50/0x70 [ 2172.946961] ? iov_iter_revert+0x178/0x180 [ 2172.947197] ? asm_exc_invalid_op+0x1a/0x20 [ 2172.947446] ? iov_iter_revert+0x178/0x180 [ 2172.947683] ? iov_iter_revert+0x5c/0x180 [ 2172.947913] tls_sw_sendmsg_locked.isra.0+0x794/0x840 [ 2172.948206] tls_sw_sendmsg+0x52/0x80 [ 2172.948420] ? inet_sendmsg+0x1f/0x70 [ 2172.948634] __sys_sendto+0x1cd/0x200 [ 2172.948848] ? find_held_lock+0x2b/0x80 [ 2172.949072] ? syscall_trace_enter+0x140/0x270 [ 2172.949330] ? __lock_release.isra.0+0x5e/0x170 [ 2172.949595] ? find_held_lock+0x2b/0x80 [ 2172.949817] ? syscall_trace_enter+0x140/0x270 [ 2172.950211] ? lockdep_hardirqs_on_prepare+0xda/0x190 [ 2172.950632] ? ktime_get_coarse_real_ts64+0xc2/0xd0 [ 2172.951036] __x64_sys_sendto+0x24/0x30 [ 2172.951382] do_syscall_64+0x90/0x170 ...... bpf_exec_tx_verdict() çağırıldıqdan sonra, məsələn, BPF proqramı bpf_msg_push_data() funksiyasını icra etdikdə, msg_pl->sg ölçüsü arta bilər. Əgər BPF proqramı cork_bytes təyin edirsə və sg.size cork_bytes-dan kiçikdirsə, o, -ENOSPC qaytaracaq və sıfırdan fərqli kopya (non-zero copy) məntiqinə geri qayıtmağa çalışacaq. Lakin geri qaytarılma zamanı msg->msg_iter sıfırlanır, lakin msg_pl->sg.size artdığı üçün sonrakı icralar msg_iter-in faktiki ölçüsünü aşacaqdır. ''' iov_iter_revert(&msg->msg_iter, msg_pl->sg.size - orig_size); ''' Bu commit-dəki dəyişikliklər aşağıdakı mülahizələrə əsaslanır: 1. cork_bytes təyin edildikdə, sıfırdan fərqli kopya məntiqinə geri qayıtmaq mənasızdır və birbaşa sıfır-kopya (zero-copy) məntiqinə keçmək olar. 2. msg_iter-i geri qaytarmaq üçün düzgün bayt sayını hesablamaq mümkün deyil. Fərz edin ki, orijinal məlumat "abcdefgh" (8 bayt)-dır və BPF proqramı tərəfindən 3 push əməliyyatından sonra o, 11 baytlıq məlumata çevrilir: "abc?de?fgh?". Sonra biz cork_bytes-ı 6 olaraq təyin edirik, bu o deməkdir ki, ilk 6 bayt emal edilmişdir və qalan 5 bayt "?fgh?" uzunluq cork_bytes tələbinə cavab verənə qədər keşlənəcək. Lakin, "?fgh?" daxilindəki bəzi məlumatlar 'sg->msg_iter' daxilində deyil (əvəzində msg_pl-dədir), xüsusilə bizim push etdiyimiz "?" məlumatları. Beləliklə, bunu sadəcə msg_iter-in ofseti vasitəsilə geri qaytarmaq kifayət etmir. 3. tcp_bpf_sendmsg-də TLS olmayan soketlər üçün "cork" vəziyyəti baş verdikdə, istifadəçi sahəsindəki send() xəta qaytarmır və qaytarılan uzunluq, bəzi məlumatlar keşlənmiş olsa belə, giriş uzunluq parametri ilə eyni olur. Əlavə olaraq gördüm ki, corking-in idarə edilməsi üçün mövcud sıfırdan fərqli kopya məntiqi belə yazılıb: ''' line 1177 else if (ret != -EAGAIN) { if (ret == -ENOSPC) ret = 0; goto send_end; ''' Beləliklə, "cork" vəziyyəti baş verdikdə xəta olmadan sadəcə 'copied' dəyərini qaytarmaq mümkündür.

CiddilikYüksək
CVSS7.8
İstismar ehtimalı—
MəhsulLinux Kernel
Dərc3 iyl 2025
İlk görülmə3 iyl 2025

Necə düzəltmək olar

Yeniləyin
  • linux linux_kernel6.1.142, 6.6.94, 6.12.34, 6.15.3 və ya daha yeni versiya

Təsirlənən məhsullar

MəhsulTəsirlənən versiyalarDüzəldildiyi versiya
linux linux_kernel4.20 ≤ v < 6.1.142, 6.2 ≤ v < 6.6.94, 6.7 ≤ v < 6.12.34, 6.13 ≤ v < 6.15.36.1.142, 6.6.94, 6.12.34, 6.15.3
debian debian_linux11.0—

Versiyanızı yoxlayın

Məhsulu seçin və istifadə etdiyiniz versiyanı yazın; versiyanın təsirlənən aralıqda olub-olmadığını görün.

Intelligence 360 paketində

Attack Surface Management

Domenlərinizə bağlı aktivləri, onlarda işləyən texnologiyaları və məlum zəiflikləri bir siyahıda görün.