[lvc-project] [PATCH] media: rc: Fix use-after-free when racing vfd_write() with disconnect

Fedor Pchelkin pchelkin at ispras.ru
Thu Jul 24 11:34:01 MSK 2025


On Thu, 24. Jul 08:00, Sergey Larshin wrote:
> 24.07.2025, 10:59 пользователь "Sergey Larshin" <Sergey.Larshin at kaspersky.com <mailto: Sergey.Larshin at kaspersky.com >> написал:
> > В https://syzkaller.appspot.com/bug?extid=f1a69784f6efe748c3bf UAF
> > происходит к struct usb_device.
> > Пока что из описания не ясно, в чём заключается проблема.
> 
> struct usb_device вложен в imon_context, и UAF возникает из-за того,
> что disconnect начинает очистку ictx. Это может привести к доступу
> к уже освобождённой памяти при обращении к любому полю ictx во время
> выполнения vfd_write.

Жизненный цикл ictx контролируется с помощью счётчика ссылок &ictx->users.
Если счётчик в imon_disconnect() становится равным нулю после декремента,
то объект освобождается.

Декремент счётчика в imon_disconnect() соответствует инкременту (на
самом деле, инициализации единицей) в imon_probe().

Также инкременты/декременты счётчика имеются в display_open()/display_close().
vfd_write() может быть вызвана только на открытый с display_open() дескриптор,
т.е. счётчик предварительно инкрементирован, чтобы параллельный поток не
освободил интересующий ictx прямо под носом у vfd_write().

Такой контроль жизненного цикла объекта ictx предполагается.

Если по некой причине imon_disconnect() декрементирует счётчик, и он
становится равным нулю во время параллельного vfd_write(), то это
намекает на некоторую гонку в манипуляции счётчиками на объект.

Коммит

commit db264d4c66c0fe007b5d19fd007707cd0697603d
Author: Tetsuo Handa <penguin-kernel at I-love.SAKURA.ne.jp>
Date:   Mon May 2 05:49:04 2022 +0200

    media: imon: reorganize serialization

описывает в некоторой степени синхронизацию и жизненные циклы объектов в
этом драйвере.



More information about the lvc-project mailing list