git: f29fab6043ae - main - net/quagga: add three bugfixes from upstream
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sat, 15 Jan 2022 09:48:13 UTC
The branch main has been updated by eugen: URL: https://cgit.FreeBSD.org/ports/commit/?id=f29fab6043ae4e3a2d448406a6c900c26f41c353 commit f29fab6043ae4e3a2d448406a6c900c26f41c353 Author: Eugene Grosbein <eugen@FreeBSD.org> AuthorDate: 2022-01-15 09:42:20 +0000 Commit: Eugene Grosbein <eugen@FreeBSD.org> CommitDate: 2022-01-15 09:48:03 +0000 net/quagga: add three bugfixes from upstream This change imports three post-1.2.4 release changes from the primary Git repository of Quagga Project: 1) Fix threading error that broke ripd: https://gogs.quagga.net/Quagga/quagga/commit/1f918980c08d9fb9215609db39f7fb279c2e1807 2) Fix memory corruption that may occur when limit.rlim_cur is less then FD_SETSIZE: https://gogs.quagga.net/Quagga/quagga/commit/b54de751ef72fa67749825a0ea30af7c22d575c5 3) Prevent queue corruption when removing the last entry of queues https://gogs.quagga.net/Quagga/quagga/commit/e21719d8fa2b560d7cc9d1d9204bafee4984c577 PR: 261205 Approved by: pi (maintainer) --- net/quagga/Makefile | 2 +- net/quagga/files/patch-fdsetsize | 21 +++++++++++++++++++++ net/quagga/files/patch-lib_thread.c | 28 ++++++++++++++++++++++------ net/quagga/files/patch-pqueue.c | 14 ++++++++++++++ 4 files changed, 58 insertions(+), 7 deletions(-) diff --git a/net/quagga/Makefile b/net/quagga/Makefile index 5a4ca728e587..321a78832e7b 100644 --- a/net/quagga/Makefile +++ b/net/quagga/Makefile @@ -2,7 +2,7 @@ PORTNAME= quagga PORTVERSION= 1.2.4 -PORTREVISION= 8 +PORTREVISION= 9 CATEGORIES= net MASTER_SITES= https://github.com/Quagga/quagga/releases/download/${DISTNAME}/ diff --git a/net/quagga/files/patch-fdsetsize b/net/quagga/files/patch-fdsetsize new file mode 100644 index 000000000000..83067174f970 --- /dev/null +++ b/net/quagga/files/patch-fdsetsize @@ -0,0 +1,21 @@ +--- lib/thread.c.orig 2018-03-30 18:53:43.537794946 +0200 ++++ lib/thread.c 2018-03-30 19:17:27.919629268 +0200 +@@ -531,7 +531,8 @@ thread_master_create () + return NULL; + } + +- rv->fd_limit = (int)limit.rlim_cur; ++ rv->fd_limit = ((int)limit.rlim_cur < FD_SETSIZE ? ++ (int)limit.rlim_cur : FD_SETSIZE); + rv->read = XCALLOC (MTYPE_THREAD, sizeof (struct thread *) * rv->fd_limit); + if (rv->read == NULL) + { +@@ -1187,7 +1188,7 @@ thread_fetch (struct thread_master *m) + timer_wait = timer_wait_bg; + } + +- num = fd_select (FD_SETSIZE, &readfd, &writefd, &exceptfd, timer_wait); ++ num = fd_select (m->fd_limit, &readfd, &writefd, &exceptfd, timer_wait); + + /* Signals should get quick treatment */ + if (num < 0) diff --git a/net/quagga/files/patch-lib_thread.c b/net/quagga/files/patch-lib_thread.c index fdfe14662332..04736c624c00 100644 --- a/net/quagga/files/patch-lib_thread.c +++ b/net/quagga/files/patch-lib_thread.c @@ -1,11 +1,27 @@ ---- lib/thread.c.orig 2018-02-19 21:24:55 UTC -+++ lib/thread.c -@@ -603,6 +603,8 @@ thread_add_fd (struct thread **thread_ar +--- lib/thread.c.orig 2022-01-15 00:23:57.600963000 +0700 ++++ lib/thread.c 2022-01-15 00:26:01.645088000 +0700 +@@ -603,8 +603,12 @@ thread_add_fd (struct thread **thread_array, struct th static void thread_add_unuse (struct thread *thread) { -+ if (thread->type == THREAD_UNUSED) -+ return; ++ assert (thread); ++ /* thread_execute uses dummy threads, allocated on its stack */ ++ if (thread->master == NULL) ++ return; ++ thread->type = THREAD_UNUSED; - assert (thread->master != NULL && thread != NULL); +- assert (thread->master != NULL && thread != NULL); assert (thread->next == NULL); + assert (thread->prev == NULL); + thread_list_add (&thread->master->unuse, thread); +@@ -1342,9 +1346,7 @@ thread_call (struct thread *thread) + } + #endif /* CONSUMED_TIME_CHECK */ + +- +- if (thread->master) +- thread_add_unuse (thread); ++ thread_add_unuse (thread); + } + + /* Execute thread */ diff --git a/net/quagga/files/patch-pqueue.c b/net/quagga/files/patch-pqueue.c new file mode 100644 index 000000000000..c00e7f6efcaa --- /dev/null +++ b/net/quagga/files/patch-pqueue.c @@ -0,0 +1,14 @@ +--- lib/pqueue.c.orig 2018-02-20 04:24:55.000000000 +0700 ++++ lib/pqueue.c 2022-01-15 00:17:05.525677000 +0700 +@@ -172,7 +172,10 @@ pqueue_dequeue (struct pqueue *queue) + void + pqueue_remove_at (int index, struct pqueue *queue) + { +- queue->array[index] = queue->array[--queue->size]; ++ if (index == --queue->size) ++ return; /* we're removing the last entry */ ++ ++ queue->array[index] = queue->array[queue->size]; + + if (index > 0 + && (*queue->cmp) (queue->array[index],