net/netdev: correct the ioctl command validation logic

This patch fixes the validation order in netdev ioctl handlers for
Bluetooth, IEEE 802.15.4, and packet radio devices. The command type
should be validated before checking the argument pointer to return
the correct error code (-ENOTTY vs -EINVAL).

Signed-off-by: zhanghongyu <zhanghongyu@xiaomi.com>
This commit is contained in:
zhanghongyu
2025-06-04 21:18:51 +08:00
committed by Xiang Xiao
parent 3e9190396e
commit 5ce2955e62
+13 -14
View File
@@ -394,11 +394,11 @@ static int netdev_bluetooth_ioctl(FAR struct socket *psock, int cmd,
{ {
FAR struct net_driver_s *dev; FAR struct net_driver_s *dev;
FAR char *ifname; FAR char *ifname;
int ret = -EINVAL; int ret = -ENOTTY;
if (arg != 0ul) if (_BLUETOOTHIOCVALID(cmd))
{ {
if (_BLUETOOTHIOCVALID(cmd)) if (arg != 0ul)
{ {
/* Get the name of the Bluetooth device to receive the IOCTL /* Get the name of the Bluetooth device to receive the IOCTL
* command * command
@@ -411,9 +411,9 @@ static int netdev_bluetooth_ioctl(FAR struct socket *psock, int cmd,
} }
else else
{ {
/* Not a Bluetooth IOCTL command */ /* Argument is invalid */
return -ENOTTY; return -EINVAL;
} }
/* Find the device with this name */ /* Find the device with this name */
@@ -459,9 +459,9 @@ static int netdev_iee802154_ioctl(FAR struct socket *psock, int cmd,
FAR char *ifname; FAR char *ifname;
int ret = -ENOTTY; int ret = -ENOTTY;
if (arg != 0ul) if (_MAC802154IOCVALID(cmd))
{ {
if (_MAC802154IOCVALID(cmd)) if (arg != 0ul)
{ {
/* Get the IEEE802.15.4 MAC device to receive the radio IOCTL /* Get the IEEE802.15.4 MAC device to receive the radio IOCTL
* command * command
@@ -474,9 +474,9 @@ static int netdev_iee802154_ioctl(FAR struct socket *psock, int cmd,
} }
else else
{ {
/* Not an EEE802.15.4 MAC IOCTL command */ /* Argument is invalid */
return -ENOTTY; return -EINVAL;
} }
/* Find the device with this name */ /* Find the device with this name */
@@ -520,9 +520,9 @@ static int netdev_pktradio_ioctl(FAR struct socket *psock, int cmd,
FAR char *ifname; FAR char *ifname;
int ret = -ENOTTY; int ret = -ENOTTY;
if (arg != 0ul) if (_PKRADIOIOCVALID(cmd))
{ {
if (_PKRADIOIOCVALID(cmd)) if (arg != 0ul)
{ {
/* Get the packet radio device to receive the radio IOCTL /* Get the packet radio device to receive the radio IOCTL
* command * command
@@ -535,10 +535,9 @@ static int netdev_pktradio_ioctl(FAR struct socket *psock, int cmd,
} }
else else
{ {
/* Not a packet radio IOCTL command */ /* Argument is invalid */
nwarn("WARNING: Not a packet radio IOCTL command: %d\n", cmd); return -EINVAL;
return -ENOTTY;
} }
/* Find the device with this name */ /* Find the device with this name */