mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-09-18 23:09:29 +02:00
apparmor: constify aa_dfa parameters on read-only compute paths
Most uses of aa_dfa a read-only walking of the dfa. Have the compiler enforce this. Signed-off-by: John Johansen <john.johansen@canonical.com>
This commit is contained in:
@@ -67,7 +67,7 @@ static int unix_fs_perm(const char *op, u32 mask, const struct cred *subj_cred,
|
||||
#define SHUTDOWN_ADDR "\x03" /* path addr is shutdown and cleared */
|
||||
#define FS_ADDR "/" /* path addr in fs */
|
||||
|
||||
static aa_state_t match_addr(struct aa_dfa *dfa, aa_state_t state,
|
||||
static aa_state_t match_addr(const struct aa_dfa *dfa, aa_state_t state,
|
||||
struct sockaddr_un *addr, int addrlen)
|
||||
{
|
||||
if (addr)
|
||||
|
||||
@@ -136,7 +136,7 @@ static inline bool aa_strneq(const char *str, const char *sub, int len)
|
||||
* character which is not used in standard matching and is only
|
||||
* used to separate pairs.
|
||||
*/
|
||||
static inline aa_state_t aa_dfa_null_transition(struct aa_dfa *dfa,
|
||||
static inline aa_state_t aa_dfa_null_transition(const struct aa_dfa *dfa,
|
||||
aa_state_t start)
|
||||
{
|
||||
/* the null transition only needs the string's null terminator byte */
|
||||
|
||||
@@ -126,15 +126,17 @@ static inline size_t table_size(size_t len, size_t el_size)
|
||||
#define aa_state_t unsigned int
|
||||
|
||||
struct aa_dfa *aa_dfa_unpack(const void *blob, size_t size, int flags);
|
||||
aa_state_t aa_dfa_match_len(struct aa_dfa *dfa, aa_state_t start,
|
||||
aa_state_t aa_dfa_match_len(const struct aa_dfa *dfa, aa_state_t start,
|
||||
const char *str, int len);
|
||||
aa_state_t aa_dfa_match(struct aa_dfa *dfa, aa_state_t start,
|
||||
aa_state_t aa_dfa_match(const struct aa_dfa *dfa, aa_state_t start,
|
||||
const char *str);
|
||||
aa_state_t aa_dfa_next(struct aa_dfa *dfa, aa_state_t state, const char c);
|
||||
aa_state_t aa_dfa_outofband_transition(struct aa_dfa *dfa, aa_state_t state);
|
||||
aa_state_t aa_dfa_match_until(struct aa_dfa *dfa, aa_state_t start,
|
||||
aa_state_t aa_dfa_next(const struct aa_dfa *dfa, aa_state_t state,
|
||||
const char c);
|
||||
aa_state_t aa_dfa_outofband_transition(const struct aa_dfa *dfa,
|
||||
aa_state_t state);
|
||||
aa_state_t aa_dfa_match_until(const struct aa_dfa *dfa, aa_state_t start,
|
||||
const char *str, const char **retpos);
|
||||
aa_state_t aa_dfa_matchn_until(struct aa_dfa *dfa, aa_state_t start,
|
||||
aa_state_t aa_dfa_matchn_until(const struct aa_dfa *dfa, aa_state_t start,
|
||||
const char *str, int n, const char **retpos);
|
||||
|
||||
void aa_dfa_free_kref(struct kref *kref);
|
||||
@@ -152,7 +154,7 @@ struct match_workbuf N = { \
|
||||
.len = 0, \
|
||||
}
|
||||
|
||||
aa_state_t aa_dfa_leftmatch(struct aa_dfa *dfa, aa_state_t start,
|
||||
aa_state_t aa_dfa_leftmatch(const struct aa_dfa *dfa, aa_state_t start,
|
||||
const char *str, unsigned int *count);
|
||||
|
||||
/**
|
||||
|
||||
+16
-13
@@ -151,7 +151,7 @@ out:
|
||||
*
|
||||
* Returns: %0 else error code on failure to verify
|
||||
*/
|
||||
static int verify_dfa(struct aa_dfa *dfa)
|
||||
static int verify_dfa(const struct aa_dfa *dfa)
|
||||
{
|
||||
size_t i, state_count, trans_count;
|
||||
int error = -EPROTO;
|
||||
@@ -467,7 +467,7 @@ do { \
|
||||
*
|
||||
* Returns: final state reached after input is consumed
|
||||
*/
|
||||
aa_state_t aa_dfa_match_len(struct aa_dfa *dfa, aa_state_t start,
|
||||
aa_state_t aa_dfa_match_len(const struct aa_dfa *dfa, aa_state_t start,
|
||||
const char *str, int len)
|
||||
{
|
||||
u32 *def = DEFAULT_TABLE(dfa);
|
||||
@@ -512,7 +512,8 @@ aa_state_t aa_dfa_match_len(struct aa_dfa *dfa, aa_state_t start,
|
||||
*
|
||||
* Returns: final state reached after input is consumed
|
||||
*/
|
||||
aa_state_t aa_dfa_match(struct aa_dfa *dfa, aa_state_t start, const char *str)
|
||||
aa_state_t aa_dfa_match(const struct aa_dfa *dfa, aa_state_t start,
|
||||
const char *str)
|
||||
{
|
||||
u32 *def = DEFAULT_TABLE(dfa);
|
||||
u32 *base = BASE_TABLE(dfa);
|
||||
@@ -555,7 +556,8 @@ aa_state_t aa_dfa_match(struct aa_dfa *dfa, aa_state_t start, const char *str)
|
||||
*
|
||||
* Returns: state reach after input @c
|
||||
*/
|
||||
aa_state_t aa_dfa_next(struct aa_dfa *dfa, aa_state_t state, const char c)
|
||||
aa_state_t aa_dfa_next(const struct aa_dfa *dfa, aa_state_t state,
|
||||
const char c)
|
||||
{
|
||||
u32 *def = DEFAULT_TABLE(dfa);
|
||||
u32 *base = BASE_TABLE(dfa);
|
||||
@@ -573,7 +575,8 @@ aa_state_t aa_dfa_next(struct aa_dfa *dfa, aa_state_t state, const char c)
|
||||
return state;
|
||||
}
|
||||
|
||||
aa_state_t aa_dfa_outofband_transition(struct aa_dfa *dfa, aa_state_t state)
|
||||
aa_state_t aa_dfa_outofband_transition(const struct aa_dfa *dfa,
|
||||
aa_state_t state)
|
||||
{
|
||||
u32 *def = DEFAULT_TABLE(dfa);
|
||||
u32 *base = BASE_TABLE(dfa);
|
||||
@@ -603,8 +606,8 @@ aa_state_t aa_dfa_outofband_transition(struct aa_dfa *dfa, aa_state_t state)
|
||||
*
|
||||
* Returns: final state reached after input is consumed
|
||||
*/
|
||||
aa_state_t aa_dfa_match_until(struct aa_dfa *dfa, aa_state_t start,
|
||||
const char *str, const char **retpos)
|
||||
aa_state_t aa_dfa_match_until(const struct aa_dfa *dfa, aa_state_t start,
|
||||
const char *str, const char **retpos)
|
||||
{
|
||||
u32 *def = DEFAULT_TABLE(dfa);
|
||||
u32 *base = BASE_TABLE(dfa);
|
||||
@@ -664,8 +667,8 @@ aa_state_t aa_dfa_match_until(struct aa_dfa *dfa, aa_state_t start,
|
||||
*
|
||||
* Returns: final state reached after input is consumed
|
||||
*/
|
||||
aa_state_t aa_dfa_matchn_until(struct aa_dfa *dfa, aa_state_t start,
|
||||
const char *str, int n, const char **retpos)
|
||||
aa_state_t aa_dfa_matchn_until(const struct aa_dfa *dfa, aa_state_t start,
|
||||
const char *str, int n, const char **retpos)
|
||||
{
|
||||
u32 *def = DEFAULT_TABLE(dfa);
|
||||
u32 *base = BASE_TABLE(dfa);
|
||||
@@ -740,9 +743,9 @@ static bool is_loop(struct match_workbuf *wb, aa_state_t state,
|
||||
return false;
|
||||
}
|
||||
|
||||
static aa_state_t leftmatch_fb(struct aa_dfa *dfa, aa_state_t start,
|
||||
const char *str, struct match_workbuf *wb,
|
||||
unsigned int *count)
|
||||
static aa_state_t leftmatch_fb(const struct aa_dfa *dfa, aa_state_t start,
|
||||
const char *str, struct match_workbuf *wb,
|
||||
unsigned int *count)
|
||||
{
|
||||
u32 *def = DEFAULT_TABLE(dfa);
|
||||
u32 *base = BASE_TABLE(dfa);
|
||||
@@ -821,7 +824,7 @@ out:
|
||||
*
|
||||
* Returns: final state reached after input is consumed
|
||||
*/
|
||||
aa_state_t aa_dfa_leftmatch(struct aa_dfa *dfa, aa_state_t start,
|
||||
aa_state_t aa_dfa_leftmatch(const struct aa_dfa *dfa, aa_state_t start,
|
||||
const char *str, unsigned int *count)
|
||||
{
|
||||
DEFINE_MATCH_WB(wb);
|
||||
|
||||
@@ -129,7 +129,7 @@ static void audit_cb(struct audit_buffer *ab, void *va)
|
||||
*
|
||||
* Returns: next state after flags match
|
||||
*/
|
||||
static aa_state_t match_mnt_flags(struct aa_dfa *dfa, aa_state_t state,
|
||||
static aa_state_t match_mnt_flags(const struct aa_dfa *dfa, aa_state_t state,
|
||||
unsigned long flags)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
@@ -199,7 +199,7 @@ static struct aa_perms *early_match(struct aa_policydb *policy,
|
||||
return p;
|
||||
}
|
||||
|
||||
static aa_state_t aa_dfa_match_be16(struct aa_dfa *dfa, aa_state_t state,
|
||||
static aa_state_t aa_dfa_match_be16(const struct aa_dfa *dfa, aa_state_t state,
|
||||
u16 data)
|
||||
{
|
||||
__be16 buffer = cpu_to_be16(data);
|
||||
|
||||
@@ -97,7 +97,7 @@ static u32 map_old_perms(u32 old)
|
||||
return new;
|
||||
}
|
||||
|
||||
static void compute_fperms_allow(struct aa_perms *perms, struct aa_dfa *dfa,
|
||||
static void compute_fperms_allow(struct aa_perms *perms, const struct aa_dfa *dfa,
|
||||
aa_state_t state)
|
||||
{
|
||||
perms->allow |= AA_MAY_GETATTR;
|
||||
@@ -109,7 +109,7 @@ static void compute_fperms_allow(struct aa_perms *perms, struct aa_dfa *dfa,
|
||||
perms->allow |= AA_MAY_ONEXEC;
|
||||
}
|
||||
|
||||
static struct aa_perms compute_fperms_user(struct aa_dfa *dfa,
|
||||
static struct aa_perms compute_fperms_user(const struct aa_dfa *dfa,
|
||||
aa_state_t state)
|
||||
{
|
||||
struct aa_perms perms = { };
|
||||
@@ -124,7 +124,7 @@ static struct aa_perms compute_fperms_user(struct aa_dfa *dfa,
|
||||
return perms;
|
||||
}
|
||||
|
||||
static struct aa_perms compute_fperms_other(struct aa_dfa *dfa,
|
||||
static struct aa_perms compute_fperms_other(const struct aa_dfa *dfa,
|
||||
aa_state_t state)
|
||||
{
|
||||
struct aa_perms perms = { };
|
||||
@@ -147,7 +147,7 @@ static struct aa_perms compute_fperms_other(struct aa_dfa *dfa,
|
||||
*
|
||||
* Returns: remapped perm table
|
||||
*/
|
||||
static struct aa_perms *compute_fperms(struct aa_dfa *dfa,
|
||||
static struct aa_perms *compute_fperms(const struct aa_dfa *dfa,
|
||||
u32 *size)
|
||||
{
|
||||
aa_state_t state;
|
||||
@@ -171,7 +171,7 @@ static struct aa_perms *compute_fperms(struct aa_dfa *dfa,
|
||||
return table;
|
||||
}
|
||||
|
||||
static struct aa_perms *compute_xmatch_perms(struct aa_dfa *xmatch,
|
||||
static struct aa_perms *compute_xmatch_perms(const struct aa_dfa *xmatch,
|
||||
u32 *size)
|
||||
{
|
||||
struct aa_perms *perms;
|
||||
@@ -207,7 +207,7 @@ static u32 map_xbits(u32 x)
|
||||
((x & 0x7e) << 9);
|
||||
}
|
||||
|
||||
static struct aa_perms compute_perms_entry(struct aa_dfa *dfa,
|
||||
static struct aa_perms compute_perms_entry(const struct aa_dfa *dfa,
|
||||
aa_state_t state,
|
||||
u32 version)
|
||||
{
|
||||
@@ -246,7 +246,7 @@ static struct aa_perms compute_perms_entry(struct aa_dfa *dfa,
|
||||
return perms;
|
||||
}
|
||||
|
||||
static struct aa_perms *compute_perms(struct aa_dfa *dfa, u32 version,
|
||||
static struct aa_perms *compute_perms(const struct aa_dfa *dfa, u32 version,
|
||||
u32 *size)
|
||||
{
|
||||
unsigned int state;
|
||||
|
||||
@@ -1483,7 +1483,7 @@ static int verify_header(struct aa_ext *e, int required, const char **ns)
|
||||
* @dfa: the dfa to check accept indexes are in range
|
||||
* @table_size: the permission table size the indexes should be within
|
||||
*/
|
||||
static bool verify_dfa_accept_index(struct aa_dfa *dfa, int table_size)
|
||||
static bool verify_dfa_accept_index(const struct aa_dfa *dfa, int table_size)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < dfa->tables[YYTD_ID_ACCEPT]->td_lolen; i++) {
|
||||
|
||||
Reference in New Issue
Block a user