Ad

CVE-2026-89664

HIGH CVSS 3.1: 7,5 EPSS 0.49%
Обновлено 13 сентября 2026
Linux
Параметр Значение
CVSS 7,5 (HIGH)
Поставщик Linux
Публичный эксплойт Нет

В ядре Linux устранена следующая уязвимость: nfsd: освободить posix ACL, декодированные OPEN, через op_release nfsd4_decode_createhow4() вызывает nfsd4_decode_fattr4(), который выделяет объекты struct posix_acl с рефсчетом через posix_acl_alloc() и сохраняют их в open->op_pacl и open->op_dpacl. Эти указатели должны быть выпускается после завершения соединения OPEN. Когда nfsd4_decode_open_claim4() возвращает ошибку, не связанную с изменением seqid, диспетчер прерывает работу перед запуском op_func: nfsd4_proc_compound() if (op->status && op->opnum == OP_OPEN) op->status = nfsd4_open_omfg(...) if (!seqid_mutating_err(ntohl(op->status))) вернуть оп-> статус; /* nfsd4_open() никогда не запускается */ ... opdesc->op_release(&op->u) /* все равно должен освободить op_pacl/op_dpacl */ До этого изменения OP_OPEN не имел .op_release в nfsd4_ops[], и Пара релизов находилась внутри nfsd4_open() по метке out_err:.

На путь короткого замыкания nfsd4_open() никогда не вызывается, поэтому оба posix_acl утечка ссылок на каждое неправильно сформированное соединение OPEN, содержащее действительный POSIX. Атрибуты ACL createhow4. Добавьте nfsd4_open_release() и подключите его как .op_release для OP_OPEN. posix_acl_release() является NULL-безопасным, поэтому единый сайт выпуска охватывает как обычный путь, так и короткое замыкание nfsd4_open_omfg.

Удалить соответствующая пара posix_acl_release() из out_err nfsd4_open(): этикетку, чтобы избежать двойного выпуска. Составной цикл имеет две ветви кодирования: nfsd4_encode_operation(). для обычных операций и nfsd4_encode_replay() для воспроизведенных операций версии 4.0. op_release вызывался только из nfsd4_encode_operation(), поэтому ресурсы прикреплен к утечке op->u на пути воспроизведения. Переместите вызов op_release() из nfsd4_encode_operation() и replay ветку, поместив ее после if-else в nfsd4_proc_compound().

Это дает единый сайт вызова в совершенно очевидно правильном месте, охватывающий как обычные пути кодирования, так и пути воспроизведения.

Показать оригинальное описание (EN)

In the Linux kernel, the following vulnerability has been resolved: nfsd: release OPEN-decoded posix ACLs via op_release nfsd4_decode_createhow4() calls nfsd4_decode_fattr4(), which allocates refcounted struct posix_acl objects via posix_acl_alloc() and stores them in open->op_pacl and open->op_dpacl. These pointers must be released once the OPEN compound finishes. When nfsd4_decode_open_claim4() returns a non-seqid-mutating error, the dispatcher short-circuits before op_func runs: nfsd4_proc_compound() if (op->status && op->opnum == OP_OPEN) op->status = nfsd4_open_omfg(...) if (!seqid_mutating_err(ntohl(op->status))) return op->status; /* nfsd4_open() never runs */ ... opdesc->op_release(&op->u) /* must still release op_pacl/op_dpacl */ Before this change OP_OPEN had no .op_release in nfsd4_ops[], and the release pair lived inside nfsd4_open() at its out_err: label. On the short-circuit path nfsd4_open() is never invoked, so both posix_acl refs leak on every malformed OPEN compound that carries valid POSIX ACL createhow4 attributes. Add nfsd4_open_release() and wire it as .op_release for OP_OPEN. posix_acl_release() is NULL-safe, so the single release site covers both the normal path and the nfsd4_open_omfg short-circuit. Remove the matching posix_acl_release() pair from nfsd4_open()'s out_err: label to avoid double-releasing. The compound loop has two encoding branches: nfsd4_encode_operation() for normal ops, and nfsd4_encode_replay() for v4.0 replayed ops. op_release was only called from nfsd4_encode_operation(), so resources attached to op->u leak on the replay path. Move the op_release() call out of nfsd4_encode_operation() and the replay branch, placing it after the if-else in nfsd4_proc_compound(). This gives a single call site in a fairly obviously-correct place, covering both the normal encoding and replay paths.

Характеристики атаки

Способ атаки
По сети
Атака возможна удалённо
Сложность
Низкая
Легко эксплуатировать
Нужны права
Не требуются
Права не нужны
Участие пользователя
Не требуется
Не нужно действие пользователя

Последствия

Конфиденциальность
Нет
Нет утечки данных
Целостность
Нет
Нет модификации данных
Доступность
Высокое
Полный отказ в обслуживании

Строка CVSS v3.1