summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShawn Nematbakhsh <shawnn@chromium.org>2017-11-07 07:06:58 -0800
committerChromeOS Commit Bot <chromeos-commit-bot@chromium.org>2017-11-23 02:57:44 +0000
commit78edffd806cf20602f70cbe0e0d3a8c3663d1539 (patch)
tree32f33829ab5dadbfb2dd06115d2e03726d17aa11
parentaa586960f1a4db780b8eb151384385b6698d397a (diff)
downloadchrome-ec-78edffd806cf20602f70cbe0e0d3a8c3663d1539.tar.gz
charger: Prevent SET access to EC_CMD_CHARGE_STATE on locked systems
The SET sub-command of EC_CMD_CHARGE_STATE sets charger current / voltage parameters to arbitrary values and should be locked down. EC_CMD_CHARGE_CONTROL, on the other hand, switches between several safe operation modes, and should be allowed. BUG=None TEST=On kevin, set force_locked, plug zinger, and verify: ectool chargestate param 4 3 <-- ACCESS_DENIED ectool chargestate show <-- prints params ectool chargecontrol idle <-- stops charging battery ectool chargecontrol normal <-- battery charges again BRANCH=None Signed-off-by: Shawn Nematbakhsh <shawnn@chromium.org> Change-Id: I5503f07bb196d023a9bcd2e33f2e247f061f05e5 Reviewed-on: https://chromium-review.googlesource.com/757237 Commit-Ready: Shawn N <shawnn@chromium.org> Tested-by: Shawn N <shawnn@chromium.org> Reviewed-by: Randall Spangler <rspangler@chromium.org> (cherry picked from commit e4deceba8d6a8afff50ca2223be59b755ee3eca2) Reviewed-on: https://chromium-review.googlesource.com/786790 Reviewed-by: Philip Chen <philipchen@chromium.org> Tested-by: Jongpil Jung <jongpil19.jung@samsung.corp-partner.google.com> Commit-Queue: Jongpil Jung <jongpil19.jung@samsung.corp-partner.google.com>
-rw-r--r--common/charge_state_v2.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/common/charge_state_v2.c b/common/charge_state_v2.c
index a4066dee4f..e9de5d6884 100644
--- a/common/charge_state_v2.c
+++ b/common/charge_state_v2.c
@@ -1109,9 +1109,6 @@ static int charge_command_charge_control(struct host_cmd_handler_args *args)
const struct ec_params_charge_control *p = args->params;
int rv;
- if (system_is_locked())
- return EC_RES_ACCESS_DENIED;
-
rv = set_chg_ctrl_mode(p->mode);
if (rv != EC_SUCCESS)
return EC_RES_ERROR;
@@ -1225,6 +1222,9 @@ static int charge_command_charge_state(struct host_cmd_handler_args *args)
break;
case CHARGE_STATE_CMD_SET_PARAM:
+ if (system_is_locked())
+ return EC_RES_ACCESS_DENIED;
+
val = in->set_param.value;
#ifdef CONFIG_CHARGER_PROFILE_OVERRIDE
/* custom profile params */