aboutsummaryrefslogtreecommitdiff
path: root/sys/kern/kern_sysctl.c
diff options
context:
space:
mode:
authorPoul-Henning Kamp <phk@FreeBSD.org>1999-03-23 14:23:15 +0000
committerPoul-Henning Kamp <phk@FreeBSD.org>1999-03-23 14:23:15 +0000
commit7f4173cc09290763b26b990d3efb01065b7aabf9 (patch)
treef21b21dd37ef1cf2fcf915758c82d2dcbd64e0cf /sys/kern/kern_sysctl.c
parent3aacd339f0c15e63ff46e9a0224ba1f630410758 (diff)
downloadsrc-7f4173cc09290763b26b990d3efb01065b7aabf9.tar.gz
src-7f4173cc09290763b26b990d3efb01065b7aabf9.zip
Fix some nasty hangs if garbage were passed.
Noticed by: Emmanuel DELOGET <pixel@DotCom.FR> Remembered by: msmith
Notes
Notes: svn path=/head/; revision=44972
Diffstat (limited to 'sys/kern/kern_sysctl.c')
-rw-r--r--sys/kern/kern_sysctl.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/sys/kern/kern_sysctl.c b/sys/kern/kern_sysctl.c
index 27a511a38767..958fa65c2ea8 100644
--- a/sys/kern/kern_sysctl.c
+++ b/sys/kern/kern_sysctl.c
@@ -37,7 +37,7 @@
* SUCH DAMAGE.
*
* @(#)kern_sysctl.c 8.4 (Berkeley) 4/14/94
- * $Id: kern_sysctl.c,v 1.83 1999/01/10 07:45:31 phk Exp $
+ * $Id: kern_sysctl.c,v 1.84 1999/02/16 10:49:48 dfr Exp $
*/
#include "opt_compat.h"
@@ -220,7 +220,7 @@ sysctl_sysctl_name SYSCTL_HANDLER_ARGS
u_int namelen = arg2;
int error = 0;
struct sysctl_oid *oid;
- struct sysctl_oid_list *lsp = &sysctl__children;
+ struct sysctl_oid_list *lsp = &sysctl__children, *lsp2;
char buf[10];
while (namelen) {
@@ -236,6 +236,7 @@ sysctl_sysctl_name SYSCTL_HANDLER_ARGS
name++;
continue;
}
+ lsp2 = 0;
SLIST_FOREACH(oid, lsp, oid_link) {
if (oid->oid_number != *name)
continue;
@@ -251,15 +252,16 @@ sysctl_sysctl_name SYSCTL_HANDLER_ARGS
namelen--;
name++;
- if ((oid->oid_kind & CTLTYPE) != CTLTYPE_NODE)
+ if ((oid->oid_kind & CTLTYPE) != CTLTYPE_NODE)
break;
if (oid->oid_handler)
break;
- lsp = (struct sysctl_oid_list *)oid->oid_arg1;
+ lsp2 = (struct sysctl_oid_list *)oid->oid_arg1;
break;
}
+ lsp = lsp2;
}
return (SYSCTL_OUT(req, "", 1));
}