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: 260069271 Change-Id: I07046ad7fb848fc62258871ab41b3e03246c40dc Signed-off-by: Shreyas K K <quic_shrekk@quicinc.com>
This commit is contained in:
@@ -405,6 +405,10 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_save_hib_resume_bdev);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_dma_buf_stats_teardown);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_madvise_cold_or_pageout);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_cma_alloc_retry);
|
||||
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);
|
||||
|
||||
/*
|
||||
* For type visibility
|
||||
|
||||
@@ -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_S2D_H */
|
||||
/* This part must be outside protection */
|
||||
#include <trace/define_trace.h>
|
||||
|
||||
@@ -452,6 +452,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;
|
||||
@@ -465,9 +466,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;
|
||||
@@ -562,6 +566,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;
|
||||
@@ -578,6 +583,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;
|
||||
}
|
||||
|
||||
@@ -924,6 +930,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");
|
||||
|
||||
Reference in New Issue
Block a user