1#!/bin/sh -efu 2# 3# Check decoding of PR_SET_SPECULATION_CTRL and PR_GET_SPECULATION_CTRL 4# prctl operations. 5# 6# Copyright (c) 2018 The strace developers. 7# All rights reserved. 8# 9# Redistribution and use in source and binary forms, with or without 10# modification, are permitted provided that the following conditions 11# are met: 12# 1. Redistributions of source code must retain the above copyright 13# notice, this list of conditions and the following disclaimer. 14# 2. Redistributions in binary form must reproduce the above copyright 15# notice, this list of conditions and the following disclaimer in the 16# documentation and/or other materials provided with the distribution. 17# 3. The name of the author may not be used to endorse or promote products 18# derived from this software without specific prior written permission. 19# 20# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 21# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 22# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 23# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 24# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 25# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 29# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 31. "${srcdir=.}/scno_tampering.sh" 32 33fault_args='-a53 -e trace=prctl -e inject=prctl:' 34prog="../$NAME" 35 36test_run_rval() 37{ 38 local run rval injexpr 39 run="$1"; shift 40 rval="$1"; shift 41 injexpr="$1"; shift 42 43 run_strace $fault_args$injexpr $prog $rval > "$EXP" 44 LC_ALL=C grep -Ev '^prctl\(PR_[GS]ET_([^S][^P][^E][^C]])' \ 45 < "$LOG" > "$OUT" 46 match_diff "$OUT" "$EXP" 47} 48 49test_run_rval 0 -1 "error=ENOTTY" 50test_run_rval 1 0 "retval=0" 51test_run_rval 2 1 "retval=1" 52test_run_rval 3 3 "retval=3" 53test_run_rval 4 8 "retval=8" 54test_run_rval 5 16 "retval=16" 55test_run_rval 6 42 "retval=42" 56