mirror of https://github.com/ceph/ceph
42 lines
1.3 KiB
Bash
Executable File
42 lines
1.3 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# This is a test for http://tracker.ceph.com/issues/8979 and the fallout
|
|
# from triaging it. #8979 itself was random crashes on corrupted memory
|
|
# due to a buffer overflow (for tickets larger than 256 bytes), further
|
|
# inspection showed that vmalloced tickets weren't handled correctly as
|
|
# well.
|
|
#
|
|
# What we are doing here is generating three huge keyrings and feeding
|
|
# them to libceph (through 'rbd map' on a scratch image). Bad kernels
|
|
# will crash reliably either on corrupted memory somewhere or a bad page
|
|
# fault in scatterwalk_pagedone().
|
|
|
|
set -ex
|
|
|
|
function generate_keyring() {
|
|
local user=$1
|
|
local n=$2
|
|
|
|
ceph-authtool -C -n client.$user --cap mon 'allow *' --gen-key /tmp/keyring-$user
|
|
|
|
set +x # don't pollute trace with echos
|
|
echo -en "\tcaps osd = \"allow rwx pool=rbd" >>/tmp/keyring-$user
|
|
for i in $(seq 1 $n); do
|
|
echo -n ", allow rwx pool=pool$i" >>/tmp/keyring-$user
|
|
done
|
|
echo "\"" >>/tmp/keyring-$user
|
|
set -x
|
|
}
|
|
|
|
generate_keyring foo 1000 # ~25K, kmalloc
|
|
generate_keyring bar 20000 # ~500K, vmalloc
|
|
generate_keyring baz 300000 # ~8M, vmalloc + sg chaining
|
|
|
|
rbd create --size 1 test
|
|
|
|
for user in {foo,bar,baz}; do
|
|
ceph auth import -i /tmp/keyring-$user
|
|
DEV=$(sudo rbd map -n client.$user --keyring /tmp/keyring-$user test)
|
|
sudo rbd unmap $DEV
|
|
done
|