1 #! /usr/bin/ksh 2 # 3 # 4 # This file and its contents are supplied under the terms of the 5 # Common Development and Distribution License ("CDDL"), version 1.0. 6 # You may only use this file in accordance with the terms of version 7 # 1.0 of the CDDL. 8 # 9 # A full copy of the text of the CDDL should have accompanied this 10 # source. A copy of the CDDL is also available via the Internet at 11 # http://www.illumos.org/license/CDDL. 12 # 13 14 # Copyright 2015, Richard Lowe. 15 16 # Verify that aslr messes things up, by comparing the mappings of 2 identical 17 # processes 18 19 LC_ALL=C # Collation is important 20 21 /usr/bin/psecflags -s aslr $$ 22 23 tmpdir=/tmp/test.$$ 24 25 mkdir $tmpdir 26 cd $tmpdir 27 28 cleanup() { 29 cd / 30 rm -fr $tmpdir 31 } 32 33 trap 'cleanup' EXIT 34 35 check() { 36 typeset name=$1 37 typeset command=$2 38 39 for (( i=0; i < 1000; i++ )); do 40 $command > out.$i 41 done 42 43 cat out.* | sort | uniq -c | sort -nk 1 | nawk ' 44 BEGIN { 45 tot = 0 46 colls = 0 47 } 48 49 $2 != "text:" { 50 tot += $1 51 if ($1 > 1) { 52 colls += $1 53 } 54 } 55 56 END { 57 prc = (colls / tot) * 100 58 printf "'$name' Collisions: %d/%d (%g%%)\n", colls, tot, prc 59 exit prc 60 } 61 ' 62 return $? 63 } 64 65 # Somewhat arbitrary 66 ACCEPTABLE=70 67 68 ret=0 69 check 32bit /opt/os-tests/tests/secflags/addrs-32 70 (( $? > $ACCEPTABLE )) && ret=1 71 check 64bit /opt/os-tests/tests/secflags/addrs-64 72 (( $? > $ACCEPTABLE )) && ret=1 73 74 exit $ret