Bläddra i källkod

fix(drivers): validate i6300esb watchdog timeout bounds

AFWEF_147 3 veckor sedan
förälder
incheckning
90b7f9cb0d
1 ändrade filer med 10 tillägg och 0 borttagningar
  1. 10 0
      components/drivers/watchdog/watchdog-i6300esb.c

+ 10 - 0
components/drivers/watchdog/watchdog-i6300esb.c

@@ -111,6 +111,11 @@ static rt_err_t i6300esb_timer_set_heartbeat(struct i6300esb_wdt *esb, rt_uint32
 {
     rt_uint32_t val;
 
+    if ((time < ESB_HEARTBEAT_MIN) || (time > ESB_HEARTBEAT_MAX))
+    {
+        return -RT_EINVAL;
+    }
+
     /*
      * We shift by 9, so if we are passed a value of 1 sec,
      * val will be 1 << 9 = 512, then write that to two
@@ -152,6 +157,11 @@ static rt_err_t i6300esb_wdt_control(rt_watchdog_t *wdt, int cmd, void *args)
         break;
 
     case RT_DEVICE_CTRL_WDT_SET_TIMEOUT:
+        if (args == RT_NULL)
+        {
+            err = -RT_EINVAL;
+            break;
+        }
         err = i6300esb_timer_set_heartbeat(esb, *(rt_uint32_t *)args);
         break;