mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-24 07:13:33 +08:00
Correct a buffer size error in the STM32 ethernet driver
git-svn-id: https://nuttx.svn.sourceforge.net/svnroot/nuttx/trunk@4403 7fd9a85b-ad96-42d3-883c-3090e2eb8679
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
/****************************************************************************
|
||||
* net/net_timeo.c
|
||||
*
|
||||
* Copyright (C) 2007-2009, 2011 Gregory Nutt. All rights reserved.
|
||||
* Author: Gregory Nutt <spudmonkey@racsa.co.cr>
|
||||
* Copyright (C) 2007-2009, 2011-2012 Gregory Nutt. All rights reserved.
|
||||
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/****************************************************************************
|
||||
* net/uip/uip_chksum.c
|
||||
*
|
||||
* Copyright (C) 2007-2010 Gregory Nutt. All rights reserved.
|
||||
* Author: Gregory Nutt <spudmonkey@racsa.co.cr>
|
||||
* Copyright (C) 2007-2010, 2012 Gregory Nutt. All rights reserved.
|
||||
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
|
||||
+17
-14
@@ -2,8 +2,8 @@
|
||||
* net/uip/uip_input.c
|
||||
* The uIP TCP/IP stack code.
|
||||
*
|
||||
* Copyright (C) 2007-2009 Gregory Nutt. All rights reserved.
|
||||
* Author: Gregory Nutt <spudmonkey@racsa.co.cr>
|
||||
* Copyright (C) 2007-2009, 2012 Gregory Nutt. All rights reserved.
|
||||
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||
*
|
||||
* Adapted for NuttX from logic in uIP which also has a BSD-like license:
|
||||
*
|
||||
@@ -297,6 +297,7 @@ nullreturn:
|
||||
void uip_input(struct uip_driver_s *dev)
|
||||
{
|
||||
struct uip_ip_hdr *pbuf = BUF;
|
||||
uint16_t iplen;
|
||||
|
||||
/* This is where the input processing starts. */
|
||||
|
||||
@@ -343,20 +344,23 @@ void uip_input(struct uip_driver_s *dev)
|
||||
* we set d_len to the correct value.
|
||||
*/
|
||||
|
||||
if ((pbuf->len[0] << 8) + pbuf->len[1] <= dev->d_len)
|
||||
{
|
||||
dev->d_len = (pbuf->len[0] << 8) + pbuf->len[1];
|
||||
#ifdef CONFIG_NET_IPv6
|
||||
/* The length reported in the IPv6 header is the length of the
|
||||
* payload that follows the header. However, uIP uses the d_len
|
||||
* variable for holding the size of the entire packet, including the
|
||||
* IP header. For IPv4 this is not a problem as the length field in
|
||||
* the IPv4 header contains the length of the entire packet. But
|
||||
* for IPv6 we need to add the size of the IPv6 header (40 bytes).
|
||||
*/
|
||||
/* The length reported in the IPv6 header is the length of the payload
|
||||
* that follows the header. However, uIP uses the d_len variable for
|
||||
* holding the size of the entire packet, including the IP header. For
|
||||
* IPv4 this is not a problem as the length field in the IPv4 header
|
||||
* contains the length of the entire packet. But for IPv6 we need to add
|
||||
* the size of the IPv6 header (40 bytes).
|
||||
*/
|
||||
|
||||
dev->d_len += 40;
|
||||
iplen = (pbuf->len[0] << 8) + pbuf->len[1] + UIP_IPH_LEN;
|
||||
#else
|
||||
iplen = (pbuf->len[0] << 8) + pbuf->len[1];
|
||||
#endif /* CONFIG_NET_IPv6 */
|
||||
|
||||
if (iplen <= dev->d_len)
|
||||
{
|
||||
dev->d_len = iplen;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -538,4 +542,3 @@ drop:
|
||||
dev->d_len = 0;
|
||||
}
|
||||
#endif /* CONFIG_NET */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user