From bf26b4d9e436beefd37e0aaa4c7726d6577d2a61 Mon Sep 17 00:00:00 2001 From: mrg Date: Sat, 1 Feb 2003 11:12:35 +0000 Subject: [PATCH] in devsw_name2blk(), as we use strncmp(), make sure the next character in the device is either nul or a digit. this avoids "raid0" being matched as the "ra" device (and thus failing to find anything at all causing my raid0 root to fail) on my vax. --- sys/kern/subr_devsw.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/sys/kern/subr_devsw.c b/sys/kern/subr_devsw.c index f4dec41cefb2..1dc8c7e682bd 100644 --- a/sys/kern/subr_devsw.c +++ b/sys/kern/subr_devsw.c @@ -1,4 +1,4 @@ -/* $NetBSD: subr_devsw.c,v 1.4 2002/09/15 14:29:01 tsutsui Exp $ */ +/* $NetBSD: subr_devsw.c,v 1.5 2003/02/01 11:12:35 mrg Exp $ */ /*- * Copyright (c) 2001,2002 The NetBSD Foundation, Inc. * All rights reserved. @@ -379,15 +379,20 @@ devsw_name2blk(const char *name, char *devname, size_t devnamelen) return (-1); for (i = 0 ; i < max_devsw_convs ; i++) { + size_t len; + conv = &devsw_conv[i]; if (conv->d_name == NULL) continue; - if (strncmp(conv->d_name, name, strlen(conv->d_name)) != 0) + len = strlen(conv->d_name); + if (strncmp(conv->d_name, name, len) != 0) + continue; + if (*(name +len) && !isdigit(*(name + len))) continue; bmajor = conv->d_bmajor; if (bmajor < 0 || bmajor >= max_bdevsws || bdevsw[bmajor] == NULL) - return (-1); + break; if (devname != NULL) { #ifdef DEVSW_DEBUG if (strlen(conv->d_name) >= devnamelen)