lkml.org 
[lkml]   [2022]   [Jun]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.17 50/75] dm crypt: make printing of the key constant-time
    Date
    From: Mikulas Patocka <mpatocka@redhat.com>

    commit 567dd8f34560fa221a6343729474536aa7ede4fd upstream.

    The device mapper dm-crypt target is using scnprintf("%02x", cc->key[i]) to
    report the current key to userspace. However, this is not a constant-time
    operation and it may leak information about the key via timing, via cache
    access patterns or via the branch predictor.

    Change dm-crypt's key printing to use "%c" instead of "%02x". Also
    introduce hex2asc() that carefully avoids any branching or memory
    accesses when converting a number in the range 0 ... 15 to an ascii
    character.

    Cc: stable@vger.kernel.org
    Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
    Tested-by: Milan Broz <gmazyland@gmail.com>
    Signed-off-by: Mike Snitzer <snitzer@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/md/dm-crypt.c | 14 +++++++++++---
    1 file changed, 11 insertions(+), 3 deletions(-)

    --- a/drivers/md/dm-crypt.c
    +++ b/drivers/md/dm-crypt.c
    @@ -3449,6 +3449,11 @@ static int crypt_map(struct dm_target *t
    return DM_MAPIO_SUBMITTED;
    }

    +static char hex2asc(unsigned char c)
    +{
    + return c + '0' + ((unsigned)(9 - c) >> 4 & 0x27);
    +}
    +
    static void crypt_status(struct dm_target *ti, status_type_t type,
    unsigned status_flags, char *result, unsigned maxlen)
    {
    @@ -3467,9 +3472,12 @@ static void crypt_status(struct dm_targe
    if (cc->key_size > 0) {
    if (cc->key_string)
    DMEMIT(":%u:%s", cc->key_size, cc->key_string);
    - else
    - for (i = 0; i < cc->key_size; i++)
    - DMEMIT("%02x", cc->key[i]);
    + else {
    + for (i = 0; i < cc->key_size; i++) {
    + DMEMIT("%c%c", hex2asc(cc->key[i] >> 4),
    + hex2asc(cc->key[i] & 0xf));
    + }
    + }
    } else
    DMEMIT("-");


    \
     
     \ /
      Last update: 2022-06-03 20:12    [W:4.126 / U:0.028 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site