From 68e74b9d5e41ad73dbbfe95ac40e978b2b1c8f02 Mon Sep 17 00:00:00 2001 From: Andrew McRae Date: Thu, 17 Mar 2022 09:40:07 +1100 Subject: 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 Change-Id: Ib1ddf1b7976db3060c79cf15278d334cb297d1ae Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3531308 Reviewed-by: Jeremy Bettis --- zephyr/subsys/ap_pwrseq/power_signals.c | 24 ++++++++++++++++++++---- 1 file 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; -- cgit v1.2.1