root/arch/x86/um/mem_32.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. gate_vma_init
  2. get_gate_vma
  3. in_gate_area_no_mm
  4. in_gate_area

   1 // SPDX-License-Identifier: GPL-2.0-only
   2 /*
   3  * Copyright (C) 2011 Richard Weinberger <richrd@nod.at>
   4  */
   5 
   6 #include <linux/mm.h>
   7 #include <asm/elf.h>
   8 
   9 static struct vm_area_struct gate_vma;
  10 
  11 static int __init gate_vma_init(void)
  12 {
  13         if (!FIXADDR_USER_START)
  14                 return 0;
  15 
  16         vma_init(&gate_vma, NULL);
  17         gate_vma.vm_start = FIXADDR_USER_START;
  18         gate_vma.vm_end = FIXADDR_USER_END;
  19         gate_vma.vm_flags = VM_READ | VM_MAYREAD | VM_EXEC | VM_MAYEXEC;
  20         gate_vma.vm_page_prot = __P101;
  21 
  22         return 0;
  23 }
  24 __initcall(gate_vma_init);
  25 
  26 struct vm_area_struct *get_gate_vma(struct mm_struct *mm)
  27 {
  28         return FIXADDR_USER_START ? &gate_vma : NULL;
  29 }
  30 
  31 int in_gate_area_no_mm(unsigned long addr)
  32 {
  33         if (!FIXADDR_USER_START)
  34                 return 0;
  35 
  36         if ((addr >= FIXADDR_USER_START) && (addr < FIXADDR_USER_END))
  37                 return 1;
  38 
  39         return 0;
  40 }
  41 
  42 int in_gate_area(struct mm_struct *mm, unsigned long addr)
  43 {
  44         struct vm_area_struct *vma = get_gate_vma(mm);
  45 
  46         if (!vma)
  47                 return 0;
  48 
  49         return (addr >= vma->vm_start) && (addr < vma->vm_end);
  50 }

/* [<][>][^][v][top][bottom][index][help] */