MCPcopy Create free account
hub / github.com/F-Stack/f-stack / kern_mprotect

Function kern_mprotect

freebsd/vm/vm_mmap.c:650–693  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

648}
649
650int
651kern_mprotect(struct thread *td, uintptr_t addr0, size_t size, int prot)
652{
653 vm_offset_t addr;
654 vm_size_t pageoff;
655 int vm_error, max_prot;
656 int flags;
657
658 addr = addr0;
659 if ((prot & ~(_PROT_ALL | PROT_MAX(_PROT_ALL))) != 0)
660 return (EINVAL);
661 max_prot = PROT_MAX_EXTRACT(prot);
662 prot = PROT_EXTRACT(prot);
663 pageoff = (addr & PAGE_MASK);
664 addr -= pageoff;
665 size += pageoff;
666 size = (vm_size_t) round_page(size);
667#ifdef COMPAT_FREEBSD32
668 if (SV_PROC_FLAG(td->td_proc, SV_ILP32)) {
669 if (((addr + size) & 0xffffffff) < addr)
670 return (EINVAL);
671 } else
672#endif
673 if (addr + size < addr)
674 return (EINVAL);
675
676 flags = VM_MAP_PROTECT_SET_PROT;
677 if (max_prot != 0)
678 flags |= VM_MAP_PROTECT_SET_MAXPROT;
679 vm_error = vm_map_protect(&td->td_proc->p_vmspace->vm_map,
680 addr, addr + size, prot, max_prot, flags);
681
682 switch (vm_error) {
683 case KERN_SUCCESS:
684 return (0);
685 case KERN_PROTECTION_FAILURE:
686 return (EACCES);
687 case KERN_RESOURCE_SHORTAGE:
688 return (ENOMEM);
689 case KERN_OUT_OF_BOUNDS:
690 return (ENOTSUP);
691 }
692 return (EINVAL);
693}
694
695#ifndef _SYS_SYSPROTO_H_
696struct minherit_args {

Callers 1

sys_mprotectFunction · 0.85

Calls 1

vm_map_protectFunction · 0.85

Tested by

no test coverage detected