On Sat, 2016-10-15 at 18:16 +0100, Ard Biesheuvel wrote:
The CCM code goes out of its way to perform the CTR encryption of the
MAC using the subordinate CTR driver. To this end, it tweaks the
input and output scatterlists so the aead_req 'odata' and/or
'auth_tag' fields [which may live on the stack] are prepended to the
CTR payload. This involves calling sg_set_buf() on addresses which
are not direct mapped, which is not supported.
Since the calculation of the MAC keystream involves a single call
into the cipher, to which we have a handle already given that the
CBC-MAC calculation uses it as well, just calculate the MAC keystream
directly, and record it in the aead_req private context so we can
apply it to the MAC in cypto_ccm_auth_mac(). This greatly simplifies
the scatterlist manipulation, and no longer requires scatterlists to
refer to buffers that may live on the stack.
No objection from me, Herbert?
I'm getting a bit nervous though - I'd rather have any fix first so
people get things working again - so maybe I'll apply your other patch
and mine first, and then we can replace yours by this later.
johannes