| From dc33dfb41e887a9149ae44cb9092ce405008ecd0 Mon Sep 17 00:00:00 2001 |
| From: Enrico Granata <egranata@chromium.org> |
| Date: Wed, 3 Apr 2019 15:40:36 -0700 |
| Subject: [PATCH] platform/chrome: cros_ec_proto: check for NULL transfer |
| function |
| |
| commit 94d4e7af14a1170e34cf082d92e4c02de9e9fb88 upstream. |
| |
| 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 <egranata@chromium.org> |
| Reviewed-by: Jett Rink <jettrink@chromium.org> |
| Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/platform/chrome/cros_ec_proto.c b/drivers/platform/chrome/cros_ec_proto.c |
| index 409e0eda4b5b..5710fed68750 100644 |
| --- a/drivers/platform/chrome/cros_ec_proto.c |
| +++ b/drivers/platform/chrome/cros_ec_proto.c |
| @@ -67,6 +67,17 @@ static int send_command(struct cros_ec_device *ec_dev, |
| else |
| xfer_fxn = ec_dev->cmd_xfer; |
| |
| + if (!xfer_fxn) { |
| + /* |
| + * 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.7.4 |
| |