release-request-655284b0-7f0b-48b5-b01d-27f48a99f2c0-for-git_oc-mr1-release-4017105 snap-temp-L82600000064873863

Change-Id: I4a854ccdb246969de28384179147d65298be54f9
diff --git a/Android.bp b/Android.bp
new file mode 100644
index 0000000..934cfda
--- /dev/null
+++ b/Android.bp
@@ -0,0 +1,308 @@
+// Copyright (C) 2015 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// libtpm2
+// ========================================================
+cc_library_shared {
+    name: "libtpm2",
+    cflags: [
+        "-Wall",
+        "-Wextra",
+        "-Werror",
+        "-Wno-typedef-redefinition",
+        "-Wno-unused-parameter",
+        "-Wno-missing-field-initializers",
+        "-Wno-tautological-compare",
+        "-Wno-sign-compare",
+    ],
+    local_include_dirs: ["include/tpm2"],
+    shared_libs: ["libcrypto"],
+    export_include_dirs: ["include"],
+    srcs: [
+        "ActivateCredential.c",
+        "AlgorithmCap.c",
+        "Attest_spt.c",
+        "Bits.c",
+        "Cancel.c",
+        "Certify.c",
+        "CertifyCreation.c",
+        "ChangeEPS.c",
+        "ChangePPS.c",
+        "Clear.c",
+        "ClearControl.c",
+        "Clock.c",
+        "ClockRateAdjust.c",
+        "ClockSet.c",
+        "CommandAudit.c",
+        "CommandCodeAttributes.c",
+        "CommandDispatcher.c",
+        "Commit.c",
+        "ContextLoad.c",
+        "ContextSave.c",
+        "Context_spt.c",
+        "CpriCryptPri.c",
+        "CpriECC.c",
+        "CpriHash.c",
+        "CpriMisc.c",
+        "CpriRNG.c",
+        "CpriRSA.c",
+        "CpriSym.c",
+        "Create.c",
+        "CreatePrimary.c",
+        "CryptSelfTest.c",
+        "CryptUtil.c",
+        "DA.c",
+        "DRTM.c",
+        "DictionaryAttackLockReset.c",
+        "DictionaryAttackParameters.c",
+        "Duplicate.c",
+        "ECC_Parameters.c",
+        "ECDH_KeyGen.c",
+        "ECDH_ZGen.c",
+        "EC_Ephemeral.c",
+        "EncryptDecrypt.c",
+        "Entity.c",
+        "Entropy.c",
+        "EventSequenceComplete.c",
+        "EvictControl.c",
+        "ExecCommand.c",
+        "FieldUpgradeData.c",
+        "FieldUpgradeStart.c",
+        "FirmwareRead.c",
+        "FlushContext.c",
+        "GetCapability.c",
+        "GetCommandAuditDigest.c",
+        "GetCommandCodeString.c",
+        "GetRandom.c",
+        "GetSessionAuditDigest.c",
+        "GetTestResult.c",
+        "GetTime.c",
+        "Global.c",
+        "HMAC.c",
+        "HMAC_Start.c",
+        "Handle.c",
+        "HandleProcess.c",
+        "Hash.c",
+        "HashSequenceStart.c",
+        "Hierarchy.c",
+        "HierarchyChangeAuth.c",
+        "HierarchyControl.c",
+        "Import.c",
+        "IncrementalSelfTest.c",
+        "Load.c",
+        "LoadExternal.c",
+        "Locality.c",
+        "LocalityPlat.c",
+        "MakeCredential.c",
+        "Marshal_ActivateCredential.c",
+        "Marshal_Certify.c",
+        "Marshal_CertifyCreation.c",
+        "Marshal_ChangeEPS.c",
+        "Marshal_ChangePPS.c",
+        "Marshal_Clear.c",
+        "Marshal_ClearControl.c",
+        "Marshal_ClockRateAdjust.c",
+        "Marshal_ClockSet.c",
+        "Marshal_Commit.c",
+        "Marshal_ContextLoad.c",
+        "Marshal_ContextSave.c",
+        "Marshal_Create.c",
+        "Marshal_CreatePrimary.c",
+        "Marshal_DictionaryAttackLockReset.c",
+        "Marshal_DictionaryAttackParameters.c",
+        "Marshal_Duplicate.c",
+        "Marshal_ECC_Parameters.c",
+        "Marshal_ECDH_KeyGen.c",
+        "Marshal_ECDH_ZGen.c",
+        "Marshal_EC_Ephemeral.c",
+        "Marshal_EncryptDecrypt.c",
+        "Marshal_EventSequenceComplete.c",
+        "Marshal_EvictControl.c",
+        "Marshal_FirmwareRead.c",
+        "Marshal_FlushContext.c",
+        "Marshal_GetCapability.c",
+        "Marshal_GetCommandAuditDigest.c",
+        "Marshal_GetRandom.c",
+        "Marshal_GetSessionAuditDigest.c",
+        "Marshal_GetTestResult.c",
+        "Marshal_GetTime.c",
+        "Marshal_HMAC.c",
+        "Marshal_HMAC_Start.c",
+        "Marshal_Hash.c",
+        "Marshal_HashSequenceStart.c",
+        "Marshal_HierarchyChangeAuth.c",
+        "Marshal_HierarchyControl.c",
+        "Marshal_Import.c",
+        "Marshal_IncrementalSelfTest.c",
+        "Marshal_Load.c",
+        "Marshal_LoadExternal.c",
+        "Marshal_MakeCredential.c",
+        "Marshal_NV_Certify.c",
+        "Marshal_NV_ChangeAuth.c",
+        "Marshal_NV_DefineSpace.c",
+        "Marshal_NV_Extend.c",
+        "Marshal_NV_GlobalWriteLock.c",
+        "Marshal_NV_Increment.c",
+        "Marshal_NV_Read.c",
+        "Marshal_NV_ReadLock.c",
+        "Marshal_NV_ReadPublic.c",
+        "Marshal_NV_SetBits.c",
+        "Marshal_NV_UndefineSpace.c",
+        "Marshal_NV_UndefineSpaceSpecial.c",
+        "Marshal_NV_Write.c",
+        "Marshal_NV_WriteLock.c",
+        "Marshal_ObjectChangeAuth.c",
+        "Marshal_PCR_Allocate.c",
+        "Marshal_PCR_Event.c",
+        "Marshal_PCR_Extend.c",
+        "Marshal_PCR_Read.c",
+        "Marshal_PCR_Reset.c",
+        "Marshal_PCR_SetAuthPolicy.c",
+        "Marshal_PCR_SetAuthValue.c",
+        "Marshal_PP_Commands.c",
+        "Marshal_PolicyAuthValue.c",
+        "Marshal_PolicyAuthorize.c",
+        "Marshal_PolicyCommandCode.c",
+        "Marshal_PolicyCounterTimer.c",
+        "Marshal_PolicyCpHash.c",
+        "Marshal_PolicyDuplicationSelect.c",
+        "Marshal_PolicyGetDigest.c",
+        "Marshal_PolicyLocality.c",
+        "Marshal_PolicyNV.c",
+        "Marshal_PolicyNameHash.c",
+        "Marshal_PolicyNvWritten.c",
+        "Marshal_PolicyOR.c",
+        "Marshal_PolicyPCR.c",
+        "Marshal_PolicyPassword.c",
+        "Marshal_PolicyPhysicalPresence.c",
+        "Marshal_PolicyRestart.c",
+        "Marshal_PolicySecret.c",
+        "Marshal_PolicySigned.c",
+        "Marshal_PolicyTicket.c",
+        "Marshal_Quote.c",
+        "Marshal_RSA_Decrypt.c",
+        "Marshal_RSA_Encrypt.c",
+        "Marshal_ReadClock.c",
+        "Marshal_ReadPublic.c",
+        "Marshal_Rewrap.c",
+        "Marshal_SelfTest.c",
+        "Marshal_SequenceComplete.c",
+        "Marshal_SequenceUpdate.c",
+        "Marshal_SetAlgorithmSet.c",
+        "Marshal_SetCommandCodeAuditStatus.c",
+        "Marshal_SetPrimaryPolicy.c",
+        "Marshal_Shutdown.c",
+        "Marshal_Sign.c",
+        "Marshal_StartAuthSession.c",
+        "Marshal_Startup.c",
+        "Marshal_StirRandom.c",
+        "Marshal_TestParms.c",
+        "Marshal_Unseal.c",
+        "Marshal_VerifySignature.c",
+        "Marshal_ZGen_2Phase.c",
+        "Manufacture.c",
+        "MathFunctions.c",
+        "MemoryLib.c",
+        "NV.c",
+        "NVMem.c",
+        "NV_Certify.c",
+        "NV_ChangeAuth.c",
+        "NV_DefineSpace.c",
+        "NV_Extend.c",
+        "NV_GlobalWriteLock.c",
+        "NV_Increment.c",
+        "NV_Read.c",
+        "NV_ReadLock.c",
+        "NV_ReadPublic.c",
+        "NV_SetBits.c",
+        "NV_UndefineSpace.c",
+        "NV_UndefineSpaceSpecial.c",
+        "NV_Write.c",
+        "NV_WriteLock.c",
+        "NV_spt.c",
+        "Object.c",
+        "ObjectChangeAuth.c",
+        "Object_spt.c",
+        "PCR.c",
+        "PCR_Allocate.c",
+        "PCR_Event.c",
+        "PCR_Extend.c",
+        "PCR_Read.c",
+        "PCR_Reset.c",
+        "PCR_SetAuthPolicy.c",
+        "PCR_SetAuthValue.c",
+        "PP.c",
+        "PPPlat.c",
+        "PP_Commands.c",
+        "PlatformData.c",
+        "PolicyAuthValue.c",
+        "PolicyAuthorize.c",
+        "PolicyCommandCode.c",
+        "PolicyCounterTimer.c",
+        "PolicyCpHash.c",
+        "PolicyDuplicationSelect.c",
+        "PolicyGetDigest.c",
+        "PolicyLocality.c",
+        "PolicyNV.c",
+        "PolicyNameHash.c",
+        "PolicyNvWritten.c",
+        "PolicyOR.c",
+        "PolicyPCR.c",
+        "PolicyPassword.c",
+        "PolicyPhysicalPresence.c",
+        "PolicyRestart.c",
+        "PolicySecret.c",
+        "PolicySigned.c",
+        "PolicyTicket.c",
+        "Policy_spt.c",
+        "Power.c",
+        "PowerPlat.c",
+        "PropertyCap.c",
+        "Quote.c",
+        "RSAData.c",
+        "RSAKeySieve.c",
+        "RSA_Decrypt.c",
+        "RSA_Encrypt.c",
+        "ReadClock.c",
+        "ReadPublic.c",
+        "Rewrap.c",
+        "SelfTest.c",
+        "SequenceComplete.c",
+        "SequenceUpdate.c",
+        "Session.c",
+        "SessionProcess.c",
+        "SetAlgorithmSet.c",
+        "SetCommandCodeAuditStatus.c",
+        "SetPrimaryPolicy.c",
+        "Shutdown.c",
+        "Sign.c",
+        "StartAuthSession.c",
+        "Startup.c",
+        "StirRandom.c",
+        "TestParms.c",
+        "Ticket.c",
+        "Time.c",
+        "TpmFail.c",
+        "Unique.c",
+        "Unseal.c",
+        "VerifySignature.c",
+        "ZGen_2Phase.c",
+        "_TPM_Hash_Data.c",
+        "_TPM_Hash_End.c",
+        "_TPM_Hash_Start.c",
+        "_TPM_Init.c",
+        "tpm_generated.c",
+    ],
+
+}
diff --git a/Android.mk b/Android.mk
deleted file mode 100644
index 46e84c9..0000000
--- a/Android.mk
+++ /dev/null
@@ -1,305 +0,0 @@
-# Copyright (C) 2015 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-LOCAL_PATH := $(call my-dir)
-
-# libtpm2
-# ========================================================
-include $(CLEAR_VARS)
-LOCAL_MODULE := libtpm2
-LOCAL_CFLAGS := -Wall -Wextra -Werror \
-  -Wno-typedef-redefinition \
-  -Wno-unused-parameter \
-  -Wno-missing-field-initializers \
-  -Wno-tautological-compare \
-  -Wno-sign-compare
-LOCAL_C_INCLUDES := $(LOCAL_PATH)/include/tpm2
-LOCAL_CLANG := true
-LOCAL_SHARED_LIBRARIES := libcrypto
-LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/include
-LOCAL_SRC_FILES := \
-  ActivateCredential.c \
-  AlgorithmCap.c \
-  Attest_spt.c \
-  Bits.c \
-  Cancel.c \
-  Certify.c \
-  CertifyCreation.c \
-  ChangeEPS.c \
-  ChangePPS.c \
-  Clear.c \
-  ClearControl.c \
-  Clock.c \
-  ClockRateAdjust.c \
-  ClockSet.c \
-  CommandAudit.c \
-  CommandCodeAttributes.c \
-  CommandDispatcher.c \
-  Commit.c \
-  ContextLoad.c \
-  ContextSave.c \
-  Context_spt.c \
-  CpriCryptPri.c \
-  CpriECC.c \
-  CpriHash.c \
-  CpriMisc.c \
-  CpriRNG.c \
-  CpriRSA.c \
-  CpriSym.c \
-  Create.c \
-  CreatePrimary.c \
-  CryptSelfTest.c \
-  CryptUtil.c \
-  DA.c \
-  DRTM.c \
-  DictionaryAttackLockReset.c \
-  DictionaryAttackParameters.c \
-  Duplicate.c \
-  ECC_Parameters.c \
-  ECDH_KeyGen.c \
-  ECDH_ZGen.c \
-  EC_Ephemeral.c \
-  EncryptDecrypt.c \
-  Entity.c \
-  Entropy.c \
-  EventSequenceComplete.c \
-  EvictControl.c \
-  ExecCommand.c \
-  FieldUpgradeData.c \
-  FieldUpgradeStart.c \
-  FirmwareRead.c \
-  FlushContext.c \
-  GetCapability.c \
-  GetCommandAuditDigest.c \
-  GetCommandCodeString.c \
-  GetRandom.c \
-  GetSessionAuditDigest.c \
-  GetTestResult.c \
-  GetTime.c \
-  Global.c \
-  HMAC.c \
-  HMAC_Start.c \
-  Handle.c \
-  HandleProcess.c \
-  Hash.c \
-  HashSequenceStart.c \
-  Hierarchy.c \
-  HierarchyChangeAuth.c \
-  HierarchyControl.c \
-  Import.c \
-  IncrementalSelfTest.c \
-  Load.c \
-  LoadExternal.c \
-  Locality.c \
-  LocalityPlat.c \
-  MakeCredential.c \
-  Marshal_ActivateCredential.c \
-  Marshal_Certify.c \
-  Marshal_CertifyCreation.c \
-  Marshal_ChangeEPS.c \
-  Marshal_ChangePPS.c \
-  Marshal_Clear.c \
-  Marshal_ClearControl.c \
-  Marshal_ClockRateAdjust.c \
-  Marshal_ClockSet.c \
-  Marshal_Commit.c \
-  Marshal_ContextLoad.c \
-  Marshal_ContextSave.c \
-  Marshal_Create.c \
-  Marshal_CreatePrimary.c \
-  Marshal_DictionaryAttackLockReset.c \
-  Marshal_DictionaryAttackParameters.c \
-  Marshal_Duplicate.c \
-  Marshal_ECC_Parameters.c \
-  Marshal_ECDH_KeyGen.c \
-  Marshal_ECDH_ZGen.c \
-  Marshal_EC_Ephemeral.c \
-  Marshal_EncryptDecrypt.c \
-  Marshal_EventSequenceComplete.c \
-  Marshal_EvictControl.c \
-  Marshal_FirmwareRead.c \
-  Marshal_FlushContext.c \
-  Marshal_GetCapability.c \
-  Marshal_GetCommandAuditDigest.c \
-  Marshal_GetRandom.c \
-  Marshal_GetSessionAuditDigest.c \
-  Marshal_GetTestResult.c \
-  Marshal_GetTime.c \
-  Marshal_HMAC.c \
-  Marshal_HMAC_Start.c \
-  Marshal_Hash.c \
-  Marshal_HashSequenceStart.c \
-  Marshal_HierarchyChangeAuth.c \
-  Marshal_HierarchyControl.c \
-  Marshal_Import.c \
-  Marshal_IncrementalSelfTest.c \
-  Marshal_Load.c \
-  Marshal_LoadExternal.c \
-  Marshal_MakeCredential.c \
-  Marshal_NV_Certify.c \
-  Marshal_NV_ChangeAuth.c \
-  Marshal_NV_DefineSpace.c \
-  Marshal_NV_Extend.c \
-  Marshal_NV_GlobalWriteLock.c \
-  Marshal_NV_Increment.c \
-  Marshal_NV_Read.c \
-  Marshal_NV_ReadLock.c \
-  Marshal_NV_ReadPublic.c \
-  Marshal_NV_SetBits.c \
-  Marshal_NV_UndefineSpace.c \
-  Marshal_NV_UndefineSpaceSpecial.c \
-  Marshal_NV_Write.c \
-  Marshal_NV_WriteLock.c \
-  Marshal_ObjectChangeAuth.c \
-  Marshal_PCR_Allocate.c \
-  Marshal_PCR_Event.c \
-  Marshal_PCR_Extend.c \
-  Marshal_PCR_Read.c \
-  Marshal_PCR_Reset.c \
-  Marshal_PCR_SetAuthPolicy.c \
-  Marshal_PCR_SetAuthValue.c \
-  Marshal_PP_Commands.c \
-  Marshal_PolicyAuthValue.c \
-  Marshal_PolicyAuthorize.c \
-  Marshal_PolicyCommandCode.c \
-  Marshal_PolicyCounterTimer.c \
-  Marshal_PolicyCpHash.c \
-  Marshal_PolicyDuplicationSelect.c \
-  Marshal_PolicyGetDigest.c \
-  Marshal_PolicyLocality.c \
-  Marshal_PolicyNV.c \
-  Marshal_PolicyNameHash.c \
-  Marshal_PolicyNvWritten.c \
-  Marshal_PolicyOR.c \
-  Marshal_PolicyPCR.c \
-  Marshal_PolicyPassword.c \
-  Marshal_PolicyPhysicalPresence.c \
-  Marshal_PolicyRestart.c \
-  Marshal_PolicySecret.c \
-  Marshal_PolicySigned.c \
-  Marshal_PolicyTicket.c \
-  Marshal_Quote.c \
-  Marshal_RSA_Decrypt.c \
-  Marshal_RSA_Encrypt.c \
-  Marshal_ReadClock.c \
-  Marshal_ReadPublic.c \
-  Marshal_Rewrap.c \
-  Marshal_SelfTest.c \
-  Marshal_SequenceComplete.c \
-  Marshal_SequenceUpdate.c \
-  Marshal_SetAlgorithmSet.c \
-  Marshal_SetCommandCodeAuditStatus.c \
-  Marshal_SetPrimaryPolicy.c \
-  Marshal_Shutdown.c \
-  Marshal_Sign.c \
-  Marshal_StartAuthSession.c \
-  Marshal_Startup.c \
-  Marshal_StirRandom.c \
-  Marshal_TestParms.c \
-  Marshal_Unseal.c \
-  Marshal_VerifySignature.c \
-  Marshal_ZGen_2Phase.c \
-  Manufacture.c \
-  MathFunctions.c \
-  MemoryLib.c \
-  NV.c \
-  NVMem.c \
-  NV_Certify.c \
-  NV_ChangeAuth.c \
-  NV_DefineSpace.c \
-  NV_Extend.c \
-  NV_GlobalWriteLock.c \
-  NV_Increment.c \
-  NV_Read.c \
-  NV_ReadLock.c \
-  NV_ReadPublic.c \
-  NV_SetBits.c \
-  NV_UndefineSpace.c \
-  NV_UndefineSpaceSpecial.c \
-  NV_Write.c \
-  NV_WriteLock.c \
-  NV_spt.c \
-  Object.c \
-  ObjectChangeAuth.c \
-  Object_spt.c \
-  PCR.c \
-  PCR_Allocate.c \
-  PCR_Event.c \
-  PCR_Extend.c \
-  PCR_Read.c \
-  PCR_Reset.c \
-  PCR_SetAuthPolicy.c \
-  PCR_SetAuthValue.c \
-  PP.c \
-  PPPlat.c \
-  PP_Commands.c \
-  PlatformData.c \
-  PolicyAuthValue.c \
-  PolicyAuthorize.c \
-  PolicyCommandCode.c \
-  PolicyCounterTimer.c \
-  PolicyCpHash.c \
-  PolicyDuplicationSelect.c \
-  PolicyGetDigest.c \
-  PolicyLocality.c \
-  PolicyNV.c \
-  PolicyNameHash.c \
-  PolicyNvWritten.c \
-  PolicyOR.c \
-  PolicyPCR.c \
-  PolicyPassword.c \
-  PolicyPhysicalPresence.c \
-  PolicyRestart.c \
-  PolicySecret.c \
-  PolicySigned.c \
-  PolicyTicket.c \
-  Policy_spt.c \
-  Power.c \
-  PowerPlat.c \
-  PropertyCap.c \
-  Quote.c \
-  RSAData.c \
-  RSAKeySieve.c \
-  RSA_Decrypt.c \
-  RSA_Encrypt.c \
-  ReadClock.c \
-  ReadPublic.c \
-  Rewrap.c \
-  SelfTest.c \
-  SequenceComplete.c \
-  SequenceUpdate.c \
-  Session.c \
-  SessionProcess.c \
-  SetAlgorithmSet.c \
-  SetCommandCodeAuditStatus.c \
-  SetPrimaryPolicy.c \
-  Shutdown.c \
-  Sign.c \
-  StartAuthSession.c \
-  Startup.c \
-  StirRandom.c \
-  TestParms.c \
-  Ticket.c \
-  Time.c \
-  TpmFail.c \
-  Unique.c \
-  Unseal.c \
-  VerifySignature.c \
-  ZGen_2Phase.c \
-  _TPM_Hash_Data.c \
-  _TPM_Hash_End.c \
-  _TPM_Hash_Start.c \
-  _TPM_Init.c \
-  tpm_generated.c
-include $(BUILD_SHARED_LIBRARY)
diff --git a/MemoryLib.c b/MemoryLib.c
index 7beac63..178848e 100644
--- a/MemoryLib.c
+++ b/MemoryLib.c
@@ -75,15 +75,15 @@
       UINT32            size                 // IN: size of bytes being compared
       )
 {
-      BOOL          equal = TRUE;
+      BOOL          diff = FALSE;
       const BYTE   *b1, *b2;
       b1 = (BYTE *)buffer1;
       b2 = (BYTE *)buffer2;
       // Compare all bytes so that there is no leakage of information
       // due to timing differences.
       for(; size > 0; size--)
-          equal = (*b1++ == *b2++) && equal;
-      return equal;
+          diff |= *b1++ ^ *b2++;
+      return !diff;
 }
 //
 //
