Home | History | Annotate | Download | only in fuzz
      1 /* Copyright 2016 The Chromium Authors. All rights reserved.
      2  * Use of this source code is governed by a BSD-style license that can be
      3  * found in the LICENSE file. */
      4 
      5 #include <assert.h>
      6 #include <stddef.h>
      7 #include <stdint.h>
      8 
      9 extern "C" {
     10 #include "Capabilities.h"
     11 #include "Implementation.h"
     12 #include "tpm_types.h"
     13 #include "TpmBuildSwitches.h"
     14 #include "ExecCommand_fp.h"
     15 #include "Manufacture_fp.h"
     16 #include "Platform.h"
     17 #include "Startup_fp.h"
     18 #include "_TPM_Init_fp.h"
     19 }
     20 
     21 const uint8_t STARTUP[] = {
     22 	0x80, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x01, 0x44, 0x00, 0x00
     23 };
     24 
     25 
     26 extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
     27 	uint8_t *response;
     28 	unsigned response_size;
     29 
     30 	/* Initialize TPM state. */
     31 	_plat__Signal_PowerOn();
     32 	_plat__NVEnable(NULL);
     33 	assert(TPM_Manufacture(1) == 0);
     34 	_plat__NVDisable();
     35 	_TPM_Init();
     36 	_plat__SetNvAvail();
     37 	_plat__Signal_PhysicalPresenceOn();
     38 
     39 	/* Issue the TPM2_Startup command. */
     40 	::ExecuteCommand(sizeof(STARTUP), (uint8_t *) STARTUP,
     41 			&response_size, &response);
     42 
     43 	/* Issue fuzzed command. */
     44 	::ExecuteCommand(size, (uint8_t *) data, &response_size, &response);
     45 	return 0;  /* Non-zero return values are reserved for future use. */
     46 }
     47