Fix for issue described in the following mail

https://lists.berlios.de/pipermail/openocd-development/2010-December/017479.html

From c78f5203622438e73580c327a6e55a0df17b85a8 Mon Sep 17 00:00:00 2001
From: Paul Richards <[email protected]>
Date: Wed, 8 Dec 2010 15:48:55 +0900
Subject: [PATCH] Fix for segmentation fault from freed memory access in 
jtag_unregister_event_callback()

---
 src/jtag/core.c |   22 ++++++++++------------
 1 files changed, 10 insertions(+), 12 deletions(-)

diff --git a/src/jtag/core.c b/src/jtag/core.c
index c1b64bb..4f75e1c 100644
--- a/src/jtag/core.c
+++ b/src/jtag/core.c
@@ -296,27 +296,25 @@ int jtag_register_event_callback(jtag_event_handler_t 
callback, void *priv)
 
 int jtag_unregister_event_callback(jtag_event_handler_t callback, void *priv)
 {
-       struct jtag_event_callback **callbacks_p;
-       struct jtag_event_callback **next;
+       struct jtag_event_callback **callbacks_p = &jtag_event_callbacks;
 
        if (callback == NULL)
        {
                return ERROR_INVALID_ARGUMENTS;
        }
 
-       for (callbacks_p = &jtag_event_callbacks;
-                       *callbacks_p != NULL;
-                       callbacks_p = next)
+       while (*callbacks_p != NULL)
        {
-               next = &((*callbacks_p)->next);
-
-               if ((*callbacks_p)->priv != priv)
-                       continue;
+               if (((*callbacks_p)->priv != priv) && ((*callbacks_p)->callback 
== callback))
+               {
+                       struct jtag_event_callback *free_callback = 
*callbacks_p;
 
-               if ((*callbacks_p)->callback == callback)
+                       *callbacks_p = (*callbacks_p)->next;
+                       free(free_callback);
+               }
+               else
                {
-                       free(*callbacks_p);
-                       *callbacks_p = *next;
+                       callbacks_p = &((*callbacks_p)->next);
                }
        }
 
-- 
1.7.2.3

_______________________________________________
Openocd-development mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/openocd-development

Reply via email to