CVE-2026-90145: hinic3: Fix skb linearization mismatch and drop skb when skb_checksum_help() failed
In the Linux kernel, the following vulnerability has been resolved:
hinic3: Fix skb linearization mismatch and drop skb when skbchecksumhelp() failed
Previously, hinic3sendoneskb() cached the skb fragment count before calling hinic3txoffload(). If hinic3txcsum() falls back to skbchecksumhelp() for unsupported tunnel packets, the skb may be linearized. Continuing to build the TX descriptor with the stale fragment count leads to a descriptor mismatch, which can trigger out-of-bounds DMA reads or IOMMU faults.
Furthermore, the old code ignored the return value of skbchecksumhelp(), transmitting corrupted packets with incomplete checksums upon failure.
Fix this by: 1. Moving the hinic3txoffload() call before calculating 'numsge' to ensure the correct fragment count is used if the SKB is linearized. 2. Propagating skbchecksumhelp() errors and returning HINIC3TXOFFLOADINVALID to properly drop the skb.
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
ubuntu/linux-hwe-7.0to a version that resolves this vulnerability.Fixed in 7.0.0-42.42~24.04.1 - Upgrade
Upgrade
ubuntu/linux-riscv-7.0to a version that resolves this vulnerability.Fixed in 7.0.0-42.42.1~24.04.1 - Upgrade
Upgrade
ubuntu/linuxto a version that resolves this vulnerability.Fixed in 7.0.0-42.42 - Upgrade
Upgrade
ubuntu/linux-awsto a version that resolves this vulnerability.Fixed in 7.0.0-1016.17 - Upgrade
Upgrade
ubuntu/linux-gcpto a version that resolves this vulnerability.Fixed in 7.0.0-1016.18 - Upgrade
Upgrade
ubuntu/linux-ibmto a version that resolves this vulnerability.Fixed in 7.0.0-1017.17 - Upgrade
Upgrade
ubuntu/linux-oem-7.0to a version that resolves this vulnerability.Fixed in 7.0.0-1017.17 - Upgrade
Upgrade
ubuntu/linux-oracleto a version that resolves this vulnerability.Fixed in 7.0.0-1015.16 - Upgrade
Upgrade
ubuntu/linux-riscvto a version that resolves this vulnerability.Fixed in 7.0.0-42.42.1 - Compensating control
In hinic3_send_one_skb(), call hinic3_tx_offload() before calculating num_sge so the fragment count is calculated after any SKB linearization.
- Compensating control
Propagate skb_checksum_help() errors from hinic3_tx_csum() and return HINIC3_TX_OFFLOAD_INVALID so the skb is dropped instead of transmitting a packet with an incomplete checksum.
Event History
Frequently Asked Questions
Which packets can reach the affected path?
The issue is reached when hinic3 transmit checksum handling falls back to skb_checksum_help() for unsupported tunnel packets. That fallback can linearize the skb after the driver has cached its fragment count.
What are the observable consequences of the stale descriptor state?
A transmit descriptor built with the stale fragment count can mismatch the linearized skb, potentially causing out-of-bounds DMA reads or IOMMU faults. If skb_checksum_help() fails, the prior behavior could also transmit a packet with an incomplete checksum.