mirror of
https://github.com/nxp-imx/linux-imx.git
synced 2025-07-08 10:25:20 +02:00
ANDROID: vendor_hooks: Add vendor hook for GenieZone demand paging
Add Android kernel vendor hooks before and after VM demand paging to enable calls to vendor modules for memory protection. This enhancement ensures that memory protection mechanisms are properly invoked during the demand paging process, improving the overall security and stability of the system. This feature is particularly important for systems that rely on multiple IOMMU components to manage memory protection, ensuring that all necessary preparation are properly applied during the demand paging process. Bug: 367160986 Signed-off-by: Willix Yeh <chi-shen.yeh@mediatek.com> Signed-off-by: Liju Chen <liju-clr.chen@mediatek.com> Change-Id: I7e8b441ebcb030950960fcb39137fdcf3c18977c
This commit is contained in:
parent
72c0d01fd0
commit
ab4754de1c
|
@ -291,6 +291,9 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_do_el1_fpac);
|
|||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_handle_bad_stack);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_panic_unhandled);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_gzvm_vcpu_exit_reason);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_gzvm_handle_demand_page_pre);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_gzvm_handle_demand_page_post);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_gzvm_destroy_vm_post_process);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alter_mutex_list_add);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mutex_unlock_slowpath);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mutex_unlock_slowpath_before_wakeq);
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
*/
|
||||
|
||||
#include <linux/soc/mediatek/gzvm_drv.h>
|
||||
#include <trace/hooks/gzvm.h>
|
||||
|
||||
static int cmp_ppages(struct rb_node *node, const struct rb_node *parent)
|
||||
{
|
||||
|
@ -160,10 +161,14 @@ static int handle_single_demand_page(struct gzvm *vm, int memslot_id, u64 gfn)
|
|||
if (unlikely(ret))
|
||||
return -EFAULT;
|
||||
|
||||
trace_android_vh_gzvm_handle_demand_page_pre(vm, memslot_id, pfn, gfn, 1);
|
||||
|
||||
ret = gzvm_arch_map_guest(vm->vm_id, memslot_id, pfn, gfn, 1);
|
||||
if (unlikely(ret))
|
||||
return -EFAULT;
|
||||
|
||||
trace_android_vh_gzvm_handle_demand_page_post(vm, memslot_id, pfn, gfn, 1);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -200,6 +205,8 @@ static int handle_block_demand_page(struct gzvm *vm, int memslot_id, u64 gfn)
|
|||
vm->demand_page_buffer[i] = pfn;
|
||||
}
|
||||
|
||||
trace_android_vh_gzvm_handle_demand_page_pre(vm, memslot_id, 0, gfn, nr_entries);
|
||||
|
||||
ret = gzvm_arch_map_guest_block(vm->vm_id, memslot_id, start_gfn,
|
||||
nr_entries);
|
||||
if (unlikely(ret)) {
|
||||
|
@ -207,6 +214,8 @@ static int handle_block_demand_page(struct gzvm *vm, int memslot_id, u64 gfn)
|
|||
goto err_unlock;
|
||||
}
|
||||
|
||||
trace_android_vh_gzvm_handle_demand_page_post(vm, memslot_id, 0, gfn, nr_entries);
|
||||
|
||||
err_unlock:
|
||||
mutex_unlock(&vm->demand_paging_lock);
|
||||
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
#include <linux/slab.h>
|
||||
#include <linux/soc/mediatek/gzvm_drv.h>
|
||||
#include <linux/debugfs.h>
|
||||
#include <trace/hooks/gzvm.h>
|
||||
#include "gzvm_common.h"
|
||||
|
||||
static DEFINE_MUTEX(gzvm_list_lock);
|
||||
|
@ -375,6 +376,8 @@ static void gzvm_destroy_vm(struct gzvm *gzvm)
|
|||
|
||||
mutex_unlock(&gzvm->lock);
|
||||
|
||||
trace_android_vh_gzvm_destroy_vm_post_process(gzvm);
|
||||
|
||||
/* No need to lock here becauese it's single-threaded execution */
|
||||
gzvm_destroy_all_ppage(gzvm);
|
||||
|
||||
|
|
|
@ -6,11 +6,24 @@
|
|||
#define _TRACE_HOOK_GZVM_H
|
||||
#include <trace/hooks/vendor_hooks.h>
|
||||
struct gzvm_vcpu;
|
||||
struct gzvm;
|
||||
|
||||
DECLARE_HOOK(android_vh_gzvm_vcpu_exit_reason,
|
||||
TP_PROTO(struct gzvm_vcpu *vcpu, bool *userspace),
|
||||
TP_ARGS(vcpu, userspace));
|
||||
|
||||
DECLARE_HOOK(android_vh_gzvm_handle_demand_page_pre,
|
||||
TP_PROTO(struct gzvm *vm, int memslot_id, u64 pfn, u64 gfn, u32 nr_entries),
|
||||
TP_ARGS(vm, memslot_id, pfn, gfn, nr_entries));
|
||||
|
||||
DECLARE_HOOK(android_vh_gzvm_handle_demand_page_post,
|
||||
TP_PROTO(struct gzvm *vm, int memslot_id, u64 pfn, u64 gfn, u32 nr_entries),
|
||||
TP_ARGS(vm, memslot_id, pfn, gfn, nr_entries));
|
||||
|
||||
DECLARE_HOOK(android_vh_gzvm_destroy_vm_post_process,
|
||||
TP_PROTO(struct gzvm *vm),
|
||||
TP_ARGS(vm));
|
||||
|
||||
#endif /* _TRACE_HOOK_GZVM_H */
|
||||
/* This part must be outside protection */
|
||||
#include <trace/define_trace.h>
|
||||
|
|
Loading…
Reference in New Issue
Block a user