aboutsummaryrefslogtreecommitdiff
path: root/board
diff options
context:
space:
mode:
authorAshok Reddy Soma <ashok.reddy.soma@xilinx.com>2022-02-23 15:00:57 +0100
committerMichal Simek <michal.simek@xilinx.com>2022-03-07 08:48:21 +0100
commit90e8f2db60a1e49526f053876925741682da96ab (patch)
tree645272da58ac9ea924ada8dd28b4e1553aaa5afb /board
parent952b2e60de6d6a80f35878193649b49ae2e14df9 (diff)
downloadu-boot-90e8f2db60a1e49526f053876925741682da96ab.zip
u-boot-90e8f2db60a1e49526f053876925741682da96ab.tar.gz
u-boot-90e8f2db60a1e49526f053876925741682da96ab.tar.bz2
fru: ops: Return error from checksum if data is all zero's
fru_checksum function is simply adding all the bytes and returning the sum. If the data passed to this function is all zero's then it will return 0, and the functions calling this api will assume that checksum is correct. Ideally this is not good. Fix this by returning error if all the data is 0's. Signed-off-by: Ashok Reddy Soma <ashok.reddy.soma@xilinx.com> Signed-off-by: Michal Simek <michal.simek@xilinx.com> Link: https://lore.kernel.org/r/ac0366fe55c60a818a3f9ed33d96826c817d5520.1645624855.git.michal.simek@xilinx.com
Diffstat (limited to 'board')
-rw-r--r--board/xilinx/common/fru_ops.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/board/xilinx/common/fru_ops.c b/board/xilinx/common/fru_ops.c
index a0a1441..058e750 100644
--- a/board/xilinx/common/fru_ops.c
+++ b/board/xilinx/common/fru_ops.c
@@ -39,12 +39,20 @@ static int fru_check_language(u8 code)
u8 fru_checksum(u8 *addr, u8 len)
{
u8 checksum = 0;
+ u8 cnt = len;
while (len--) {
+ if (*addr == 0)
+ cnt--;
+
checksum += *addr;
addr++;
}
+ /* If all data bytes are 0's return error */
+ if (!cnt)
+ return EINVAL;
+
return checksum;
}