summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormelifaro <melifaro@FreeBSD.org>2012-04-22 16:13:23 +0000
committermelifaro <melifaro@FreeBSD.org>2012-04-22 16:13:23 +0000
commit30081abc9ab6f2dc7f346c691e76be4b1c5b9d73 (patch)
treec4d9d919a7cf66a6ab61bf3ef43663a50769e6ff
parentb378da045b65724c107c298a068d631553a3beea (diff)
downloadFreeBSD-src-30081abc9ab6f2dc7f346c691e76be4b1c5b9d73.zip
FreeBSD-src-30081abc9ab6f2dc7f346c691e76be4b1c5b9d73.tar.gz
Do not require radix write lock to be held while dumping route table
via sysctl(4) interface. This permits router not to stop forwarding packets while route table is being written to user-supplied buffer. Reported by: Pawel Tyll <ptyll@nitronet.pl> Approved by: kib(mentor) MFC after: 1 week
-rw-r--r--sys/net/rtsock.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/sys/net/rtsock.c b/sys/net/rtsock.c
index 43539ba..20f1de8 100644
--- a/sys/net/rtsock.c
+++ b/sys/net/rtsock.c
@@ -1884,10 +1884,10 @@ sysctl_rtsock(SYSCTL_HANDLER_ARGS)
for (error = 0; error == 0 && i <= lim; i++) {
rnh = rt_tables_get_rnh(req->td->td_proc->p_fibnum, i);
if (rnh != NULL) {
- RADIX_NODE_HEAD_LOCK(rnh);
+ RADIX_NODE_HEAD_RLOCK(rnh);
error = rnh->rnh_walktree(rnh,
sysctl_dumpentry, &w);
- RADIX_NODE_HEAD_UNLOCK(rnh);
+ RADIX_NODE_HEAD_RUNLOCK(rnh);
} else if (af != 0)
error = EAFNOSUPPORT;
}
OpenPOWER on IntegriCloud