diff options
-rw-r--r-- | drivers/md/dm-crypt.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/md/dm-crypt.c b/drivers/md/dm-crypt.c index 7c6c57216bf2..8a9f742d8ed7 100644 --- a/drivers/md/dm-crypt.c +++ b/drivers/md/dm-crypt.c | |||
@@ -1534,18 +1534,18 @@ static int crypt_set_keyring_key(struct crypt_config *cc, const char *key_string | |||
1534 | return PTR_ERR(key); | 1534 | return PTR_ERR(key); |
1535 | } | 1535 | } |
1536 | 1536 | ||
1537 | rcu_read_lock(); | 1537 | down_read(&key->sem); |
1538 | 1538 | ||
1539 | ukp = user_key_payload(key); | 1539 | ukp = user_key_payload(key); |
1540 | if (!ukp) { | 1540 | if (!ukp) { |
1541 | rcu_read_unlock(); | 1541 | up_read(&key->sem); |
1542 | key_put(key); | 1542 | key_put(key); |
1543 | kzfree(new_key_string); | 1543 | kzfree(new_key_string); |
1544 | return -EKEYREVOKED; | 1544 | return -EKEYREVOKED; |
1545 | } | 1545 | } |
1546 | 1546 | ||
1547 | if (cc->key_size != ukp->datalen) { | 1547 | if (cc->key_size != ukp->datalen) { |
1548 | rcu_read_unlock(); | 1548 | up_read(&key->sem); |
1549 | key_put(key); | 1549 | key_put(key); |
1550 | kzfree(new_key_string); | 1550 | kzfree(new_key_string); |
1551 | return -EINVAL; | 1551 | return -EINVAL; |
@@ -1553,7 +1553,7 @@ static int crypt_set_keyring_key(struct crypt_config *cc, const char *key_string | |||
1553 | 1553 | ||
1554 | memcpy(cc->key, ukp->data, cc->key_size); | 1554 | memcpy(cc->key, ukp->data, cc->key_size); |
1555 | 1555 | ||
1556 | rcu_read_unlock(); | 1556 | up_read(&key->sem); |
1557 | key_put(key); | 1557 | key_put(key); |
1558 | 1558 | ||
1559 | /* clear the flag since following operations may invalidate previously valid key */ | 1559 | /* clear the flag since following operations may invalidate previously valid key */ |