#!/bin/sh # # Check how SCM_RIGHTS and SCM_CREDENTIALS control messages are decoded in -y mode. # # Copyright (c) 2014-2015 Dmitry V. Levin # Copyright (c) 2014-2021 The strace developers. # All rights reserved. # # SPDX-License-Identifier: GPL-2.0-or-later . "${srcdir=.}/init.sh" # strace -y is implemented using /proc/$pid/fd [ -d /proc/self/fd/ ] || framework_skip_ '/proc/self/fd/ is not available' check_prog mkdir check_prog seq check_prog touch mkdir dir || framework_skip_ 'failed to create a directory' file="dir/$(for i in $(seq 1 127); do echo A; done; echo Z)" touch -- "$file" || framework_skip_ 'failed to create a file' run_prog ../scm_rights /dev/zero run_strace -y -x -e%network $args "$file" hex='[[:xdigit:]]' n='[1-9][0-9]*' sample="$(for i in $(seq 1 15); do printf '\\\\xf%x' $i; done)" socket='' path6='(/.*/(A\\n){127}Z|\\x2f(\\x'"$hex$hex"')*\\x2f(\\x41\\x0a){127}\\x5a)' rights_data='\[4, 5, 6<'"$path6"'>\]' iov='\[\{iov_base="'"$sample"'", iov_len=15\}\]' ids='\{pid='"$n"', uid=[0-9]+, gid=[0-9]+\}' msg_head='\{msg_name=NULL, msg_namelen=0, msg_iov='"$iov"', msg_iovlen=1, msg_control=' msg_tail=', msg_controllen='"$n"', msg_flags=0' rights='\{cmsg_len='"$n"', cmsg_level=SOL_SOCKET, cmsg_type=SCM_RIGHTS, cmsg_data='"$rights_data"'\}' creds='\{cmsg_len='"$n"', cmsg_level=SOL_SOCKET, cmsg_type=SCM_CREDENTIALS, cmsg_data='"$ids"'\}' cat > "$EXP" << __EOF__ sendmsg\\(3$socket, $msg_head\\[$rights\\]$msg_tail\\}, 0\\) = 15 recvmsg\\(0$socket, $msg_head\\[$creds, $rights\\]$msg_tail\\}, 0\\) = 15 __EOF__ match_grep "$LOG" "$EXP"