Received: by 2002:a05:6a10:f347:0:0:0:0 with SMTP id d7csp1980620pxu; Sun, 13 Dec 2020 09:30:27 -0800 (PST) X-Google-Smtp-Source: ABdhPJxb5jOqP3ou3wvjdA5AOAbXiCVouYeQnpPZmdamTdVW3DgciXCegTWVdNpcSf5k+Bc43ftw X-Received: by 2002:a17:906:5386:: with SMTP id g6mr14672639ejo.137.1607880626947; Sun, 13 Dec 2020 09:30:26 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1607880626; cv=none; d=google.com; s=arc-20160816; b=rWLeuIk1sf/BWjKO0q385W2FrBogyI72hh1pZxMdpoNDKUoFFVU2zKV/q/VucqoDMq wRiLaboHQIITXZd2zLiTbfNwserBnZPnvWGPh0vFNXRgyZJzJyHH3ErFhNygdxpUb2Ne Bx+MsIitfKtP4WDjnS/Vj/rZevvVvfxMFPPC+FuGVgGaUt590cI4ahtA7AfF87zBQTaK qPXyKMd8dMbtmi5HLsaDFdJfC+pM0Dmo6DXwe0lRrKgQyeX2I5/GvXvg7yFhV55L8tOS BYpcHmLTYbp1WwFcYqkJ1GpoPyvtxqy9ZaBUYQx2Ri+xq/oEws1D35ErbmbdiLbV+wpB 8dkw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=5w7+jTgC8hBJiHtcsnmrY7j8FYxZ7rdBNlmPCyHcgzw=; b=F4Px0Fk9NoiXf/PQmstiDibxDw962QzhS8Tpgk2Iu+TcsMpOihbCb3rwbDbp2LOYLS rhAk/3aVZLwM5XL/fYtgdrgGJ4vWZWce7cWLZVh8co1AiT0+rOPOx93P1UYuWmNulKxq nUbgjlPBcrAW/syoUE+axUyKOF1C6Mo4CMhX5u1A5cvRmskx2iVMgEMb5f6wn8vliUoa AxHA4DAO7e7lyDz5dnZ29IU2CWwM22/k3aw/2nGAa2Ovm8n/ldtpTrMOglpjhme2mNvj EZg/bqRZ1oY9Z6Dp2RtR5d1EjQxczwnurPyLrtoU6sdHQl88Gfdq5GLrT34Kh3mtPW13 nbvg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b="PD/47T/z"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id k9si10420056edv.493.2020.12.13.09.30.04; Sun, 13 Dec 2020 09:30:26 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b="PD/47T/z"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2439979AbgLMBVJ (ORCPT + 99 others); Sat, 12 Dec 2020 20:21:09 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43460 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2439971AbgLMBVF (ORCPT ); Sat, 12 Dec 2020 20:21:05 -0500 Received: from mail-pl1-x641.google.com (mail-pl1-x641.google.com [IPv6:2607:f8b0:4864:20::641]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 413C5C0613CF; Sat, 12 Dec 2020 17:20:25 -0800 (PST) Received: by mail-pl1-x641.google.com with SMTP id y8so6712438plp.8; Sat, 12 Dec 2020 17:20:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=5w7+jTgC8hBJiHtcsnmrY7j8FYxZ7rdBNlmPCyHcgzw=; b=PD/47T/zAPbDNd2ZPt8k9Mv+Mn1VXpQeAhkbcM7VQMohbhTNvjyEtL4VFn1CvygL91 gqVBG/pL2SrfuMPfoVhZoZ/q27AuuyInxdJlSspeOgmUKlWMm0RoedXJTaL9jC3Blqxm G/1OIT1XPqiem/SagfHaMK28261VXClzwspLymV+pq+9jXcZBUSTpgSODIM0OURxvdFv VhTmvcHX7d5/nWBbFZoGuV4DCfZNf4jYOdAqJmQndy9lrcuL5WaZ67zXclw5SBokGary iih14x1dGf2m8ftOA6y7oBY8mhDPZLnp58jYO5Elck51q3Y3BbVKO66ZUwqddLLVCy8N yCUg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=5w7+jTgC8hBJiHtcsnmrY7j8FYxZ7rdBNlmPCyHcgzw=; b=OoSL4kpOFcFx16uzZulyatu6FeJMVF5rcrP6nvQZECg4g0iiYSivnr8OJsra79k+dc WFJml4E6jQVfitdrqeS8/Ako5uM0hgkprsykbJKjX7x0danBZs62ADRRtHVrY9vzqDmm s0CXc89ecF9ada9ByinqPqc3WeNlJPAzhKmAeFJyFeRT3LwG2jrmOZi4DouSVLBQfvrV XR3t7YQ8r55UihaSoe7eq9SiqyTtcRBqzirLDiX6zDfUZi8LC6i38aA+x8lDJWmc2UpZ MNrj5i2MCX3AQtJNya31BuAK7qZisUPCUppDID1T0Pe7tg82zu4McZsgXlJh/Gka/nW5 cRFA== X-Gm-Message-State: AOAM531M8hKSg/i48Lceghow65cZgk3ULePOH29BTMZ8cIB86zm4ZRpz 9hcoZXp1fYv268M/Sp0UI4W+DG1tTByQKTrL X-Received: by 2002:a17:902:9b97:b029:da:4299:2214 with SMTP id y23-20020a1709029b97b02900da42992214mr17124758plp.37.1607822424413; Sat, 12 Dec 2020 17:20:24 -0800 (PST) Received: from glados.. ([2601:647:6000:3e5b::a27]) by smtp.gmail.com with ESMTPSA id u189sm1642670pfb.51.2020.12.12.17.20.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 12 Dec 2020 17:20:24 -0800 (PST) From: Thomas Hebb To: linux-kernel@vger.kernel.org, Mark Brown Cc: Thomas Hebb , stable@vger.kernel.org, Jaroslav Kysela , Liam Girdwood , Takashi Iwai , alsa-devel@alsa-project.org Subject: [PATCH] ASoC: dapm: remove widget from dirty list on free Date: Sat, 12 Dec 2020 17:20:12 -0800 Message-Id: X-Mailer: git-send-email 2.29.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org A widget's "dirty" list_head, much like its "list" list_head, eventually chains back to a list_head on the snd_soc_card itself. This means that the list can stick around even after the widget (or all widgets) have been freed. Currently, however, widgets that are in the dirty list when freed remain there, corrupting the entire list and leading to memory errors and undefined behavior when the list is next accessed or modified. I encountered this issue when a component failed to probe relatively late in snd_soc_bind_card(), causing it to bail out and call soc_cleanup_card_resources(), which eventually called snd_soc_dapm_free() with widgets that were still dirty from when they'd been added. Fixes: db432b414e20 ("ASoC: Do DAPM power checks only for widgets changed since last run") Cc: stable@vger.kernel.org Signed-off-by: Thomas Hebb --- sound/soc/soc-dapm.c | 1 + 1 file changed, 1 insertion(+) diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c index 7f87b449f950..148c095df27b 100644 --- a/sound/soc/soc-dapm.c +++ b/sound/soc/soc-dapm.c @@ -2486,6 +2486,7 @@ void snd_soc_dapm_free_widget(struct snd_soc_dapm_widget *w) enum snd_soc_dapm_direction dir; list_del(&w->list); + list_del(&w->dirty); /* * remove source and sink paths associated to this widget. * While removing the path, remove reference to it from both -- 2.29.2