summaryrefslogtreecommitdiff
path: root/nuttx/net/uip/uip_callback.c
diff options
context:
space:
mode:
authorGregory Nutt <gnutt@nuttx.org>2014-01-13 12:04:01 -0600
committerGregory Nutt <gnutt@nuttx.org>2014-01-13 12:04:01 -0600
commit37910672a48dbac1288ddb677935c2d8f24bbaa8 (patch)
treefea45ff9dd50dc8eec44bddacb6b5c041bf6b23a /nuttx/net/uip/uip_callback.c
parent45e0b49b1a2808c4ce4c289fbbc8ee284b293917 (diff)
downloadnuttx-37910672a48dbac1288ddb677935c2d8f24bbaa8.tar.gz
nuttx-37910672a48dbac1288ddb677935c2d8f24bbaa8.tar.bz2
nuttx-37910672a48dbac1288ddb677935c2d8f24bbaa8.zip
NET: prevent tcp_connect callback from being double freed. From Max Holtzberg.
Diffstat (limited to 'nuttx/net/uip/uip_callback.c')
-rw-r--r--nuttx/net/uip/uip_callback.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/nuttx/net/uip/uip_callback.c b/nuttx/net/uip/uip_callback.c
index 0c8c3aaa0..e945c5b1a 100644
--- a/nuttx/net/uip/uip_callback.c
+++ b/nuttx/net/uip/uip_callback.c
@@ -161,9 +161,22 @@ void uip_callbackfree(FAR struct uip_callback_s *cb, FAR struct uip_callback_s *
if (cb)
{
+ save = uip_lock();
+
+#ifdef CONFIG_DEBUG
+ /* Check for double freed callbacks */
+
+ curr = g_cbfreelist;
+
+ while (curr != NULL)
+ {
+ DEBUGASSERT(cb != curr);
+ curr = curr->flink;
+ }
+#endif
+
/* Find the callback structure in the connection's list */
- save = uip_lock();
if (list)
{
for (prev = NULL, curr = *list;