В ядре Linux устранена следующая уязвимость: net: исправить утечку памяти в skb_segment_list для пакетов GRO Когда skb_segment_list() вызыв…
В ядре Linux устранена следующая уязвимость: net: исправить утечку памяти в skb_segment_list для пакетов GRO Когда skb_segment_list() вызывается во время пересылки пакетов, он обрабатывает пакеты, которые были агрегированы двигателем GRO. Исторически логика сегментации в skb_segment_list предполагает, что отдельные сегменты отделены от родительского SKB и могут нуждаться в переноске Собственный учет памяти розеток. Соответственно, передача кода truesize от родителя до вновь созданных сегментов. Перед совершением ed4ccccaf64c1 ("gro: fix transfer собственности"), это truesize вычитание в skb_segment_list() было действительным, потому что фрагменты До сих пор носите ссылку на оригинальный розетку. Однако, декларировать ed4ccccaf64c1 ("gro: fix transfer transfer собственности") изменен это поведение, гарантируя, что записи фрагментов являются явно сироты (skb->sk = NULL), чтобы предотвратить незаконное сиротство позже в Стэк. Это изменение означало, что весь заряд памяти сокета остался с головой SKB, но соответствующая учетная логика в skb_segment_list() никогда не обновлялся. В результате текущий код безоговорочно добавляет каждый фрагмент truesize to delta_truesize и вычитает его из родительского SKB. С тех пор фрагменты больше не заряжены на розетку, это вычитание приводит к эффективному занижению памяти, когда голова освобождена. Это заставляет sk_wmem_alloc оставаться не-нуле, предотвращая сокет разрушение и приводит к постоянной утечке памяти. Утечку можно наблюдать через KMEMEMELAK при сносе сети окружающей среды: Нессылка на объект 0xffff8881e6eb9100 (размер 2048): ком"пс, pid 6720, jiffies 4295492526 Обратный след: kmem_cache_alloc_noprof+0x5c6/0x800 sk_prot_alloc+0x5b/0x220 sk_alloc+0x35/0xa00 inet6_create.part.0+0x303/0x10d0 __sock_create+0x248/0x640 __sys_socket+0x11b/0x1d0 Поскольку skb_segment_list() используется исключительно для SKB_GSO_FRAGLIST пакеты, созданные GRO, корректировка истинного размера удаляется. Призыв к skb_release_head_state() должен быть сохранен. Как задокументировано в совершите cf673ed0e057 («net: исправление количества ссылок на сегментацию фраглиста утечка"), по-прежнему требуется правильно отбросить ссылки на SKB расширения, которые могут быть перезаписаны во время __copy_skb_header().
Продукт не отслеживает должным образом и не освобождает выделенную память после её использования, делая память недоступной для повторного выделения и использования.
https://cwe.mitre.org/data/definitions/401.html →Открыть в коллекции CWE →| Продукт | Вендор | Статус |
|---|---|---|
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux-6.1 | Отслеживается | |
| linux_kernel | * | Отслеживается |
| kernel-doc-6.12 | Отслеживается | |
| kernel-doc-6.12 | Отслеживается | |
| kernel-doc-6.12 | Отслеживается | |
| kernel-doc-6.18 | Отслеживается | |
| kernel-doc-un | Отслеживается | |
| kernel-headers-6.12 | Отслеживается | |
| kernel-headers-6.12 | Отслеживается | |
| kernel-headers-6.12 | Отслеживается | |
| kernel-headers-6.18 | Отслеживается | |
| kernel-headers-modules-6.12 | Отслеживается | |
| kernel-headers-modules-6.12 | Отслеживается | |
| kernel-headers-modules-6.12 | Отслеживается | |
| kernel-headers-modules-6.18 | Отслеживается | |
| kernel-headers-modules-pine | Отслеживается | |
| kernel-headers-modules-pine | Отслеживается | |
| kernel-headers-modules-rpi-un | Отслеживается |