This is an automated email from the ASF dual-hosted git repository.

xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git


The following commit(s) were added to refs/heads/master by this push:
     new 350f396aa5 drivers/sensors/gnss: Fix integer overflow error
350f396aa5 is described below

commit 350f396aa50463f762d1f8df62ef3799a96cac0e
Author: wangjianyu3 <[email protected]>
AuthorDate: Tue Jan 7 15:55:26 2025 +0800

    drivers/sensors/gnss: Fix integer overflow error
    
    CID 1309501: (#1 of 1): Overflow constant (INTEGER_OVERFLOW)
    overflow_const: Expression upper->crefs, which is equal to 255, where 
enable ? 1 : -1 is known to be equal to -1, overflows the type that receives 
it, an unsigned integer 8 bits wide.
    
    Signed-off-by: wangjianyu3 <[email protected]>
---
 drivers/sensors/gnss_uorb.c | 17 ++++++++++++-----
 1 file changed, 12 insertions(+), 5 deletions(-)

diff --git a/drivers/sensors/gnss_uorb.c b/drivers/sensors/gnss_uorb.c
index 63164a50e9..257543e88e 100644
--- a/drivers/sensors/gnss_uorb.c
+++ b/drivers/sensors/gnss_uorb.c
@@ -168,14 +168,21 @@ static int gnss_activate(FAR struct sensor_lowerhalf_s 
*lower,
   int ret = OK;
 
   nxmutex_lock(&upper->lock);
-  if ((upper->crefs == 0 && enable) || (upper->crefs == 1 && !enable))
+  if ((upper->crefs == 255 && enable) || (upper->crefs == 0 && !enable))
     {
-      ret = upper->lower->ops->activate(upper->lower, filep, enable);
+      ret = -EINVAL;
     }
-
-  if (ret >= 0)
+  else
     {
-      upper->crefs += enable ? 1 : -1;
+      if ((upper->crefs == 0 && enable) || (upper->crefs == 1 && !enable))
+        {
+          ret = upper->lower->ops->activate(upper->lower, filep, enable);
+        }
+
+      if (ret >= 0)
+        {
+          upper->crefs += enable ? 1 : -1;
+        }
     }
 
   nxmutex_unlock(&upper->lock);

Reply via email to