Re: [PATCH v6 6/6] tpm/kexec: Duplicate TPM measurement log in of-tree for kexec
flat view
From: Nageswara R Sastry <hidden>
Date: 2022-07-20 13:49:17
Also in:
kexec, linux-integrity, linuxppc-dev, lkml
________________________________________
From: Stefan Berger <stefanb@linux.ibm.com> Sent: 07 July 2022 10:50 PM To: kexec@lists.infradead.org; devicetree@vger.kernel.org; linux-integrity@vger.kernel.org; linux-kernel@vger.kernel.org; linuxppc-dev@lists.ozlabs.org Cc: nayna@linux.ibm.com; Nageswara R Sastry; mpe@ellerman.id.au; Stefan Berger; Rob Herring; Frank Rowand; Eric Biederman Subject: [PATCH v6 6/6] tpm/kexec: Duplicate TPM measurement log in of-tree for kexec
The memory area of the TPM measurement log is currently not properly duplicated for carrying it across kexec when an Open Firmware Devicetree is used. Therefore, the contents of the log get corrupted. Fix this for the kexec_file_load() syscall by allocating a buffer and copying the contents of the existing log into it. The new buffer is preserved across the kexec and a pointer to it is available when the new kernel is started. To achieve this, store the allocated buffer's address in the flattened device tree (fdt) under the name linux,tpm-kexec-buffer and search for this entry early in the kernel startup before the TPM subsystem starts up. Adjust the pointer in the of-tree stored under linux,sml-base to point to this buffer holding the preserved log. The TPM driver can then read the base address from this entry when making the log available. Invalidate the log by removing 'linux,sml-base' from the devicetree if anything goes wrong with updating the buffer.
Use subsys_initcall() to call the function to restore the buffer even if the TPM subsystem or driver are not used. This allows the buffer to be carried across the next kexec without involvement of the TPM subsystem and ensures a valid buffer pointed to by the of-tree.
Use the subsys_initcall(), rather than an ealier initcall, since page_is_ram() in get_kexec_buffer() only starts working at this stage.
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com> Cc: Rob Herring <robh+dt@kernel.org> Cc: Frank Rowand <redacted> Cc: Eric Biederman <redacted>
--- v6: - Define prototype for tpm_add_kexec_buffer under same config options as drivers/of/kexec.c is compiled, provide inline function otherwise. (kernel test robot)
Tested-by: Nageswara R Sastry <redacted>