Merge pull request #14963 from miri64/gnrc_sock_ip/fix/sock

gnrc_sock_ip: fix NULL pointer dereference
This commit is contained in:
Martine Lenders 2020-09-08 17:15:25 +02:00 committed by GitHub
commit ec436b9069
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 16 additions and 4 deletions

View File

@ -194,7 +194,7 @@ ssize_t sock_ip_send(sock_ip_t *sock, const void *data, size_t len,
gnrc_ep_set(&rem, remote, sizeof(rem)); gnrc_ep_set(&rem, remote, sizeof(rem));
} }
if ((remote != NULL) && (remote->family == AF_UNSPEC) && if ((remote != NULL) && (remote->family == AF_UNSPEC) &&
(sock->remote.family != AF_UNSPEC)) { (sock != NULL) && (sock->remote.family != AF_UNSPEC)) {
/* remote was set on create so take its family */ /* remote was set on create so take its family */
rem.family = sock->remote.family; rem.family = sock->remote.family;
} }

View File

@ -366,7 +366,7 @@ static void test_sock_ip_recv_buf__success(void)
assert(_check_net()); assert(_check_net());
} }
static void test_sock_ip_send__EAFNOSUPPORT(void) static void test_sock_ip_send__EAFNOSUPPORT_INET(void)
{ {
static const sock_ip_ep_t remote = { .addr = { .ipv6 = _TEST_ADDR_REMOTE }, static const sock_ip_ep_t remote = { .addr = { .ipv6 = _TEST_ADDR_REMOTE },
.family = AF_INET }; .family = AF_INET };
@ -376,6 +376,16 @@ static void test_sock_ip_send__EAFNOSUPPORT(void)
expect(_check_net()); expect(_check_net());
} }
static void test_sock_ip_send__EAFNOSUPPORT_UNSPEC(void)
{
static const sock_ip_ep_t remote = { .addr = { .ipv6 = _TEST_ADDR_REMOTE },
.family = AF_UNSPEC };
expect(-EAFNOSUPPORT == sock_ip_send(NULL, "ABCD", sizeof("ABCD"),
_TEST_PROTO, &remote));
expect(_check_net());
}
static void test_sock_ip_send__EINVAL_addr(void) static void test_sock_ip_send__EINVAL_addr(void)
{ {
static const sock_ip_ep_t local = { .addr = { .ipv6 = _TEST_ADDR_LOCAL }, static const sock_ip_ep_t local = { .addr = { .ipv6 = _TEST_ADDR_LOCAL },
@ -641,7 +651,8 @@ int main(void)
CALL(test_sock_ip_recv__non_blocking()); CALL(test_sock_ip_recv__non_blocking());
CALL(test_sock_ip_recv_buf__success()); CALL(test_sock_ip_recv_buf__success());
_prepare_send_checks(); _prepare_send_checks();
CALL(test_sock_ip_send__EAFNOSUPPORT()); CALL(test_sock_ip_send__EAFNOSUPPORT_INET());
CALL(test_sock_ip_send__EAFNOSUPPORT_UNSPEC());
CALL(test_sock_ip_send__EINVAL_addr()); CALL(test_sock_ip_send__EINVAL_addr());
CALL(test_sock_ip_send__EINVAL_netif()); CALL(test_sock_ip_send__EINVAL_netif());
CALL(test_sock_ip_send__ENOTCONN()); CALL(test_sock_ip_send__ENOTCONN());

View File

@ -30,7 +30,8 @@ def testfunc(child):
child.expect_exact(u"Calling test_sock_ip_recv__unsocketed()") child.expect_exact(u"Calling test_sock_ip_recv__unsocketed()")
child.expect_exact(u"Calling test_sock_ip_recv__unsocketed_with_remote()") child.expect_exact(u"Calling test_sock_ip_recv__unsocketed_with_remote()")
child.expect_exact(u"Calling test_sock_ip_recv__with_timeout()") child.expect_exact(u"Calling test_sock_ip_recv__with_timeout()")
child.expect_exact(u"Calling test_sock_ip_send__EAFNOSUPPORT()") child.expect_exact(u"Calling test_sock_ip_send__EAFNOSUPPORT_INET()")
child.expect_exact(u"Calling test_sock_ip_send__EAFNOSUPPORT_UNSPEC()")
child.expect_exact(u"Calling test_sock_ip_send__EINVAL_addr()") child.expect_exact(u"Calling test_sock_ip_send__EINVAL_addr()")
child.expect_exact(u"Calling test_sock_ip_send__EINVAL_netif()") child.expect_exact(u"Calling test_sock_ip_send__EINVAL_netif()")
child.expect_exact(u"Calling test_sock_ip_send__ENOTCONN()") child.expect_exact(u"Calling test_sock_ip_send__ENOTCONN()")