xref: /aosp_15_r20/external/vboot_reference/utility/chromeos-tpm-recovery-test (revision 8617a60d3594060b7ecbd21bc622a7c14f3cf2bc)
1*8617a60dSAndroid Build Coastguard Worker#!/bin/sh -u
2*8617a60dSAndroid Build Coastguard Worker# Copyright 2010 The ChromiumOS Authors
3*8617a60dSAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be
4*8617a60dSAndroid Build Coastguard Worker# found in the LICENSE file.
5*8617a60dSAndroid Build Coastguard Worker#
6*8617a60dSAndroid Build Coastguard Worker# Test the chromeos TPM recovery script by faking the entire execution
7*8617a60dSAndroid Build Coastguard Worker# environment.
8*8617a60dSAndroid Build Coastguard Worker
9*8617a60dSAndroid Build Coastguard Workerrm -rf tpm-recovery-test-workdir
10*8617a60dSAndroid Build Coastguard Workermkdir  tpm-recovery-test-workdir
11*8617a60dSAndroid Build Coastguard Workercd     tpm-recovery-test-workdir
12*8617a60dSAndroid Build Coastguard Worker
13*8617a60dSAndroid Build Coastguard Workertest_kind=
14*8617a60dSAndroid Build Coastguard Workerif [ $# -ge 1 ]; then
15*8617a60dSAndroid Build Coastguard Worker  test_kind="$1"
16*8617a60dSAndroid Build Coastguard Workerfi
17*8617a60dSAndroid Build Coastguard Worker
18*8617a60dSAndroid Build Coastguard Workerif [ "$test_kind" != "" -a "$test_kind" != "fake" ]; then
19*8617a60dSAndroid Build Coastguard Worker  echo "$0: usage: $0 [fake]"
20*8617a60dSAndroid Build Coastguard Worker  echo "With fake as the argument, use a simulated TPM instead of the real one"
21*8617a60dSAndroid Build Coastguard Workerfi
22*8617a60dSAndroid Build Coastguard Worker
23*8617a60dSAndroid Build Coastguard Workerif [ "$test_kind" = "fake" ]; then
24*8617a60dSAndroid Build Coastguard Worker  export USR_BIN=.
25*8617a60dSAndroid Build Coastguard Worker  export USR_SBIN=.
26*8617a60dSAndroid Build Coastguard Worker  export USR_LOCAL_BIN=.
27*8617a60dSAndroid Build Coastguard Worker  export USR_LOCAL_SBIN=.
28*8617a60dSAndroid Build Coastguard Worker  export DOT_RECOVERY=.recovery
29*8617a60dSAndroid Build Coastguard Worker  export ACPI_DIR=.
30*8617a60dSAndroid Build Coastguard Worker  ctr=../chromeos-tpm-recovery
31*8617a60dSAndroid Build Coastguard Worker  tpmc=./tpmc
32*8617a60dSAndroid Build Coastguard Workerelse
33*8617a60dSAndroid Build Coastguard Worker  ctr=chromeos-tpm-recovery
34*8617a60dSAndroid Build Coastguard Worker  tpmc=tpmc
35*8617a60dSAndroid Build Coastguard Workerfi
36*8617a60dSAndroid Build Coastguard Worker
37*8617a60dSAndroid Build Coastguard Worker# For simplicity, build the permanent environment as if we prepared to run the
38*8617a60dSAndroid Build Coastguard Worker# fake test, even if we're running the test on a real TPM.
39*8617a60dSAndroid Build Coastguard Worker
40*8617a60dSAndroid Build Coastguard Workerecho > .recovery
41*8617a60dSAndroid Build Coastguard Workerecho 3 > BINF.0
42*8617a60dSAndroid Build Coastguard Workerecho 0 > CHSW
43*8617a60dSAndroid Build Coastguard Worker
44*8617a60dSAndroid Build Coastguard Workerexport NVRAM_SPACE_OVERHEAD=200
45*8617a60dSAndroid Build Coastguard Workerspace_overhead=$NVRAM_SPACE_OVERHEAD
46*8617a60dSAndroid Build Coastguard Worker
47*8617a60dSAndroid Build Coastguard Worker# build tpmc
48*8617a60dSAndroid Build Coastguard Workercat > tpmc <<"EOF"
49*8617a60dSAndroid Build Coastguard Worker#!/bin/sh -u
50*8617a60dSAndroid Build Coastguard Worker# Fake tpmc program
51*8617a60dSAndroid Build Coastguard Worker
52*8617a60dSAndroid Build Coastguard Workerdefinespace () {
53*8617a60dSAndroid Build Coastguard Worker  index=$2
54*8617a60dSAndroid Build Coastguard Worker  size=$3
55*8617a60dSAndroid Build Coastguard Worker  permissions=$4
56*8617a60dSAndroid Build Coastguard Worker  space_overhead=$NVRAM_SPACE_OVERHEAD
57*8617a60dSAndroid Build Coastguard Worker
58*8617a60dSAndroid Build Coastguard Worker  if [ -e space.$index.data -a -e tpm-owned ]; then
59*8617a60dSAndroid Build Coastguard Worker    echo "cannot redefine space without auth"
60*8617a60dSAndroid Build Coastguard Worker  fi
61*8617a60dSAndroid Build Coastguard Worker
62*8617a60dSAndroid Build Coastguard Worker  totalsize=$(( $size + $space_overhead ))
63*8617a60dSAndroid Build Coastguard Worker  free=$(cat nvram.freespace)
64*8617a60dSAndroid Build Coastguard Worker
65*8617a60dSAndroid Build Coastguard Worker  if [ $totalsize -gt $free ]; then
66*8617a60dSAndroid Build Coastguard Worker    return 17  # NO_SPACE
67*8617a60dSAndroid Build Coastguard Worker  fi
68*8617a60dSAndroid Build Coastguard Worker
69*8617a60dSAndroid Build Coastguard Worker  if [ $index != 0xf004 ]; then
70*8617a60dSAndroid Build Coastguard Worker    echo $size > space.$index.size
71*8617a60dSAndroid Build Coastguard Worker    echo $permissions > space.$index.perm
72*8617a60dSAndroid Build Coastguard Worker    for i in $(seq 1 $(($size))); do
73*8617a60dSAndroid Build Coastguard Worker      echo -n "ff " >> space.$index.data
74*8617a60dSAndroid Build Coastguard Worker    done
75*8617a60dSAndroid Build Coastguard Worker    echo $(( $free - $totalsize )) > nvram.freespace
76*8617a60dSAndroid Build Coastguard Worker  fi
77*8617a60dSAndroid Build Coastguard Worker  return 0
78*8617a60dSAndroid Build Coastguard Worker}
79*8617a60dSAndroid Build Coastguard Worker
80*8617a60dSAndroid Build Coastguard Workercase $1 in
81*8617a60dSAndroid Build Coastguard Worker
82*8617a60dSAndroid Build Coastguard Worker  clear)
83*8617a60dSAndroid Build Coastguard Worker    rm -f tpm-owned
84*8617a60dSAndroid Build Coastguard Worker  ;;
85*8617a60dSAndroid Build Coastguard Worker
86*8617a60dSAndroid Build Coastguard Worker  enable)
87*8617a60dSAndroid Build Coastguard Worker    # boring
88*8617a60dSAndroid Build Coastguard Worker  ;;
89*8617a60dSAndroid Build Coastguard Worker
90*8617a60dSAndroid Build Coastguard Worker  activate)
91*8617a60dSAndroid Build Coastguard Worker    # boring
92*8617a60dSAndroid Build Coastguard Worker  ;;
93*8617a60dSAndroid Build Coastguard Worker
94*8617a60dSAndroid Build Coastguard Worker  definespace)
95*8617a60dSAndroid Build Coastguard Worker    definespace $*
96*8617a60dSAndroid Build Coastguard Worker  ;;
97*8617a60dSAndroid Build Coastguard Worker
98*8617a60dSAndroid Build Coastguard Worker  getp)
99*8617a60dSAndroid Build Coastguard Worker    echo space blah has permissions $(cat space.$2.perm)
100*8617a60dSAndroid Build Coastguard Worker  ;;
101*8617a60dSAndroid Build Coastguard Worker
102*8617a60dSAndroid Build Coastguard Worker  read)
103*8617a60dSAndroid Build Coastguard Worker    index=$2
104*8617a60dSAndroid Build Coastguard Worker    size=$3
105*8617a60dSAndroid Build Coastguard Worker    maxsize=$(cat space.$index.size)
106*8617a60dSAndroid Build Coastguard Worker    if [ $(($size > $maxsize)) -eq 1  ]; then
107*8617a60dSAndroid Build Coastguard Worker      echo "size $size too large for space (max is $maxsize)"
108*8617a60dSAndroid Build Coastguard Worker      exit 1
109*8617a60dSAndroid Build Coastguard Worker    fi
110*8617a60dSAndroid Build Coastguard Worker    dd if=space.$index.data bs=1 count=$(($3 * 3)) 2> /dev/null
111*8617a60dSAndroid Build Coastguard Worker  ;;
112*8617a60dSAndroid Build Coastguard Worker
113*8617a60dSAndroid Build Coastguard Worker  write)
114*8617a60dSAndroid Build Coastguard Worker    args="$@"
115*8617a60dSAndroid Build Coastguard Worker    index=$2
116*8617a60dSAndroid Build Coastguard Worker    bytes="$(echo $args | sed 's/[^ ]* [^ ]* //')"
117*8617a60dSAndroid Build Coastguard Worker    size=$(echo $bytes | wc -w)
118*8617a60dSAndroid Build Coastguard Worker    maxsize=$(cat space.$index.size)
119*8617a60dSAndroid Build Coastguard Worker    if [ $(($size > $maxsize)) -eq 1  ]; then
120*8617a60dSAndroid Build Coastguard Worker      echo "size $size too large for space (max is $(($maxsize)))"
121*8617a60dSAndroid Build Coastguard Worker      exit 1
122*8617a60dSAndroid Build Coastguard Worker    fi
123*8617a60dSAndroid Build Coastguard Worker    re=$(echo "$bytes " | sed 's/././g')
124*8617a60dSAndroid Build Coastguard Worker    sed "s/$re/$bytes /" < space.$index.data > _tmp_
125*8617a60dSAndroid Build Coastguard Worker    mv _tmp_ space.$index.data
126*8617a60dSAndroid Build Coastguard Worker  ;;
127*8617a60dSAndroid Build Coastguard Worker
128*8617a60dSAndroid Build Coastguard Worker  getpf)
129*8617a60dSAndroid Build Coastguard Worker    echo "disable 0"
130*8617a60dSAndroid Build Coastguard Worker    echo "deactivated 0"
131*8617a60dSAndroid Build Coastguard Worker    echo "nvLocked 1"
132*8617a60dSAndroid Build Coastguard Worker    echo "physicalPresenceLifetimeLock 1"
133*8617a60dSAndroid Build Coastguard Worker    echo "physicalPresenceHWEnable 0"
134*8617a60dSAndroid Build Coastguard Worker    echo "physicalPresenceCMDEnable 1"
135*8617a60dSAndroid Build Coastguard Worker  ;;
136*8617a60dSAndroid Build Coastguard Worker
137*8617a60dSAndroid Build Coastguard Worker  getvf)
138*8617a60dSAndroid Build Coastguard Worker    echo "bGlobalLock 1"
139*8617a60dSAndroid Build Coastguard Worker    echo "physicalPresence 1"
140*8617a60dSAndroid Build Coastguard Worker    echo "physicalPresenceLock 0"
141*8617a60dSAndroid Build Coastguard Worker  ;;
142*8617a60dSAndroid Build Coastguard Worker
143*8617a60dSAndroid Build Coastguard Worker  ppfin)
144*8617a60dSAndroid Build Coastguard Worker    # boring
145*8617a60dSAndroid Build Coastguard Worker  ;;
146*8617a60dSAndroid Build Coastguard Worker
147*8617a60dSAndroid Build Coastguard Worker  ppon)
148*8617a60dSAndroid Build Coastguard Worker    # boring
149*8617a60dSAndroid Build Coastguard Worker  ;;
150*8617a60dSAndroid Build Coastguard Worker
151*8617a60dSAndroid Build Coastguard Worker  *)
152*8617a60dSAndroid Build Coastguard Worker    echo "tpmc: invalid command $1"
153*8617a60dSAndroid Build Coastguard Worker    exit 1
154*8617a60dSAndroid Build Coastguard Worker  ;;
155*8617a60dSAndroid Build Coastguard Workeresac
156*8617a60dSAndroid Build Coastguard Worker
157*8617a60dSAndroid Build Coastguard WorkerEOF
158*8617a60dSAndroid Build Coastguard Worker
159*8617a60dSAndroid Build Coastguard Worker# build nvtool
160*8617a60dSAndroid Build Coastguard Workercat > tpm-nvtool <<"EOF"
161*8617a60dSAndroid Build Coastguard Worker#!/bin/sh -u
162*8617a60dSAndroid Build Coastguard Worker
163*8617a60dSAndroid Build Coastguard Workerspace_overhead=$NVRAM_SPACE_OVERHEAD
164*8617a60dSAndroid Build Coastguard Worker
165*8617a60dSAndroid Build Coastguard Workerprint_space () {
166*8617a60dSAndroid Build Coastguard Worker  local index=$1
167*8617a60dSAndroid Build Coastguard Worker  printf "# NV Index 0x%08x" $(( $index ))
168*8617a60dSAndroid Build Coastguard Worker  echo " uninteresting random garbage"
169*8617a60dSAndroid Build Coastguard Worker  echo " further random garbage"
170*8617a60dSAndroid Build Coastguard Worker  echo ""
171*8617a60dSAndroid Build Coastguard Worker}
172*8617a60dSAndroid Build Coastguard Worker
173*8617a60dSAndroid Build Coastguard Workerif [ "$1" = "--release" ]; then
174*8617a60dSAndroid Build Coastguard Worker  if [ "$2" != "--index" -o \
175*8617a60dSAndroid Build Coastguard Worker       "$4" != "--owner_password" ]; then
176*8617a60dSAndroid Build Coastguard Worker    echo "sorry, picky tpm-nvtool"
177*8617a60dSAndroid Build Coastguard Worker    exit 1
178*8617a60dSAndroid Build Coastguard Worker  fi
179*8617a60dSAndroid Build Coastguard Worker  index=$3
180*8617a60dSAndroid Build Coastguard Worker  if [ ! -f tpm-owned ]; then
181*8617a60dSAndroid Build Coastguard Worker    echo "tpm is unowned"
182*8617a60dSAndroid Build Coastguard Worker    exit 1
183*8617a60dSAndroid Build Coastguard Worker  fi
184*8617a60dSAndroid Build Coastguard Worker  size=$(cat space.$index.size)
185*8617a60dSAndroid Build Coastguard Worker  free=$(cat nvram.freespace)
186*8617a60dSAndroid Build Coastguard Worker  rm space.$index.*
187*8617a60dSAndroid Build Coastguard Worker  echo $(( $size + $space_overhead + $free )) > nvram.freespace
188*8617a60dSAndroid Build Coastguard Workerelif [ "$1" = "--list" ]; then
189*8617a60dSAndroid Build Coastguard Worker  for s in space.*.data; do
190*8617a60dSAndroid Build Coastguard Worker    print_space $(echo $s | sed -e "s/[^.]*\.//" -e "s/\..*//")
191*8617a60dSAndroid Build Coastguard Worker  done
192*8617a60dSAndroid Build Coastguard Workerfi
193*8617a60dSAndroid Build Coastguard WorkerEOF
194*8617a60dSAndroid Build Coastguard Worker
195*8617a60dSAndroid Build Coastguard Worker# build tpm_takeownership
196*8617a60dSAndroid Build Coastguard Workercat > tpm_takeownership <<"EOF"
197*8617a60dSAndroid Build Coastguard Worker#!/bin/sh -u
198*8617a60dSAndroid Build Coastguard Workerif [ -f tpm-owned ]; then
199*8617a60dSAndroid Build Coastguard Worker  echo "tpm is already owned"
200*8617a60dSAndroid Build Coastguard Worker  exit 1
201*8617a60dSAndroid Build Coastguard Workerfi
202*8617a60dSAndroid Build Coastguard Workerecho > tpm-owned
203*8617a60dSAndroid Build Coastguard WorkerEOF
204*8617a60dSAndroid Build Coastguard Worker
205*8617a60dSAndroid Build Coastguard Worker# build tcsd
206*8617a60dSAndroid Build Coastguard Workercat > tcsd <<"EOF"
207*8617a60dSAndroid Build Coastguard Worker#!/bin/sh -u
208*8617a60dSAndroid Build Coastguard Workertrap "{ rm tcsd_is_running; }" EXIT
209*8617a60dSAndroid Build Coastguard Workerecho > tcsd_is_running
210*8617a60dSAndroid Build Coastguard Workersleep 365d
211*8617a60dSAndroid Build Coastguard WorkerEOF
212*8617a60dSAndroid Build Coastguard Worker
213*8617a60dSAndroid Build Coastguard Workertcsd_pid=0
214*8617a60dSAndroid Build Coastguard Worker
215*8617a60dSAndroid Build Coastguard Workerstart_tcsd () {
216*8617a60dSAndroid Build Coastguard Worker  if [ $tcsd_pid -ne 0 ]; then
217*8617a60dSAndroid Build Coastguard Worker    echo TCSD is already started
218*8617a60dSAndroid Build Coastguard Worker    exit 1
219*8617a60dSAndroid Build Coastguard Worker  fi
220*8617a60dSAndroid Build Coastguard Worker  tcsd -f &
221*8617a60dSAndroid Build Coastguard Worker  tcsd_pid=$!
222*8617a60dSAndroid Build Coastguard Worker  sleep 2
223*8617a60dSAndroid Build Coastguard Worker}
224*8617a60dSAndroid Build Coastguard Worker
225*8617a60dSAndroid Build Coastguard Workerstop_tcsd () {
226*8617a60dSAndroid Build Coastguard Worker  if [ $tcsd_pid -eq 0 ]; then
227*8617a60dSAndroid Build Coastguard Worker    echo TCSD is already stopped
228*8617a60dSAndroid Build Coastguard Worker    exit 1
229*8617a60dSAndroid Build Coastguard Worker  fi
230*8617a60dSAndroid Build Coastguard Worker  kill $tcsd_pid
231*8617a60dSAndroid Build Coastguard Worker  sleep 0.5
232*8617a60dSAndroid Build Coastguard Worker  kill $tcsd_pid > /dev/null 2>&1
233*8617a60dSAndroid Build Coastguard Worker  sleep 0.5
234*8617a60dSAndroid Build Coastguard Worker  wait $tcsd_pid > /dev/null 2>&1  # we trust that tcsd will agree to die
235*8617a60dSAndroid Build Coastguard Worker  tcsd_pid=0
236*8617a60dSAndroid Build Coastguard Worker}
237*8617a60dSAndroid Build Coastguard Worker
238*8617a60dSAndroid Build Coastguard Workertpm_clear_and_reenable () {
239*8617a60dSAndroid Build Coastguard Worker  tpmc clear
240*8617a60dSAndroid Build Coastguard Worker  tpmc enable
241*8617a60dSAndroid Build Coastguard Worker  tpmc activate
242*8617a60dSAndroid Build Coastguard Worker}
243*8617a60dSAndroid Build Coastguard Worker
244*8617a60dSAndroid Build Coastguard Workertakeownership () {
245*8617a60dSAndroid Build Coastguard Worker  if [ "$test_kind" = "fake" ]; then
246*8617a60dSAndroid Build Coastguard Worker    touch tpm_owned
247*8617a60dSAndroid Build Coastguard Worker  else
248*8617a60dSAndroid Build Coastguard Worker    tpm_clear_and_reenable
249*8617a60dSAndroid Build Coastguard Worker    start_tcsd
250*8617a60dSAndroid Build Coastguard Worker    tpm_takeownership -y -z
251*8617a60dSAndroid Build Coastguard Worker    stop_tcsd
252*8617a60dSAndroid Build Coastguard Worker  fi
253*8617a60dSAndroid Build Coastguard Worker}
254*8617a60dSAndroid Build Coastguard Worker
255*8617a60dSAndroid Build Coastguard Workerremove_chromeos_spaces () {
256*8617a60dSAndroid Build Coastguard Worker  if [ "$test_kind" = "fake" ]; then
257*8617a60dSAndroid Build Coastguard Worker    rm -f space.*
258*8617a60dSAndroid Build Coastguard Worker    echo 1500 > nvram.freespace
259*8617a60dSAndroid Build Coastguard Worker  else
260*8617a60dSAndroid Build Coastguard Worker    takeownership
261*8617a60dSAndroid Build Coastguard Worker    start_tcsd
262*8617a60dSAndroid Build Coastguard Worker    tpm-nvtool --release --index 0x1007 --owner_password ""
263*8617a60dSAndroid Build Coastguard Worker    tpm-nvtool --release --index 0x1008 --owner_password ""
264*8617a60dSAndroid Build Coastguard Worker    stop_tcsd
265*8617a60dSAndroid Build Coastguard Worker    tpm_clear_and_reenable
266*8617a60dSAndroid Build Coastguard Worker  fi
267*8617a60dSAndroid Build Coastguard Worker}
268*8617a60dSAndroid Build Coastguard Worker
269*8617a60dSAndroid Build Coastguard Workerchmod 755 tpmc tpm-nvtool tpm_takeownership tcsd
270*8617a60dSAndroid Build Coastguard Worker
271*8617a60dSAndroid Build Coastguard Workerecho "starting test, results in $(pwd)/log"
272*8617a60dSAndroid Build Coastguard Workerecho "starting TPM recovery test" > log
273*8617a60dSAndroid Build Coastguard Worker
274*8617a60dSAndroid Build Coastguard Workerif ps ax | grep "tcs[d]"; then
275*8617a60dSAndroid Build Coastguard Worker  echo "a tcsd is process appears to be running, please kill it first"
276*8617a60dSAndroid Build Coastguard Worker  exit 1
277*8617a60dSAndroid Build Coastguard Workerfi
278*8617a60dSAndroid Build Coastguard Worker
279*8617a60dSAndroid Build Coastguard Worker# normal run
280*8617a60dSAndroid Build Coastguard Workertest_normal_run () {
281*8617a60dSAndroid Build Coastguard Worker  echo "TEST: normal run" >> log
282*8617a60dSAndroid Build Coastguard Worker
283*8617a60dSAndroid Build Coastguard Worker  remove_chromeos_spaces
284*8617a60dSAndroid Build Coastguard Worker  $tpmc definespace 0x1007 0xa 0x8001
285*8617a60dSAndroid Build Coastguard Worker  $tpmc definespace 0x1008 0xd 0x1
286*8617a60dSAndroid Build Coastguard Worker  $tpmc write 0x1008 01 4c 57 52 47
287*8617a60dSAndroid Build Coastguard Worker  takeownership
288*8617a60dSAndroid Build Coastguard Worker
289*8617a60dSAndroid Build Coastguard Worker  $ctr log
290*8617a60dSAndroid Build Coastguard Worker}
291*8617a60dSAndroid Build Coastguard Worker
292*8617a60dSAndroid Build Coastguard Worker# Kernel space with wrong ID
293*8617a60dSAndroid Build Coastguard Workertest_wrong_id () {
294*8617a60dSAndroid Build Coastguard Worker  echo "TEST: bad kernel space ID" >> log
295*8617a60dSAndroid Build Coastguard Worker
296*8617a60dSAndroid Build Coastguard Worker  remove_chromeos_spaces
297*8617a60dSAndroid Build Coastguard Worker  $tpmc definespace 0x1007 0xa 0x8001
298*8617a60dSAndroid Build Coastguard Worker  $tpmc definespace 0x1008 0xd 0x1
299*8617a60dSAndroid Build Coastguard Worker  takeownership
300*8617a60dSAndroid Build Coastguard Worker
301*8617a60dSAndroid Build Coastguard Worker  $ctr log
302*8617a60dSAndroid Build Coastguard Worker}
303*8617a60dSAndroid Build Coastguard Worker
304*8617a60dSAndroid Build Coastguard Worker# Kernel space with wrong size
305*8617a60dSAndroid Build Coastguard Workertest_wrong_size () {
306*8617a60dSAndroid Build Coastguard Worker  echo "TEST: bad kernel space size" >> log
307*8617a60dSAndroid Build Coastguard Worker
308*8617a60dSAndroid Build Coastguard Worker  remove_chromeos_spaces
309*8617a60dSAndroid Build Coastguard Worker  $tpmc definespace 0x1007 0xa 0x8001
310*8617a60dSAndroid Build Coastguard Worker  $tpmc definespace 0x1008 0xc 0x1
311*8617a60dSAndroid Build Coastguard Worker  takeownership
312*8617a60dSAndroid Build Coastguard Worker
313*8617a60dSAndroid Build Coastguard Worker  $ctr log
314*8617a60dSAndroid Build Coastguard Worker}
315*8617a60dSAndroid Build Coastguard Worker
316*8617a60dSAndroid Build Coastguard Worker# Kernel space with wrong size AND bogus space to exhaust nvram
317*8617a60dSAndroid Build Coastguard Workertest_wrong_size_hog () {
318*8617a60dSAndroid Build Coastguard Worker  echo "TEST: bad kernel space size and no room" >> log
319*8617a60dSAndroid Build Coastguard Worker
320*8617a60dSAndroid Build Coastguard Worker  remove_chromeos_spaces
321*8617a60dSAndroid Build Coastguard Worker  $tpmc definespace 0x1007 0xa 0x8001
322*8617a60dSAndroid Build Coastguard Worker  $tpmc definespace 0x1008 0x1 0x1
323*8617a60dSAndroid Build Coastguard Worker  if [ "$test_kind" = "fake" ]; then
324*8617a60dSAndroid Build Coastguard Worker    space_hog_size=$(( $(cat nvram.freespace) - $space_overhead - 1 ))
325*8617a60dSAndroid Build Coastguard Worker    echo "remaining $(cat nvram.freespace) bytes" >> log
326*8617a60dSAndroid Build Coastguard Worker  else
327*8617a60dSAndroid Build Coastguard Worker    space_hog_size=$(( $(tpm-nvsize) - 2 ))
328*8617a60dSAndroid Build Coastguard Worker  fi
329*8617a60dSAndroid Build Coastguard Worker  echo "hogging $(( $space_hog_size )) bytes" >> log
330*8617a60dSAndroid Build Coastguard Worker  $tpmc definespace 0xcafe $(printf "%#x" $space_hog_size) 0x1 \
331*8617a60dSAndroid Build Coastguard Worker    || echo "hogging failed!" >> log
332*8617a60dSAndroid Build Coastguard Worker  takeownership
333*8617a60dSAndroid Build Coastguard Worker
334*8617a60dSAndroid Build Coastguard Worker  $ctr log
335*8617a60dSAndroid Build Coastguard Worker}
336*8617a60dSAndroid Build Coastguard Worker
337*8617a60dSAndroid Build Coastguard Workertest_normal_run
338*8617a60dSAndroid Build Coastguard Workertest_wrong_id
339*8617a60dSAndroid Build Coastguard Workertest_wrong_size
340*8617a60dSAndroid Build Coastguard Workertest_wrong_size_hog
341*8617a60dSAndroid Build Coastguard Worker
342*8617a60dSAndroid Build Coastguard Workerecho "test completed" >> log
343*8617a60dSAndroid Build Coastguard Workerecho "test completed"
344