Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp432613yba; Wed, 3 Apr 2019 11:32:32 -0700 (PDT) X-Google-Smtp-Source: APXvYqwLmLr5i0HDTZp1GOHiXD2lg4drVO7fyAI6XnLbOKdduB73PQyB614IPsu3eiVrQyzDGRyz X-Received: by 2002:a63:2b4c:: with SMTP id r73mr1193560pgr.181.1554316352482; Wed, 03 Apr 2019 11:32:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1554316352; cv=none; d=google.com; s=arc-20160816; b=t80lTqAxGPD7fuiIZod/gtEuIEYT9jwq87N0BwJ1HJUwlSqihOB2aN+wmVoEI42d7w ihi5Vmslu91UXHF5bwT652Bv84aV/3OFlixeT/+dGVQIUG/CfqS/flDFcWUHbTYGtFhS I/uz8dVhLvTqdhA1CmS8Q1rbWpp5giWb6wKKHEvccE4lgx7Zt/elZtHcJQO57Fjm1obM iEarH0x0UWscuBOQfwC6xjP7vbhc+L4fAb523/mtpGECg57KjJPSUGG5GwjvvBO+A+pa KspNWInr7uJSy43H9Z1a+Y+TC31ot79G/GR+0DVuUNysKudQf8sTPfibk3uXuGRSrDcu Og3g== 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 :message-id:date:subject:cc:to:from:dkim-signature; bh=EVf4in3JXmNx567gxStNdp9FNPkFd0a/1e89LOx4Bw8=; b=IVI1fzPjthbW+9aYc1L/PcOya/KCAeqo5AEZfGMKeuk5JZRt2W/YiW6tsnWNNUlc41 hgrndDfcvPwC4KmrHva8WctW5LjDldfsMUclQOlBKU77pb7d/QTFyrBcI9CEp+wNYeW/ guOACgZfW8MZHX5HqOeI/ErMQyBIazUioBQ/KxEIJUD2rGnwP0C5dCsz1yesbL2d8agb z4LtBWhquF/YH1umBjZtRiwXSB3MpDMqCBSkdcRJQq3RTkTUYVTsT6OtQO/iRZN+XrBx WuQko+g4vLQbxuYWbczOVbwxvzUzeebru32Y8tUuDw1hJyYF6FRHmrW8Z+3opL7sOAZ7 v6Hw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=ffvuhCdJ; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id s4si12100511plp.59.2019.04.03.11.32.17; Wed, 03 Apr 2019 11:32:32 -0700 (PDT) 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=@chromium.org header.s=google header.b=ffvuhCdJ; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726668AbfDCSbB (ORCPT + 99 others); Wed, 3 Apr 2019 14:31:01 -0400 Received: from mail-pl1-f194.google.com ([209.85.214.194]:44324 "EHLO mail-pl1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726144AbfDCSbB (ORCPT ); Wed, 3 Apr 2019 14:31:01 -0400 Received: by mail-pl1-f194.google.com with SMTP id g12so8447920pll.11 for ; Wed, 03 Apr 2019 11:31:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=EVf4in3JXmNx567gxStNdp9FNPkFd0a/1e89LOx4Bw8=; b=ffvuhCdJeVi5Hcr30nOuI/XL2EJ7zOoGVKO6NjB5Q74DCDh+O9odW9+1caPOzqAOiL ZI29nwONrBiNxhIqdeNPav4wZ4DllHwUHXZU6RtzBdwxnN12xwyl5lKF0yFEIVioq1iR +55oht7WeTDet/SlEph3dOPD+GYuPgsPzZEB4= 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:mime-version :content-transfer-encoding; bh=EVf4in3JXmNx567gxStNdp9FNPkFd0a/1e89LOx4Bw8=; b=R6eYe8M475xzGyMnBL5ByIRWJqHqgi27G21DHF41GsRMO1lU2K4LoZyw+bZlpYOM4i 03pS6XHuLU/0558lkSIQ+L6F2INKRU62pOIzDnYId2ZfyVeUldud5ONYy3yniY8P+xyn 18Gw9chUR/Whnmkkz8foFKDHFqGAAmhQ+mV7TFyYwVpmM/33539HXitnA6DT+5Bfk7+D XVDkSa6xciWeZGHNF2ZrT+7dJkJwJ4QfBcxsKmgJcsOnkd6gQ7Zxl6/xXsc9zvQMVbxo CI8li6UdHLhp7oO/5iimz/XrLkEVBSQr2cE7HcamW/P9rP8tAWiKPGh0mYmWdQ3rzYzK eLOQ== X-Gm-Message-State: APjAAAUCTPpqQpuygwHrKxnPXVejufW2Yyl6CTL/oD2efrZsO83vHzqd jovn9hpUcGCquLjTmLQTQyfckw== X-Received: by 2002:a17:902:a513:: with SMTP id s19mr1451171plq.97.1554316260382; Wed, 03 Apr 2019 11:31:00 -0700 (PDT) Received: from egranata0.mtv.corp.google.com ([2620:15c:202:1:e209:54cf:7c16:6776]) by smtp.gmail.com with ESMTPSA id e13sm29061548pgb.37.2019.04.03.11.30.59 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 03 Apr 2019 11:30:59 -0700 (PDT) From: egranata@chromium.org To: bleung@chromium.org, groeck@chromium.org, gwendal@chromium.org, amstan@chromium.org Cc: enric.balletbo@collabora.com, linux-kernel@vger.kernel.org, Enrico Granata Subject: [PATCH] mfd: cros_ec: check for NULL transfer function Date: Wed, 3 Apr 2019 11:30:48 -0700 Message-Id: <20190403183048.56750-1-egranata@chromium.org> X-Mailer: git-send-email 2.21.0.392.gf8f6787159e-goog MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Enrico Granata As new transfer mechanisms are added to the EC codebase, they may not support v2 of the EC protocol. If the v3 initial handshake transfer fails, the kernel will try and call cmd_xfer as a fallback. If v2 is not supported, cmd_xfer will be NULL, and the code will end up causing a kernel panic. Add a check for NULL before calling the transfer function, along with a helpful comment explaining how one might end up in this situation. Signed-off-by: Enrico Granata --- drivers/platform/chrome/cros_ec_proto.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/drivers/platform/chrome/cros_ec_proto.c b/drivers/platform/chrome/cros_ec_proto.c index 97a068dff192d..953076ab401aa 100644 --- a/drivers/platform/chrome/cros_ec_proto.c +++ b/drivers/platform/chrome/cros_ec_proto.c @@ -56,6 +56,16 @@ static int send_command(struct cros_ec_device *ec_dev, else xfer_fxn = ec_dev->cmd_xfer; + if (xfer_fxn == NULL) { + /* This error can happen if a communication error happened and + * the EC is trying to use protocol v2, on an underlying + * communication mechanism that does not support v2. + */ + dev_err(ec_dev->dev, + "missing EC transfer API, cannot send command\n"); + return -EIO; + } + ret = (*xfer_fxn)(ec_dev, msg); if (msg->result == EC_RES_IN_PROGRESS) { int i; -- 2.21.0.392.gf8f6787159e-goog