diff options
author | Ondrej Kozina <okozina@redhat.com> | 2016-11-02 10:02:08 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2017-01-06 04:40:15 -0500 |
commit | 2c017f77e13d4325d8739fc9ed7ed2c3629da845 (patch) | |
tree | 697c1a3693b67a3ee43304a5e843aedecacefbdf /drivers/md | |
parent | 3fae2a9e994b41603dbe1a5f32503cf558cf77f7 (diff) |
dm crypt: mark key as invalid until properly loaded
commit 265e9098bac02bc5e36cda21fdbad34cb5b2f48d upstream.
In crypt_set_key(), if a failure occurs while replacing the old key
(e.g. tfm->setkey() fails) the key must not have DM_CRYPT_KEY_VALID flag
set. Otherwise, the crypto layer would have an invalid key that still
has DM_CRYPT_KEY_VALID flag set.
Signed-off-by: Ondrej Kozina <okozina@redhat.com>
Reviewed-by: Mikulas Patocka <mpatocka@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/md')
-rw-r--r-- | drivers/md/dm-crypt.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/md/dm-crypt.c b/drivers/md/dm-crypt.c index a2768835d394..0aedd0ebccec 100644 --- a/drivers/md/dm-crypt.c +++ b/drivers/md/dm-crypt.c | |||
@@ -1503,12 +1503,15 @@ static int crypt_set_key(struct crypt_config *cc, char *key) | |||
1503 | if (!cc->key_size && strcmp(key, "-")) | 1503 | if (!cc->key_size && strcmp(key, "-")) |
1504 | goto out; | 1504 | goto out; |
1505 | 1505 | ||
1506 | /* clear the flag since following operations may invalidate previously valid key */ | ||
1507 | clear_bit(DM_CRYPT_KEY_VALID, &cc->flags); | ||
1508 | |||
1506 | if (cc->key_size && crypt_decode_key(cc->key, key, cc->key_size) < 0) | 1509 | if (cc->key_size && crypt_decode_key(cc->key, key, cc->key_size) < 0) |
1507 | goto out; | 1510 | goto out; |
1508 | 1511 | ||
1509 | set_bit(DM_CRYPT_KEY_VALID, &cc->flags); | ||
1510 | |||
1511 | r = crypt_setkey_allcpus(cc); | 1512 | r = crypt_setkey_allcpus(cc); |
1513 | if (!r) | ||
1514 | set_bit(DM_CRYPT_KEY_VALID, &cc->flags); | ||
1512 | 1515 | ||
1513 | out: | 1516 | out: |
1514 | /* Hex key string not needed after here, so wipe it. */ | 1517 | /* Hex key string not needed after here, so wipe it. */ |