• Herbert Xu's avatar
    crc-t10dif: Fix potential crypto notify dead-lock · 3906f640
    Herbert Xu authored
    The crypto notify call occurs with a read mutex held so you must
    not do any substantial work directly.  In particular, you cannot
    call crypto_alloc_* as they may trigger further notifications
    which may dead-lock in the presence of another writer.
    
    This patch fixes this by postponing the work into a work queue and
    taking the same lock in the module init function.
    
    While we're at it this patch also ensures that all RCU accesses are
    marked appropriately (tested with sparse).
    
    Finally this also reveals a race condition in module param show
    function as it may be called prior to the module init function.
    It's fixed by testing whether crct10dif_tfm is NULL (this is true
    iff the init function has not completed assuming fallback is false).
    
    Fixes: 11dcb103 ("crc-t10dif: Allow current transform to be...")
    Fixes: b7637754 ("crc-t10dif: Pick better transform if one...")
    Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
    Reviewed-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    Reviewed-by: default avatarEric Biggers <ebiggers@google.com>
    Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
    3906f640
crc-t10dif.c 3.51 KB