[lvc-project] [PATCH] virt: vbox: fix possible circular timer scheduling

Aleksey Simakov bigalex934 at gmail.com
Tue Nov 25 20:15:52 MSK 2025


Добрый вечер!
Для 6.1 патч не прикладывается по причине того, что там старый API
используется с del_timer_sync, но метод который мы в патче
использовали уже есть - с его адаптацией все ясно.
Для ветки 5.10 вопрос возникает, т.к. там из публичного доступного API
для таймеров в kernel/timer.h, есть только del_timer_sync, для этой
ветки так же изменения связанные с API таймеров бэкпортнуть или
излишне будет?

вт, 25 нояб. 2025 г. в 11:33, Fedor Pchelkin <pchelkin at ispras.ru>:
>
> On Sat, 22. Nov 21:21, Alexey Simakov wrote:
> > According to timer.c documentation, callers of this function should ensure
> > the timer is not rearmed.  Meanwhile, the heartbeat callback may itself
> > reschedule the heartbeat timer which could lead to theoretically
> > indefinite loop iterations inside __timer_delete_sync(), due to a race
> > when the heartbeat callback is always running when it's attempted to be
> > detached.
> >
> > Use timer_shutdown_sync() instead to avoid this issue.
> >
> > Found by Linux Verification Center (linuxtesting.org) with SVACE.
> >
> > Fixes: 0ba002bc4393 ("virt: Add vboxguest driver for Virtual Box Guest integration"):
> > Signed-off-by: Alexey Simakov <bigalex934 at gmail.com>
> > ---
>
> Просьба выслать адаптированный патч для LVC 5.10, 6.1 и 6.12 веток,
> направив его в lvc-patches at linuxtesting.org с указанием целевых веток в
> теме письма.
>
> Апстримный не применяется по крайней мере к 5.10 и 6.1 в связи с
> изменениями в контексте.
>
> >  drivers/virt/vboxguest/vboxguest_core.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/drivers/virt/vboxguest/vboxguest_core.c b/drivers/virt/vboxguest/vboxguest_core.c
> > index b177a534b6a4..508ba711669d 100644
> > --- a/drivers/virt/vboxguest/vboxguest_core.c
> > +++ b/drivers/virt/vboxguest/vboxguest_core.c
> > @@ -495,7 +495,7 @@ static int vbg_heartbeat_init(struct vbg_dev *gdev)
> >   */
> >  static void vbg_heartbeat_exit(struct vbg_dev *gdev)
> >  {
> > -     timer_delete_sync(&gdev->heartbeat_timer);
> > +     timer_shutdown_sync(&gdev->heartbeat_timer);
> >       vbg_heartbeat_host_config(gdev, false);
> >       vbg_req_free(gdev->guest_heartbeat_req,
> >                    sizeof(*gdev->guest_heartbeat_req));
> > --
> > 2.34.1


More information about the lvc-project mailing list