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

TOMOYO Linux Cross Reference
Linux/security/apparmor/include/path.h

Version: ~ [ linux-5.19-rc3 ] ~ [ linux-5.18.5 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.48 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.123 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.199 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.248 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.284 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.319 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.302 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ 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.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /*
  2  * AppArmor security module
  3  *
  4  * This file contains AppArmor basic path manipulation function definitions.
  5  *
  6  * Copyright (C) 1998-2008 Novell/SUSE
  7  * Copyright 2009-2010 Canonical Ltd.
  8  *
  9  * This program is free software; you can redistribute it and/or
 10  * modify it under the terms of the GNU General Public License as
 11  * published by the Free Software Foundation, version 2 of the
 12  * License.
 13  */
 14 
 15 #ifndef __AA_PATH_H
 16 #define __AA_PATH_H
 17 
 18 
 19 enum path_flags {
 20         PATH_IS_DIR = 0x1,              /* path is a directory */
 21         PATH_CONNECT_PATH = 0x4,        /* connect disconnected paths to / */
 22         PATH_CHROOT_REL = 0x8,          /* do path lookup relative to chroot */
 23         PATH_CHROOT_NSCONNECT = 0x10,   /* connect paths that are at ns root */
 24 
 25         PATH_DELEGATE_DELETED = 0x08000, /* delegate deleted files */
 26         PATH_MEDIATE_DELETED = 0x10000,  /* mediate deleted paths */
 27 };
 28 
 29 int aa_path_name(const struct path *path, int flags, char *buffer,
 30                  const char **name, const char **info,
 31                  const char *disconnected);
 32 
 33 #define MAX_PATH_BUFFERS 2
 34 
 35 /* Per cpu buffers used during mediation */
 36 /* preallocated buffers to use during path lookups */
 37 struct aa_buffers {
 38         char *buf[MAX_PATH_BUFFERS];
 39 };
 40 
 41 #include <linux/percpu.h>
 42 #include <linux/preempt.h>
 43 
 44 DECLARE_PER_CPU(struct aa_buffers, aa_buffers);
 45 
 46 #define COUNT_ARGS(X...) COUNT_ARGS_HELPER(, ##X, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0)
 47 #define COUNT_ARGS_HELPER(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, n, X...) n
 48 #define CONCAT(X, Y) X ## Y
 49 #define CONCAT_AFTER(X, Y) CONCAT(X, Y)
 50 
 51 #define ASSIGN(FN, X, N) ((X) = FN(N))
 52 #define EVAL1(FN, X) ASSIGN(FN, X, 0) /*X = FN(0)*/
 53 #define EVAL2(FN, X, Y...) do { ASSIGN(FN, X, 1);  EVAL1(FN, Y); } while (0)
 54 #define EVAL(FN, X...) CONCAT_AFTER(EVAL, COUNT_ARGS(X))(FN, X)
 55 
 56 #define for_each_cpu_buffer(I) for ((I) = 0; (I) < MAX_PATH_BUFFERS; (I)++)
 57 
 58 #ifdef CONFIG_DEBUG_PREEMPT
 59 #define AA_BUG_PREEMPT_ENABLED(X) AA_BUG(preempt_count() <= 0, X)
 60 #else
 61 #define AA_BUG_PREEMPT_ENABLED(X) /* nop */
 62 #endif
 63 
 64 #define __get_buffer(N) ({                                      \
 65         struct aa_buffers *__cpu_var; \
 66         AA_BUG_PREEMPT_ENABLED("__get_buffer without preempt disabled");  \
 67         __cpu_var = this_cpu_ptr(&aa_buffers);                  \
 68         __cpu_var->buf[(N)]; })
 69 
 70 #define __get_buffers(X...)    EVAL(__get_buffer, X)
 71 
 72 #define __put_buffers(X, Y...) ((void)&(X))
 73 
 74 #define get_buffers(X...)       \
 75 do {                            \
 76         preempt_disable();      \
 77         __get_buffers(X);       \
 78 } while (0)
 79 
 80 #define put_buffers(X, Y...)    \
 81 do {                            \
 82         __put_buffers(X, Y);    \
 83         preempt_enable();       \
 84 } while (0)
 85 
 86 #endif /* __AA_PATH_H */
 87 

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

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | 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.

osdn.jp