mirror of
https://gitlab.com/apparmor/apparmor
synced 2025-09-01 14:55:10 +00:00
parser: Add prompt dev compat support
Support mapping rule prompt via the audit bits in pre permtable32 kernels. Signed-off-by: John Johansen <john.johansen@canonical.com>
This commit is contained in:
@@ -326,7 +326,8 @@ do { \
|
||||
|
||||
#define PROMPT_COMPAT_IGNORE 0
|
||||
#define PROMPT_COMPAT_PERMSV2 1
|
||||
#define PROMPT_COMPAT_PERMSV1 2
|
||||
#define PROMPT_COMPAT_DEV 2
|
||||
#define PROMPT_COMPAT_PERMSV1 3
|
||||
|
||||
/* from parser_common.c */
|
||||
extern uint32_t policy_version;
|
||||
@@ -363,6 +364,7 @@ extern int features_supports_flag_interruptible;
|
||||
extern int features_supports_flag_signal;
|
||||
extern int features_supports_flag_error;
|
||||
extern int kernel_supports_oob;
|
||||
extern int kernel_supports_promptdev;
|
||||
extern int kernel_supports_permstable32;
|
||||
extern int kernel_supports_permstable32_v1;
|
||||
extern int prompt_compat_mode;
|
||||
|
@@ -87,6 +87,7 @@ int features_supports_flag_interruptible = 0;
|
||||
int features_supports_flag_signal = 0;
|
||||
int features_supports_flag_error = 0;
|
||||
int kernel_supports_oob = 0; /* out of band transitions */
|
||||
int kernel_supports_promptdev = 0; /* prompt via audit perms */
|
||||
int kernel_supports_permstable32 = 0; /* extended permissions */
|
||||
int kernel_supports_permstable32_v1 = 0; /* extended permissions */
|
||||
int prompt_compat_mode = 0;
|
||||
@@ -175,6 +176,9 @@ bool prompt_compat_mode_supported(int mode)
|
||||
if (mode == PROMPT_COMPAT_PERMSV2 &&
|
||||
(kernel_supports_permstable32 && !kernel_supports_permstable32_v1))
|
||||
return true;
|
||||
else if (mode == PROMPT_COMPAT_DEV &&
|
||||
kernel_supports_promptdev)
|
||||
return true;
|
||||
else if (mode == PROMPT_COMPAT_PERMSV1 &&
|
||||
(kernel_supports_permstable32_v1))
|
||||
return true;
|
||||
@@ -188,6 +192,8 @@ int default_prompt_compat_mode()
|
||||
{
|
||||
if (prompt_compat_mode_supported(PROMPT_COMPAT_PERMSV2))
|
||||
return PROMPT_COMPAT_PERMSV2;
|
||||
if (prompt_compat_mode_supported(PROMPT_COMPAT_DEV))
|
||||
return PROMPT_COMPAT_DEV;
|
||||
if (prompt_compat_mode_supported(PROMPT_COMPAT_PERMSV1))
|
||||
return PROMPT_COMPAT_PERMSV1;
|
||||
if (prompt_compat_mode_supported(PROMPT_COMPAT_IGNORE))
|
||||
@@ -207,6 +213,9 @@ void print_prompt_compat_mode(FILE *f)
|
||||
case PROMPT_COMPAT_PERMSV1:
|
||||
fprintf(f, "permsv1");
|
||||
break;
|
||||
case PROMPT_COMPAT_DEV:
|
||||
fprintf(stderr, "dev");
|
||||
break;
|
||||
default:
|
||||
fprintf(f, "Unknown prompt compat mode '%d'", prompt_compat_mode);
|
||||
}
|
||||
|
@@ -1568,6 +1568,7 @@ static bool get_kernel_features(struct aa_features **features)
|
||||
else if (aa_features_supports(*features, "policy/versions/v6"))
|
||||
kernel_abi_version = 6;
|
||||
|
||||
kernel_supports_promptdev = aa_features_supports(*features, "policy/perms_compatprompt");
|
||||
kernel_supports_permstable32 = aa_features_supports(*features, "policy/permstable32");
|
||||
if (kernel_supports_permstable32) {
|
||||
fprintf(stderr, "kernel supports prompt\n");
|
||||
|
@@ -240,6 +240,10 @@ int post_process_profile(Profile *profile, int debug_only)
|
||||
}
|
||||
|
||||
error = post_process_policy_list(profile->hat_table, debug_only);
|
||||
|
||||
if (prompt_compat_mode == PROMPT_COMPAT_DEV && profile->uses_prompt_rules)
|
||||
profile->flags.flags |= FLAG_PROMPT_COMPAT;
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
|
@@ -149,6 +149,7 @@ static const char *find_error_name_mapping(int code)
|
||||
#define FLAG_DEBUG1 2
|
||||
#define FLAG_DEBUG2 4
|
||||
#define FLAG_INTERRUPTIBLE 8
|
||||
#define FLAG_PROMPT_COMPAT 0x10
|
||||
|
||||
/* sigh, used in parse union so needs trivial constructors. */
|
||||
class flagvals {
|
||||
@@ -236,6 +237,10 @@ public:
|
||||
os << ", kill.signal=" << signal;
|
||||
if (error)
|
||||
os << ", error=" << find_error_name_mapping(error);
|
||||
|
||||
if (flags & FLAG_PROMPT_COMPAT)
|
||||
os << ", prompt_dev";
|
||||
|
||||
os << "\n";
|
||||
|
||||
return os;
|
||||
|
Reference in New Issue
Block a user