Page MenuHomeVyOS Platform

Intel QAT: AES-GCM ESP is never offloaded, kernel ESP path requests rfc4106(gcm(aes))
Open, NormalPublicBUG

Description

With set system acceleration qat enabled and a working QAT device, every AES-GCM ESP proposal runs entirely in software on the CPU. QAT is never invoked.
AES-CBC and AES-CCM proposals on the same box and in the same session do reach QAT normally. There is no error, no log message, and no CLI indication.

Issue

The kernel ESP layer (esp4) requests the RFC 4106 ESP wrapper, seqiv(rfc4106(gcm(aes))).
From /proc/crypto on the affected system, the only provider of the name ESP asks for:

name         : rfc4106(gcm(aes))          name         : seqiv(rfc4106(gcm(aes)))
driver       : rfc4106-gcm-aesni          driver       : seqiv(rfc4106-gcm-aesni)
module       : aesni_intel                module       : seqiv
priority     : 400                        priority     : 400

and what QAT registers instead:

name         : gcm(aes)
driver       : qat_aes_gcm
module       : intel_qat
priority     : 4001

Because aesni_intel publishes rfc4106(gcm(aes)) directly, the crypto API resolves the ESP request against it and never instantiates an RFC 4106 template over QAT's gcm(aes). QAT's priority 4001 is never compared against AES-NI's 400.
Hence, the two algorithms are not registered under the same name, so they never compete.

show system acceleration qat device qat_dev0 flows and ... interrupts stay flat through the entire GCM run and climb normally through the CBC run.

Impact

The GCM run is pinned to a single core performing crypto in softirq context, leaving a quarter of the link idle. The QAT-accelerated CBC run saturates the 1 GbE port with the CPU largely free.

Something to make note of:

intel/QAT_Engine#237 has been open since March 2023 with no response.
It predates GCM appearing in LKCF at all; the 4.24 driver now registers gcm(aes), but not under the name ESP uses, so the practical outcome is unchanged.

Details

Version
1.5.1, 1.4.5
Is it a breaking change?
Unspecified (possibly destroys the router)
Issue type
Bug (incorrect behavior)