[openwrt/openwrt] kernel: properly handle paging errors in fit partition parser

LEDE Commits lede-commits at lists.infradead.org
Fri Aug 27 13:34:17 PDT 2021


dangole pushed a commit to openwrt/openwrt.git, branch master:
https://git.openwrt.org/cf40141b515d518ff166afb85e898904ab2ae57a

commit cf40141b515d518ff166afb85e898904ab2ae57a
Author: Daniel Golle <daniel at makrotopia.org>
AuthorDate: Fri Aug 27 21:30:32 2021 +0100

    kernel: properly handle paging errors in fit partition parser
    
    The uImage.FIT partition uses page mapping without properly handling
    paging errors. This can lead to Kernel Oops in case of read errors
    while trying to parse uImage.FIT partitions.
    
    Signed-off-by: Daniel Golle <daniel at makrotopia.org>
---
 target/linux/generic/files/block/partitions/fit.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/target/linux/generic/files/block/partitions/fit.c b/target/linux/generic/files/block/partitions/fit.c
index 27e44a4af4..a0aa0eadf5 100644
--- a/target/linux/generic/files/block/partitions/fit.c
+++ b/target/linux/generic/files/block/partitions/fit.c
@@ -92,8 +92,11 @@ int parse_fit_partitions(struct parsed_partitions *state, u64 fit_start_sector,
 		return -ERANGE;
 
 	page = read_mapping_page(mapping, fit_start_sector >> (PAGE_SHIFT - SECTOR_SHIFT), NULL);
-	if (!page)
-		return -ENOMEM;
+	if (IS_ERR(page))
+		return -EFAULT;
+
+	if (PageError(page))
+		return -EFAULT;
 
 	init_fit = page_address(page);
 



More information about the lede-commits mailing list