123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- #! /bin/sh -e
- # Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
- # Use of this source code is governed by a BSD-style license that can be
- # found in the LICENSE file.
- #
- # Finds the largest NV space that can be defined on the TPM in this state
- # (i.e. without removing existing spaces).
- #
- # The TPM must be unowned, and physical presence must be on.
- low=1
- high=1500
- try=$high
- # Binary search with no upper bound
- while true; do
- ## echo trying $try [ $low $high ]
- if /usr/bin/tpmc definespace 0xf004 $(printf "0x%x" $try) 0x1 \
- > /dev/null 2>&1; then
- # definespace success: end, or $try must grow
- if [ $try -eq $low ]; then
- echo $low
- exit 0
- elif [ $try -lt $high ]; then
- low=$try
- try=$(( ( $high + $low ) / 2 ))
- else
- # special case: when try == high, expand the search
- low=$try
- try=$(( $try * 2 ))
- high=$try
- fi
- else
- # check for unexpected errors
- result=$?
- if [ $result -ne 17 ]; then
- echo running tpmc definespace 0xf004 0x1 0x1
- /usr/bin/tpmc definespace 0xf004 0x1 0x1
- echo please correct this condition and try again
- exit 1
- fi
- # definespace failure: end, or $try must shrink
- if [ $try -eq $low ]; then
- echo 0
- exit 0
- fi
- high=$try
- try=$(( ( $high + $low ) / 2 ))
- fi
- done
|