From 392b141233c0831edfd8b9378988c94525c8a5bb Mon Sep 17 00:00:00 2001 From: Qian Yingjin Date: Sun, 29 Dec 2024 00:10:16 +0800 Subject: [PATCH] LU-18608 pcc: fix INTEGER_OVERFLOW in pcc_file_read_iter() Fixing the possible INTEGER_OVERFLOW issue reported from Coverity. /lustre/llite/pcc.c: 2643 in pcc_file_read_iter() 2641 iocb->ki_filp = file; 2642 pcc_io_fini(inode, PIT_READ, result, cached); CID 454276: Insecure data handling (INTEGER_OVERFLOW) "result", which might have overflowed, is returned from the function. 2643 RETURN(result); Test-Parameters: trivial testlist=sanity-pcc CoverityID: 454276 ("Insecure data handing") Fixes: ce98bfe5f72 ("LU-10499 pcc: add readonly mode for PCC") Signed-off-by: Qian Yingjin Change-Id: Ib856b7598441c06e0fcfe2e7f1eb4eef4d3d82b7 Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/57611 Reviewed-by: Andreas Dilger Reviewed-by: Arshad Hussain Reviewed-by: Oleg Drokin Tested-by: jenkins Tested-by: Maloo --- lustre/llite/pcc.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/lustre/llite/pcc.c b/lustre/llite/pcc.c index 1cff8d2..3fcd855 100644 --- a/lustre/llite/pcc.c +++ b/lustre/llite/pcc.c @@ -2520,7 +2520,7 @@ ssize_t pcc_file_read_iter(struct kiocb *iocb, /* Fake I/O error on PCC-RO */ if (CFS_FAIL_CHECK(OBD_FAIL_LLITE_PCC_FAKE_ERROR)) - GOTO(out, result = -EIO); + GOTO(out, rc = -EIO); iocb->ki_filp = pccf->pccf_file; if (!IS_ENCRYPTED(inode)) { @@ -2529,7 +2529,7 @@ ssize_t pcc_file_read_iter(struct kiocb *iocb, * to add support for ext4-dax. */ result = __pcc_file_read_iter(iocb, iter); - GOTO(out, result); + GOTO(out_filp, result); } /* from this point, we are dealing with an encrypted inode */ @@ -2619,10 +2619,13 @@ out_pageprivate2: if (iocb->ki_pos > i_size_read(inode) && result > 0) result -= iocb->ki_pos - i_size_read(inode); -out: +out_filp: iocb->ki_filp = file; - pcc_io_fini(inode, PIT_READ, result, cached); - RETURN(result); + if (result < 0) + rc = result; +out: + pcc_io_fini(inode, PIT_READ, rc, cached); + RETURN(result > 0 ? result : rc); } static ssize_t -- 1.8.3.1