diff options
author | Andrew McRae <amcrae@google.com> | 2022-03-17 09:40:07 +1100 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2022-03-17 03:50:40 +0000 |
commit | 68e74b9d5e41ad73dbbfe95ac40e978b2b1c8f02 (patch) | |
tree | 9ad3668b967ab636d2c197a2b208dc2400b7c2d8 | |
parent | b3b38362249da9e7761ae6e46e4ef70f777b27ed (diff) | |
download | chrome-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.c | 24 |
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; |