Re: [PATCH v2] RDMA/irdma: switch to using the crc32c library

From: Eric Biggers
Date: Thu Feb 06 2025 - 22:57:59 EST


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