Thread (9 messages) 9 messages, 4 authors, 2018-08-30

Re: Locking for HW crypto accelerators

From: Krzysztof Kozlowski <krzk@kernel.org>
Date: 2018-08-30 13:54:36
Also in: linux-crypto

On Thu, 30 Aug 2018 at 15:19, Stephan Mueller [off-list ref] wrote:
Am Donnerstag, 30. August 2018, 15:09:05 CEST schrieb Krzysztof Kozlowski:

Hi Krzysztof,
quoted
Thanks Stephan for hints. Let's assume the each of init, update and
final are atomic... but how about the relation between update and
final? I have two concurrent users in user-space but only one HW:

Process A:             Process B:
init() and set_key()
                       init() and different key
update(some_data)
                       update(different_data)
final()
                       final()

The final() from process A will now produce the result of hashing/CRC
of some_data and different_data (and even maybe mixed with init() for
different key). All because in the meantime process B added its own
data to the HW.
The question is where is the state of the cipher operation kept that is
produced with each of the init/update/final calls. Your answer implies that
this state is kept in hardware.
Yes, that's correct. The HW once initialized to specific CRC
parameters (size, polynomial, initial value), will operate on this
till another init happens.
But commonly the state is kept in software. Look at ahash_request for example,
the __ctx pointer is intended to point to the memory the driver needs to store
its state.

Pick a random driver implementation and search for ahash_request_ctx, for
example.
I see now some drivers are indeed saving and restoring state.

Thanks!

Best regards,
Krzysztof
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help