summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew McRae <amcrae@google.com>2022-03-17 09:40:07 +1100
committerCommit Bot <commit-bot@chromium.org>2022-03-17 03:50:40 +0000
commit68e74b9d5e41ad73dbbfe95ac40e978b2b1c8f02 (patch)
tree9ad3668b967ab636d2c197a2b208dc2400b7c2d8
parentb3b38362249da9e7761ae6e46e4ef70f777b27ed (diff)
downloadchrome-ec-68e74b9d5e41ad73dbbfe95ac40e978b2b1c8f02.tar.gz
ap_pwrseq: Add signal range checking
Add power signal range checking. BUG=b:225049035 TEST=zmake test test-ap_power BRANCH=none Signed-off-by: Andrew McRae <amcrae@google.com> Change-Id: Ib1ddf1b7976db3060c79cf15278d334cb297d1ae Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3531308 Reviewed-by: Jeremy Bettis <jbettis@chromium.org>
-rw-r--r--zephyr/subsys/ap_pwrseq/power_signals.c24
1 files changed, 20 insertions, 4 deletions
diff --git a/zephyr/subsys/ap_pwrseq/power_signals.c b/zephyr/subsys/ap_pwrseq/power_signals.c
index bbcd7ebcae..e6bdb05954 100644
--- a/zephyr/subsys/ap_pwrseq/power_signals.c
+++ b/zephyr/subsys/ap_pwrseq/power_signals.c
@@ -150,8 +150,12 @@ int power_wait_mask_signals_timeout(power_signal_mask_t mask,
int power_signal_get(enum power_signal signal)
{
- const struct ps_config *cp = &sig_config[signal];
+ const struct ps_config *cp;
+ if (signal < 0 || signal >= POWER_SIGNAL_COUNT) {
+ return -EINVAL;
+ }
+ cp = &sig_config[signal];
switch (cp->source) {
default:
return -EINVAL; /* should never happen */
@@ -180,9 +184,13 @@ int power_signal_get(enum power_signal signal)
int power_signal_set(enum power_signal signal, int value)
{
- const struct ps_config *cp = &sig_config[signal];
+ const struct ps_config *cp;
int ret;
+ if (signal < 0 || signal >= POWER_SIGNAL_COUNT) {
+ return -EINVAL;
+ }
+ cp = &sig_config[signal];
LOG_DBG("Set %s to %d", power_signal_name(signal), value);
switch (cp->source) {
default:
@@ -220,8 +228,12 @@ int power_signal_set(enum power_signal signal, int value)
int power_signal_enable_interrupt(enum power_signal signal)
{
- const struct ps_config *cp = &sig_config[signal];
+ const struct ps_config *cp;
+ if (signal < 0 || signal >= POWER_SIGNAL_COUNT) {
+ return -EINVAL;
+ }
+ cp = &sig_config[signal];
switch (cp->source) {
default:
/*
@@ -239,8 +251,12 @@ int power_signal_enable_interrupt(enum power_signal signal)
int power_signal_disable_interrupt(enum power_signal signal)
{
- const struct ps_config *cp = &sig_config[signal];
+ const struct ps_config *cp;
+ if (signal < 0 || signal >= POWER_SIGNAL_COUNT) {
+ return -EINVAL;
+ }
+ cp = &sig_config[signal];
switch (cp->source) {
default:
return -EINVAL;