diff options
author | Shawn Nematbakhsh <shawnn@chromium.org> | 2017-11-07 07:06:58 -0800 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2017-11-09 16:43:54 -0800 |
commit | e4deceba8d6a8afff50ca2223be59b755ee3eca2 (patch) | |
tree | 39a4ff499fcdf0349ebddae7869283bbbddd5493 | |
parent | ad3696b1ca12997f5c0ade53635b6a018ea7bc9a (diff) | |
download | chrome-ec-e4deceba8d6a8afff50ca2223be59b755ee3eca2.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>
-rw-r--r-- | common/charge_state_v2.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/common/charge_state_v2.c b/common/charge_state_v2.c index 7a926cfb54..4de4faf51a 100644 --- a/common/charge_state_v2.c +++ b/common/charge_state_v2.c @@ -1193,9 +1193,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; @@ -1313,6 +1310,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 */ |