audk/MdePkg
Pedro Falcato e2d4f75913 MdePkg/BaseLib: Fix CRC16-ANSI calculation
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=4609

The current CalculateCrc16Ansi implementation does the following:
1) Invert the passed checksum
2) Calculate the new checksum by going through data and using the
   lookup table
3) Invert it back again

This emulated my design for CalculateCrc32c, where 0 is
passed as the initial checksum, and it inverts in the end.
However, CRC16 does not invert the checksum on input and output.
So this is incorrect.

Fix the problem by not inverting input checksums nor output checksums.
Callers should now pass CRC16ANSI_INIT as the initial value instead of
"0". This is a breaking change.

This problem was found out-of-list when older ext4 filesystems
(that use crc16 checksums) failed to mount with "corruption".

Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Zhiguang Liu <zhiguang.liu@intel.com>
Signed-off-by: Pedro Falcato <pedro.falcato@gmail.com>
Reviewed-by: Michael D Kinney <michael.d.kinney@intel.com>
2023-12-03 02:37:26 +00:00
..
Include MdePkg/BaseLib: Fix CRC16-ANSI calculation 2023-12-03 02:37:26 +00:00
Library MdePkg/BaseLib: Fix CRC16-ANSI calculation 2023-12-03 02:37:26 +00:00
Test MdePkg: Apply uncrustify formatting to relevant files 2023-10-27 00:50:49 +00:00
MdeLibs.dsc.inc MdePkg/ArmTrngLib: Add NULL instance of Arm TRNG Library 2022-11-06 16:32:28 +00:00
MdePkg.ci.yaml MdePkg: CI: Add PrEval entry 2023-10-23 20:17:52 +00:00
MdePkg.dec MdePkg/Rng: Add GUID to describe Arm Rndr Rng algorithms 2023-09-08 09:48:55 +00:00
MdePkg.dsc MdePkg: add SBI-based SerialPortLib for RISC-V 2023-05-17 23:47:20 +00:00
MdePkg.uni MdePkg: Add PcdSpeculationBarrierType 2019-04-30 16:39:09 -07:00
MdePkgExtra.uni MdePkg: Replace BSD License with BSD+Patent License 2019-04-09 10:58:13 -07:00