| From 6819210f66224aaae460ab1a846e7d09fdc39ff8 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 3 Mar 2021 11:28:24 +0800 |
| Subject: ima: Fix the error code for restoring the PCR value |
| |
| From: Li Huafei <lihuafei1@huawei.com> |
| |
| [ Upstream commit 7990ccafaa37dc6d8bb095d4d7cd997e8903fd10 ] |
| |
| In ima_restore_measurement_list(), hdr[HDR_PCR].data is pointing to a |
| buffer of type u8, which contains the dumped 32-bit pcr value. |
| Currently, only the least significant byte is used to restore the pcr |
| value. We should convert hdr[HDR_PCR].data to a pointer of type u32 |
| before fetching the value to restore the correct pcr value. |
| |
| Fixes: 47fdee60b47f ("ima: use ima_parse_buf() to parse measurements headers") |
| Signed-off-by: Li Huafei <lihuafei1@huawei.com> |
| Reviewed-by: Roberto Sassu <roberto.sassu@huawei.com> |
| Signed-off-by: Mimi Zohar <zohar@linux.ibm.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| security/integrity/ima/ima_template.c | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| diff --git a/security/integrity/ima/ima_template.c b/security/integrity/ima/ima_template.c |
| index e22e510ae92d..4e081e650047 100644 |
| --- a/security/integrity/ima/ima_template.c |
| +++ b/security/integrity/ima/ima_template.c |
| @@ -494,8 +494,8 @@ int ima_restore_measurement_list(loff_t size, void *buf) |
| } |
| } |
| |
| - entry->pcr = !ima_canonical_fmt ? *(hdr[HDR_PCR].data) : |
| - le32_to_cpu(*(hdr[HDR_PCR].data)); |
| + entry->pcr = !ima_canonical_fmt ? *(u32 *)(hdr[HDR_PCR].data) : |
| + le32_to_cpu(*(u32 *)(hdr[HDR_PCR].data)); |
| ret = ima_restore_measurement_entry(entry); |
| if (ret < 0) |
| break; |
| -- |
| 2.30.2 |
| |