From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-qv1-f41.google.com (mail-qv1-f41.google.com [209.85.219.41]) (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 807AA30D3F3 for ; Sat, 4 Jul 2026 20:03:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.41 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783195414; cv=none; b=Pghym7ihEWVj27i6MViyykrKMyMaylGC/5bO+0pYZMxSBhzLNRDKaZ/3e2DYvr6G9jdbYO1J9P8qPfE8ddzYSP3J1w41jVDmw1q1RQAsWHM+CBALND4Za56F3HDtSbdPe6vkaOmQocktIgZ9LSCQbOfUAhtxbH9/eYahn3fm2rw= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783195414; c=relaxed/simple; bh=9XsXo7q/8mNOgukAZVzYBBXDo0Ob/80vCLiatJ9HA5Y=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=DbJ2KOvJAQUJ5tQc83WI9zSf+X/Z9qOx8NmYEeleRwAmDM7JrRnso4qqNiv72xWTIKL5e5Z+1rBI1TA/f7ABJpmI0NIHW9kdmlYamuRT2XfTkX+jqP+4RqEN6HUgIrI1RWKz5glksnk/6jhVhcStLUdysH4Gu/ztUdJZeALRcsw= 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=meF3r4fR; arc=none smtp.client-ip=209.85.219.41 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="meF3r4fR" Received: by mail-qv1-f41.google.com with SMTP id 6a1803df08f44-8ee88fce536so8371566d6.1 for ; Sat, 04 Jul 2026 13:03:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783195412; x=1783800212; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=wj5NhGN8hkNKLjQV8L+00m1+Ba6O0PCkR7v2DNR+qBs=; b=meF3r4fRwPHwOlUX6eqtnpP/N2tLi+bR68CeSg1E9oINvnFG2UYpNOX2khS/J/O6Rs DcIsThSEtMiYZQbzN5dFImCM0zPnQfyS6KtAH5lIISChjrvqK2FJZ4s/jpC/KjdNWEGX T2+JbPbuYnWzaxpBHMxbKgP4GQVRjLF5Ve+b2VEKbPc6c1LRtfchnFy0UiyijuqjWtQS QWdZ+X7dbbm6vUS4gA8uhX1/tjhlLex4Ioe+KVnCN6tpQ2k41y+AyMXXZaSbsL7zc1Cv 4TRsKleRg3CUx0OtIY/jEqiDSc7JRZo7HO9kg+sykFBHHTriaXfktzt3Gx5ibFzwBj4Y +qCQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783195412; x=1783800212; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=wj5NhGN8hkNKLjQV8L+00m1+Ba6O0PCkR7v2DNR+qBs=; b=jTifI7TC8YHCZ2bvkTw1mh3+n4VDS3hKROLR4a5WEA3wlB+lTRE9ILQoRoGbU36guD jOfghYSfB1YbmYvwYRx5wtOpabbHVdo9M+TO1Rd/+SQlipnKFzR0exfxa2i8GUmhVlIf sPpfVCHY+/x9VVodU7pW/GL6JjLJN5e8ZNfMbvb8QwntHu3z7l2ePvuF8WSNOsmGjCQZ HAcRrizqgAE5K2xTb1hhWXXwWaD3UhjDSGheVVaF+ytw7/IOVKAcJlhliPbrYZdqzwkm gp26yLW2Vpo/O2CjPSG4y1t7WzgAyIxDg2Iu4SP7If5xzC8u0Sf7mky3Wi3sejQNn51p UDuQ== X-Forwarded-Encrypted: i=1; AHgh+Rpbjq35sT07ouczd3HbNiE3Z/fUSegKIrLsj8K4xoV3mjgV6vHaKBwfj3Ulp4Tzqwu7A6cGe6d+OkXX2rg=@vger.kernel.org X-Gm-Message-State: AOJu0YxKTXFuBzFHvWr7G5gSXadTFGBcHaXw1gbxTns2tYqINGtXcKle BSkqzGvmQkf8xVTJwfJs9Lr8GvM5avXIKnhNkD/HJmu9u6i4YFKbw4ah X-Gm-Gg: AfdE7ckv3syhToWyQALvouH4YOYH8qXhmRvGp/+51mQi4GxLUSUz1WS3C802vZGrx+u EeIqihMbDPitXQQJvoeAWiEwuR7/zNSWLkepkwO9ie965e3C9gr9vCnl7IlkP6vqnRuBNobBS2r dmVMiq2cI+sAuvJXSK7F3dyMCEj758qism/0L82WpwWqFYAYmWZPhpgY6xXBfPXsGVbA8P8yPEq tBbVoqwXPVLkLQP9zSQc9Xg6WC64QBmDFsbECNyUrUXsj1H1Sym+592mm3GF1QDFHkwwFO7iTIL f2Lfy2YpltkgBlZokrRI8JqErdDAxtnApt+aDG3qJubdleXQywbjI/h9Ty48otezA4xf+DC2zAh 7eJjxw07Wfm27AOvDK57XIbNaj2oVynuHV/wbb9aX1DL5RtKtRihFX52t1qw4xJLQJ2OdadaYPd MurULaHPsZ3NOXp6Sc0IPsJvkEHUu2tvsJGvP0u+rQ8tR+I/m4OH2g X-Received: by 2002:a05:6214:1c81:b0:8f5:5866:161d with SMTP id 6a1803df08f44-8f74997c896mr74200476d6.2.1783195412369; Sat, 04 Jul 2026 13:03:32 -0700 (PDT) Received: from i4-l-hqh5357-03.ad.psu.edu ([130.203.139.71]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-8f46f30b94fsm86758016d6.21.2026.07.04.13.03.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 04 Jul 2026 13:03:32 -0700 (PDT) From: Shuangpeng Bai To: Mauro Carvalho Chehab Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Shuangpeng Bai Subject: [PATCH] media: em28xx: fix audio extension ref leak Date: Sat, 4 Jul 2026 16:02:05 -0400 Message-ID: <20260704200301.3968952-1-shuangpeng.kernel@gmail.com> X-Mailer: git-send-email 2.43.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit em28xx_audio_init() takes a reference on the em28xx device before creating and registering the ALSA card. If snd_card_new(), snd_pcm_new(), audio URB setup, or snd_card_register() fails, the function returns an error without dropping the reference. The em28xx extension framework ignores init callback errors, so the failing init path must balance the reference itself. Drop the reference on every audio init error path. Only store the ALSA card in the audio extension after the card is registered successfully, so em28xx_audio_fini() can use that pointer as the success marker. This avoids a second put during disconnect or module unload after init has already failed and dropped the reference. Signed-off-by: Shuangpeng Bai --- drivers/media/usb/em28xx/em28xx-audio.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/drivers/media/usb/em28xx/em28xx-audio.c b/drivers/media/usb/em28xx/em28xx-audio.c index ccff6be5599e..f583837f9a85 100644 --- a/drivers/media/usb/em28xx/em28xx-audio.c +++ b/drivers/media/usb/em28xx/em28xx-audio.c @@ -829,10 +829,9 @@ static int em28xx_audio_init(struct em28xx *dev) err = snd_card_new(&dev->intf->dev, index[devnr], "Em28xx Audio", THIS_MODULE, 0, &card); if (err < 0) - return err; + goto ref_put; spin_lock_init(&adev->slock); - adev->sndcard = card; adev->udev = udev; err = snd_pcm_new(card, "Em28xx Audio", 0, 0, 1, &pcm); @@ -875,6 +874,8 @@ static int em28xx_audio_init(struct em28xx *dev) if (err < 0) goto urb_free; + adev->sndcard = card; + dev_info(&dev->intf->dev, "Audio extension successfully initialized\n"); return 0; @@ -883,7 +884,9 @@ static int em28xx_audio_init(struct em28xx *dev) card_free: snd_card_free(card); - adev->sndcard = NULL; + +ref_put: + kref_put(&dev->ref, em28xx_free_device); return err; } @@ -912,9 +915,9 @@ static int em28xx_audio_fini(struct em28xx *dev) snd_card_free(dev->adev.sndcard); dev->adev.sndcard = NULL; - } - kref_put(&dev->ref, em28xx_free_device); + kref_put(&dev->ref, em28xx_free_device); + } return 0; } -- 2.43.0