From patchwork Fri Jun 1 23:32:31 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Srinivas Kandagatla X-Patchwork-Id: 137578 Delivered-To: patch@linaro.org Received: by 2002:a2e:9706:0:0:0:0:0 with SMTP id r6-v6csp1535211lji; Fri, 1 Jun 2018 16:34:40 -0700 (PDT) X-Google-Smtp-Source: ADUXVKJvV2iqzDz0na9ICVI3W6K05kqZGu4YEnTZbuKP54Y+X6noY8Eg8ExdgLnKgMaWpYJUfb/O X-Received: by 2002:a63:6c49:: with SMTP id h70-v6mr5982734pgc.34.1527896080284; Fri, 01 Jun 2018 16:34:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527896080; cv=none; d=google.com; s=arc-20160816; b=WLwtZyaXQ4imiy+3i6CGX+740R9x4VnpToA5Yky0K+h04CfOGiZ/FOLgoRiLLAJqGd teHwtuQfsrtUSLJeVrtuu03RmPPskcsR0a19sZk8slWFASC7SnTIEvJ0VDp+H6dAXXsY 4TUhpnfvp7Y+fdns8ayVzCiI9CY/kziYk2z1wthWJVenwokKECxf9f03Jbro1zP3p6Bx BIiwB5kDbI/prnDA3u/Anj3i3t87EbmsuKjvZQABOIetU0kLPeo2SPiPXVKuVn2bjmDo If+ND8+Mi6PGPYkeZ1X42fHBuVJRy8aNFLtrEMwTlcUTq8jPrF8gnF+gtE4ZGw22oSW3 Z43g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature:arc-authentication-results; bh=TnW5N/xqTC2ix3EopWW8JQWBEhCdLlAOTRlfdsrpZXU=; b=j49+zuurZpxw3OrPOpG94JM/uC8OqFaZQWyhePj/VTQh3Dzv3IzSqro6pQpqcxYmvY Jjz+1OxyzVzPOIInx0HF8u4x8mmMzvrBHauAN3yZEbfhsxWm5wgD0SyWh7iFX2HzRu9b /v0JBL8kVtkljnK8Yg2sZcrsylsGVFlCV6Yqj3wEmByNgfEftgvdzClPeZWNmoAn2x5q lXafqYeEXXgZ5ge3WCobNAz7K/le8znpL8C3dZA0hz0v4QZW0GAiqDA5kWrz1CS3/ToA ix3TJwCBYv0RT3+iWZRmvgnKlxTwtzDlugzfXm1amSTon7oFWi7KxJNvRyhcSnNuE+oL QB/g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=L5PROsJH; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id q2-v6si40662666plh.136.2018.06.01.16.34.39; Fri, 01 Jun 2018 16:34:40 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=L5PROsJH; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751053AbeFAXei (ORCPT + 13 others); Fri, 1 Jun 2018 19:34:38 -0400 Received: from mail-wm0-f67.google.com ([74.125.82.67]:38491 "EHLO mail-wm0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750931AbeFAXeh (ORCPT ); Fri, 1 Jun 2018 19:34:37 -0400 Received: by mail-wm0-f67.google.com with SMTP id m129-v6so5042710wmb.3 for ; Fri, 01 Jun 2018 16:34:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id; bh=TnW5N/xqTC2ix3EopWW8JQWBEhCdLlAOTRlfdsrpZXU=; b=L5PROsJH4L6I20u/DGFvBvAcXkoW2NI3aL30GVTNvFXyPUVuFkKJiwnSaR9cR+/zPE ssd3LbNgwo874JLtUc99n7NaSzjumf97KOMycvhagFfWpyJ7SNpFcX4TsTGym+rTWS56 Kv1ukU6f0y69mKNYxF4v9EroFvCcnNWAm09ZU= 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; bh=TnW5N/xqTC2ix3EopWW8JQWBEhCdLlAOTRlfdsrpZXU=; b=OGNDWELVJ8xsPgK5v9XWATWube22GRlLgjX2AAEGFrhmswhKdZ5opC8W8s9i0QCXpp gVSMjFQB1f2x2dhS3CPS3TBgUJAqBnFHmnw7kHXIcBOV3pLlcl0KNc2HQwUhGC3ddE53 C6fDYWQh7bwIzHJUougTMtQL/nizxcKLrftJ+kvDEhsW/9D+ZP1Tw3C/0mIePabnFRBx kQyKZ+aQcQ3DSWtMBK9BWMdRekUi6uftqqux2cLGwWSxXIEQUdspKk0FmYYdHKqEFCXM QqwZeJNmhZ9IvZWuahPD7udep5l6DJvIYdZLsF3aXsgTTm5aIB0CoqeZuhbpIhEO45N8 UUUQ== X-Gm-Message-State: ALKqPwdadCFL5HBgXuxXEP/pNof4nOX7cEV41vT6Ydsds3j8m0Jjc/p7 1P1CD4Lu5siNgDPc2Txx6tZnGQ== X-Received: by 2002:a1c:988d:: with SMTP id a135-v6mr4143319wme.79.1527896076047; Fri, 01 Jun 2018 16:34:36 -0700 (PDT) Received: from localhost.localdomain (cpc90716-aztw32-2-0-cust92.18-1.cable.virginm.net. [86.26.100.93]) by smtp.gmail.com with ESMTPSA id f81-v6sm4466804wmh.32.2018.06.01.16.34.34 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 01 Jun 2018 16:34:35 -0700 (PDT) From: Srinivas Kandagatla To: ohad@wizery.com, bjorn.andersson@linaro.org Cc: linux-remoteproc@vger.kernel.org, linux-arm-msm@vger.kernel.org, bgoswami@codeaurora.org, linux-kernel@vger.kernel.org, rohkumar@qti.qualcomm.com, Srinivas Kandagatla , stable@vger.kernel.org Subject: [PATCH] rpmsg: smd: do not use mananged resources for endpoints and channels Date: Sat, 2 Jun 2018 00:32:31 +0100 Message-Id: <20180601233231.11230-1-srinivas.kandagatla@linaro.org> X-Mailer: git-send-email 2.16.2 Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org All the managed resources would be freed by the time release function is invoked. Handling such memory in qcom_smd_edge_release() would do bad things. Found this issue while testing Audio usecase where the dsp is started up and shutdown in a loop. This patch fixes this issue by using simple kzalloc for allocating channel->name and channel which is then freed in qcom_smd_edge_release(). Without this patch restarting a remoteproc would crash the system. Fixes: 53e2822e56c7 ("rpmsg: Introduce Qualcomm SMD backend") Cc: Signed-off-by: Srinivas Kandagatla --- drivers/rpmsg/qcom_smd.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) -- 2.16.2 diff --git a/drivers/rpmsg/qcom_smd.c b/drivers/rpmsg/qcom_smd.c index 5ce9bf7b897d..49d3838dfc3d 100644 --- a/drivers/rpmsg/qcom_smd.c +++ b/drivers/rpmsg/qcom_smd.c @@ -1100,12 +1100,12 @@ static struct qcom_smd_channel *qcom_smd_create_channel(struct qcom_smd_edge *ed void *info; int ret; - channel = devm_kzalloc(&edge->dev, sizeof(*channel), GFP_KERNEL); + channel = kzalloc(sizeof(*channel), GFP_KERNEL); if (!channel) return ERR_PTR(-ENOMEM); channel->edge = edge; - channel->name = devm_kstrdup(&edge->dev, name, GFP_KERNEL); + channel->name = kstrdup(name, GFP_KERNEL); if (!channel->name) return ERR_PTR(-ENOMEM); @@ -1156,8 +1156,8 @@ static struct qcom_smd_channel *qcom_smd_create_channel(struct qcom_smd_edge *ed return channel; free_name_and_channel: - devm_kfree(&edge->dev, channel->name); - devm_kfree(&edge->dev, channel); + kfree(channel->name); + kfree(channel); return ERR_PTR(ret); } @@ -1380,11 +1380,13 @@ static void qcom_smd_edge_release(struct device *dev) { struct qcom_smd_channel *channel; struct qcom_smd_edge *edge = to_smd_edge(dev); + struct list_head *this, *tmp; - list_for_each_entry(channel, &edge->channels, list) { - SET_RX_CHANNEL_INFO(channel, state, SMD_CHANNEL_CLOSED); - SET_RX_CHANNEL_INFO(channel, head, 0); - SET_RX_CHANNEL_INFO(channel, tail, 0); + list_for_each_safe(this, tmp, &edge->channels) { + channel = list_entry(this, struct qcom_smd_channel, list); + list_del(&channel->list); + kfree(channel->name); + kfree(channel); } kfree(edge);