>I was seeing "nf_ct_icmpv6: ICMPv6 checksum failed" errors on >every ICMPv6 packet received. The packets did not pass the >netfilter checksum verification but they did pass the standard >verification later and got processed. This happenns with hardware >checksumming turned off or with adapters that do not checksum >ICMP packets (e.g. tg3). I tracked the problem down to the ia64 >version of csum_ipv6_magic() introduced by 007d77d0c5. For some >arguments, it gives differrent results than the generic version. > >The following patch fixes the problem for me. IA64 experts, can >you please have a look? > >Thanks! > > >[IA64] fix csum_ipv6_magic() > >The 32-bit parameters (len and csum) of csum_ipv6_magic() are passed in 64- >bit >registers in3 and in4. The high order 32 bits of the registers were never >cleared, and garbage was sometimes calculated into the checksum. > >Fix this by clearing the high order 32 bits of the registers. > >Signed-off-by: Jiri Bohac <jbohac@xxxxxxx> > >diff --git a/arch/ia64/lib/ip_fast_csum.S b/arch/ia64/lib/ip_fast_csum.S >index 1f86aeb..9a8d23f 100644 >--- a/arch/ia64/lib/ip_fast_csum.S >+++ b/arch/ia64/lib/ip_fast_csum.S >@@ -96,20 +96,22 @@ END(ip_fast_csum) > GLOBAL_ENTRY(csum_ipv6_magic) > ld4 r20=[in0],4 > ld4 r21=[in1],4 >- dep r15=in3,in2,32,16 >+ zxt4 in3=in3 > ;; > ld4 r22=[in0],4 > ld4 r23=[in1],4 >- mux1 r15=r15,@rev >+ dep r15=in3,in2,32,16 > ;; > ld4 r24=[in0],4 > ld4 r25=[in1],4 >- shr.u r15=r15,16 >+ mux1 r15=r15,@rev > add r16=r20,r21 > add r17=r22,r23 >+ zxt4 in4=in4 > ;; > ld4 r26=[in0],4 > ld4 r27=[in1],4 >+ shr.u r15=r15,16 > add r18=r24,r25 > add r8=r16,r17 > ;; Looks good to me. Do you know the caller function for the failed csum_ipv6_magic()? Thanks. -Fenghua -- To unsubscribe from this list: send the line "unsubscribe linux-ia64" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html
![]() |