mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2025-01-12 19:20:28 +03:00
Suppress Clang Static Analyzer warning in vdev_split()
Clang's static analyzer pointed out that we can have a NULL pointer dereference if we ever attempt to split a vdev that has only 1 child. If that happens, we are left with zero children, but then try to access a non-existent child. Calling vdev_split() on a vdev with only 1 child should be impossible due to how the code is structured. If this ever happens, it would be best to stop execution immediately even in a production environment to allow for the best possible chance of recovery by an expert, so we use `VERIFY3U()` instead of `ASSERT3U()`. Unfortunately, while that defensive assertion will prevent execution from ever reaching the NULL pointer dereference, Clang's static analyzer does not realize that, so we add an `ASSERT()` to inform it of this. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Richard Yao <richard.yao@alumni.stonybrook.edu> Closes #14575
This commit is contained in:
parent
0b831cabc6
commit
399bb81607
@ -5396,9 +5396,13 @@ vdev_split(vdev_t *vd)
|
||||
{
|
||||
vdev_t *cvd, *pvd = vd->vdev_parent;
|
||||
|
||||
VERIFY3U(pvd->vdev_children, >, 1);
|
||||
|
||||
vdev_remove_child(pvd, vd);
|
||||
vdev_compact_children(pvd);
|
||||
|
||||
ASSERT3P(pvd->vdev_child, !=, NULL);
|
||||
|
||||
cvd = pvd->vdev_child[0];
|
||||
if (pvd->vdev_children == 1) {
|
||||
vdev_remove_parent(cvd);
|
||||
|
Loading…
Reference in New Issue
Block a user