From nobody Sat Jun 13 19:07:00 2026 Received: from mail-dl1-f53.google.com (mail-dl1-f53.google.com [74.125.82.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 00DD12857C7 for ; Wed, 6 May 2026 03:34:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778038495; cv=none; b=jHUTkfBa4U7qXrOEjBmWsalVaJmdYH9hVRsi3KNxUICaqUqr3hyrKT7RrcbPST9WR9hQE6Q2dhSs7BS745PQXKODBEAtDz4LyC4S56XCpLenY2vsFuNEhhkcnSJA3Wfpirog3X4QtLs+R28AJqt7Jzdr8X/Rd46VFIDhg2PwNuY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778038495; c=relaxed/simple; bh=aGl0FFslKa/Rl4d04+/BDVaWg4vCkgnn57v9of+wR7E=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:To:Cc; b=r7wNxlbWV9ynoeGf+pMhj9bqvD9LwHOIVSL9UDkF/6mJiRlxd7/dwEadXeZtOvSF/Mwnv9LLjDMDzg8KdTUw/SoS7YGWrZDhngXntB+sq2plaOdC1/bnOVW9YbBPpKgZ/TcQwMddSijMo6xOryddejqaCRpGYRzaiXaSDSapX60= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=inkirFqI; arc=none smtp.client-ip=74.125.82.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="inkirFqI" Received: by mail-dl1-f53.google.com with SMTP id a92af1059eb24-12dfbcc0703so955870c88.1 for ; Tue, 05 May 2026 20:34:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778038493; x=1778643293; darn=vger.kernel.org; h=cc:to:message-id:content-transfer-encoding:mime-version:subject :date:from:from:to:cc:subject:date:message-id:reply-to; bh=UV5FKrfWHwBi+1GNXlHYzL1K9RCWMMuYYjYFQ6+sCZk=; b=inkirFqI0V06POq1pn0uVjKtm0RbGKNElaZ6gTvF/atAnDYuBqHJ7tpPdEYfF/jB5j 5mh1meOYrK1p8r9lhSp4q7mgjYx+CI2UyjiWNoHBN+63KXhd0RcfU3MuPF9kx68/Xxg/ N/qEgg3svxa12SZ1PAPCQjhQS0ATmzkd+Q8RdzKmj1rMkSaf6xAX20Mfe4lml8LNLfuF C97ovDbSxehTufHuThZ+bTyJ73ixC+pZ6mz++xV7btVaFQ/0awAGR/z/KxQHOXWurE1J 5ewbEHUe9xMCmDPb4B/f900YSdHK+Dtwfi0yBc4qi5/O6cTWXCOmFoiTwYcb7sN6En1M shrw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778038493; x=1778643293; h=cc:to:message-id:content-transfer-encoding:mime-version:subject :date:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=UV5FKrfWHwBi+1GNXlHYzL1K9RCWMMuYYjYFQ6+sCZk=; b=VrLFsFvV0Hj6aZ5fria35Yiq1h48y9dp6pOYQ7f7r8iIwU1RVSwGcpfj7gx6woSNaY MHmdOI/BiaWjRnrnkIAZ7Eem8zf8O5c7iXdOaPegOEzqtZSDsqalq5TDhGybUH/CO9Wx Re3KgeJCWWJ5ntz1Qvw1/IkY2yTh4lYY9n+PrpjHpIugvpvKs1UrCv8l3U0ADfghvdDK ZnjE0+15EFTH8kpLLXS0/UKIMR6mCogI0aZ3MecKc4olRxduQkHEY06A6jCNzHd4N4In DULH0w5TT1e5xmcDVkBu233MTBRhPSSdB7MprJaWok9gBT5tq3EDip0QBrrdxoE8AXZN 39dw== X-Forwarded-Encrypted: i=1; AFNElJ+AIUjJg5/QbxbRpkE5f0Xq24IA51Le72pKYTpe04AUC32nbswuf4+Uq/RMmDUI0Id+Zg8UF0iFZ5vkuqs=@vger.kernel.org X-Gm-Message-State: AOJu0Yyvm95Wy2DZ6vnl7NWu4Wd1y6z7nqe1gSQYPPVDrh8wrKJx8sV1 X/ek7wSFD9+1X1AJa6jMY1doNd2UPTuhd0mQBQ5RvJhyL+Y0+aH5wKeG X-Gm-Gg: AeBDievh+8FbWgRUcIiCchk/7fLa04tcTG+gyE/kgvAMOtOqeZcUQzmpP/olwMxwnWM T0wekCFmeejDMiq7GY4UtHEpa173PenX5Y9zoztfdZuTp7x0zxYjAVi2JKJMceWgL0o0JV8F+Dv yo/vpOK+LrH6Hc/XZJGvSh1YFbvlMM09cnF2wrwRPxeQLlGoNNgcCwDcMcOSAqi9u5FZ1zKYflQ f8uSAXYAweFiDzbs1IHudc+KB7nNPxNdNx91sM5cC++ctNdyzNeqfYyHDtVP/Pw/srFbp32dwGM eum3Bs1T/KUNMA9Fp4pVGoDgeKKx9+Dka8SgUIFEqt6XM8vfSq4oDP/a+NLu3yzigP+hZRGwTcb TYR4CxOzqqUDJLLsXc/Kq4DODvBEDgfc1xJAKPwJ741fPpUHhlu9DKrZpo794mUu2WmcVcygyRt 4+KIon423M5qSCVQodzfb/MxXPv8YtVJHcVadVKFFz3IUJBtHRcujBIbPchVOECAR/dUEpXKsEQ c7cDJJX4I9C X-Received: by 2002:a05:7022:4593:b0:128:d51a:5161 with SMTP id a92af1059eb24-1318e7f7f75mr1073101c88.27.1778038492984; Tue, 05 May 2026 20:34:52 -0700 (PDT) Received: from [192.168.1.18] (177-4-161-87.user3p.v-tal.net.br. [177.4.161.87]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-131f9789e3dsm1787536c88.8.2026.05.05.20.34.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 May 2026 20:34:52 -0700 (PDT) From: =?utf-8?q?C=C3=A1ssio_Gabriel?= Date: Wed, 06 May 2026 00:34:47 -0300 Subject: [PATCH] ALSA: core: Serialize deferred fasync state checks Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260506-alsa-core-fasync-on-lock-v1-1-ea48c77d6ca4@gmail.com> X-B4-Tracking: v=1; b=H4sIAAAAAAAC/yXMQQqDMBBA0avIrDugQYX2KqWLZJzYUUlKphVFv LuxLt/i/w2Uk7DCo9gg8SwqMWRUtwLobUPPKF02mNK0ZW0M2kktUkyM3uoaCGPAKdKIDTnqmsq 3d+cg55/EXpb/+vm6rD83MH3PH+z7AYoGiV18AAAA X-Change-ID: 20260422-alsa-core-fasync-on-lock-5cbcd51f69bb To: Takashi Iwai , Jaroslav Kysela Cc: linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, stable@vger.kernel.org, =?utf-8?q?C=C3=A1ssio_Gabriel?= X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1972; i=cassiogabrielcontato@gmail.com; h=from:subject:message-id; bh=aGl0FFslKa/Rl4d04+/BDVaWg4vCkgnn57v9of+wR7E=; b=owGbwMvMwCV2IdZeKur/u2bG02pJDJm/tt2ysy66Vstpf2JTypTwdc53Ijseb0lYyMvG7mB0m c0sKuRWRykLgxgXg6yYIsvqpEWWe7oeXK2PW+EBM4eVCWQIAxenAEzEzIDhn5Wt8SbRmUJBF3qf Gi5+La35/92Wlf3lf66v+fYx77atSzkjw+MV+5Yz2wek6K9bqStxqVt/ZijLuY3sy2I+13Yd/WA hzgkA X-Developer-Key: i=cassiogabrielcontato@gmail.com; a=openpgp; fpr=AB62A239BC8AE0D57F5EA848D05D3F1A5AFFEE83 snd_fasync_helper() updates fasync->on under snd_fasync_lock, and snd_fasync_work_fn() now also evaluates fasync->on under the same lock. snd_kill_fasync() still tests the flag before taking the lock, leaving an unsynchronized read against FASYNC enable/disable updates. Move the enabled-state check into the locked section. Also clear fasync->on under snd_fasync_lock in snd_fasync_free() before unlinking the pending entry. Together with the locked sender-side check, this publishes teardown before flushing the deferred work and prevents a racing sender from requeueing the entry after free has started. Fixes: ef34a0ae7a26 ("ALSA: core: Add async signal helpers") Fixes: 8146cd333d23 ("ALSA: core: Fix potential data race at fasync handlin= g") Cc: stable@vger.kernel.org Signed-off-by: C=C3=A1ssio Gabriel --- sound/core/misc.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/sound/core/misc.c b/sound/core/misc.c index 5aca09edf971..833124c8e4fa 100644 --- a/sound/core/misc.c +++ b/sound/core/misc.c @@ -148,9 +148,11 @@ EXPORT_SYMBOL_GPL(snd_fasync_helper); =20 void snd_kill_fasync(struct snd_fasync *fasync, int signal, int poll) { - if (!fasync || !fasync->on) + if (!fasync) return; guard(spinlock_irqsave)(&snd_fasync_lock); + if (!fasync->on) + return; fasync->signal =3D signal; fasync->poll =3D poll; list_move(&fasync->list, &snd_fasync_list); @@ -163,8 +165,10 @@ void snd_fasync_free(struct snd_fasync *fasync) if (!fasync) return; =20 - scoped_guard(spinlock_irq, &snd_fasync_lock) + scoped_guard(spinlock_irq, &snd_fasync_lock) { + fasync->on =3D 0; list_del_init(&fasync->list); + } =20 flush_work(&snd_fasync_work); kfree(fasync); --- base-commit: 0d672ef050d4e1c3891c9944f72c85769978bbee change-id: 20260422-alsa-core-fasync-on-lock-5cbcd51f69bb Best regards, -- =20 C=C3=A1ssio Gabriel