ramips: a workaround for system halt issue on 6.12 kernel

Fix potential invalid memory address access on ip_fast_csum().

Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
Link: https://github.com/openwrt/openwrt/pull/18654
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
This commit is contained in:
Shiji Yang 2025-05-30 20:24:32 +08:00 committed by Hauke Mehrtens
parent 4f62facf10
commit 09c2ceb7a5

View file

@ -0,0 +1,28 @@
From e34037bd3df9d80c96eda35d346a9220c71a3459 Mon Sep 17 00:00:00 2001
From: Shiji Yang <yangshiji66@outlook.com>
Date: Fri, 30 May 2025 19:56:16 +0800
Subject: [PATCH] MIPS: checksum: check if data length is zero in
ip_fast_csum()
If ihl equals 0, the nonsensical infinite do while loop will
eventually access an invalid memory address, which will cause
the system to halt.
Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
---
arch/mips/include/asm/checksum.h | 4 ++++
1 file changed, 4 insertions(+)
--- a/arch/mips/include/asm/checksum.h
+++ b/arch/mips/include/asm/checksum.h
@@ -101,6 +101,10 @@ static inline __sum16 ip_fast_csum(const
unsigned int csum;
int carry;
+ /* ihl should never be zero */
+ if (unlikely(ihl == 0))
+ return 0;
+
csum = word[0];
csum += word[1];
carry = (csum < word[1]);