mirror of
https://github.com/apache/nuttx.git
synced 2026-05-27 11:26:12 +08:00
net/socket: send: verify that sockfd is valid, fixes assert when using send on closed socket
This commit is contained in:
committed by
Gregory Nutt
parent
1fa854285d
commit
7846381e09
+15
-2
@@ -121,9 +121,18 @@ ssize_t psock_send(FAR struct socket *psock, FAR const void *buf, size_t len,
|
|||||||
int flags)
|
int flags)
|
||||||
{
|
{
|
||||||
ssize_t ret;
|
ssize_t ret;
|
||||||
|
int errcode;
|
||||||
|
|
||||||
DEBUGASSERT(psock != NULL && buf != NULL);
|
DEBUGASSERT(psock != NULL && buf != NULL);
|
||||||
|
|
||||||
|
/* Verify that the sockfd corresponds to valid, allocated socket */
|
||||||
|
|
||||||
|
if (psock == NULL || psock->s_crefs <= 0)
|
||||||
|
{
|
||||||
|
errcode = EBADF;
|
||||||
|
goto errout;
|
||||||
|
}
|
||||||
|
|
||||||
/* Let the address family's send() method handle the operation */
|
/* Let the address family's send() method handle the operation */
|
||||||
|
|
||||||
DEBUGASSERT(psock->s_sockif != NULL && psock->s_sockif->si_send != NULL);
|
DEBUGASSERT(psock->s_sockif != NULL && psock->s_sockif->si_send != NULL);
|
||||||
@@ -132,11 +141,15 @@ ssize_t psock_send(FAR struct socket *psock, FAR const void *buf, size_t len,
|
|||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
nerr("ERROR: socket si_send() (or usrsock_sendto()) failed: %d\n", ret);
|
nerr("ERROR: socket si_send() (or usrsock_sendto()) failed: %d\n", ret);
|
||||||
set_errno(-ret);
|
errcode = -ret;
|
||||||
ret = ERROR;
|
goto errout;
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
errout:
|
||||||
|
set_errno(errcode);
|
||||||
|
return ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
|
|||||||
Reference in New Issue
Block a user