diff --git a/fuzz/Dockerfile b/fuzz/Dockerfile
index 69e2878..db3e560 100644
--- a/fuzz/Dockerfile
+++ b/fuzz/Dockerfile
@@ -1,11 +1,13 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
+# Copyright 2017 The Chromium Authors. All rights reserved.
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 #
 # Defines a docker image that can build fuzzers.
 #
-FROM ossfuzz/base-libfuzzer
-RUN apt-get install -y make libssl-dev binutils libgcc-5-dev
+FROM gcr.io/oss-fuzz-base/base-builder
+RUN apt-get update && apt-get install -y make libssl-dev binutils libgcc-5-dev
 
 COPY . /src/tpm2/
 COPY fuzz/build.sh /src/
+
+WORKDIR tpm2
diff --git a/fuzz/README b/fuzz/README
index 4c0cc04..90fd5f6 100644
--- a/fuzz/README
+++ b/fuzz/README
@@ -32,6 +32,12 @@
 
     $ docker run -ti --rm -v $(pwd):/src/tpm2 -v /tmp/fuzzers:/out \
                  ossfuzz/tpm2
+    or
+
+    $ docker run -ti --rm -v $(pwd):/src/tpm2 -v /tmp/fuzzers:/out \
+                -e FUZZING_ENGINE=libfuzzer \
+                -e SANITIZER=<address/memory/undefined> \
+                ossfuzz/tpm2
 
   Get a shell in the container