Received: by 2002:a25:31c3:0:0:0:0:0 with SMTP id x186csp2907216ybx; Fri, 8 Nov 2019 11:06:16 -0800 (PST) X-Google-Smtp-Source: APXvYqzolYjU9W7CCXd4X3l+3DsMdv2wQMPGLkc/Ag1XNyEq5r8icx5IJegnBhUDzG9XTnxj+11S X-Received: by 2002:a17:906:f108:: with SMTP id gv8mr10634230ejb.180.1573239976461; Fri, 08 Nov 2019 11:06:16 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1573239976; cv=none; d=google.com; s=arc-20160816; b=PDGaY8C4fPjgEOpqOFtH0vjrv7E9LhPXRLVcCZDd57bVhIQ5bES2758E0ZfUDtyz7r 4JOx1VUKZRwZb68xot9N4nfYrxxTEuIoeLAeHfHRWP87JYatlaoQLtyY3CSny6MYFNsk KYsF1E+r8Xe+4DoI/7W2hJsKP/G1NiRx/KSMTFuq8OiUPDZKhPGh6aEToN63akfyWzD6 y+tpN3RlrfdqpBnx2uayMtvkjqsiHTeFpkpX+x2lXMfCXgZwDgpmDaKHIyyNCJCsikkB kJnBoMwgiZyJW1IsBgBGc2GnSKl+RaLuXNpWZy9vAeAD9Yj0K5iajzEO2wuWU6PJ7pj2 R7wA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=iYFPUYp2EGtdk7GAgia4VuErSKU0nL7D8geVR5aMWkc=; b=WhvvP5zIeGL2p4GppA3e1h2WHoME2FGc0gXFvuulrDscAji2qUCWTqFS3/8HRntB6q nJve//Cayn45fyzKPEJ2aihvyLN/mGWYR9BfDAbQtYLnOK2pcgW018lvqCMeYBCpEpHs tEeGy0poWwu40ac5IQWo9rnQnbYTIg9LrRgTiBcFfdN2jYdr5nr15AYM0/e2K6cJdUGM aUwIqZ1rx1uVX41EtyTPF/3Nh1ATd3ki9YLsF7q1YWmQp52zltayYFbB/hjXoVwYxvy9 fpKI0RRCoMQdcTg7WLYd6FAd6gxZ04L6E4X3Zv0LmaPzYPhchGIkVSETHI/Pk3nUWtdT SCDA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=lYro4Nts; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id b37si5419717edf.186.2019.11.08.11.05.53; Fri, 08 Nov 2019 11:06:16 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-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=@kernel.org header.s=default header.b=lYro4Nts; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2390912AbfKHTEC (ORCPT + 99 others); Fri, 8 Nov 2019 14:04:02 -0500 Received: from mail.kernel.org ([198.145.29.99]:33824 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389401AbfKHTEA (ORCPT ); Fri, 8 Nov 2019 14:04:00 -0500 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 4A03820650; Fri, 8 Nov 2019 19:03:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1573239839; bh=tNf64DL/4DtEM2E0M34hHHFkgT7A8t4mmajD3IE6c3k=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=lYro4NtsOYdS2ewth7SyowpQkLYyE3QEQPtW2LT25VRput8sY0hd1Bdb2EMPs4jlt knRBeskcf2Q2zMS1crp9jD70SW/zWWuFbzdg5XOsuK5zExAIC7NykbGVHC0QiBj74o DOKKFOHPvUcGO4sL1rYnZZzVG9gjMw8on76APRIQ= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Shahjada Abul Husain , Vishal Kulkarni , "David S. Miller" Subject: [PATCH 4.19 37/79] cxgb4: fix panic when attaching to ULD fail Date: Fri, 8 Nov 2019 19:50:17 +0100 Message-Id: <20191108174807.577466159@linuxfoundation.org> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20191108174745.495640141@linuxfoundation.org> References: <20191108174745.495640141@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Vishal Kulkarni [ Upstream commit fc89cc358fb64e2429aeae0f37906126636507ec ] Release resources when attaching to ULD fail. Otherwise, data mismatch is seen between LLD and ULD later on, which lead to kernel panic when accessing resources that should not even exist in the first place. Fixes: 94cdb8bb993a ("cxgb4: Add support for dynamic allocation of resources for ULD") Signed-off-by: Shahjada Abul Husain Signed-off-by: Vishal Kulkarni Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.c | 29 ++++++++++++++----------- 1 file changed, 17 insertions(+), 12 deletions(-) --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.c +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.c @@ -673,10 +673,10 @@ static void uld_init(struct adapter *ada lld->write_cmpl_support = adap->params.write_cmpl_support; } -static void uld_attach(struct adapter *adap, unsigned int uld) +static int uld_attach(struct adapter *adap, unsigned int uld) { - void *handle; struct cxgb4_lld_info lli; + void *handle; uld_init(adap, &lli); uld_queue_init(adap, uld, &lli); @@ -686,7 +686,7 @@ static void uld_attach(struct adapter *a dev_warn(adap->pdev_dev, "could not attach to the %s driver, error %ld\n", adap->uld[uld].name, PTR_ERR(handle)); - return; + return PTR_ERR(handle); } adap->uld[uld].handle = handle; @@ -694,23 +694,24 @@ static void uld_attach(struct adapter *a if (adap->flags & FULL_INIT_DONE) adap->uld[uld].state_change(handle, CXGB4_STATE_UP); + + return 0; } -/** - * cxgb4_register_uld - register an upper-layer driver - * @type: the ULD type - * @p: the ULD methods +/* cxgb4_register_uld - register an upper-layer driver + * @type: the ULD type + * @p: the ULD methods * - * Registers an upper-layer driver with this driver and notifies the ULD - * about any presently available devices that support its type. Returns - * %-EBUSY if a ULD of the same type is already registered. + * Registers an upper-layer driver with this driver and notifies the ULD + * about any presently available devices that support its type. Returns + * %-EBUSY if a ULD of the same type is already registered. */ int cxgb4_register_uld(enum cxgb4_uld type, const struct cxgb4_uld_info *p) { - int ret = 0; unsigned int adap_idx = 0; struct adapter *adap; + int ret = 0; if (type >= CXGB4_ULD_MAX) return -EINVAL; @@ -744,12 +745,16 @@ int cxgb4_register_uld(enum cxgb4_uld ty if (ret) goto free_irq; adap->uld[type] = *p; - uld_attach(adap, type); + ret = uld_attach(adap, type); + if (ret) + goto free_txq; adap_idx++; } mutex_unlock(&uld_mutex); return 0; +free_txq: + release_sge_txq_uld(adap, type); free_irq: if (adap->flags & FULL_INIT_DONE) quiesce_rx_uld(adap, type);