Herbert Xu wrote: > On Fri, Jan 23, 2009 at 04:28:49PM +1100, Herbert Xu wrote: >>>> static inline __be32 sctp_end_cksum(__be32 crc32) >>>> { >>>> - return ~crc32; >>>> + return (__force __be32)~cpu_to_le32((__force u32)crc32); >>>> } >>> Ouch, surely there is a better way to do this? >> In fact this looks wrong. Has this code actually been tested >> on big-endian? Yes, the code was tested by me and the person who reported it as listed in the commit log. :) > > Reading this again it does seem to do the right thing as it's > using the raw crc32c interface as opposed to crypto crc32c. > > However, I suggest that we change it as follows: > > 1) Make sh->csum __le32 since we're using crc32c_le. > 2) Change all intermediate values in sctp/checksum.h to u32. > 3) Make sctp_end_cksum return __le32 and have it do > > return cpu_to_le32(~crc); > I'll give it some thought. It would clean up all the __force casts, but it will be a little misleading to define a packet checksum as little endian. :) -vlad > Cheers, -- To unsubscribe from this list: send the line "unsubscribe linux-sctp" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html