Skip to content

Commit

Permalink
wireless/gs2200m: Fix handling of ioctl except SIOCDENYINETSOCK
Browse files Browse the repository at this point in the history
When running a dual stack (usrsock daemon and kernel stack),
ioctl requests that should be handled by the kernel stack are being
processed by the usrsock daemon. This causes ifconfig and ifup to fail.
The usrsock daemon that receives an ioctl request that should be
handled by the kernel stack should reply with ENOTTY.
Replying with ENOTTY means that the ioctl request can fall back to the
kernel stack.
  • Loading branch information
SPRESENSE authored and jerpelea committed Oct 13, 2023
1 parent 79e8722 commit 7de8d06
Showing 1 changed file with 29 additions and 5 deletions.
34 changes: 29 additions & 5 deletions wireless/gs2200m/gs2200m_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -1563,6 +1563,7 @@ static int ioctl_request(int fd, FAR struct gs2200m_s *priv,
struct gs2200m_ifreq_msg imsg;
uint8_t sock_type;
bool getreq = false;
bool drvreq = true;
int ret = -EINVAL;

memset(&imsg.ifr, 0, sizeof(imsg.ifr));
Expand All @@ -1575,14 +1576,29 @@ static int ioctl_request(int fd, FAR struct gs2200m_s *priv,
case SIOCGIWNWID:
case SIOCGIWFREQ:
case SIOCGIWSENS:
getreq = true;
if (priv->usock_enable)
{
getreq = true;
}
else
{
ret = -ENOTTY;
drvreq = false;
}
break;

case SIOCSIFADDR:
case SIOCSIFDSTADDR:
case SIOCSIFNETMASK:

read(fd, &imsg.ifr, sizeof(imsg.ifr));
if (priv->usock_enable)
{
read(fd, &imsg.ifr, sizeof(imsg.ifr));
}
else
{
ret = -ENOTTY;
drvreq = false;
}
break;

case SIOCDENYINETSOCK:
Expand All @@ -1604,11 +1620,19 @@ static int ioctl_request(int fd, FAR struct gs2200m_s *priv,
break;

default:
if (!priv->usock_enable)
{
ret = -ENOTTY;
drvreq = false;
}
break;
}

imsg.cmd = req->cmd;
ret = ioctl(priv->gsfd, GS2200M_IOC_IFREQ, (unsigned long)&imsg);
if (drvreq)
{
imsg.cmd = req->cmd;
ret = ioctl(priv->gsfd, GS2200M_IOC_IFREQ, (unsigned long)&imsg);
}

if (!getreq)
{
Expand Down

0 comments on commit 7de8d06

Please sign in to comment.