On Thu, Feb 06, 2025 at 07:36:43PM -0800, Eric Biggers wrote: > +int irdma_ieq_check_mpacrc(const void *addr, u32 len, u32 val) > { > - u32 crc = 0; > - > - crypto_shash_digest(desc, addr, len, (u8 *)&crc); > - if (crc != val) > + if (~crc32c(~0, addr, len) != val) > return -EINVAL; > > return 0; > } Sorry, I just realized this isn't actually equivalent on big endian CPUs, since the byte array produced by crypto_shash_digest() used little endian byte order, whereas crc32c() just returns a CPU endian value. And of course this broken subsystem uses u32 for the little endian values instead of __le32 like the result of the kernel. Not sure it's worth my time to continue to try to fix this subsystem properly. - Eric