Received: by 2002:a05:6a10:1287:0:0:0:0 with SMTP id d7csp1055139pxv; Thu, 22 Jul 2021 21:04:53 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxRQWV9hKG4Trjoys2KfvNwnQOkqEuzxc+ZTn/r06wygG4cOecfBcwuoySl6bUijq/3j3sQ X-Received: by 2002:aa7:d48f:: with SMTP id b15mr3367322edr.271.1627013093070; Thu, 22 Jul 2021 21:04:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1627013093; cv=none; d=google.com; s=arc-20160816; b=DS8IfOIRW8w1BcrFfp0Ou6tKBm4Qsre3dosnZPgbobaOJmjSD8z7giDEUo9kOe9s1D DK2tqqaNZ6NieeBRKqrmhw2mEpdb+1CI4CV4EZA25jD+X3Y0j89uwmWoWJSk5U+YjQ8/ Y8RsN0f01XVvcTUwSDYgpwAnZLVa594BFuUk07deYg+M4vMwFCglZP/6muGnNTyctAVf r78gBM8eXyNqAYiEOyO/UrBAnSLzw5lgq+bCA5Nw5XpazHy9t8QBpPwyOLH/oScjYlkW Wt1PMIrPfqLFCrFDjzIeOPrpNVkFrvWtq9Bi6c3jvuyD5Rdq+fsbPaIiiXV9WpTNkHSt oV3Q== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=yurEKIzgYFpBhKsGuyhj4K/IJWnP8/CGbQgUTIZwqf4=; b=Vak5okEW/noqHIE45xyZgdaGZmVzbOPO7qPT2RRGyaMucQ1qNhi2kYk5F6iRubTxhD hTGaa2QYpTu++Abg7X9vWld+4O9Vu+SuhqlTIOZNmcpFT5H8/hAx9THO5UZyMn/f8T/J KtK7Q//PH3uQp4z6ecEw5eaRZgJRrf4wnid/4NycaV6DKurkQYAgk6Q+9nvB8l+aushn U4xSIvR9+rkts8+Pdt2khZKIrORFg4WD6oZGE1Utm5VXCnVZwAaQDCrW67ookaoqPULX WUnuTI+8KcC1aXwsJTrwbPAFAEDMY+el+Gtx0wNzPTsE/ak08TN/yA663i23vS+iwram fWhw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=PvRKgOXN; 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=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id s10si32835092edr.36.2021.07.22.21.04.30; Thu, 22 Jul 2021 21:04:53 -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=@kernel.org header.s=k20201202 header.b=PvRKgOXN; 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=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234750AbhGWDTe (ORCPT + 99 others); Thu, 22 Jul 2021 23:19:34 -0400 Received: from mail.kernel.org ([198.145.29.99]:39234 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234280AbhGWDSN (ORCPT ); Thu, 22 Jul 2021 23:18:13 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id B3A2A60F12; Fri, 23 Jul 2021 03:58:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1627012727; bh=HU/h5JM1C29O1nAMl0oqPOG0u+jjV4o7o5r8iUmQyBE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=PvRKgOXN57ROUeShV+Rrq45F+uzr+mDSN1bZLRjOqicag95+uSpQEy//h+RIpqWxZ RpqRbNFlL9ZA4OODqaS7dPkqqDKoOdK/T7HL9Ru8X5KSbIqaDewIL3SwL9h8KFilcL LtW9z7HC49ayKG5HU/58GXmmNu1nTzTXSrRII7nJCRy9LVcDFbQ4RjVME6abXLdAlI BOGCu6OZH0uUgRCmL5YBjFw+y8EuXstzEg3OVqbnPnzuA6LgXPId6q2th/ef9WQ9Wb 41SqlM2o4QudGlCwpEWyD8p0oaMn+ua9XXm0F3A9vW2B1DK3aD5YgTU2kKUMsEn8ej lIN1meLfSIW+g== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Sudeep Holla , kernel test robot , Dan Carpenter , Cristian Marussi , Sasha Levin , linux-arm-kernel@lists.infradead.org Subject: [PATCH AUTOSEL 4.19 08/11] firmware: arm_scmi: Fix possible scmi_linux_errmap buffer overflow Date: Thu, 22 Jul 2021 23:58:32 -0400 Message-Id: <20210723035835.532148-8-sashal@kernel.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210723035835.532148-1-sashal@kernel.org> References: <20210723035835.532148-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Sudeep Holla [ Upstream commit 7a691f16ccad05d770f813d9c4b4337a30c6d63f ] The scmi_linux_errmap buffer access index is supposed to depend on the array size to prevent element out of bounds access. It uses SCMI_ERR_MAX to check bounds but that can mismatch with the array size. It also changes the success into -EIO though scmi_linux_errmap is never used in case of success, it is expected to work for success case too. It is slightly confusing code as the negative of the error code is used as index to the buffer. Fix it by negating it at the start and make it more readable. Link: https://lore.kernel.org/r/20210707135028.1869642-1-sudeep.holla@arm.com Reported-by: kernel test robot Reported-by: Dan Carpenter Reviewed-by: Cristian Marussi Signed-off-by: Sudeep Holla Signed-off-by: Sasha Levin --- drivers/firmware/arm_scmi/driver.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/drivers/firmware/arm_scmi/driver.c b/drivers/firmware/arm_scmi/driver.c index effc4c17e0fb..081fbe28da4b 100644 --- a/drivers/firmware/arm_scmi/driver.c +++ b/drivers/firmware/arm_scmi/driver.c @@ -48,7 +48,6 @@ enum scmi_error_codes { SCMI_ERR_GENERIC = -8, /* Generic Error */ SCMI_ERR_HARDWARE = -9, /* Hardware Error */ SCMI_ERR_PROTOCOL = -10,/* Protocol Error */ - SCMI_ERR_MAX }; /* List of all SCMI devices active in system */ @@ -168,8 +167,10 @@ static const int scmi_linux_errmap[] = { static inline int scmi_to_linux_errno(int errno) { - if (errno < SCMI_SUCCESS && errno > SCMI_ERR_MAX) - return scmi_linux_errmap[-errno]; + int err_idx = -errno; + + if (err_idx >= SCMI_SUCCESS && err_idx < ARRAY_SIZE(scmi_linux_errmap)) + return scmi_linux_errmap[err_idx]; return -EIO; } -- 2.30.2