Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp418071pxj; Tue, 18 May 2021 06:23:05 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxYlosGeuflT9NFYpMawOXds7i6XSDCJ7GX7d0Be7Lb3TFhXNNiW9Rz6YLd6b7YCh1mDnT/ X-Received: by 2002:a5d:9c58:: with SMTP id 24mr4263782iof.153.1621344185200; Tue, 18 May 2021 06:23:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1621344185; cv=none; d=google.com; s=arc-20160816; b=RWsD5HKtnUZAT2jbsTllEAUNlYHFHCTZoEEXy1P9yvQEFIJg+fC2j6DyfUTXNwcgk9 4oYAl28V2MJU4foTzdtG8JFhC/cxw+7Lel3ZVzEH0uOmKDdBi4npMx9gnSIW1LxxGLiN EDHn54BSaEu1aTva+rhf4w78kspT1LySnylBtQ4rIGPJklDc+IPcWn/6VGBeq6skwXn+ LBIu6TWAbQd2qdZCSKLID1cV3noRyfTgzWY8h5P8k7wmAwr5JCbXMoxD+CZkF+NT1Hw8 dkzj2W1VbcKXlcPYB2kIRPqFCj43QhT+DmK8RSVT0sEQM/NCuEBg0kZoHmTY+8u6Q4S2 MmBA== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=JWV0fYtDfcTequBcF/Edmyvlb9igLy/XVBgaUyEbSRA=; b=yE1gBnsIhDWb5XWzMPDQSJBz8qkMDBU+UGrrDfUZ0A6uV0k612Szfkg7UWMbWDgiH0 kzsSndRKXAv+K4yFhuDHZCWU6+ad5eYyXgkaiEMZElpzHgWpa8won1wSVn9ckk29YF6o L8C8ZgkX83Ymayd/1WeGBn/d//O2O4nSx+36wpZtJvW0k03CdydhQwB7ZGnv2rJVHu+W WctlOER3WXLuZ5aupZY/Ba4cNhWTLJBlsQn4ZQWJE8Y3bQ9p35YxpXDWlbODRScMt996 sOsgeGO1DPoYWrrM4hBPYl0DpsCu6QOU+XFNwAi+ekMSmyNn2+5u2ZvUsmuxE9UUAkXn VUpA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b="vN/aeVNh"; 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=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id r2si22467393jak.13.2021.05.18.06.22.51; Tue, 18 May 2021 06:23:05 -0700 (PDT) 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=@linuxfoundation.org header.s=korg header.b="vN/aeVNh"; 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=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243832AbhEQPiD (ORCPT + 99 others); Mon, 17 May 2021 11:38:03 -0400 Received: from mail.kernel.org ([198.145.29.99]:40800 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S244861AbhEQPWR (ORCPT ); Mon, 17 May 2021 11:22:17 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id E2D2161040; Mon, 17 May 2021 14:34:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1621262094; bh=tAekEOvL2wP0X/tfz0scn9Z3VWzIT3iXFUdUORNX87s=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=vN/aeVNhkVW5qlIHNYYuU9+ng2MHc9GYQR2VWnwR7Hpzy8AfAM6e6Zz5Y9lZjIEms x/45ao6VbT0M99WtcGKF9nq1U1DFd+Su4/fGZJoGtZRAWmahWIG/8cFqY+2DOj5sl9 sekyu7PDBrbYsV1udRk36nO2yEtcpxrMWQxcIIso= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Sriram Dash , Shradha Todi , Lorenzo Pieralisi , Pankaj Dubey , Kishon Vijay Abraham I , Sasha Levin Subject: [PATCH 5.10 110/289] PCI: endpoint: Fix NULL pointer dereference for ->get_features() Date: Mon, 17 May 2021 16:00:35 +0200 Message-Id: <20210517140308.881082071@linuxfoundation.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210517140305.140529752@linuxfoundation.org> References: <20210517140305.140529752@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Shradha Todi [ Upstream commit 6613bc2301ba291a1c5a90e1dc24cf3edf223c03 ] get_features ops of pci_epc_ops may return NULL, causing NULL pointer dereference in pci_epf_test_alloc_space function. Let us add a check for pci_epc_feature pointer in pci_epf_test_bind before we access it to avoid any such NULL pointer dereference and return -ENOTSUPP in case pci_epc_feature is not found. When the patch is not applied and EPC features is not implemented in the platform driver, we see the following dump due to kernel NULL pointer dereference. Call trace: pci_epf_test_bind+0xf4/0x388 pci_epf_bind+0x3c/0x80 pci_epc_epf_link+0xa8/0xcc configfs_symlink+0x1a4/0x48c vfs_symlink+0x104/0x184 do_symlinkat+0x80/0xd4 __arm64_sys_symlinkat+0x1c/0x24 el0_svc_common.constprop.3+0xb8/0x170 el0_svc_handler+0x70/0x88 el0_svc+0x8/0x640 Code: d2800581 b9403ab9 f9404ebb 8b394f60 (f9400400) ---[ end trace a438e3c5a24f9df0 ]--- Link: https://lore.kernel.org/r/20210324101609.79278-1-shradha.t@samsung.com Fixes: 2c04c5b8eef79 ("PCI: pci-epf-test: Use pci_epc_get_features() to get EPC features") Signed-off-by: Sriram Dash Signed-off-by: Shradha Todi Signed-off-by: Lorenzo Pieralisi Reviewed-by: Pankaj Dubey Reviewed-by: Kishon Vijay Abraham I Signed-off-by: Sasha Levin --- drivers/pci/endpoint/functions/pci-epf-test.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/drivers/pci/endpoint/functions/pci-epf-test.c b/drivers/pci/endpoint/functions/pci-epf-test.c index 7a1f3abfde48..5f6ce120a67a 100644 --- a/drivers/pci/endpoint/functions/pci-epf-test.c +++ b/drivers/pci/endpoint/functions/pci-epf-test.c @@ -830,15 +830,18 @@ static int pci_epf_test_bind(struct pci_epf *epf) return -EINVAL; epc_features = pci_epc_get_features(epc, epf->func_no); - if (epc_features) { - linkup_notifier = epc_features->linkup_notifier; - core_init_notifier = epc_features->core_init_notifier; - test_reg_bar = pci_epc_get_first_free_bar(epc_features); - if (test_reg_bar < 0) - return -EINVAL; - pci_epf_configure_bar(epf, epc_features); + if (!epc_features) { + dev_err(&epf->dev, "epc_features not implemented\n"); + return -EOPNOTSUPP; } + linkup_notifier = epc_features->linkup_notifier; + core_init_notifier = epc_features->core_init_notifier; + test_reg_bar = pci_epc_get_first_free_bar(epc_features); + if (test_reg_bar < 0) + return -EINVAL; + pci_epf_configure_bar(epf, epc_features); + epf_test->test_reg_bar = test_reg_bar; epf_test->epc_features = epc_features; -- 2.30.2