Index: sys/dev/raidframe/rf_disks.c =================================================================== --- rf_disks.c 8 Dec 2019 12:14:40 -0000 1.92 +++ rf_disks.c 6 Aug 2022 22:21:52 -0000 @@ -577,12 +577,13 @@ rf_ConfigureDisk(RF_Raid_t *raidPtr, cha struct vnode *vp; int error; - p = rf_find_non_white(bf); - if (p[strlen(p) - 1] == '\n') { + p = rf_find_non_white(bf, sizeof(diskPtr->devname)); + if (p[strnlen(p, sizeof(diskPtr->devname)) - 1] == '\n') { /* strip off the newline */ - p[strlen(p) - 1] = '\0'; + p[strnlen(p, sizeof(diskPtr->devname)) - 1] = '\0'; } - (void) strcpy(diskPtr->devname, p); + strncpy(diskPtr->devname, p, sizeof(diskPtr->devname)); + diskPtr->devname[sizeof(diskPtr->devname) - 1] = '\0'; /* Let's start by claiming the component is fine and well... */ diskPtr->status = rf_ds_optimal; Index: sys/dev/raidframe/rf_driver.c =================================================================== --- rf_driver.c 23 Jul 2021 02:35:14 -0000 1.139 +++ rf_driver.c 6 Aug 2022 22:21:52 -0000 @@ -889,10 +889,10 @@ rf_ConfigureDebug(RF_Config_t *cfgPtr) rf_ResetDebugOptions(); for (i = 0; i < RF_MAXDBGV && cfgPtr->debugVars[i][0]; i++) { - name_p = rf_find_non_white(&cfgPtr->debugVars[i][0]); - white_p = rf_find_white(name_p); /* skip to start of 2nd - * word */ - val_p = rf_find_non_white(white_p); + name_p = rf_find_non_white(&cfgPtr->debugVars[i][0], sizeof(cfgPtr->debugVars[0])); + /* skip to start of 2nd * word */ + white_p = rf_find_white(name_p, sizeof(cfgPtr->debugVars[0]) - (name_p - &cfgPtr->debugVars[i][0])); + val_p = rf_find_non_white(white_p, sizeof(cfgPtr->debugVars[0]) - (white_p - &cfgPtr->debugVars[i][0])); if (*val_p == '0' && *(val_p + 1) == 'x') val = rf_htoi(val_p + 2); else Index: sys/dev/raidframe/rf_strutils.c =================================================================== --- rf_strutils.c 13 Nov 2001 07:11:17 -0000 1.4 +++ rf_strutils.c 6 Aug 2022 22:21:52 -0000 @@ -44,15 +44,16 @@ __KERNEL_RCSID(0, "$NetBSD: rf_strutils. /* finds a non-white character in the line */ char * -rf_find_non_white(char *p) +rf_find_non_white(char *p, size_t len) { - for (; *p != '\0' && (*p == ' ' || *p == '\t'); p++); + for (; len > 0 && *p != '\0' && (*p == ' ' || *p == '\t'); p++, len--); return (p); } + /* finds a white character in the line */ char * -rf_find_white(char *p) +rf_find_white(char *p, size_t len) { - for (; *p != '\0' && (*p != ' ' && *p != '\t'); p++); + for (; len > 0 && *p != '\0' && (*p != ' ' && *p != '\t'); p++, len--); return (p); } Index: sys/dev/raidframe/rf_utils.h =================================================================== --- rf_utils.h 4 Oct 2001 15:58:56 -0000 1.5 +++ rf_utils.h 6 Aug 2022 22:21:52 -0000 @@ -40,8 +40,8 @@ #include "rf_alloclist.h" #include "rf_threadstuff.h" -char *rf_find_non_white(char *p); -char *rf_find_white(char *p); +char *rf_find_non_white(char *p, size_t len); +char *rf_find_white(char *p, size_t len); RF_RowCol_t **rf_make_2d_array(int b, int k, RF_AllocListElem_t * allocList); RF_RowCol_t *rf_make_1d_array(int c, RF_AllocListElem_t * allocList); void rf_free_2d_array(RF_RowCol_t ** a, int b, int k);