From: Kylene H. <ky...@us...> - 2006-09-27 18:53:35
|
Update of /cvsroot/trousers/tpm-tools/src/tpm_mgmt In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv13350/src/tpm_mgmt Modified Files: Makefile.am Added Files: tpm_reset.c Log Message: Addition of the tpm_reset command to the non installing commands to aid users without BIOS support who run into issues with too few sessions on there TPM at trousers load time. Run this command as root without trourser running (similar to tpm_startup). Index: Makefile.am =================================================================== RCS file: /cvsroot/trousers/tpm-tools/src/tpm_mgmt/Makefile.am,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** Makefile.am 7 Jun 2006 20:43:56 -0000 1.3 --- Makefile.am 27 Sep 2006 18:53:31 -0000 1.4 *************** *** 22,26 **** # ! noinst_PROGRAMS = tpm_startup sbin_PROGRAMS = tpm_changeownerauth \ --- 22,27 ---- # ! noinst_PROGRAMS = tpm_startup \ ! tpm_reset sbin_PROGRAMS = tpm_changeownerauth \ *************** *** 43,46 **** --- 44,48 ---- tpm_startup_SOURCES = tpm_startup.c + tpm_reset_SOURCES = tpm_reset.c tpm_changeownerauth_SOURCES = tpm_changeauth.c --- NEW FILE: tpm_reset.c --- /* * The Initial Developer of the Original Code is International * Business Machines Corporation. Portions created by IBM * Corporation are Copyright (C) 2005 International Business * Machines Corporation. All Rights Reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the Common Public License as published by * IBM Corporation; either version 1 of the License, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * Common Public License for more details. * * You should have received a copy of the Common Public License * along with this program; if not, a copy can be viewed at * http://www.opensource.org/licenses/cpl1.0.php. */ #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <errno.h> #include <string.h> int main() { char reset[] = { 0, 193, /* TPM_TAG_RQU_COMMAND */ 0, 0, 0, 10, /* length */ 0, 0, 0, 90 /* TPM_ORD_Reset */ }; int fd; int err; int rc = 1; fd = open( "/dev/tpm0", O_RDWR ); if ( fd < 0 ) { printf( "Unable to open the device.\n" ); goto out; } err = write( fd, reset, sizeof(reset) ); if ( err != sizeof( reset ) ){ printf( "Error occured while writing the reset command: %d\n", errno ); goto out; } err = read( fd, reset, sizeof(reset) ); if ( err != 10 ) { printf( "Error occured while reading the reset result: %d %d %s\n", err, errno, strerror(errno)); goto out; } /* ENDIANESS ISSUES HERE */ //memcpy( &err, startup+6, 4 ); //for PPC64 memcpy( &err+3, reset+6, 1); memcpy( &err+2, reset+7, 1); memcpy( &err+1, reset+8, 1); memcpy( &err, reset+9, 1); if ( err == 38 ) { printf( "TPM not started.\n" ); goto out; } if ( err != 0 ) { printf( "TPM Error occured: %d\n", err ); goto out; } rc = 0; printf( "Reset successful\n" ); out: close(fd); return rc; } |