В ядре Linux устранена следующая уязвимость:
net: ipv6: flowlabel: отложить эксклюзивную опцию бесплатно до демонтажа RCU
`ip6fl_seq_show()` просматривает глобальный хэш метки потока в seq-файле. RCU блокирует сторону чтения и печатает `fl->opt->opt_nflen`, когда опция блокируется.
присутствует. Эксклюзивные метки потока в настоящее время освобождаются от `fl->opt`, как только `fl->users`
падает до нуля в `fl_release()`.
Однако окружающие
`struct ip6_flowlabel` остается видимой в глобальной хэш-таблице до тех пор, пока
более поздняя сборка мусора удаляет его, и `fl_free_rcu()` наконец разрывает его
вниз. Таким образом, одновременный читатель `/proc/net/ip6_flowlabel` может участвовать в гонке
ранний `kfree()` и состояние освобожденной опции разыменования, вызывающее сбой
в `ip6fl_seq_show()`. Исправьте это, оставив `fl->opt` активным до `fl_free_rcu()`.
Это соответствует срок службы, уже необходимый для прилагаемой этикетки потока, в то время как считыватели все еще может добраться до него под RCU.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: net: ipv6: flowlabel: defer exclusive option free until RCU teardown `ip6fl_seq_show()` walks the global flowlabel hash under the seq-file RCU read-side lock and prints `fl->opt->opt_nflen` when an option block is present. Exclusive flowlabels currently free `fl->opt` as soon as `fl->users` drops to zero in `fl_release()`. However, the surrounding `struct ip6_flowlabel` remains visible in the global hash table until later garbage collection removes it and `fl_free_rcu()` finally tears it down. A concurrent `/proc/net/ip6_flowlabel` reader can therefore race that early `kfree()` and dereference freed option state, triggering a crash in `ip6fl_seq_show()`. Fix this by keeping `fl->opt` alive until `fl_free_rcu()`. That matches the lifetime already required for the enclosing flowlabel while readers can still reach it under RCU.
Уязвимые продукты 8
| Конфигурация | От (включительно) | До (исключительно) |
|---|---|---|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
3.9
|
5.10.253
|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
3.9
|
5.15.203
|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
3.9
|
6.1.168
|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
3.9
|
6.6.134
|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
3.9
|
6.12.81
|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
3.9
|
6.18.22
|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
3.9
|
6.19.12
|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
3.9
|
7.0
|