Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp610897yba; Wed, 3 Apr 2019 15:41:37 -0700 (PDT) X-Google-Smtp-Source: APXvYqwldMBA4p1NtcjOWVOSe48uQVA4C902dXV03RT+/RjrEnW6eG3hXcorD54XXu62VSh338AP X-Received: by 2002:a63:41c4:: with SMTP id o187mr2283155pga.73.1554331297462; Wed, 03 Apr 2019 15:41:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1554331297; cv=none; d=google.com; s=arc-20160816; b=DGN3406goIT4juxaJcC2QTSMtHH9YGpqZBZqzw1YdZ1Mu9mJz65V96LVLV8oCtOMB+ 1DGPphkf2M4cqxHFEAw2obIt2Gz9uKliwNsHIC7eRoXCexA5qAt5dbdYNUEWsHsdaSSJ QgSnNHQ+9TydqCFi+w/X+BP7JzHt5+aY3r++I7y7M+rS30d1KUgIy13wObZgCbrmGWTq 5Hydecx3uug8Ez5yLzHh99eTcbTnMP0PqKbHbrUFtMnYHTW9UqlOkYAZARkdig3LZ/Te e0JvId6lhQ5mQhS3oarN+7l/KRGQ99yg2kTEJG7Du7kEx9s+779dVr3XifOav4QRXcGK hFDw== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=pVP6KK4OjXux5hqpvy42NojT5xHJgIAc1lrCJ4gRq0E=; b=KrtsZPpzHnZJ+8dDEeBgJ2j+LQSl13SUGY1uCEt0ls6RCf8JusG/v7F20FcNP9+KX9 ULIXJV3h9nq7XCPONCCjKSoU3hen9ZEBRlJHHW5UCKNDwTKWGlNb4Mnvf/+gHSj3Mh/s f1HGuog17fBhKwo6QXmHyvW6BenXSzd5WfJCljOewTQWr3D9TbQfjtHJsCibDRLVIEuh HCvLNPtWm/eULY4786S96Nu0b5xGG1qL+ifrXjZg+MeTQ25RisDAPdWF6Q587v95fYJW krJG+nLY+4KYI5Mdyus58GZwH/+hfhngmpZnguZ2zi+yNtUh2RoqLc0HaWDj6Z6kvSmA tcnA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b="W8/b7Jyi"; 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 e124si14772048pfc.80.2019.04.03.15.41.22; Wed, 03 Apr 2019 15:41:37 -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="W8/b7Jyi"; 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 S1726425AbfDCWkp (ORCPT + 99 others); Wed, 3 Apr 2019 18:40:45 -0400 Received: from mail-pg1-f194.google.com ([209.85.215.194]:39685 "EHLO mail-pg1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726099AbfDCWko (ORCPT ); Wed, 3 Apr 2019 18:40:44 -0400 Received: by mail-pg1-f194.google.com with SMTP id k3so186230pga.6 for ; Wed, 03 Apr 2019 15:40:44 -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:in-reply-to:references :mime-version:content-transfer-encoding; bh=pVP6KK4OjXux5hqpvy42NojT5xHJgIAc1lrCJ4gRq0E=; b=W8/b7JyimuUdXT2KgZvagyosBiJS/i+yJxcZtj/MuMjfHaAAvBmvWzPJBt+Dm5VvEr CWo8No3vyyNauMJyQa9UWKTHUD24d/rqgG9Y3bwhRH15mbMY75UV7ioyQD+NYJXx5anV L1EwjBpr3Up3BKBIUTznIyldtO8jnJ7eFES90= 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:in-reply-to :references:mime-version:content-transfer-encoding; bh=pVP6KK4OjXux5hqpvy42NojT5xHJgIAc1lrCJ4gRq0E=; b=s9jCp6i2JZbFQCayJmbAgJqmVX/J03YQfFDe1s8n9qzcck6BG6pfVSQoA9ajlwPCcO rA+sHTD/PLiPFz1jRd1zbyOByBFu93pH6YzK0OhwkgTdQVM5AC91ddCjuNeyv4mkwLVc fcEoQvdxw5tyDClGC6s6bBQI91PQewewXiJAKSDN52O2dsiElHwztOzBOfsvLFu9uWUx Rw8cHh119GFL5IlMFupmBLNYzePjqH/DHrU6jdTiZtHT3dEaYwuLNL1nfdyR7zh9GSlU hXjXQEC0unuH7biXN+QW/FUpLlQFFuP0lISWwoB7ZfnAYKraQJrPIb8xz7aPHzx75gSf VasQ== X-Gm-Message-State: APjAAAVKzXvJEXAEYgRtxz4hHSIL7SwdF5yVymNFv1bvMlf5fTLN5kPB xagV+hT2XdtOMGnhcWKdHWhViQ== X-Received: by 2002:a63:ff26:: with SMTP id k38mr2244073pgi.123.1554331244122; Wed, 03 Apr 2019 15:40:44 -0700 (PDT) Received: from egranata0.mtv.corp.google.com ([2620:15c:202:1:e209:54cf:7c16:6776]) by smtp.gmail.com with ESMTPSA id y15sm1391212pfo.22.2019.04.03.15.40.43 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 03 Apr 2019 15:40:43 -0700 (PDT) From: egranata@chromium.org To: groeck@google.com Cc: bleung@chromium.org, gwendal@chromium.org, amstan@chromium.org, enric.balletbo@collabora.com, linux-kernel@vger.kernel.org, jettrink@google.com, Enrico Granata Subject: [PATCH v2] mfd: cros_ec: check for NULL transfer function Date: Wed, 3 Apr 2019 15:40:36 -0700 Message-Id: <20190403224036.203632-1-egranata@chromium.org> X-Mailer: git-send-email 2.21.0.392.gf8f6787159e-goog In-Reply-To: References: 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..55691656a3c27 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_once(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