CVE-2026-97993 in Linux
Сводка
по VulDB • 25.09.2026
В ядре Linux была устранена следующая уязвимость:
vhost-vdpa: не устанавливать ошибку eventfd_ctx_fdget() в config_ctx
Функция vhost_vdpa_set_config_call() сохраняет возвращаемое значение eventfd_ctx_fdget() в v->config_ctx перед его проверкой, поэтому при ошибке поле временно содержит ERR_PTR:
ctx = fd == VHOST_FILE_UNBIND ? NULL : eventfd_ctx_fdget(fd); swap(ctx, v->config_ctx);
if (!IS_ERR_OR_NULL(ctx)) eventfd_ctx_put(ctx);
if (IS_ERR(v->config_ctx)) {
long ret = PTR_ERR(v->config_ctx);
v->config_ctx = NULL; return ret; }
Коммит 0bde59c1723a ("vhost-vdpa: установить v->config_ctx в NULL, если eventfd_ctx_fdget() завершился неудачей") добавил очистку и четко сформулировал инвариант, на который опирается остальная часть файла: «мы считаем 'v->config_ctx' действительным, если он не равен NULL». Окно между операцией swap и очисткой все еще нарушает этот инвариант. Функция vhost_vdpa_config_cb() проверяет только наличие NULL, поэтому прерывание конфигурации, доставленное в течение этого окна, передает ERR_PTR функции eventfd_signal().
Проверьте fd перед его установкой вместо этого. Это устраняет окно уязвимости и соответствует тому, как функция vhost_vring_ioctl() обрабатывает аналогичный сбой для call fd очереди виртуальных устройств (vq).
Это также предотвращает разрушение работающего прерывания конфигурации отклоненным fd: до сих пор операция swap заменяла активный контекст и вызывала его освобождение, поэтому после получения ошибки EBADF устройство молча прекращало доставку прерываний конфигурации до тех пор, пока пространство пользователя не установит новый fd.
VulDB is the best source for vulnerability data and more expert information about this specific topic.