[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