Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[IA64] tidy up return value of ip_fast_csum

While working on implementing csum_ipv6_magic, I noticed that current
version of ip_fast_csum will potentially return bits above "unsigned
short" as 1. While no harm is done right now because all call sites
will chop off the upper bits when it uses the return value. However,
this is still dangerous and buggy. Here is a patch to enforce that the
function really returns unsigned short in the native register format.

The fix is free as there are plenty open slot to add one more asm instruction.

Signed-off-by: Ken Chen <kenneth.w.chen@intel.com>
Signed-off-by: Tony Luck <tony.luck@intel.com>

authored by

Chen, Kenneth W and committed by
Tony Luck
6dbfc19b 007d77d0

+2 -1
+2 -1
arch/ia64/lib/ip_fast_csum.S
··· 68 68 zxt2 r20=r20 69 69 ;; 70 70 add r20=ret0,r20 71 + mov r9=0xffff 71 72 ;; 72 - andcm ret0=-1,r20 73 + andcm ret0=r9,r20 73 74 .restore sp // reset frame state 74 75 br.ret.sptk.many b0 75 76 ;;