tpm: add buffer function to point to returned parameters
Replace all instances of &buf.data[TPM_HEADER_SIZE] with a new function tpm_buf_parameters() because encryption sessions change where the return parameters are located in the buffer since if a return session is present they're 4 bytes beyond the header with those 4 bytes giving the parameter length. If there is no return session, then they're in the usual place immediately after the header. Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com> Reviewed-by: Stefan Berger <stefanb@linux.ibm.com> Reviewed-by: Jarkko Sakkinen <jarkko@kernel.org> Tested-by: Jarkko Sakkinen <jarkko@kernel.org> Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org>
This commit is contained in:
parent
f135440447
commit
11189d6828
@ -221,3 +221,31 @@ u32 tpm_buf_read_u32(struct tpm_buf *buf, off_t *offset)
|
||||
return be32_to_cpu(value);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(tpm_buf_read_u32);
|
||||
|
||||
static u16 tpm_buf_tag(struct tpm_buf *buf)
|
||||
{
|
||||
struct tpm_header *head = (struct tpm_header *)buf->data;
|
||||
|
||||
return be16_to_cpu(head->tag);
|
||||
}
|
||||
|
||||
/**
|
||||
* tpm_buf_parameters - return the TPM response parameters area of the tpm_buf
|
||||
* @buf: tpm_buf to use
|
||||
*
|
||||
* Where the parameters are located depends on the tag of a TPM
|
||||
* command (it's immediately after the header for TPM_ST_NO_SESSIONS
|
||||
* or 4 bytes after for TPM_ST_SESSIONS). Evaluate this and return a
|
||||
* pointer to the first byte of the parameters area.
|
||||
*
|
||||
* @return: pointer to parameters area
|
||||
*/
|
||||
u8 *tpm_buf_parameters(struct tpm_buf *buf)
|
||||
{
|
||||
int offset = TPM_HEADER_SIZE;
|
||||
|
||||
if (tpm_buf_tag(buf) == TPM2_ST_SESSIONS)
|
||||
offset += 4;
|
||||
|
||||
return &buf->data[offset];
|
||||
}
|
||||
|
@ -344,6 +344,8 @@ u8 tpm_buf_read_u8(struct tpm_buf *buf, off_t *offset);
|
||||
u16 tpm_buf_read_u16(struct tpm_buf *buf, off_t *offset);
|
||||
u32 tpm_buf_read_u32(struct tpm_buf *buf, off_t *offset);
|
||||
|
||||
u8 *tpm_buf_parameters(struct tpm_buf *buf);
|
||||
|
||||
/*
|
||||
* Check if TPM device is in the firmware upgrade mode.
|
||||
*/
|
||||
|
Loading…
x
Reference in New Issue
Block a user