mirror of
https://github.com/torvalds/linux
synced 2024-10-03 18:00:50 +00:00
dm-crypt: Use common error handling code in crypt_set_keyring_key()
Add a jump target so that a bit of exception handling can be better reused at the end of this function implementation. Signed-off-by: Markus Elfring <elfring@users.sourceforge.net> Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
This commit is contained in:
parent
c5391c0e04
commit
5d49054ef6
|
@ -2614,32 +2614,31 @@ static int crypt_set_keyring_key(struct crypt_config *cc, const char *key_string
|
||||||
|
|
||||||
key = request_key(type, key_desc + 1, NULL);
|
key = request_key(type, key_desc + 1, NULL);
|
||||||
if (IS_ERR(key)) {
|
if (IS_ERR(key)) {
|
||||||
kfree_sensitive(new_key_string);
|
ret = PTR_ERR(key);
|
||||||
return PTR_ERR(key);
|
goto free_new_key_string;
|
||||||
}
|
}
|
||||||
|
|
||||||
down_read(&key->sem);
|
down_read(&key->sem);
|
||||||
|
|
||||||
ret = set_key(cc, key);
|
ret = set_key(cc, key);
|
||||||
up_read(&key->sem);
|
up_read(&key->sem);
|
||||||
key_put(key);
|
key_put(key);
|
||||||
if (ret < 0) {
|
if (ret < 0)
|
||||||
kfree_sensitive(new_key_string);
|
goto free_new_key_string;
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* clear the flag since following operations may invalidate previously valid key */
|
/* clear the flag since following operations may invalidate previously valid key */
|
||||||
clear_bit(DM_CRYPT_KEY_VALID, &cc->flags);
|
clear_bit(DM_CRYPT_KEY_VALID, &cc->flags);
|
||||||
|
|
||||||
ret = crypt_setkey(cc);
|
ret = crypt_setkey(cc);
|
||||||
|
if (ret)
|
||||||
|
goto free_new_key_string;
|
||||||
|
|
||||||
if (!ret) {
|
set_bit(DM_CRYPT_KEY_VALID, &cc->flags);
|
||||||
set_bit(DM_CRYPT_KEY_VALID, &cc->flags);
|
kfree_sensitive(cc->key_string);
|
||||||
kfree_sensitive(cc->key_string);
|
cc->key_string = new_key_string;
|
||||||
cc->key_string = new_key_string;
|
return 0;
|
||||||
} else
|
|
||||||
kfree_sensitive(new_key_string);
|
|
||||||
|
|
||||||
|
free_new_key_string:
|
||||||
|
kfree_sensitive(new_key_string);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue