~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/Documentation/bpf/prog_lsm.rst

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /Documentation/bpf/prog_lsm.rst (Version linux-6.12-rc7) and /Documentation/bpf/prog_lsm.rst (Version linux-4.13.16)


  1 .. SPDX-License-Identifier: GPL-2.0+              
  2 .. Copyright (C) 2020 Google LLC.                 
  3                                                   
  4 ================                                  
  5 LSM BPF Programs                                  
  6 ================                                  
  7                                                   
  8 These BPF programs allow runtime instrumentati    
  9 users to implement system-wide MAC (Mandatory     
 10 policies using eBPF.                              
 11                                                   
 12 Structure                                         
 13 ---------                                         
 14                                                   
 15 The example shows an eBPF program that can be     
 16 LSM hook:                                         
 17                                                   
 18 .. c:function:: int file_mprotect(struct vm_ar    
 19                                                   
 20 Other LSM hooks which can be instrumented can     
 21 ``security/security.c``.                          
 22                                                   
 23 eBPF programs that use Documentation/bpf/btf.r    
 24 headers for accessing information from the att    
 25 They can simply declare the structures in the     
 26 the fields that need to be accessed.              
 27                                                   
 28 .. code-block:: c                                 
 29                                                   
 30         struct mm_struct {                        
 31                 unsigned long start_brk, brk,     
 32         } __attribute__((preserve_access_index    
 33                                                   
 34         struct vm_area_struct {                   
 35                 unsigned long start_brk, brk,     
 36                 unsigned long vm_start, vm_end    
 37                 struct mm_struct *vm_mm;          
 38         } __attribute__((preserve_access_index    
 39                                                   
 40                                                   
 41 .. note:: The order of the fields is irrelevan    
 42                                                   
 43 This can be further simplified (if one has acc    
 44 build time) by generating the ``vmlinux.h`` wi    
 45                                                   
 46 .. code-block:: console                           
 47                                                   
 48         # bpftool btf dump file <path-to-btf-v    
 49                                                   
 50 .. note:: ``path-to-btf-vmlinux`` can be ``/sy    
 51           build environment matches the enviro    
 52           deployed in.                            
 53                                                   
 54 The ``vmlinux.h`` can then simply be included     
 55 requiring the definition of the types.            
 56                                                   
 57 The eBPF programs can be declared using the``B    
 58 macros defined in `tools/lib/bpf/bpf_tracing.h    
 59 example:                                          
 60                                                   
 61         * ``"lsm/file_mprotect"`` indicates th    
 62           be attached to                          
 63         * ``mprotect_audit`` is the name of th    
 64                                                   
 65 .. code-block:: c                                 
 66                                                   
 67         SEC("lsm/file_mprotect")                  
 68         int BPF_PROG(mprotect_audit, struct vm    
 69                      unsigned long reqprot, un    
 70         {                                         
 71                 /* ret is the return value fro    
 72                  * or 0 if it's the first hook    
 73                  */                               
 74                 if (ret != 0)                     
 75                         return ret;               
 76                                                   
 77                 int is_heap;                      
 78                                                   
 79                 is_heap = (vma->vm_start >= vm    
 80                            vma->vm_end <= vma-    
 81                                                   
 82                 /* Return an -EPERM or write i    
 83                  * for auditing                   
 84                  */                               
 85                 if (is_heap)                      
 86                         return -EPERM;            
 87         }                                         
 88                                                   
 89 The ``__attribute__((preserve_access_index))``    
 90 the BPF verifier to update the offsets for the    
 91 Documentation/bpf/btf.rst information. Since t    
 92 types, it also validates all the accesses made    
 93 eBPF program.                                     
 94                                                   
 95 Loading                                           
 96 -------                                           
 97                                                   
 98 eBPF programs can be loaded with the :manpage:    
 99 ``BPF_PROG_LOAD`` operation:                      
100                                                   
101 .. code-block:: c                                 
102                                                   
103         struct bpf_object *obj;                   
104                                                   
105         obj = bpf_object__open("./my_prog.o");    
106         bpf_object__load(obj);                    
107                                                   
108 This can be simplified by using a skeleton hea    
109                                                   
110 .. code-block:: console                           
111                                                   
112         # bpftool gen skeleton my_prog.o > my_    
113                                                   
114 and the program can be loaded by including ``m    
115 the generated helper, ``my_prog__open_and_load    
116                                                   
117 Attachment to LSM Hooks                           
118 -----------------------                           
119                                                   
120 The LSM allows attachment of eBPF programs as     
121 syscall's ``BPF_RAW_TRACEPOINT_OPEN`` operatio    
122 using the libbpf helper ``bpf_program__attach_    
123                                                   
124 The program can be detached from the LSM hook     
125 link returned by ``bpf_program__attach_lsm`` u    
126                                                   
127 One can also use the helpers generated in ``my    
128 ``my_prog__attach`` for attachment and ``my_pr    
129                                                   
130 Examples                                          
131 --------                                          
132                                                   
133 An example eBPF program can be found in           
134 `tools/testing/selftests/bpf/progs/lsm.c`_ and    
135 userspace code in `tools/testing/selftests/bpf    
136                                                   
137 .. Links                                          
138 .. _tools/lib/bpf/bpf_tracing.h:                  
139    https://git.kernel.org/pub/scm/linux/kernel    
140 .. _tools/testing/selftests/bpf/progs/lsm.c:      
141    https://git.kernel.org/pub/scm/linux/kernel    
142 .. _tools/testing/selftests/bpf/prog_tests/tes    
143    https://git.kernel.org/pub/scm/linux/kernel    
                                                      

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php