From nobody Sun Feb 8 12:33:06 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2EAEEEB64DD for ; Sun, 25 Jun 2023 16:23:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229919AbjFYQXJ (ORCPT ); Sun, 25 Jun 2023 12:23:09 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54906 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229492AbjFYQXG (ORCPT ); Sun, 25 Jun 2023 12:23:06 -0400 Received: from JPN01-OS0-obe.outbound.protection.outlook.com (mail-os0jpn01on2094.outbound.protection.outlook.com [40.107.113.94]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C1F39A8 for ; Sun, 25 Jun 2023 09:22:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=bAL7/HMhFLGHp8YTE5rkVwwrSPPpyaCFBvo0vH7odywq6xrEEuJIrj0QjgarHhSgRiG9r20mCJdbosFikbUxElwci8m/o+e7u2ScrMbBwQ8TN3TRU4EiEk9CGG6HC3XHF8qgekpDB4DGtELwi7h6GJSP1+VYJLXmsUcgkPdq+C3zXBM7IM0ndQSY1LOjAiYrAfnmZXCT974qKmcRuugmnH0TLiDqaSR4lZo3vwhznAq//S4h47pZQIHtZpLbHVUVmWS8h8LRsvmYp3DJcYLbKWKG0SbFfLSD2I52EnvktW2n5JilhaBXow5UtiTwzqkApvSdzbJgUFJBZmNM/vPhuQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=mGZTnvMo6Po+M8u/HPP2Kmqw5w4BvrHq5tLOfQt0o4I=; b=NksagqynyDp/FsgjFf57KFL0mcfJmI/d5dIGJEzZZG8ULqYb8T5bXimVkqgiHoPPa/D816xUEC1d/4HQ7wzAG5tX0wBY4GoTkoRCRiGHv19DQKoUB991hMe6Sdii/EspfCzlCWbyWXDImrliucWAvZT8ND62TLWCqBQY8IWMyl8At0Bb3TWOgrm87NtylfKu06cfyJtD5aBXonf3C3bl+Ssg1A83/NkAIDi7acnAic360OD92NK17lxURmeXRVXeKMYzeONyijXcJLdqHEMuIJv7zayJGTvDyYA5Emq+e0sW0Kty8p+L9ApNMrdPq58OCERaOdGkn4lJNHyx5h+/OQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=connect.ust.hk; dmarc=pass action=none header.from=connect.ust.hk; dkim=pass header.d=connect.ust.hk; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=connect.ust.hk; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=mGZTnvMo6Po+M8u/HPP2Kmqw5w4BvrHq5tLOfQt0o4I=; b=JOFaKIVGMKFMQc02P0R5l9E/dALB99Pl6fofbgTAn+6/Kgjm/6kl41bqd1pwsrwHedEjVqGgk2Ukr0GWPMWAQc0WqwAyIHpLx9Dc5ZCSuSQdOSAFb1a4UiqBlKwuYppNFoyvteMVQKLpZvGuCjsmeFhQ2LHBHj3u3W4JTXaDpPY= Received: from TYCP286MB1188.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:b7::8) by TYWP286MB2731.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24e::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6521.23; Sun, 25 Jun 2023 16:22:57 +0000 Received: from TYCP286MB1188.JPNP286.PROD.OUTLOOK.COM ([fe80::b429:5aa3:12f1:6b8]) by TYCP286MB1188.JPNP286.PROD.OUTLOOK.COM ([fe80::b429:5aa3:12f1:6b8%4]) with mapi id 15.20.6521.026; Sun, 25 Jun 2023 16:22:57 +0000 From: YE Chengfeng To: "perex@perex.cz" , "tiwai@suse.com" , "pteerapong@chromium.org" CC: "alsa-devel@alsa-project.org" , "linux-kernel@vger.kernel.org" Subject: [PATCH] ALSA: aloop: Fix &cable->lock deadlock issues Thread-Topic: [PATCH] ALSA: aloop: Fix &cable->lock deadlock issues Thread-Index: AQHZp4CrxJ87x2u0IEK4c5YXsaGunQ== Date: Sun, 25 Jun 2023 16:22:56 +0000 Message-ID: Accept-Language: zh-CN, en-US Content-Language: zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=connect.ust.hk; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: TYCP286MB1188:EE_|TYWP286MB2731:EE_ x-ms-office365-filtering-correlation-id: 578704a0-cdd4-4c2f-184a-08db75986f86 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: RGkTURwOkLPlH7waGtLhCaHczWEXLkhvU5WL++OoXcXIB3jECx5unPdKorv+o536o9zUOTL5tF5BXsqH2fMXKbpPzDVuTOlol+mWb+2oz/psIIg5xedKCt6wtHoGErgiXfwE+4bVk54GyrhfCui1wzA1VGe6BxHAG7Szj/HmP8md2z/PrOwwz6H6yvb+D3IIjpjUVTOcpZZiuLjC6C5yWUUI8S7pAp5v2BLqzz9dbolgb154VNrSHrHRT5JrmRwKcrzzHkwdSnEFpWgqmX9tUbEzo4ecnYWzGT4VXcNEXlqRnIJlISj58jE8E+gOnaqBFVYT6q7c/Dpc8vQalpQdZzewJMEnN91IeRnaWOKikz99vTAKp8PTFLiBq56+fJYklRkitlibpGubdgxwyO9K5W92lZN+yOD31HR9mjWZIEUKTf38YzgJJ+SPp82QEwQVbFpz0UYAiCx39vaifXPaCPlYIfPmWdPAV7bsqvnw/zT/8l7AmUgus3yOMxrB3s9WsQ0wBWNgo4C03OjDrgXL7Y6KeO6VY+syDBEEKPrxudkXlLgyrGv+h9j0RnP2HhxDD58odPj6QCm7mN9+oBh6+zx/mtxm4kSTonH+gxFEdXBFB1t1dgUqkO/g5nZySVxl x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYCP286MB1188.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230028)(4636009)(346002)(39860400002)(396003)(136003)(376002)(366004)(451199021)(33656002)(52536014)(5660300002)(41300700001)(316002)(86362001)(66476007)(66446008)(8936002)(8676002)(55016003)(38070700005)(64756008)(66556008)(4326008)(38100700002)(122000001)(76116006)(91956017)(786003)(66946007)(26005)(6506007)(2906002)(9686003)(186003)(7696005)(71200400001)(478600001)(83380400001)(110136005)(54906003);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?gb2312?B?NHV0a3NUempBRlkrQ0ZGcWovN05jTnN4QU0zUFBPMGhMZmxYUkhJMHk0YTRG?= =?gb2312?B?c2YxUHJ5MXlDN1VhQ1oxMTdNR0hoNXEwaXpOQXNGT2pzSXdBS0ZDeXI3RVln?= =?gb2312?B?UTVKSkhNdU0yNmp6NEdrTG5ERWs4dDlDL1h6RFlKU09NZVI4bTc5ckZjTHMv?= =?gb2312?B?NTJKclRvV21YbWR1M2REMzBvOTAySDlhMjZRTW9XY0JobDRFTkRTS2pFWGFD?= =?gb2312?B?Z2l4M1NVYUROejBLK1I5UjNUaXBWbEpQaXowK3JYenMzWmdLQ0VMdVBxbEVp?= =?gb2312?B?SzFtblFUMjhhQ3NzOFFadSs4cTRQVmxPR0RJVTBSNXZHMDJqT0lxMHF1NEJK?= =?gb2312?B?ZmFsL0w4dDhnZmJpV0VRYmN3N2NDMW5YMk44RjVQUTlmRUVmQ0FPOHVaV2tB?= =?gb2312?B?QU9jUnV3T0lHY2cvMzd0V2NvSUhoSmJPdUZqNU1xajZDWEpveGp0a205dWNN?= =?gb2312?B?RTlhTVVXZmdLdTQ5RGpFQzYyaitzNlRxRU5PcThydDE5b1hVTEx2RHA2WlFw?= =?gb2312?B?TzhyT2hYVnkxOUw3cUJpbWlGSExIK3VZU0R0M1hLaGI2emxxT3cvckFmS0dH?= =?gb2312?B?VWc3emVOTGNOWk5NZTZpUmNaMUwremhZTk1RMStPRTV2QmprVWd0NjlvaU9y?= =?gb2312?B?WDRXWWZUVmdqMit3SnJHem52SXJxUWh5WDFIZ2J0SzRKd2laQ0dIOUN6Zlhh?= =?gb2312?B?ZU4rdXpLY29JblRvL25aeUF0R3JZSDZaV3dDaGJQTG5FMXFRcDVYTEJKdXd0?= =?gb2312?B?NEJtcGZWRkgzeUdWQjl1UGNGaThCV2hNdTN6VVNrd09SVHZ2OG1GQkdkT3Nu?= =?gb2312?B?OWZNODFyaWtObktqRG9ia3pDNEFwUXhUZ3dwdzEwdVl2T2tnTVRoN251Smsv?= =?gb2312?B?WGU4T01VQXlVOXpRK3BDQVIxSkJzY3h0b1VjK2F4Rm9sY2xWcTNJc01haUhI?= =?gb2312?B?RjhxM0tFMnlQY1o4YWs3ZTJPT0hrL3JLS1NReXJXb2N4WVliNVBuZVUrYUVX?= =?gb2312?B?TFRwN2Y4a2twMTk3SXhUMUc0RllkQ3ZGS2YvbSttMUhJaGRLMXN5d2pobDFs?= =?gb2312?B?SFFDbllSS1JPOVRlYkcvVTlyRnBHN1RjVDRGaEpPdUM4UWlXMU13R1RjY1Rm?= =?gb2312?B?S0EyOEEyK1RRQkREYWoxV0lGSFRxODBWR0VnK2dQNlRVdGxFaUpqdkt4Z05j?= =?gb2312?B?bHNWdGVXWnB6dktCRmVnTFNvYllBSDBVME5QME90YmFiWUFhMEFJK2Ruc2dQ?= =?gb2312?B?aUROa1E4YXlobUQzK0ltOE12R3hEQkpnaGVpN292ckVxUmRIM1YzbFJUY1po?= =?gb2312?B?YzN0a3puOEh6OGZTSlJxLzUxZHBCb3hDZFViS2wzbi94V08vYWF2TjJGeUc1?= =?gb2312?B?c044aStaaWRUSSt6K0RiOXA5TWtHcFUrTGVzSTRGelNnT2p1WHNRaHc3OWtG?= =?gb2312?B?WVhraVRyUlRyamo5YlpuOEdLODFLckxaZ0J3L1FsbjdDZ1MwUHhHUEZsQ1Bu?= =?gb2312?B?UHNXb0ZaM0puZ1Q3bjF2bjZYSWJyOGRqekVVWTRXbG9EK3htVnJvQ3diSVAw?= =?gb2312?B?T3RVdGJnclAyYTFSNFMwWUdwb0NDMmE3MCtsMlVoYXFkcFhoVUNvWGROVk42?= =?gb2312?B?UUdyUHluN2Vsbnc3SVZnTzdnZndJemhXeXdDa0lMdkN4cmk4c0pyZmgrUE9H?= =?gb2312?B?cGJRZWNldlMxb0tmYkM2WkljeCsydy8vSXNqTTd3SDlhY0VIOUQ5bDN3SDZI?= =?gb2312?B?TG0yd2tja01NQ0FCdzgybjM0NXdsZDFkK1oyYmVpdEs3aUwxeG4vRXpseVhB?= =?gb2312?B?UnpEVTMxRDlteEFjdG1ySnoyVno1SnI4MUNSNzdqYXk2Wno1OHV2bGE1ME9L?= =?gb2312?B?c29LQU9OWitNQ2h2ei9RMjRZUFVtdnFWSk5aYmQ5THpKaTZXTklnN25qcE5I?= =?gb2312?B?YjhTdnR0K3dlb1ZENVFNakR5QTk2aTNCYUliaUlRbEF2QVZMTm9qK2swdVBP?= =?gb2312?B?L1RnbkJQbFMzWFhHaGFDQnBXOXVTUHNaM1RGQnFGVExqN1FpQjg2WXJCVVdr?= =?gb2312?B?ckdYaC8wNFMzS3JSOGhqQWZHT1V6NURTb0kzQjVsbE1rSFRteGRPUHJqbk1C?= =?gb2312?Q?7GrTMQ27B19a2TUtcF/U2LfWh?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: connect.ust.hk X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: TYCP286MB1188.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-Network-Message-Id: 578704a0-cdd4-4c2f-184a-08db75986f86 X-MS-Exchange-CrossTenant-originalarrivaltime: 25 Jun 2023 16:22:56.9251 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 6c1d4152-39d0-44ca-88d9-b8d6ddca0708 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: nZmEpbbeMO+DfX/X516MGUbERggJTdG7bMB0GjbNrgjw1ofFZbCI5U4gEI13DL3elRZJAfDGy48kBW6CR8xqGA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYWP286MB2731 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The timer loopback_jiffies_timer_function is executed under bottom-half softirq context and require a spinlock, thus other process context code requiring the same lock (i.e., loopback_trigger, loopback_pointer) can deadlock with the timer if it is preempted while holding the lock. Deadlock scenario: loopback_trigger -> spin_lock(&cable->lock); -> loopback_jiffies_timer_function -> spin_lock_irqsave(&dpcm->cable->lock, flags); Fix the potential deadlock by using spin_lock_irqsave. Signed-off-by: Chengfeng Ye --- sound/drivers/aloop.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/sound/drivers/aloop.c b/sound/drivers/aloop.c index a38e602b4fc6..8ee93f8581b4 100644 --- a/sound/drivers/aloop.c +++ b/sound/drivers/aloop.c @@ -379,6 +379,7 @@ static int loopback_trigger(struct snd_pcm_substream *s= ubstream, int cmd) struct snd_pcm_runtime *runtime =3D substream->runtime; struct loopback_pcm *dpcm =3D runtime->private_data; struct loopback_cable *cable =3D dpcm->cable; + unsigned long flags; int err =3D 0, stream =3D 1 << substream->stream; =20 switch (cmd) { @@ -389,39 +390,39 @@ static int loopback_trigger(struct snd_pcm_substream = *substream, int cmd) dpcm->last_jiffies =3D jiffies; dpcm->pcm_rate_shift =3D 0; dpcm->last_drift =3D 0; - spin_lock(&cable->lock);=09 + spin_lock_irqsave(&cable->lock, flags); cable->running |=3D stream; cable->pause &=3D ~stream; err =3D cable->ops->start(dpcm); - spin_unlock(&cable->lock); + spin_unlock_irqrestore(&cable->lock, flags); if (substream->stream =3D=3D SNDRV_PCM_STREAM_PLAYBACK) loopback_active_notify(dpcm); break; case SNDRV_PCM_TRIGGER_STOP: - spin_lock(&cable->lock);=09 + spin_lock_irqsave(&cable->lock, flags); cable->running &=3D ~stream; cable->pause &=3D ~stream; err =3D cable->ops->stop(dpcm); - spin_unlock(&cable->lock); + spin_unlock_irqrestore(&cable->lock, flags); if (substream->stream =3D=3D SNDRV_PCM_STREAM_PLAYBACK) loopback_active_notify(dpcm); break; case SNDRV_PCM_TRIGGER_PAUSE_PUSH: case SNDRV_PCM_TRIGGER_SUSPEND: - spin_lock(&cable->lock);=09 + spin_lock_irqsave(&cable->lock, flags); cable->pause |=3D stream; err =3D cable->ops->stop(dpcm); - spin_unlock(&cable->lock); + spin_unlock_irqrestore(&cable->lock, flags); if (substream->stream =3D=3D SNDRV_PCM_STREAM_PLAYBACK) loopback_active_notify(dpcm); break; case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: case SNDRV_PCM_TRIGGER_RESUME: - spin_lock(&cable->lock); + spin_lock_irqsave(&cable->lock, flags); dpcm->last_jiffies =3D jiffies; cable->pause &=3D ~stream; err =3D cable->ops->start(dpcm); - spin_unlock(&cable->lock); + spin_unlock_irqrestore(&cable->lock, flags); if (substream->stream =3D=3D SNDRV_PCM_STREAM_PLAYBACK) loopback_active_notify(dpcm); break; @@ -865,12 +866,13 @@ static snd_pcm_uframes_t loopback_pointer(struct snd_= pcm_substream *substream) struct snd_pcm_runtime *runtime =3D substream->runtime; struct loopback_pcm *dpcm =3D runtime->private_data; snd_pcm_uframes_t pos; + unsigned long flags; =20 - spin_lock(&dpcm->cable->lock); + spin_lock_irqsave(&dpcm->cable->lock, flags); if (dpcm->cable->ops->pos_update) dpcm->cable->ops->pos_update(dpcm->cable); pos =3D dpcm->buf_pos; - spin_unlock(&dpcm->cable->lock); + spin_unlock_irqrestore(&dpcm->cable->lock, flags); return bytes_to_frames(runtime, pos); } =20 --=20 2.17.1