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

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

Version: ~ [ linux-5.18 ] ~ [ linux-5.17.9 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.41 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.117 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.195 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.244 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.280 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.315 ] ~ [ 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 ASSIGN(FN, A, X, N) ((X) = FN(A, N))
 47 #define EVAL1(FN, A, X) ASSIGN(FN, A, X, 0) /*X = FN(0)*/
 48 #define EVAL2(FN, A, X, Y...)   \
 49         do { ASSIGN(FN, A, X, 1);  EVAL1(FN, A, Y); } while (0)
 50 #define EVAL(FN, A, X...) CONCATENATE(EVAL, COUNT_ARGS(X))(FN, A, X)
 51 
 52 #define for_each_cpu_buffer(I) for ((I) = 0; (I) < MAX_PATH_BUFFERS; (I)++)
 53 
 54 #ifdef CONFIG_DEBUG_PREEMPT
 55 #define AA_BUG_PREEMPT_ENABLED(X) AA_BUG(preempt_count() <= 0, X)
 56 #else
 57 #define AA_BUG_PREEMPT_ENABLED(X) /* nop */
 58 #endif
 59 
 60 #define __get_buffer(C, N) ({                                           \
 61         AA_BUG_PREEMPT_ENABLED("__get_buffer without preempt disabled");  \
 62         (C)->buf[(N)]; })
 63 
 64 #define __get_buffers(C, X...)    EVAL(__get_buffer, C, X)
 65 
 66 #define __put_buffers(X, Y...) ((void)&(X))
 67 
 68 #define get_buffers(X...)                                               \
 69 do {                                                                    \
 70         struct aa_buffers *__cpu_var = get_cpu_ptr(&aa_buffers);        \
 71         __get_buffers(__cpu_var, X);                                    \
 72 } while (0)
 73 
 74 #define put_buffers(X, Y...)            \
 75 do {                                    \
 76         __put_buffers(X, Y);            \
 77         put_cpu_ptr(&aa_buffers);       \
 78 } while (0)
 79 
 80 #endif /* __AA_PATH_H */
 81 

~ [ 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