2019-06-01 10:08:55 +02:00
/* SPDX-License-Identifier: GPL-2.0-only */
2010-07-29 14:48:03 -07:00
/*
* AppArmor security module
*
* This file contains AppArmor filesystem definitions .
*
* Copyright ( C ) 1998 - 2008 Novell / SUSE
* Copyright 2009 - 2010 Canonical Ltd .
*/
# ifndef __AA_APPARMORFS_H
# define __AA_APPARMORFS_H
2017-01-16 00:42:45 -08:00
extern struct path aa_null ;
2017-05-25 06:23:42 -07:00
enum aa_sfs_type {
AA_SFS_TYPE_BOOLEAN ,
AA_SFS_TYPE_STRING ,
AA_SFS_TYPE_U64 ,
AA_SFS_TYPE_FOPS ,
AA_SFS_TYPE_DIR ,
2012-01-26 16:29:20 -08:00
} ;
2017-05-25 06:23:42 -07:00
struct aa_sfs_entry ;
2012-01-26 16:29:20 -08:00
2017-05-25 06:23:42 -07:00
struct aa_sfs_entry {
2012-01-26 16:29:20 -08:00
const char * name ;
struct dentry * dentry ;
umode_t mode ;
2017-05-25 06:23:42 -07:00
enum aa_sfs_type v_type ;
2012-01-26 16:29:20 -08:00
union {
2012-01-26 16:29:21 -08:00
bool boolean ;
2012-01-26 16:29:22 -08:00
char * string ;
2012-01-26 16:29:21 -08:00
unsigned long u64 ;
2017-05-25 06:23:42 -07:00
struct aa_sfs_entry * files ;
2012-01-26 16:29:20 -08:00
} v ;
const struct file_operations * file_ops ;
} ;
2017-05-25 06:23:42 -07:00
extern const struct file_operations aa_sfs_seq_file_ops ;
2012-01-26 16:29:21 -08:00
2017-05-25 06:23:42 -07:00
# define AA_SFS_FILE_BOOLEAN(_name, _value) \
2012-01-26 16:29:21 -08:00
{ . name = ( _name ) , . mode = 0444 , \
2017-05-25 06:23:42 -07:00
. v_type = AA_SFS_TYPE_BOOLEAN , . v . boolean = ( _value ) , \
. file_ops = & aa_sfs_seq_file_ops }
# define AA_SFS_FILE_STRING(_name, _value) \
2012-01-26 16:29:22 -08:00
{ . name = ( _name ) , . mode = 0444 , \
2017-05-25 06:23:42 -07:00
. v_type = AA_SFS_TYPE_STRING , . v . string = ( _value ) , \
. file_ops = & aa_sfs_seq_file_ops }
# define AA_SFS_FILE_U64(_name, _value) \
2012-01-26 16:29:21 -08:00
{ . name = ( _name ) , . mode = 0444 , \
2017-05-25 06:23:42 -07:00
. v_type = AA_SFS_TYPE_U64 , . v . u64 = ( _value ) , \
. file_ops = & aa_sfs_seq_file_ops }
# define AA_SFS_FILE_FOPS(_name, _mode, _fops) \
{ . name = ( _name ) , . v_type = AA_SFS_TYPE_FOPS , \
2012-01-26 16:29:20 -08:00
. mode = ( _mode ) , . file_ops = ( _fops ) }
2017-05-25 06:23:42 -07:00
# define AA_SFS_DIR(_name, _value) \
{ . name = ( _name ) , . v_type = AA_SFS_TYPE_DIR , . v . files = ( _value ) }
2012-01-26 16:29:20 -08:00
2010-07-29 14:48:03 -07:00
extern void __init aa_destroy_aafs ( void ) ;
2013-07-10 21:13:43 -07:00
struct aa_profile ;
2017-01-16 00:42:16 -08:00
struct aa_ns ;
2013-07-10 21:13:43 -07:00
enum aafs_ns_type {
AAFS_NS_DIR ,
AAFS_NS_PROFS ,
AAFS_NS_NS ,
2017-01-16 00:42:55 -08:00
AAFS_NS_RAW_DATA ,
2017-01-16 00:42:58 -08:00
AAFS_NS_LOAD ,
AAFS_NS_REPLACE ,
AAFS_NS_REMOVE ,
2017-05-26 16:27:58 -07:00
AAFS_NS_REVISION ,
2013-07-10 21:13:43 -07:00
AAFS_NS_COUNT ,
AAFS_NS_MAX_COUNT ,
AAFS_NS_SIZE ,
AAFS_NS_MAX_SIZE ,
AAFS_NS_OWNER ,
AAFS_NS_SIZEOF ,
} ;
enum aafs_prof_type {
AAFS_PROF_DIR ,
AAFS_PROF_PROFS ,
AAFS_PROF_NAME ,
AAFS_PROF_MODE ,
2013-07-10 21:17:43 -07:00
AAFS_PROF_ATTACH ,
2013-08-14 11:27:36 -07:00
AAFS_PROF_HASH ,
2017-01-16 00:42:55 -08:00
AAFS_PROF_RAW_DATA ,
AAFS_PROF_RAW_HASH ,
AAFS_PROF_RAW_ABI ,
2013-07-10 21:13:43 -07:00
AAFS_PROF_SIZEOF ,
} ;
# define ns_dir(X) ((X)->dents[AAFS_NS_DIR])
# define ns_subns_dir(X) ((X)->dents[AAFS_NS_NS])
# define ns_subprofs_dir(X) ((X)->dents[AAFS_NS_PROFS])
2017-01-16 00:42:55 -08:00
# define ns_subdata_dir(X) ((X)->dents[AAFS_NS_RAW_DATA])
2017-01-16 00:42:58 -08:00
# define ns_subload(X) ((X)->dents[AAFS_NS_LOAD])
# define ns_subreplace(X) ((X)->dents[AAFS_NS_REPLACE])
# define ns_subremove(X) ((X)->dents[AAFS_NS_REMOVE])
2017-05-26 16:27:58 -07:00
# define ns_subrevision(X) ((X)->dents[AAFS_NS_REVISION])
2013-07-10 21:13:43 -07:00
# define prof_dir(X) ((X)->dents[AAFS_PROF_DIR])
# define prof_child_dir(X) ((X)->dents[AAFS_PROF_PROFS])
2017-05-09 00:08:41 -07:00
void __aa_bump_ns_revision ( struct aa_ns * ns ) ;
2017-05-25 06:23:42 -07:00
void __aafs_profile_rmdir ( struct aa_profile * profile ) ;
void __aafs_profile_migrate_dents ( struct aa_profile * old ,
2013-07-10 21:13:43 -07:00
struct aa_profile * new ) ;
2017-05-25 06:23:42 -07:00
int __aafs_profile_mkdir ( struct aa_profile * profile , struct dentry * parent ) ;
void __aafs_ns_rmdir ( struct aa_ns * ns ) ;
2017-05-25 06:31:46 -07:00
int __aafs_ns_mkdir ( struct aa_ns * ns , struct dentry * parent , const char * name ,
struct dentry * dent ) ;
2013-07-10 21:13:43 -07:00
2017-05-09 00:08:41 -07:00
struct aa_loaddata ;
2021-02-01 03:43:18 -08:00
# ifdef CONFIG_SECURITY_APPARMOR_EXPORT_BINARY
2017-05-09 00:08:41 -07:00
void __aa_fs_remove_rawdata ( struct aa_loaddata * rawdata ) ;
int __aa_fs_create_rawdata ( struct aa_ns * ns , struct aa_loaddata * rawdata ) ;
2021-02-01 03:43:18 -08:00
# else
static inline void __aa_fs_remove_rawdata ( struct aa_loaddata * rawdata )
{
/* empty stub */
}
static inline int __aa_fs_create_rawdata ( struct aa_ns * ns ,
struct aa_loaddata * rawdata )
{
return 0 ;
}
# endif /* CONFIG_SECURITY_APPARMOR_EXPORT_BINARY */
2017-05-09 00:08:41 -07:00
2010-07-29 14:48:03 -07:00
# endif /* __AA_APPARMORFS_H */