Masatake YAMATO | 6077ad8 | 2014-12-24 20:59:32 +0900 | [diff] [blame] | 1 | #!/bin/sh |
| 2 | |
| 3 | # Check decoding of address information (inode[->peer][,path]) |
| 4 | # associated with unix domain socket descriptors. |
| 5 | |
| 6 | . "${srcdir=.}/init.sh" |
| 7 | |
| 8 | # strace -yy is implemented using /proc/self/fd |
| 9 | [ -d /proc/self/fd/ ] || |
| 10 | framework_skip_ '/proc/self/fd/ is not available' |
| 11 | |
| 12 | check_prog awk |
| 13 | check_prog sed |
| 14 | |
| 15 | rm -f $LOG.* $LOG-* |
| 16 | |
Dmitry V. Levin | c9cc4cb | 2015-01-07 20:14:19 +0000 | [diff] [blame] | 17 | addr=unix-yy-local-stream |
| 18 | ./net-accept-connect $addr || |
Masatake YAMATO | 6077ad8 | 2014-12-24 20:59:32 +0900 | [diff] [blame] | 19 | fail_ 'net-accept-connect failed' |
| 20 | |
Dmitry V. Levin | 6b5df32 | 2014-12-25 00:11:40 +0000 | [diff] [blame] | 21 | ./netlink_unix_diag || { |
Masatake YAMATO | 6077ad8 | 2014-12-24 20:59:32 +0900 | [diff] [blame] | 22 | if [ $? -eq 77 ]; then |
Dmitry V. Levin | 6b5df32 | 2014-12-25 00:11:40 +0000 | [diff] [blame] | 23 | framework_skip_ 'NETLINK_SOCK_DIAG for unix domain sockets is not available' |
Masatake YAMATO | 6077ad8 | 2014-12-24 20:59:32 +0900 | [diff] [blame] | 24 | else |
Dmitry V. Levin | 6b5df32 | 2014-12-25 00:11:40 +0000 | [diff] [blame] | 25 | fail_ 'netlink_unix_diag failed' |
Masatake YAMATO | 6077ad8 | 2014-12-24 20:59:32 +0900 | [diff] [blame] | 26 | fi |
| 27 | } |
| 28 | |
Dmitry V. Levin | c9cc4cb | 2015-01-07 20:14:19 +0000 | [diff] [blame] | 29 | args="-tt -ff -yy -eclose,network ./net-accept-connect $addr" |
| 30 | $STRACE -o "$LOG" $args || |
| 31 | fail_ "$STRACE $args failed" |
Masatake YAMATO | 6077ad8 | 2014-12-24 20:59:32 +0900 | [diff] [blame] | 32 | |
| 33 | "$srcdir"/../strace-log-merge $LOG > $LOG || { |
| 34 | cat $LOG |
| 35 | fail_ 'strace-log-merge failed' |
| 36 | } |
| 37 | rm -f $LOG.* |
| 38 | |
| 39 | child="$(sed -rn '/SIGCHLD/ s/^.*, si_pid=([1-9][0-9]*), .*/\1/p' $LOG)" |
| 40 | [ -n "$child" ] || { |
| 41 | cat $LOG |
| 42 | fail_ 'failed to find pid of child process' |
| 43 | } |
| 44 | |
| 45 | sed -rn "/^$child"' /!d; / socket\(/,$ s/^[0-9]+ +[^ ]+ (.+)/\1/p' $LOG > $LOG-connect && |
| 46 | sed -rn "/^$child"' /d; /SIGCHLD/d; / socket\(/,$ s/^[0-9]+ +[^ ]+ (.+)/\1/p' $LOG > $LOG-accept || { |
| 47 | cat $LOG |
| 48 | fail_ 'failed to separate logs' |
| 49 | } |
| 50 | |
Dmitry V. Levin | c9cc4cb | 2015-01-07 20:14:19 +0000 | [diff] [blame] | 51 | awk -f "$srcdir"/unix-yy-connect.awk -v addr=$addr $LOG-connect || { |
Masatake YAMATO | 6077ad8 | 2014-12-24 20:59:32 +0900 | [diff] [blame] | 52 | cat $LOG-connect |
| 53 | fail_ "strace $args failed to decode socket descriptors properly" |
| 54 | } |
| 55 | |
Dmitry V. Levin | c9cc4cb | 2015-01-07 20:14:19 +0000 | [diff] [blame] | 56 | awk -f "$srcdir"/unix-yy-accept.awk -v addr=$addr $LOG-accept || { |
Masatake YAMATO | 6077ad8 | 2014-12-24 20:59:32 +0900 | [diff] [blame] | 57 | cat $LOG-accept |
| 58 | fail_ "strace $args failed to decode socket descriptors properly" |
| 59 | } |
| 60 | |
| 61 | exit 0 |