mirror of
https://github.com/apache/nuttx.git
synced 2026-10-04 04:38:10 +00:00
net/udp: Validate UDP length field against actual packet size
According to RFC768 page 2, length feild is the length in octets of this user datagram including this header and the data. Signed-off-by: gaohedong <gaohedong@xiaomi.com>
This commit is contained in:
parent
18a5ec8410
commit
5ba6d3c4eb
1 changed files with 11 additions and 0 deletions
|
|
@ -215,6 +215,7 @@ static int udp_input(FAR struct net_driver_s *dev, unsigned int iplen)
|
|||
FAR struct iob_s *iob;
|
||||
#endif
|
||||
unsigned int udpiplen;
|
||||
unsigned int udpdatalen = dev->d_len - iplen;
|
||||
#ifdef CONFIG_NET_UDP_CHECKSUMS
|
||||
uint16_t chksum;
|
||||
#endif
|
||||
|
|
@ -232,6 +233,16 @@ static int udp_input(FAR struct net_driver_s *dev, unsigned int iplen)
|
|||
|
||||
udp = IPBUF(iplen);
|
||||
|
||||
/* Check the UDP packet length */
|
||||
|
||||
if (udpdatalen < UDP_HDRLEN || ntohs(udp->udplen) != udpdatalen)
|
||||
{
|
||||
nwarn("WARNING: UDP length invalid: hdr=%u actual=%u\n",
|
||||
ntohs(udp->udplen), udpdatalen);
|
||||
dev->d_len = 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Get the size of the IP header and the UDP header */
|
||||
|
||||
udpiplen = iplen + UDP_HDRLEN;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue