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 <Marcin.Nowakowski@pure.com> Signed-off-by: James Hogan <james.hogan@imgtec.com>
This commit is contained in:
parent
8bb495e3f0
commit
d903bca9bc
|
@ -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"
|
||||
|
|
Loading…
Reference in New Issue