Re: [PATCH 0/8] eMMC inline encryption support

Eric Biggers
2020-11-20T19:44:52Z

Hi Adrian,

On Fri, Nov 20, 2020 at 09:29:59PM +0200, Adrian Hunter wrote:
> I haven't had a chance to look at it properly, but I do have a couple of
> dumb questions. How do you ensure the host controller is not runtime
> suspended when the key is programmed?

This is handled by the block layer, in block/keyslot-manager.c. It ensures that
the device is resumed before calling blk_ksm_ll_ops::keyslot_program() or
blk_ksm_ll_ops::keyslot_evict(). See blk_ksm_hw_enter().

> Are the keys lost when the host controller is reset, and then how do you know
> the host controller does not get reset after the key is programmed but before
> the I/O is submitted?

As with UFS, keys might be lost when the host controller is reset, so we're
reprogramming all the keys when that happens. See patch 1:

mmc_set_initial_state()
mmc_crypto_set_initial_state()
blk_ksm_reprogram_all_keys()

(That's the intent, at least. For MMC, I'm not sure if resets were properly
covered by the testing I've done so far. But the code looks right to me.)

- Eric