ANDROID: vendor hooks: Encrypt snapshot for bootloader based hibernation
Add encryption support to bootloader based hibernation. This will encrypt the hibernation snapshot image before it is written to the swap partition. Bug: 279879797 Change-Id: I07046ad7fb848fc62258871ab41b3e03246c40dc Signed-off-by: Shreyas K K <quic_shrekk@quicinc.com>
This commit is contained in:
parent
defdc4d1dd
commit
154b4b9f1a
3 changed files with 30 additions and 3 deletions
|
|
@ -297,3 +297,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_ctl_dirty_rate);
|
|||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_check_hibernation_swap);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_save_cpu_resume);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_save_hib_resume_bdev);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_encrypt_page);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_init_aes_encrypt);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_skip_swap_map_write);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_post_image_save);
|
||||
|
|
|
|||
|
|
@ -23,6 +23,22 @@ DECLARE_HOOK(android_vh_save_hib_resume_bdev,
|
|||
TP_PROTO(struct block_device *hib_resume_bdev),
|
||||
TP_ARGS(hib_resume_bdev));
|
||||
|
||||
DECLARE_HOOK(android_vh_encrypt_page,
|
||||
TP_PROTO(void *buf),
|
||||
TP_ARGS(buf));
|
||||
|
||||
DECLARE_HOOK(android_vh_init_aes_encrypt,
|
||||
TP_PROTO(void *unused),
|
||||
TP_ARGS(unused));
|
||||
|
||||
DECLARE_HOOK(android_vh_skip_swap_map_write,
|
||||
TP_PROTO(bool *skip),
|
||||
TP_ARGS(skip));
|
||||
|
||||
DECLARE_HOOK(android_vh_post_image_save,
|
||||
TP_PROTO(unsigned short root_swap),
|
||||
TP_ARGS(root_swap));
|
||||
|
||||
#endif /* _TRACE_HOOK_BL_HIB_H */
|
||||
/* This part must be outside protection */
|
||||
#include <trace/define_trace.h>
|
||||
|
|
|
|||
|
|
@ -454,6 +454,7 @@ static int swap_write_page(struct swap_map_handle *handle, void *buf,
|
|||
{
|
||||
int error = 0;
|
||||
sector_t offset;
|
||||
bool skip = false;
|
||||
|
||||
if (!handle->cur)
|
||||
return -EINVAL;
|
||||
|
|
@ -467,9 +468,12 @@ static int swap_write_page(struct swap_map_handle *handle, void *buf,
|
|||
if (!offset)
|
||||
return -ENOSPC;
|
||||
handle->cur->next_swap = offset;
|
||||
error = write_page(handle->cur, handle->cur_swap, hb);
|
||||
if (error)
|
||||
goto out;
|
||||
trace_android_vh_skip_swap_map_write(&skip);
|
||||
if (!skip) {
|
||||
error = write_page(handle->cur, handle->cur_swap, hb);
|
||||
if (error)
|
||||
goto out;
|
||||
}
|
||||
clear_page(handle->cur);
|
||||
handle->cur_swap = offset;
|
||||
handle->k = 0;
|
||||
|
|
@ -564,6 +568,7 @@ static int save_image(struct swap_map_handle *handle,
|
|||
ret = snapshot_read_next(snapshot);
|
||||
if (ret <= 0)
|
||||
break;
|
||||
trace_android_vh_encrypt_page(data_of(*snapshot));
|
||||
ret = swap_write_page(handle, data_of(*snapshot), &hb);
|
||||
if (ret)
|
||||
break;
|
||||
|
|
@ -580,6 +585,7 @@ static int save_image(struct swap_map_handle *handle,
|
|||
if (!ret)
|
||||
pr_info("Image saving done\n");
|
||||
swsusp_show_speed(start, stop, nr_to_write, "Wrote");
|
||||
trace_android_vh_post_image_save(root_swap);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
@ -923,6 +929,7 @@ int swsusp_write(unsigned int flags)
|
|||
pr_err("Cannot get swap writer\n");
|
||||
return error;
|
||||
}
|
||||
trace_android_vh_init_aes_encrypt(NULL);
|
||||
if (flags & SF_NOCOMPRESS_MODE) {
|
||||
if (!enough_swap(pages)) {
|
||||
pr_err("Not enough free swap\n");
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue