From 29972cbb508c2f81e6511b3ed6883b8c3092a1e3 Mon Sep 17 00:00:00 2001 From: Haojin Tang Date: Mon, 1 Sep 2025 10:51:46 +0800 Subject: [PATCH 1/2] fix(ioctl): `FIONWRITE` overflows in `switch (int)` --- components/drivers/ipc/pipe.c | 2 +- components/drivers/serial/dev_serial.c | 4 ++-- components/drivers/serial/dev_serial_v2.c | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/components/drivers/ipc/pipe.c b/components/drivers/ipc/pipe.c index e86ac3576f8..5f6856f6566 100644 --- a/components/drivers/ipc/pipe.c +++ b/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 ((unsigned int) cmd) { case FIONREAD: *((int*)args) = rt_ringbuffer_data_len(pipe->fifo); diff --git a/components/drivers/serial/dev_serial.c b/components/drivers/serial/dev_serial.c index eb7c5275ec0..b07a9aaeac9 100644 --- a/components/drivers/serial/dev_serial.c +++ b/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 ((unsigned int) 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 ((unsigned int) cmd) { case RT_DEVICE_CTRL_SUSPEND: /* suspend device */ diff --git a/components/drivers/serial/dev_serial_v2.c b/components/drivers/serial/dev_serial_v2.c index 2a526c809a0..a2bf343da88 100644 --- a/components/drivers/serial/dev_serial_v2.c +++ b/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 ((unsigned int) 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 ((unsigned int) cmd) { case RT_DEVICE_CTRL_SUSPEND: /* suspend device */ From 2cefbe19e0b248777c99f4beb0f7fc2fcb3bce14 Mon Sep 17 00:00:00 2001 From: Haojin Tang Date: Mon, 1 Sep 2025 12:06:33 +0800 Subject: [PATCH 2/2] fixup! use `rt_device_t` --- components/drivers/ipc/pipe.c | 2 +- components/drivers/serial/dev_serial.c | 4 ++-- components/drivers/serial/dev_serial_v2.c | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/components/drivers/ipc/pipe.c b/components/drivers/ipc/pipe.c index 5f6856f6566..64540eade17 100644 --- a/components/drivers/ipc/pipe.c +++ b/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 ((unsigned int) cmd) + switch ((rt_ubase_t)cmd) { case FIONREAD: *((int*)args) = rt_ringbuffer_data_len(pipe->fifo); diff --git a/components/drivers/serial/dev_serial.c b/components/drivers/serial/dev_serial.c index b07a9aaeac9..3ebe3063ace 100644 --- a/components/drivers/serial/dev_serial.c +++ b/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 ((unsigned int) 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 ((unsigned int) cmd) + switch ((rt_ubase_t)cmd) { case RT_DEVICE_CTRL_SUSPEND: /* suspend device */ diff --git a/components/drivers/serial/dev_serial_v2.c b/components/drivers/serial/dev_serial_v2.c index a2bf343da88..d2b9fde8289 100644 --- a/components/drivers/serial/dev_serial_v2.c +++ b/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 ((unsigned int) 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 ((unsigned int) cmd) + switch ((rt_ubase_t)cmd) { case RT_DEVICE_CTRL_SUSPEND: /* suspend device */