metag: checksum.h: fix carry in csum_tcpudp_nofold
PATCH 1/1 metag: checksum.h: fix carry in csum_tcpudp_nofold
In csum_tcpudp_nofold, add 1 if the carry bit is set after adding the destination IP address (32 bits) to the checksum (16 bits).
The lack of carry handling for this particular addition meant that a destination address of *.*.255.255 (e.g. certain broadcasts) sometimes resulted in an incorrect checksum. This bug has been present in the Meta port since the code was written in the 2.4 days.
Reported-by Marcin Nowakowski <[email protected]>
Signed-off-by James Hogan <[email protected]>
---
I'll add this patch to my arch/metag fixes branch for v3.11.
arch/metag/include/asm/checksum.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
arch/metag/include/asm/checksum.h +2 -1
@@ -64,7 +64,8 @@ static inline __wsum csum_tcpudp_nofold(__be32 saddr, __be32 daddr, __wsum sum) {unsigned long len_proto = (proto + len) <<8 ; - asm ("ADD %0, %0, %1\n" + asm ("ADDS %0, %0, %1\n" +"ADDCS %0, %0, #1\n" "ADDS %0, %0, %2\n" "ADDCS %0, %0, #1\n" "ADDS %0, %0, %3\n"
Signature · 1 line
1.8.1.2