|
|
|
@ -186,11 +186,6 @@ static inline void aa_free_file_rules(struct aa_file_rules *rules) |
|
|
|
|
aa_free_domain_entries(&rules->trans); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#define ACC_FMODE(x) (("\000\004\002\006"[(x)&O_ACCMODE]) | (((x) << 1) & 0x40)) |
|
|
|
|
|
|
|
|
|
/* from namei.c */ |
|
|
|
|
#define MAP_OPEN_FLAGS(x) ((((x) + 1) & O_ACCMODE) ? (x) + 1 : (x)) |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* aa_map_file_perms - map file flags to AppArmor permissions |
|
|
|
|
* @file: open file to map flags to AppArmor permissions |
|
|
|
@ -199,8 +194,13 @@ static inline void aa_free_file_rules(struct aa_file_rules *rules) |
|
|
|
|
*/ |
|
|
|
|
static inline u32 aa_map_file_to_perms(struct file *file) |
|
|
|
|
{ |
|
|
|
|
int flags = MAP_OPEN_FLAGS(file->f_flags); |
|
|
|
|
u32 perms = ACC_FMODE(file->f_mode); |
|
|
|
|
int flags = file->f_flags; |
|
|
|
|
u32 perms = 0; |
|
|
|
|
|
|
|
|
|
if (file->f_mode & FMODE_WRITE) |
|
|
|
|
perms |= MAY_WRITE; |
|
|
|
|
if (file->f_mode & FMODE_READ) |
|
|
|
|
perms |= MAY_READ; |
|
|
|
|
|
|
|
|
|
if ((flags & O_APPEND) && (perms & MAY_WRITE)) |
|
|
|
|
perms = (perms & ~MAY_WRITE) | MAY_APPEND; |
|
|
|
|