| OLD | NEW | 
|---|
| (Empty) |  | 
|  | 1 #!/bin/sh -u | 
|  | 2 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. | 
|  | 3 # Use of this source code is governed by a BSD-style license that can be | 
|  | 4 # found in the LICENSE file. | 
|  | 5 # | 
|  | 6 # Test the chromeos TPM recovery script by faking the entire execution | 
|  | 7 # environment. | 
|  | 8 | 
|  | 9 rm -rf tpm_recovery_test_workdir | 
|  | 10 mkdir  tpm_recovery_test_workdir | 
|  | 11 cd     tpm_recovery_test_workdir | 
|  | 12 | 
|  | 13 export USR_BIN=. | 
|  | 14 export USR_SBIN=. | 
|  | 15 export DOT_RECOVERY=.recovery | 
|  | 16 export ACPI_DIR=. | 
|  | 17 | 
|  | 18 ctr=../chromeos_tpm_recovery | 
|  | 19 | 
|  | 20 # build the permanent environment | 
|  | 21 | 
|  | 22 echo > .recovery | 
|  | 23 echo 3 > BINF.0 | 
|  | 24 echo 0 > CRSW | 
|  | 25 | 
|  | 26 # build tpmc | 
|  | 27 cat > tpmc <<"EOF" | 
|  | 28 #!/bin/sh -u | 
|  | 29 # Fake tpmc program | 
|  | 30 | 
|  | 31 definespace () { | 
|  | 32   index=$2 | 
|  | 33   size=$3 | 
|  | 34   permissions=$4 | 
|  | 35 | 
|  | 36   if [ -e space.$index.data -a -e tpm-owned ]; then | 
|  | 37     echo "cannot redefine space without auth" | 
|  | 38   fi | 
|  | 39 | 
|  | 40   if [ $index != 0xf004 ]; then | 
|  | 41     echo $size > space.$index.size | 
|  | 42     echo $permissions > space.$index.perm | 
|  | 43     for i in $(seq 1 $(($size))); do | 
|  | 44       echo -n "ff " >> space.$index.data | 
|  | 45     done | 
|  | 46   fi | 
|  | 47   return 0 | 
|  | 48 } | 
|  | 49 | 
|  | 50 case $1 in | 
|  | 51 | 
|  | 52   clear) | 
|  | 53     rm -f tpm-owned | 
|  | 54   ;; | 
|  | 55 | 
|  | 56   enable) | 
|  | 57     # boring | 
|  | 58   ;; | 
|  | 59 | 
|  | 60   activate) | 
|  | 61     # boring | 
|  | 62   ;; | 
|  | 63 | 
|  | 64   definespace) | 
|  | 65     definespace $* | 
|  | 66   ;; | 
|  | 67 | 
|  | 68   getp) | 
|  | 69     echo space blah has permissions $(cat space.$2.perm) | 
|  | 70   ;; | 
|  | 71 | 
|  | 72   read) | 
|  | 73     index=$2 | 
|  | 74     size=$3 | 
|  | 75     maxsize=$(cat space.$index.size) | 
|  | 76     if [ $(($size > $maxsize)) -eq 1  ]; then | 
|  | 77       echo "size $size too large for space (max is $maxsize)" | 
|  | 78       exit 1 | 
|  | 79     fi | 
|  | 80     dd if=space.$index.data bs=1 count=$(($3 * 3)) 2> /dev/null | 
|  | 81   ;; | 
|  | 82 | 
|  | 83   write) | 
|  | 84     args="$@" | 
|  | 85     index=$2 | 
|  | 86     bytes="$(echo $args | sed 's/[^ ]* [^ ]* //')" | 
|  | 87     size=$(echo $bytes | wc -w) | 
|  | 88     maxsize=$(cat space.$index.size) | 
|  | 89     if [ $(($size > $maxsize)) -eq 1  ]; then | 
|  | 90       echo "size $size too large for space (max is $(($maxsize)))" | 
|  | 91       exit 1 | 
|  | 92     fi | 
|  | 93     re=$(echo "$bytes " | sed 's/././g') | 
|  | 94     sed "s/$re/$bytes /" < space.$index.data > _tmp_ | 
|  | 95     mv _tmp_ space.$index.data | 
|  | 96   ;; | 
|  | 97 | 
|  | 98   getpf) | 
|  | 99     echo "disable 0" | 
|  | 100     echo "deactivated 0" | 
|  | 101     echo "nvLocked 1" | 
|  | 102     echo "physicalPresenceLifetimeLock 1" | 
|  | 103     echo "physicalPresenceHWEnable 0" | 
|  | 104     echo "physicalPresenceCMDEnable 1" | 
|  | 105   ;; | 
|  | 106 | 
|  | 107   getvf) | 
|  | 108     echo "bGlobalLock 1" | 
|  | 109     echo "physicalPresence 1" | 
|  | 110     echo "physicalPresenceLock 0" | 
|  | 111   ;; | 
|  | 112 | 
|  | 113   ppfin) | 
|  | 114     # boring | 
|  | 115   ;; | 
|  | 116 | 
|  | 117   ppon) | 
|  | 118     # boring | 
|  | 119   ;; | 
|  | 120 | 
|  | 121   *) | 
|  | 122     echo "tpmc: invalid command $1" | 
|  | 123     exit 1 | 
|  | 124   ;; | 
|  | 125 esac | 
|  | 126 | 
|  | 127 EOF | 
|  | 128 | 
|  | 129 # build nvtool | 
|  | 130 cat > tpm-nvtool <<"EOF" | 
|  | 131 #!/bin/sh -u | 
|  | 132 | 
|  | 133 print_space () { | 
|  | 134   index=$1 | 
|  | 135   echo "# NV Index $index" | 
|  | 136   echo " uninteresting random garbage" | 
|  | 137   echo " further random garbage" | 
|  | 138   echo "" | 
|  | 139 } | 
|  | 140 | 
|  | 141 if [ "$1" = "--release" ]; then | 
|  | 142   if [ "$2" != "--index" -o \ | 
|  | 143        "$4" != "--owner_password" ]; then | 
|  | 144     echo "sorry, picky tpm-nvtool" | 
|  | 145     exit 1 | 
|  | 146   fi | 
|  | 147   index=$3 | 
|  | 148   if [ ! -f tpm-owned ]; then | 
|  | 149     echo "tpm is unowned" | 
|  | 150     exit 1 | 
|  | 151   fi | 
|  | 152   rm space.$index.* | 
|  | 153 elif [ "$1" = "--list" ]; then | 
|  | 154   for s in space.*.data; do | 
|  | 155     print_space $(echo $s | sed -e "s/[^.]*\.//" -e "s/\..*//") | 
|  | 156   done | 
|  | 157 fi | 
|  | 158 EOF | 
|  | 159 | 
|  | 160 # build tpm_takeownership | 
|  | 161 cat > tpm_takeownership <<"EOF" | 
|  | 162 #!/bin/sh -u | 
|  | 163 if [ -f tpm-owned ]; then | 
|  | 164   echo "tpm is already owned" | 
|  | 165   exit 1 | 
|  | 166 fi | 
|  | 167 echo > tpm-owned | 
|  | 168 EOF | 
|  | 169 | 
|  | 170 # build tcsd | 
|  | 171 cat > tcsd <<"EOF" | 
|  | 172 #!/bin/sh -u | 
|  | 173 trap "{ rm tcsd_is_running; }" EXIT | 
|  | 174 echo > tcsd_is_running | 
|  | 175 sleep 365d | 
|  | 176 EOF | 
|  | 177 | 
|  | 178 chmod 755 tpmc tpm-nvtool tpm_takeownership tcsd | 
|  | 179 | 
|  | 180 echo "starting TPM recovery test" > log | 
|  | 181 | 
|  | 182 # normal run | 
|  | 183 | 
|  | 184 ./tpmc definespace 0x1007 0xa 0x8001 | 
|  | 185 ./tpmc definespace 0x1008 0xd 0x1 | 
|  | 186 ./tpmc write 0x1008 01 4c 57 52 47 | 
|  | 187 touch tpm-owned | 
|  | 188 | 
|  | 189 echo "TEST: normal run" > log | 
|  | 190 $ctr log | 
|  | 191 | 
|  | 192 # attempt to hijack kernel space | 
|  | 193 | 
|  | 194 rm space.* | 
|  | 195 | 
|  | 196 ./tpmc definespace 0x1007 0xa 0x8001 | 
|  | 197 ./tpmc definespace 0x1008 0xd 0x1 | 
|  | 198 touch tpm-owned | 
|  | 199 | 
|  | 200 echo "TEST: bad kernel space ID" >> log | 
|  | 201 $ctr log | 
|  | 202 | 
|  | 203 # attempt to hijack kernel space | 
|  | 204 | 
|  | 205 rm space.* | 
|  | 206 | 
|  | 207 ./tpmc definespace 0x1007 0xa 0x8001 | 
|  | 208 ./tpmc definespace 0x1008 0xc 0x1 | 
|  | 209 touch tpm-owned | 
|  | 210 | 
|  | 211 echo "TEST: bad kernel space size" >> log | 
|  | 212 $ctr log | 
|  | 213 | 
| OLD | NEW | 
|---|