static int apply_mm_seal ( unsigned long start , unsigned long end ) { // ... nstart = start ; for_each_vma_range ( vmi , vma , end ) { int error ; unsigned long tmp ; vm_flags_t newflags ; newflags = vma -> vm_flags | VM_SEALED ; tmp = vma -> vm_end ; if ( tmp > end ) tmp = end ; error = mseal_fixup ( vmi , vma , & prev , nstart , tmp , newflags ); if ( error ) return error ; nstart = vma_iter_end ( & vmi ); } return 0 ; } #include <sys/syscall.h> #include <unistd.h> #define MSEAL_SYSCALL 462 long mseal ( unsigned long start , size_t len ) { int page_size ; uintptr_t page_aligned_start ; /* how large a page should be on our system (default: 4096 bytes) */ page_size = getpagesize (); /* page align the VMA range we want to seal */ page_aligned_start = start & ~ ( page_size - 1 ); return…