Skip to content

Commit

Permalink
qa: add script to test how libceph handles huge auth tickets
Browse files Browse the repository at this point in the history
Signed-off-by: Ilya Dryomov <[email protected]>
  • Loading branch information
idryomov committed Dec 13, 2014
1 parent b9ddb83 commit 35f084d
Showing 1 changed file with 41 additions and 0 deletions.
41 changes: 41 additions & 0 deletions qa/workunits/rbd/huge-tickets.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
#!/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

0 comments on commit 35f084d

Please sign in to comment.