소스 검색

fix(ioctl): _IOR() overflows in switch (int) #10650

Tang Haojin 1 주 전
부모
커밋
728d9e4919
3개의 변경된 파일5개의 추가작업 그리고 5개의 파일을 삭제
  1. 1 1
      components/drivers/ipc/pipe.c
  2. 2 2
      components/drivers/serial/dev_serial.c
  3. 2 2
      components/drivers/serial/dev_serial_v2.c

+ 1 - 1
components/drivers/ipc/pipe.c

@@ -190,7 +190,7 @@ static int pipe_fops_ioctl(struct dfs_file *fd, int cmd, void *args)
 
     pipe = (rt_pipe_t *)fd->vnode->data;
 
-    switch (cmd)
+    switch ((rt_ubase_t)cmd)
     {
     case FIONREAD:
         *((int*)args) = rt_ringbuffer_data_len(pipe->fifo);

+ 2 - 2
components/drivers/serial/dev_serial.c

@@ -125,7 +125,7 @@ static int serial_fops_ioctl(struct dfs_file *fd, int cmd, void *args)
     int mask  = O_NONBLOCK | O_APPEND;
 
     device = (rt_device_t)fd->vnode->data;
-    switch (cmd)
+    switch ((rt_ubase_t)cmd)
     {
     case FIONREAD:
         break;
@@ -1074,7 +1074,7 @@ static rt_err_t rt_serial_control(struct rt_device *dev,
     RT_ASSERT(dev != RT_NULL);
     serial = (struct rt_serial_device *)dev;
 
-    switch (cmd)
+    switch ((rt_ubase_t)cmd)
     {
         case RT_DEVICE_CTRL_SUSPEND:
             /* suspend device */

+ 2 - 2
components/drivers/serial/dev_serial_v2.c

@@ -121,7 +121,7 @@ static int serial_fops_ioctl(struct dfs_file *fd, int cmd, void *args)
     int         mask  = O_NONBLOCK | O_APPEND;
 
     device = (rt_device_t)fd->vnode->data;
-    switch (cmd)
+    switch ((rt_ubase_t)cmd)
     {
     case FIONREAD:
         break;
@@ -1385,7 +1385,7 @@ static rt_err_t rt_serial_control(struct rt_device *dev,
     RT_ASSERT(dev != RT_NULL);
     serial = (struct rt_serial_device *)dev;
 
-    switch (cmd)
+    switch ((rt_ubase_t)cmd)
     {
     case RT_DEVICE_CTRL_SUSPEND:
         /* suspend device */