Thread (4 messages) 4 messages, 2 authors, 2017-01-09

Re: Is the asynchronous hash crypto API asynchronous?

flat view

From: Gilad Ben-Yossef <gilad@benyossef.com>
Date: 2017-01-09 12:08:25

Hello Stephen,

Before getting to business I wish to offer my thanks for hosting the
kernel crypto documentation on your web site at chronox.de. It has
proven very useful to me :-)

On Mon, Jan 9, 2017 at 12:23 PM, Stephan Müller [off-list ref] wrote:
Am Sonntag, 8. Januar 2017, 15:45:37 CET schrieb Gilad Ben-Yossef:

Hi Gilad,
quoted
        ahash_request_set_callback(req, 0, NULL, NULL);
quoted
Would anyone be kind enough to enlighten me?
The documentation got out of sync with the real world. I will file a patch for
that shortly.

The ahash API works identically to the async skcipher API for which you find
an example in the api-samples.rst. There you see that with the set_callback, a
function is registered that is triggered upon completion of the operation.

Thus, use the callback example you find for skcipher for your ahash operation
and you get an async operation.
Thank you very much for pointing out the skcipher example. It is very helpful.

However, I suspect there is something a miss here beyond documentation:

There is (quite a lot of) kernel code calling
ahash_request_set_callback() with a NULL callback and consequently not
performing any synchronization in the completion of the hashing
operations.

See for example crypt_iv_essiv_init() in drivers/md/dm-crypt.c
Other similar call sites can be found at block/drbd/drbd_worker.c,
net/ppp/ppp_mppe.c, net/wireless/intersil/orinoco/mic.c,
scsi/iscsi_tcp.c, target/iscsi/iscsi_target_login.c

As far as I could tell the code in crypto/ahash.c does not take any
special consideration of the case where a NULL call back function has
been set and at least one of the underlying ahash algorithm provider
will crash if used like this.

This seems broken to me. I would be very happy to offer to fix the
broken call sites, if you can only confirm my understanding that
indeed cases which register a NULL callback are broken and it is not
just a misunderstanding on my part.

Many thanks,
Gilad


-- 
Gilad Ben-Yossef
Chief Coffee Drinker

"If you take a class in large-scale robotics, can you end up in a
situation where the homework eats your dog?"
 -- Jean-Baptiste Queru
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help