Function report |
Source Code:mm\mprotect.c |
Create Date:2022-07-28 14:52:24 |
Last Modify:2020-03-12 14:18:49 | Copyright©Brick |
home page | Tree |
Annotation kernel can get tool activity | Download SCCT | Chinese |
Name:pkey==-1 when doing a legacy mprotect()
Proto:static int do_mprotect_pkey(unsigned long start, size_t len, unsigned long prot, int pkey)
Type:int
Parameter:
Type | Parameter | Name |
---|---|---|
unsigned long | start | |
size_t | len | |
unsigned long | prot | |
int | pkey |
492 | grows = prot & (mprotect flag: extend change to start of growsdown vma | mprotect flag: extend change to end of growsup vma ) |
493 | rier = personality & READ_IMPLIES_EXEC && prot & page can be read |
498 | prot &= ~(mprotect flag: extend change to start of growsdown vma | mprotect flag: extend change to end of growsup vma ) |
499 | If grows == (mprotect flag: extend change to start of growsdown vma | mprotect flag: extend change to end of growsup vma ) Then Return -EINVAL |
504 | If Not len Then Return 0 |
510 | If Not This is called from mprotect(). PROT_GROWSDOWN and PROT_GROWSUP have* already been masked out.* Returns true if the prot flags are valid Then Return -EINVAL |
515 | If lock for writing Then Return -EINTR |
523 | If pkey != -1 && Not mm_pkey_is_allocated(mm, pkey) Then Go to out |
532 | If Our start address within vm_mm. >= end Then Go to out |
536 | If Not (Flags, see mm.h. & general info on the segment ) Then Go to out |
538 | Else |
539 | If Our start address within vm_mm. > start Then Go to out |
544 | If Not (Flags, see mm.h. & VM_GROWSUP) Then Go to out |
548 | If start > Our start address within vm_mm. Then prev = vma |
551 | cycle |
559 | If rier && Flags, see mm.h. & VM_MAYEXEC Then prot |= page can be executed |
570 | new_vma_pkey = arch_override_mprotect_pkey(vma, prot, pkey) |
572 | newflags |= Flags, see mm.h. & ~mask_off_old_flags |
575 | If newflags & ~(newflags >> 4) & ( currently active flags | VM_WRITE | VM_EXEC) Then |
580 | error = security_file_mprotect(vma, reqprot, prot) |
592 | If nstart < The first byte after our end addresswithin vm_mm. Then nstart = The first byte after our end addresswithin vm_mm. |
598 | If Not vma || Our start address within vm_mm. != nstart Then |
604 | out : |
606 | Return error |
Name | Describe |
---|---|
SYSCALL_DEFINE3 |
Source code conversion tool public plug-in interface | X |
---|---|
Support c/c++/esqlc/java Oracle/Informix/Mysql Plug-in can realize: logical Report Code generation and batch code conversion |