forked from openzfs/zfs
-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Device removal of indirect vdev panics the kernel
This commit fixes a NULL pointer dereference triggered in spa_vdev_remove_top_check() by trying to "zpool remove" an indirect vdev. Reviewed-by: Matt Ahrens <matt@delphix.com> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: loli10K <ezomori.nozomu@gmail.com> Closes openzfs#9327
- Loading branch information
1 parent
24589dc
commit 69a4dfd
Showing
4 changed files
with
65 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
58 changes: 58 additions & 0 deletions
58
tests/zfs-tests/tests/functional/removal/remove_indirect.ksh
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
#!/bin/ksh -p | ||
# | ||
# CDDL HEADER START | ||
# | ||
# This file and its contents are supplied under the terms of the | ||
# Common Development and Distribution License ("CDDL"), version 1.0. | ||
# You may only use this file in accordance with the terms of version | ||
# 1.0 of the CDDL. | ||
# | ||
# A full copy of the text of the CDDL should have accompanied this | ||
# source. A copy of the CDDL is also available via the Internet at | ||
# http://www.illumos.org/license/CDDL. | ||
# | ||
# CDDL HEADER END | ||
# | ||
|
||
# | ||
# Copyright 2019, loli10K <ezomori.nozomu@gmail.com>. All rights reserved. | ||
# | ||
|
||
. $STF_SUITE/include/libtest.shlib | ||
. $STF_SUITE/tests/functional/removal/removal.kshlib | ||
|
||
# | ||
# DESCRIPTION: | ||
# Device removal cannot remove non-concrete vdevs | ||
# | ||
# STRATEGY: | ||
# 1. Create a pool with removable devices | ||
# 2. Remove a top-level device | ||
# 3. Verify we can't remove the "indirect" vdev created by the first removal | ||
# | ||
|
||
verify_runnable "global" | ||
|
||
function cleanup | ||
{ | ||
destroy_pool $TESTPOOL | ||
log_must rm -f $TEST_BASE_DIR/device-{1,2,3} | ||
} | ||
|
||
log_assert "Device removal should not be able to remove non-concrete vdevs" | ||
log_onexit cleanup | ||
|
||
# 1. Create a pool with removable devices | ||
truncate -s $MINVDEVSIZE $TEST_BASE_DIR/device-{1,2,3} | ||
zpool create $TESTPOOL $TEST_BASE_DIR/device-{1,2,3} | ||
|
||
# 2. Remove a top-level device | ||
log_must zpool remove $TESTPOOL $TEST_BASE_DIR/device-1 | ||
log_must wait_for_removal $TESTPOOL | ||
|
||
# 3. Verify we can't remove the "indirect" vdev created by the first removal | ||
INDIRECT_VDEV=$(zpool list -v -g $TESTPOOL | awk '{if ($2 == "-") { print $1; exit} }') | ||
log_must test -n "$INDIRECT_VDEV" | ||
log_mustnot zpool remove $TESTPOOL $INDIRECT_VDEV | ||
|
||
log_pass "Device removal cannot remove non-concrete vdevs" |