diff --git a/sys/dev/disk/nata/ata-disk.c b/sys/dev/disk/nata/ata-disk.c --- a/sys/dev/disk/nata/ata-disk.c +++ b/sys/dev/disk/nata/ata-disk.c @@ -508,8 +508,21 @@ u_int8_t *marker, vendor[64], product[64]; /* try to seperate the ATA model string into vendor and model parts */ - if ((marker = index(atadev->param.model, ' ')) || - (marker = index(atadev->param.model, '-'))) { + /* param.model is a u_int8_t[40] NOT guaranteed NUL-terminated by + * IDENTIFY; index() would scan past the end. Walk explicitly. */ + marker = NULL; + { + size_t ml; + for (ml = 0; ml < 40; ml++) { + if (atadev->param.model[ml] == ' ' || atadev->param.model[ml] == '-') { + marker = &atadev->param.model[ml]; + break; + } + if (atadev->param.model[ml] == '\0') + break; + } + } + if (marker) { int len = (marker - atadev->param.model); strncpy(vendor, atadev->param.model, len);