summaryrefslogtreecommitdiff
path: root/kernel/crash_dump_dm_crypt.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/crash_dump_dm_crypt.c')
-rw-r--r--kernel/crash_dump_dm_crypt.c22
1 files changed, 13 insertions, 9 deletions
diff --git a/kernel/crash_dump_dm_crypt.c b/kernel/crash_dump_dm_crypt.c
index a20d4097744a..cb875ddb6ba6 100644
--- a/kernel/crash_dump_dm_crypt.c
+++ b/kernel/crash_dump_dm_crypt.c
@@ -6,6 +6,7 @@
#include <linux/cc_platform.h>
#include <linux/configfs.h>
#include <linux/module.h>
+#include <linux/sysfs.h>
#define KEY_NUM_MAX 128 /* maximum dm crypt keys */
#define KEY_SIZE_MAX 256 /* maximum dm crypt key size */
@@ -115,7 +116,7 @@ static int restore_dm_crypt_keys_to_thread_keyring(void)
addr = dm_crypt_keys_addr;
dm_crypt_keys_read((char *)&key_count, sizeof(key_count), &addr);
- if (key_count < 0 || key_count > KEY_NUM_MAX) {
+ if (key_count > KEY_NUM_MAX) {
kexec_dprintk("Failed to read the number of dm-crypt keys\n");
return -1;
}
@@ -139,7 +140,7 @@ static int restore_dm_crypt_keys_to_thread_keyring(void)
return 0;
}
-static int read_key_from_user_keying(struct dm_crypt_key *dm_key)
+static int read_key_from_user_keyring(struct dm_crypt_key *dm_key)
{
const struct user_key_payload *ukp;
struct key *key;
@@ -189,7 +190,7 @@ static inline struct config_key *to_config_key(struct config_item *item)
static ssize_t config_key_description_show(struct config_item *item, char *page)
{
- return sprintf(page, "%s\n", to_config_key(item)->description);
+ return sysfs_emit(page, "%s\n", to_config_key(item)->description);
}
static ssize_t config_key_description_store(struct config_item *item,
@@ -265,7 +266,7 @@ static struct config_item *config_keys_make_item(struct config_group *group,
static ssize_t config_keys_count_show(struct config_item *item, char *page)
{
- return sprintf(page, "%d\n", key_count);
+ return sysfs_emit(page, "%d\n", key_count);
}
CONFIGFS_ATTR_RO(config_keys_, count);
@@ -274,7 +275,7 @@ static bool is_dm_key_reused;
static ssize_t config_keys_reuse_show(struct config_item *item, char *page)
{
- return sprintf(page, "%d\n", is_dm_key_reused);
+ return sysfs_emit(page, "%d\n", is_dm_key_reused);
}
static ssize_t config_keys_reuse_store(struct config_item *item,
@@ -321,7 +322,7 @@ static bool restore;
static ssize_t config_keys_restore_show(struct config_item *item, char *page)
{
- return sprintf(page, "%d\n", restore);
+ return sysfs_emit(page, "%d\n", restore);
}
static ssize_t config_keys_restore_store(struct config_item *item,
@@ -387,7 +388,7 @@ static int build_keys_header(void)
strscpy(keys_header->keys[i].key_desc, key->description,
KEY_DESC_MAX_LEN);
- r = read_key_from_user_keying(&keys_header->keys[i]);
+ r = read_key_from_user_keyring(&keys_header->keys[i]);
if (r != 0) {
kexec_dprintk("Failed to read key %s\n",
keys_header->keys[i].key_desc);
@@ -414,14 +415,16 @@ int crash_load_dm_crypt_keys(struct kimage *image)
if (key_count <= 0) {
kexec_dprintk("No dm-crypt keys\n");
- return -ENOENT;
+ return 0;
}
if (!is_dm_key_reused) {
image->dm_crypt_keys_addr = 0;
r = build_keys_header();
- if (r)
+ if (r) {
+ pr_err("Failed to build dm-crypt keys header, ret=%d\n", r);
return r;
+ }
}
kbuf.buffer = keys_header;
@@ -432,6 +435,7 @@ int crash_load_dm_crypt_keys(struct kimage *image)
kbuf.mem = KEXEC_BUF_MEM_UNKNOWN;
r = kexec_add_buffer(&kbuf);
if (r) {
+ pr_err("Failed to call kexec_add_buffer, ret=%d\n", r);
kvfree((void *)kbuf.buffer);
return r;
}