net/udp: Fix a whole in the address lookup logic.

This commit is contained in:
Gregory Nutt 2018-06-25 07:51:21 -06:00
parent 25686a9dac
commit 589e3aa54e

View File

@ -165,7 +165,7 @@ FAR struct net_driver_s *udp_find_raddr_device(FAR struct udp_conn_s *conn)
* uninitialized and that the socket is, hence, not bound. * uninitialized and that the socket is, hence, not bound.
*/ */
if (conn->u.ipv4.laddr == 0) if (conn->u.ipv4.laddr == 0) /* INADDR_ANY */
{ {
return NULL; return NULL;
} }
@ -176,13 +176,23 @@ FAR struct net_driver_s *udp_find_raddr_device(FAR struct udp_conn_s *conn)
} }
} }
/* Normal lookup using the remote address */ /* There is no unique device associated with the unspecified
* address.
*/
else else if (conn->u.ipv4.raddr != INADDR_ANY)
{ {
/* Normal lookup using the verified remote address */
return netdev_findby_ipv4addr(conn->u.ipv4.laddr, return netdev_findby_ipv4addr(conn->u.ipv4.laddr,
conn->u.ipv4.raddr); conn->u.ipv4.raddr);
} }
else
{
/* Not a suitable IPv4 unicast address for device lookup */
return NULL;
}
} }
#endif #endif
@ -215,13 +225,23 @@ FAR struct net_driver_s *udp_find_raddr_device(FAR struct udp_conn_s *conn)
} }
} }
/* Normal lookup using the remote address */ /* There is no unique device associated with the unspecified
* address.
*/
else else if (!net_ipv6addr_cmp(conn->u.ipv6.raddr, g_ipv6_unspecaddr))
{ {
/* Normal lookup using the verified remote address */
return netdev_findby_ipv6addr(conn->u.ipv6.laddr, return netdev_findby_ipv6addr(conn->u.ipv6.laddr,
conn->u.ipv6.raddr); conn->u.ipv6.raddr);
} }
else
{
/* Not a suitable IPv6 unicast address for device lookup */
return NULL;
}
} }
#endif #endif
} }