CI Gating: Add tests for debuginfod and yama
This commit is contained in:
parent
8a282727be
commit
47f425708e
81
tests/Sanity/elfutils-debuginfod/body.sh
Executable file
81
tests/Sanity/elfutils-debuginfod/body.sh
Executable file
@ -0,0 +1,81 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -xeo pipefail
|
||||
|
||||
|
||||
export DEBUGINFOD_VERBOSE=1
|
||||
export DEBUGINFOD_CACHE_PATH=$HOME/.debuginfod_client_cache/
|
||||
|
||||
# Initial cleanup
|
||||
systemctl stop debuginfod
|
||||
rm -rf ~/.cache/debuginfod_client
|
||||
rm -rf /usr/src/my_extra_rpms $DEBUGINFOD_CACHE_PATH
|
||||
mkdir $DEBUGINFOD_CACHE_PATH
|
||||
journalctl -g debuginfod -f &
|
||||
logger=$!
|
||||
|
||||
# Set up a delay. A delay of 3 worked for me reliably for manual testing.
|
||||
DELAY=120
|
||||
|
||||
# Clean up after possible previous failed (=> unfinished) run of this testcase
|
||||
rm -rf /usr/src/my_extra_rpms $HOME/.debuginfod_client_cache
|
||||
|
||||
# Check the config file is there
|
||||
cat /etc/sysconfig/debuginfod
|
||||
|
||||
# Make sure the config file doesn't contain unwanted relicts
|
||||
# from possible previous failed run of this testcase
|
||||
fgrep DEBUGINFOD_PATHS /etc/sysconfig/debuginfod | (! fgrep /usr/src/my_extra_rpms)
|
||||
|
||||
# Add some directory to the DEBUGINFOD_PATH and configure it
|
||||
# within /etc/sysconfig/debuginfod
|
||||
mkdir -p /usr/src/my_extra_rpms
|
||||
sed -i 's/DEBUGINFOD_PATHS="[^"]*/\0\ \/usr\/src\/my_extra_rpms/' /etc/sysconfig/debuginfod
|
||||
fgrep DEBUGINFOD_PATHS /etc/sysconfig/debuginfod | fgrep /usr/src/my_extra_rpms
|
||||
|
||||
# Note the DEBUGINFOD_PORT in the sysconfig file
|
||||
# and use it to export the server URL for the client to use
|
||||
source /etc/sysconfig/debuginfod
|
||||
export DEBUGINFOD_URLS="localhost:$DEBUGINFOD_PORT"
|
||||
|
||||
# Get the build-id from some installed binary and make sure
|
||||
# it isn't found
|
||||
buildid=$(eu-unstrip -n -e /usr/bin/true | cut -f2 -d\ | cut -f1 -d@)
|
||||
! debuginfod-find executable $buildid
|
||||
|
||||
# Start the service
|
||||
systemctl start debuginfod
|
||||
|
||||
# Give it some time to index
|
||||
sleep $DELAY
|
||||
|
||||
# Now the binary should be found
|
||||
debuginfod-find executable $buildid
|
||||
|
||||
# Take a small debuginfo rpm and make sure you know the buildid of
|
||||
# some .debug file in to the directory you created and added to
|
||||
# the DEBUGINFO_PATH in the config file.
|
||||
cp sshpass-debuginfo-1.09-2.fc35.x86_64.rpm /usr/src/my_extra_rpms
|
||||
|
||||
# Make sure the denuginfo can't be found yet
|
||||
# Related:
|
||||
# - https://bugzilla.redhat.com/show_bug.cgi?id=2023454
|
||||
# - https://sourceware.org/bugzilla/show_bug.cgi?id=28240
|
||||
! debuginfod-find debuginfo 73952ed43c6edc82cc92186a581ec27f009c529c
|
||||
echo 0 > $DEBUGINFOD_CACHE_PATH/cache_miss_s
|
||||
|
||||
# Tell debuginfod to start indexing immediately
|
||||
debuginfod_pid=$(systemctl status debuginfod | fgrep PID | grep -Po '\d+')
|
||||
kill -SIGUSR1 $debuginfod_pid
|
||||
|
||||
# Give it some time to index
|
||||
sleep $DELAY
|
||||
|
||||
# Try to find the debug file with the known buildid
|
||||
debuginfod-find debuginfo 73952ed43c6edc82cc92186a581ec27f009c529c
|
||||
|
||||
# Clean up
|
||||
rm -rf /usr/src/my_extra_rpms $HOME/.debuginfod_client_cache
|
||||
|
||||
# Kill the logger
|
||||
kill $logger
|
14
tests/Sanity/elfutils-debuginfod/main.fmf
Normal file
14
tests/Sanity/elfutils-debuginfod/main.fmf
Normal file
@ -0,0 +1,14 @@
|
||||
summary: elfutils-debuginfod
|
||||
description: ''
|
||||
contact: Martin Cermak <mcermak@redhat.com>
|
||||
component:
|
||||
- elfutils
|
||||
test: ./runtest.sh
|
||||
framework: beakerlib
|
||||
recommend:
|
||||
- elfutils
|
||||
- elfutils-debuginfod
|
||||
- elfutils-debuginfod-client
|
||||
duration: 48h
|
||||
extra-summary: /tools/elfutils/Sanity/elfutils-debuginfod
|
||||
extra-task: /tools/elfutils/Sanity/elfutils-debuginfod
|
54
tests/Sanity/elfutils-debuginfod/runtest.sh
Executable file
54
tests/Sanity/elfutils-debuginfod/runtest.sh
Executable file
@ -0,0 +1,54 @@
|
||||
#!/bin/bash
|
||||
# vim: dict+=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k
|
||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
#
|
||||
# runtest.sh of /tools/elfutils/Sanity/elfutils-debuginfod
|
||||
# Description: elfutils-debuginfod
|
||||
# Author: Martin Cermak <mcermak@redhat.com>
|
||||
#
|
||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
#
|
||||
# Copyright (c) 2019 Red Hat, Inc.
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License as
|
||||
# published by the Free Software Foundation, either version 2 of
|
||||
# the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be
|
||||
# useful, but WITHOUT ANY WARRANTY; without even the implied
|
||||
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||
# PURPOSE. See the GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see http://www.gnu.org/licenses/.
|
||||
#
|
||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
# Include Beaker environment
|
||||
. /usr/share/beakerlib/beakerlib.sh || exit 1
|
||||
|
||||
PACKAGE="elfutils"
|
||||
|
||||
rlJournalStart
|
||||
rlPhaseStartSetup
|
||||
for p in elfutils-debuginfod elfutils-debuginfod-client; do
|
||||
rlAssertRpm $p
|
||||
done
|
||||
rlRun "TMPD=$(mktemp -d)"
|
||||
rlRun "cp body.sh sshpass-debuginfo-1.09-2.fc35.x86_64.rpm $TMPD"
|
||||
rlRun "pushd $TMPD"
|
||||
rlFileBackup /etc/sysconfig/debuginfod
|
||||
rlPhaseEnd
|
||||
|
||||
rlPhaseStartTest
|
||||
rlRun "./body.sh"
|
||||
rlPhaseEnd
|
||||
|
||||
rlPhaseStartCleanup
|
||||
rlFileRestore
|
||||
rlRun "popd"
|
||||
rlRun "rm -r $TMPD"
|
||||
rlPhaseEnd
|
||||
rlJournalPrintText
|
||||
rlJournalEnd
|
Binary file not shown.
16
tests/Sanity/yama-scope/main.fmf
Normal file
16
tests/Sanity/yama-scope/main.fmf
Normal file
@ -0,0 +1,16 @@
|
||||
summary: yama-scope
|
||||
description: |
|
||||
Bug summary: Enable provide_yama_scope for rhel >= 7.4
|
||||
Bugzilla link: https://bugzilla.redhat.com/show_bug.cgi?id=1455514
|
||||
contact: Martin Cermak <mcermak@redhat.com>
|
||||
component:
|
||||
- elfutils
|
||||
test: ./runtest.sh
|
||||
framework: beakerlib
|
||||
recommend:
|
||||
- elfutils
|
||||
duration: 48h
|
||||
link:
|
||||
- relates: https://bugzilla.redhat.com/show_bug.cgi?id=1455514
|
||||
extra-summary: /tools/elfutils/Sanity/yama-scope
|
||||
extra-task: /tools/elfutils/Sanity/yama-scope
|
8
tests/Sanity/yama-scope/ptrace-scope-test.sh
Normal file
8
tests/Sanity/yama-scope/ptrace-scope-test.sh
Normal file
@ -0,0 +1,8 @@
|
||||
#!/bin/bash
|
||||
|
||||
RETVAL=0
|
||||
OUT=$(mktemp)
|
||||
eu-stack -p $$ |& tee $OUT
|
||||
grep -i 'operation not permitted' $OUT && RETVAL=1
|
||||
rm $OUT
|
||||
exit $RETVAL
|
108
tests/Sanity/yama-scope/runtest.sh
Executable file
108
tests/Sanity/yama-scope/runtest.sh
Executable file
@ -0,0 +1,108 @@
|
||||
#!/bin/bash
|
||||
# vim: dict+=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k
|
||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
#
|
||||
# runtest.sh of /tools/elfutils/Sanity/yama-scope
|
||||
# Description: yama-scope
|
||||
# Author: Martin Cermak <mcermak@redhat.com>
|
||||
#
|
||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
#
|
||||
# Copyright (c) 2017 Red Hat, Inc.
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License as
|
||||
# published by the Free Software Foundation, either version 2 of
|
||||
# the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be
|
||||
# useful, but WITHOUT ANY WARRANTY; without even the implied
|
||||
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||
# PURPOSE. See the GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see http://www.gnu.org/licenses/.
|
||||
#
|
||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
# Include Beaker environment
|
||||
. /usr/share/beakerlib/beakerlib.sh || exit 1
|
||||
|
||||
PACKAGE="elfutils"
|
||||
MY_USER="ptrace_scope_testuser"
|
||||
TESTCASE="/tmp/ptrace-scope-test.sh"
|
||||
PROCFILE='/proc/sys/kernel/yama/ptrace_scope'
|
||||
|
||||
test_root()
|
||||
{
|
||||
$TESTCASE
|
||||
}
|
||||
|
||||
test_user()
|
||||
{
|
||||
su - $MY_USER -c $TESTCASE
|
||||
}
|
||||
|
||||
rlJournalStart
|
||||
rlPhaseStartTest
|
||||
|
||||
# This can easily be tested with strace. Just cycle through the settings:
|
||||
|
||||
# 0 - Default attach security permissions.
|
||||
# 1 - Restricted attach. Only child processes plus normal permissions.
|
||||
# 2 - Admin-only attach. Only executables with CAP_SYS_PTRACE.
|
||||
# 3 - No attach. No process may call ptrace at all. Irrevocable.
|
||||
|
||||
# echo 0 > /proc/sys/kernel/yama/ptrace_scope
|
||||
|
||||
# With 0, strace works against any process with your uid. For example, strace -p 2190.
|
||||
# With 1, strace errors when doing the same as in 0: strace: attach: ptrace(PTRACE_SEIZE, 3180): Operation not permitted. However, you can strace any program you run from strace, "strace /bin/ls" or example.
|
||||
# With 2, you can only strace from the root account. You can no longer strace commands run from strace.
|
||||
# With 3, even root cannot strace.
|
||||
|
||||
# ---
|
||||
|
||||
# possible related AVCs tracked as https://bugzilla.redhat.com/show_bug.cgi?id=1458999
|
||||
|
||||
# ---
|
||||
|
||||
rlRun "useradd $MY_USER" 0,9
|
||||
|
||||
rlRun "cp ptrace-scope-test.sh /tmp/"
|
||||
rlRun "chmod a+rx /tmp/ptrace-scope-test.sh"
|
||||
|
||||
rlRun "ORIGVAL=$( cat $PROCFILE )"
|
||||
|
||||
# First, test the default behaviour, which is "no restriction"
|
||||
# from the ptrace perspective. Here we assume that
|
||||
# elfutils-default-yama-scope.rpm is installed and so the default
|
||||
# yama policy is set to 0 instead of 1 which would otherwise be set
|
||||
# as a kernel default (security/yama/yama_lsm.c ---> YAMA_SCOPE_RELATIONAL)
|
||||
rlRun test_root
|
||||
rlRun test_user
|
||||
|
||||
rlRun "echo 0 > $PROCFILE"
|
||||
rlRun test_root
|
||||
rlRun test_user
|
||||
rlRun "echo 1 > $PROCFILE"
|
||||
rlRun test_root
|
||||
rlRun test_user 1
|
||||
rlRun "echo 2 > $PROCFILE"
|
||||
rlRun test_root
|
||||
rlRun test_user 1
|
||||
# Following subtest would be irrevertible (till next reboot)
|
||||
# rlRun "echo 3 > $PROCFILE"
|
||||
# rlRun test_root 1
|
||||
# rlRun test_user 1
|
||||
|
||||
rlRun "userdel -f $MY_USER"
|
||||
|
||||
# This testcase could be more complex - using child and non-child processes and
|
||||
# performing reboots. But let's keep this simple, since we are not testing the
|
||||
# kernel facility, but merely an elfutils "plugin" for it, whose purpose is to
|
||||
# set the default yama policy as such.
|
||||
|
||||
rlRun "echo $ORIGVAL > $PROCFILE"
|
||||
rlPhaseEnd
|
||||
rlJournalPrintText
|
||||
rlJournalEnd
|
Loading…
Reference in New Issue
Block a user