Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp3405889pxf; Mon, 22 Mar 2021 05:51:16 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyZneMzqiOwucVwXlQ4A8eE8liFkbNNym92yU6WXR/q4x9gmD0OWY+Lw5fZL3q8Vj49ITa6 X-Received: by 2002:a17:906:b288:: with SMTP id q8mr19006981ejz.210.1616417476058; Mon, 22 Mar 2021 05:51:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1616417476; cv=none; d=google.com; s=arc-20160816; b=xNYyJ88/HSirERjbmjwxkYRQ5bq6LSoHMR69ibz5Smz7qQxZeH4W3Vofxo/wv+mXNZ BUJfn7gx1Os23PgQh6NBMyKc7pXEWeKRme5mTA9vaf6Ie+DIvba8i5YbKwvD+meHHSBq +Z3pWSOMHP9CXdkfJOk8W2CGp+ri/2TWMGyKfyQSwbiVRTRhi3wKPWH3L6ECQLDxXFze ghhUGgR8JO/46m6ptMHeXxbIdlTLKSl3fwFxWSFNo2PqAZagN49LgmaQu0wFkTPSdy2M /bxP9NY/6TOcHSo+/fL90A43pOfbrm4xav7qRji5If6DVF702aCiHgIaApzzKJ8+il3F AsXw== 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=HE2r9TlliAPfgS6k7Yrj4TZD2H7Frx7BIA1ZL7j+Vus=; b=I2HfxIBZxHACt9Y1COh/zzohVK0J/cFXyVyiWoPY5/t7/X2RBZ2zAdZYKBJW7oj4Lv +N790zN0xu+iPcRJLQmnb4qDa/iZuaPY/kAtV3TUOet1uMGJvBRN/qdkaRr3pgSDwfpQ VkFoWpQO9mVPiysg8UlzKUpyFcTTU8HuH9OUlauWpHrdz3piiSXKvbxODg4OGzO1T3ce ik/83p2Yfz5Si4mQLHEE8b8m2BDJEI6FQr2q12UxdTkFMY4dn9l5i1Xy4IMInti+81MJ x1swavlVnlDu+V61GkkD5JLu5snH4ajPYavbSobXPmFnZYh6wA78bWTCVBW47thdWUvM XDQA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=d980WvHm; 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 r18si10864911eds.390.2021.03.22.05.50.53; Mon, 22 Mar 2021 05:51:16 -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=d980WvHm; 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 S230009AbhCVMqw (ORCPT + 99 others); Mon, 22 Mar 2021 08:46:52 -0400 Received: from mail.kernel.org ([198.145.29.99]:58570 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231657AbhCVMil (ORCPT ); Mon, 22 Mar 2021 08:38:41 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id A79B761931; Mon, 22 Mar 2021 12:37:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1616416671; bh=JocfG6KJGfFGtY9reXX4CgCm+UnePnSPZ75dnzv8H/I=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=d980WvHmg+/mRa4ES6zSSk9IJ3mt6GEiSVJwfH53Sk8Pk2jmareVeqS+JteBuresV HLQ6D91LxNUvJ0F+hV0IUrFs+dOaMWIglkTiqP5+7FBE+TQ3RD4zOJj0od9+930lad jyfYEAoTrowv8BfGcI/5Twb7BCleaj8rLQDdEfTg= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Jack Wang , yuuzheng , Viswas G , Ruksar Devadi , Radha Ramachandran , "Martin K. Petersen" , Sasha Levin Subject: [PATCH 5.10 077/157] scsi: pm80xx: Fix pm8001_mpi_get_nvmd_resp() race condition Date: Mon, 22 Mar 2021 13:27:14 +0100 Message-Id: <20210322121936.207738576@linuxfoundation.org> X-Mailer: git-send-email 2.31.0 In-Reply-To: <20210322121933.746237845@linuxfoundation.org> References: <20210322121933.746237845@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: yuuzheng [ Upstream commit 1f889b58716a5f5e3e4fe0e6742c1a4472f29ac1 ] A use-after-free or null-pointer error occurs when the 251-byte response data is copied from IOMB buffer to response message buffer in function pm8001_mpi_get_nvmd_resp(). After sending the command get_nvmd_data(), the caller begins to sleep by calling wait_for_complete() and waits for the wake-up from calling complete() in pm8001_mpi_get_nvmd_resp(). Due to unexpected events (e.g., interrupt), if response buffer gets freed before memcpy(), a use-after-free error will occur. To fix this, the complete() should be called after memcpy(). Link: https://lore.kernel.org/r/20201102165528.26510-5-Viswas.G@microchip.com.com Acked-by: Jack Wang Signed-off-by: yuuzheng Signed-off-by: Viswas G Signed-off-by: Ruksar Devadi Signed-off-by: Radha Ramachandran Signed-off-by: Martin K. Petersen Signed-off-by: Sasha Levin --- drivers/scsi/pm8001/pm8001_hwi.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/scsi/pm8001/pm8001_hwi.c b/drivers/scsi/pm8001/pm8001_hwi.c index 9e9a546da959..2054c2b03d92 100644 --- a/drivers/scsi/pm8001/pm8001_hwi.c +++ b/drivers/scsi/pm8001/pm8001_hwi.c @@ -3279,10 +3279,15 @@ pm8001_mpi_get_nvmd_resp(struct pm8001_hba_info *pm8001_ha, void *piomb) pm8001_ha->memoryMap.region[NVMD].virt_ptr, fw_control_context->len); kfree(ccb->fw_control_context); + /* To avoid race condition, complete should be + * called after the message is copied to + * fw_control_context->usrAddr + */ + complete(pm8001_ha->nvmd_completion); + PM8001_MSG_DBG(pm8001_ha, pm8001_printk("Set nvm data complete!\n")); ccb->task = NULL; ccb->ccb_tag = 0xFFFFFFFF; pm8001_tag_free(pm8001_ha, tag); - complete(pm8001_ha->nvmd_completion); } int pm8001_mpi_local_phy_ctl(struct pm8001_hba_info *pm8001_ha, void *piomb) -- 2.30.1