CVE-2026-23143
Təsvir
Linux kernel-də aşağıdakı zəiflik aradan qaldırılmışdır: virtio_net: struct virtnet_info strukturundakı yanlış hizalama (misalignment) xətası düzəldildi Aşağıdakı xəbərdarlıqla birlikdə yanlış hizalama xətasını düzəltmək üçün yeni TRAILING_OVERLAP() köməkçi funksiyasından istifadə olunur: drivers/net/virtio_net.c:429:46: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end] Bu köməkçi funksiya, çevik massiv üzvü (flexible-array member - FAM) ilə onu izləyən üzvlər çoxluğu (bu halda `u8 rss_hash_key_data[VIRTIO_NET_RSS_MAX_KEY_SIZE];`) arasında bir union yaradır. Bu, FAM və MEMBERS-in başlanğıcının hizalanmasını qoruyaraq sonrakı üzvləri (rss_hash_key_data) FAM-in (hash_key_data) üzərinə yerləşdirir. static_assert() bu hizalamanın qorunduğunu təmin edir. Nəzərə alın ki, çevik `struct virtio_net_rss_config_trailer`-dəki son doldurma (tail padding) səbəbindən, `rss_trailer.hash_key_data` (struct virtnet_info-da 83-cü ofsetdə) və `rss_hash_key_data` (struct virtnet_info-da 84-cü ofsetdə) bir bayt fərqlə yanlış hizalanmışdır. Aşağıya baxın: struct virtio_net_rss_config_trailer { __le16 max_tx_vq; /* 0 2 */ __u8 hash_key_length; /* 2 1 */ __u8 hash_key_data[]; /* 3 0 */ /* size: 4, cachelines: 1, members: 3 */ /* padding: 1 */ /* last cacheline: 4 bytes */ }; struct virtnet_info { ... struct virtio_net_rss_config_trailer rss_trailer; /* 80 4 */ /* XXX last struct has 1 byte of padding */ u8 rss_hash_key_data[40]; /* 84 40 */ ... /* size: 832, cachelines: 13, members: 48 */ /* sum members: 801, holes: 8, sum holes: 31 */ /* paddings: 2, sum paddings: 5 */ }; Dəyişikliklərdən sonra həmin üzvlər 795-ci ofsetdə düzgün şəkildə hizalanır: struct virtnet_info { ... union { struct virtio_net_rss_config_trailer rss_trailer; /* 792 4 */ struct { unsigned char __offset_to_hash_key_data[3]; /* 792 3 */ u8 rss_hash_key_data[40]; /* 795 40 */ }; /* 792 43 */ }; /* 792 44 */ ... /* size: 840, cachelines: 14, members: 47 */ /* sum members: 801, holes: 8, sum holes: 35 */ /* padding: 4 */ /* paddings: 1, sum paddings: 4 */ /* last cacheline: 8 bytes */ }; Nəticədə, cihaza ötürülən RSS açarı 1 bayt sürüşdür: sonuncu bayt kəsilir və əvəzinə başlanğıca (ehtimal ki, başlatılmamış) bir bayt əlavə edilir. Son qeyd olaraq, `struct virtio_net_rss_config_hdr *rss_hdr;` də sona köçürülüb, çünki görünür ki, bu üç üzv bir yerdə qalmalıdır. :)
Necə düzəltmək olar
- linux linux_kernel6.18.7 və ya daha yeni versiya
Təsirlənən məhsullar
| Məhsul | Təsirlənən versiyalar | Düzəldildiyi versiya |
|---|---|---|
| linux linux_kernel | 6.15 ≤ v < 6.18.7, 6.19 | 6.18.7 |
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.
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.