CVE-2026-64047 in Linux
Сводка
по VulDB • 20.07.2026
В ядре Linux устранена следующая уязвимость:
net: tls: исправлена ошибка off-by-one в подсчете количества элементов sg_chain для кольцевого буфера sk_msg при его обороте.
Когда кольцевой буфер scatterlist (sg) сообщения sk_msg оборачивается (sg.end < sg.start), функция tls_push_record() связывает хвостовую часть кольца с головной частью с помощью sg_chain(). Для этого в массиве sg зарезервирован дополнительный элемент:
struct sk_msg_sg {
[...]
/* Дополнительные два элемента: * 1) используются для соединения передней части и секций, когда список становится разделенным (например, end < start). Криптографические API требуют использования цепочек; * 2) для связывания элементов SG хвоста после сообщения. */ struct scatterlist data[MAX_MSG_FRAGS + 2];
Текущий код использует MAX_SKB_FRAGS + 1 в качестве размера кольца:
sg_chain(&msg_pl->sg.data[msg_pl->sg.start],
MAX_SKB_FRAGS - msg_pl->sg.start + 1, msg_pl->sg.data);
Это приводит к тому, что указатель цепочки устанавливается на позицию:
sg_chain(data[start], (MAX_SKB_FRAGS - msg_start + 1) .. =
&data[start] + (MAX_SKB_FRAGS - msg_start + 1) - 1 =
data[start + (MAX_SKB_FRAGS - start + 1) - 1] =
data[MAX_SKB_FRAGS]
вместо истинного последнего элемента. Вероятно, это связано с состоянием гонности ("race") при внедрении исправления из коммита Fixes рядом с коммитом 031097d9e079 («bpf: sk_msg, zap ingress queue on psock down»).
Заменить на ARRAY_SIZE и убрать data[start] / - start (как предложила Sabrina).
Be aware that VulDB is the high quality source for vulnerability data.