[PATCH v5 0/8] Fixes and rework for paes_s390 and phmac_s390
Harald Freudenberger <[email protected]>
| Newsgroups | org.kernel.vger.linux-s390 |
|---|---|
| Message-ID | <[email protected]> |
Fix and rework some issues around arch/s390/paes_s390.c and
arch/s390/phmac_s390.c:
- Fix skcipher_walk return code handling in paes_s390
- Add scrub of some temp buffers
- Shift from using a mutex to using a semaphore in PAES CTR
Surprisingly clang code analysis is able to deal with semaphores and
thus the shift also fixes the issue with CONTEXT_ANALYSIS enabled.
- And some more fixes related to paes and phmac (see changelog).
For more details please see patch headers.
Changelog:
v1: initial version - however, all these patches are follow up patches
from a similar patch queue for aes_s390.c
v2: - On one error path in the CTR implementation the scrubbing of a
temp buffer could be bypassed. Also checked Sashikos claim about
possible double free but this is not the case.
- All paes algorithms did not set any base.cra_flags. So now set
the ASYNC and the NO_FALLBACK flag.
- If a request is pushed to the crypto engine there is another
return code EBUSY also indicating success but the code handled
this as a failure.
- The very same was with the phmac implementation. So corrected
the return code handling there as well.
v3: - Reworked the -EBUSY handling in paes and phmac again. The
synchronous path could have emitted -EBUSY also and would have
triggered the failure handling. So map -EBUSY to -EINPROGRESS.
v4: - Mapping EBUSY to EINPROGRESS is not the right approach. So
reworked again more thoroughly.
- There came another reply from Sashiko about a possible double
processing maybe even double free as a result of wrongly
returning a failure code in the callback functions back to the
engine when a request has been completed. The callback must
return 0 - so another patch for this.
v5: - Sashiko found a potential for a deadlock with phmac where a
persistent key conversion failure results in an -EBUSY which is
as such written into the request. However, -EBUSY is swallowed
by the engine layer and thus the calling process never gets it's
callback invoked and may wait forever. So map -EBUSY to -EIO in
the conversion function when there is a persistent inability to
convert a key - in the end this is an IO failure.
Harald Freudenberger (8):
s390/crypto: Fix return code handling at skcipher_walk_done in PAES
algorithms
s390/crypto: Fix missing scrub of temp buffers with PAES algorithm
s390/crypto: Fix use of mutex in atomic context in PAES
s390/crypto: Fix missing cra_flags in paes_s390
s390/crypto: Fix handling of EBUSY in PAES when req is pushed to
crypto engine
s390/crypto: Fix handling of EBUSY in PHMAC when req is pushed to
crypto engine
s390/crypto: Fix wrong return code to engine in asynch callbacks
s390/crypto: Map EBUSY to EIO when key conversion fails repeatedly
arch/s390/crypto/paes_s390.c | 100 +++++++++++++++++++++++-----------
arch/s390/crypto/phmac_s390.c | 36 ++++++++----
2 files changed, 95 insertions(+), 41 deletions(-)
base-commit: f5098b6bae761e346ebcd9da7f95622c04733cff
--
2.43.0