# DF-4597 — `daemon_save_config()` `break`s out of the whole drive loop on the first malformed drive

* File: `sys/dev/raid/vinum/vinumio.c:601-606`
* Severity: Low · Confidence: certain (code); impact: config-replica divergence

## What

The loop "Write the configuration to all vinum slices" iterates
`driveno` over every allocated drive. For the first drive whose
`devicename` or `label.name` is empty it does:

```c
if ((drive->devicename[0] == '\0')
|| (drive->label.name[0] == '\0')) {
    unlockdrive(drive);
    free_drive(drive);     /* get rid of it */
    break;                 /* <-- exits the for(driveno) loop entirely */
}
```

Every drive **after** the malformed one is silently skipped for this save:
their on-disk config replicas (both copies per drive) are not updated, so
replicas diverge. The next save (which re-enters the loop from drive 0; the
malformed entry is now freed, so a *different* first-malformed drive can
re-trigger it) may or may not reach the tail drives. With a malformed drive
early in the table, later drives can stay stale indefinitely — the exact
situation the dual-replica scheme exists to avoid. A `continue` (after
`free_drive`) is what the surrounding code structure implies.

Trigger: a referenced-but-nameless drive entry (created by config lines
referencing a drive name without a device, e.g. `sd … drive ghost`), then any
configuration change. Root-configurable only → Low.

## Fix

```diff
 	free_drive(drive);			    /* get rid of it */
-	break;
+	continue;
```

## Not run on the guest

Observable only as "drives after index i did not get the new config", which
needs ≥2 real drives plus a malformed entry; the mechanism is a two-line
code reading. Recorded as `untested`.
