Forum | Documentation | Website | Blog

Skip to content
Snippets Groups Projects
  • Daniel Jordan's avatar
    crypto: pcrypt - Delay write to padata->info · 68b6dea8
    Daniel Jordan authored
    These three events can race when pcrypt is used multiple times in a
    template ("pcrypt(pcrypt(...))"):
    
      1.  [taskA] The caller makes the crypto request via crypto_aead_encrypt()
      2.  [kworkerB] padata serializes the inner pcrypt request
      3.  [kworkerC] padata serializes the outer pcrypt request
    
    3 might finish before the call to crypto_aead_encrypt() returns in 1,
    resulting in two possible issues.
    
    First, a use-after-free of the crypto request's memory when, for
    example, taskA writes to the outer pcrypt request's padata->info in
    pcrypt_aead_enc() after kworkerC completes the request.
    
    Second, the outer pcrypt request overwrites the inner pcrypt request's
    return code with -EINPROGRESS, making a successful request appear to
    fail.  For instance, kworkerB writes the outer pcrypt request's
    padata->info in pcrypt_aead_done() and then taskA overwrites it
    in pcrypt_aead_enc().
    
    Avoid both situations by delaying the write of padata->info until after
    the inner crypto request's return code is checked.  This prevents the
    use-after-free by not touching the crypto request's memory after the
    next-inner crypto request is made, and stops padata->info from being
    overwritten.
    
    Fixes: 5068c7a8
    
     ("crypto: pcrypt - Add pcrypt crypto parallelization wrapper")
    Reported-by: default avatar <syzbot+b187b77c8474f9648fae@syzkaller.appspotmail.com>
    Signed-off-by: default avatarDaniel Jordan <daniel.m.jordan@oracle.com>
    Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
    68b6dea8
Forked from BeagleBoard.org / Linux
Source project has a limited visibility.