diff options
Diffstat (limited to '3rdparty/openpgm-svn-r1135-0001-sigsegv-in-txw.patch')
-rw-r--r-- | 3rdparty/openpgm-svn-r1135-0001-sigsegv-in-txw.patch | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/3rdparty/openpgm-svn-r1135-0001-sigsegv-in-txw.patch b/3rdparty/openpgm-svn-r1135-0001-sigsegv-in-txw.patch new file mode 100644 index 0000000..af6d4fd --- /dev/null +++ b/3rdparty/openpgm-svn-r1135-0001-sigsegv-in-txw.patch @@ -0,0 +1,28 @@ +Problem: OpenPGM generates a SIGSEGV upon accessing peer->sock->use_pgmcc. + This is because the code assumes that the queue list entry comes first + in the definition of struct pgm_peer_t, which it does not (anymore?). + +diff -Naur openpgm-r1135-pristine/pgm/receiver.c openpgm-svn-r1135/pgm/receiver.c +--- openpgm-r1135-pristine/pgm/receiver.c 2010-09-06 20:41:52.000000000 +0200 ++++ openpgm-svn-r1135/pgm/receiver.c 2010-09-24 12:40:07.000000000 +0200 +@@ -71,7 +71,9 @@ + pgm_assert (NULL != window); + pgm_assert (NULL != window->ack_backoff_queue.tail); + +- const struct pgm_peer_t* peer = (const struct pgm_peer_t*)window->ack_backoff_queue.tail; ++ const struct pgm_peer_t* peer = (const struct pgm_peer_t*)window->ack_backoff_queue.tail->data; ++ pgm_assert (NULL != peer); ++ + pgm_assert (peer->sock->use_pgmcc); + return peer->ack_rb_expiry; + } +@@ -416,6 +418,9 @@ + sock->ack_c_p); + peer->spmr_expiry = now + sock->spmr_expiry; + ++/* Prepare ack_link */ ++ peer->ack_link.data = peer; ++ + /* add peer to hash table and linked list */ + pgm_rwlock_writer_lock (&sock->peers_lock); + pgm_peer_t* entry = _pgm_peer_ref (peer); |