Re: [syzbot] [sound?] possible deadlock in snd_pcm_period_elapsed (4)

From: Hillf Danton
Date: Fri Mar 15 2024 - 19:35:00 EST


#syz test https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master

--- x/sound/core/timer.c
+++ y/sound/core/timer.c
@@ -409,8 +409,9 @@ static void snd_timer_close_locked(struc
struct snd_timer *timer = timeri->timer;

if (timer) {
- guard(spinlock)(&timer->lock);
+ spin_lock_irq(&timer->lock);
timeri->flags |= SNDRV_TIMER_IFLG_DEAD;
+ spin_unlock_irq(&timer->lock);
}

if (!list_empty(&timeri->open_list)) {
--- x/mm/page_alloc.c
+++ y/mm/page_alloc.c
@@ -4816,8 +4816,9 @@ static void *make_alloc_exact(unsigned l
{
if (addr) {
unsigned long nr = DIV_ROUND_UP(size, PAGE_SIZE);
+ unsigned long pgs = (1UL << order);
struct page *page = virt_to_page((void *)addr);
- struct page *last = page + nr;
+ struct page *last = page + max(nr, pgs);

split_page_owner(page, order, 0);
split_page_memcg(page, order, 0);
--