Note that specifying zero as domU value means zero, while for dom0 it means
to use the default.
+### xsm
+> `= dummy | flask`
+
+> Default: `dummy`
+
+Specify which XSM module should be enabled. This option is only available if
+the hypervisor was compiled with XSM support.
+
+* `dummy`: this is the default choice. Basic restriction for common deployment
+ (the dummy module) will be applied. It's also used when XSM is compiled out.
+* `flask`: this is the policy based access control. To choose this, the
+ separated option in kconfig must also be enabled.
+
### flask
> `= permissive | enforcing | late | disabled`
config FLASK
def_bool y
- prompt "FLux Advanced Security Kernel support" if EXPERT = "y"
+ prompt "FLux Advanced Security Kernel support"
depends on XSM
---help---
Enables FLASK (FLux Advanced Security Kernel) as the access control
If unsure, say Y.
+choice
+ prompt "Default XSM implementation"
+ depends on XSM
+ default XSM_FLASK_DEFAULT if XSM_FLASK
+ default XSM_DUMMY_DEFAULT
+ config XSM_DUMMY_DEFAULT
+ bool "Match non-XSM behavior"
+ config XSM_FLASK_DEFAULT
+ bool "FLux Advanced Security Kernel" if XSM_FLASK
+endchoice
+
config LATE_HWDOM
bool "Dedicated hardware domain"
default n
struct xsm_operations *xsm_ops;
+enum xsm_bootparam {
+ XSM_BOOTPARAM_DUMMY,
+ XSM_BOOTPARAM_FLASK,
+};
+
+static enum xsm_bootparam __initdata xsm_bootparam =
+#ifdef CONFIG_XSM_FLASK_DEFAULT
+ XSM_BOOTPARAM_FLASK;
+#else
+ XSM_BOOTPARAM_DUMMY;
+#endif
+
+static int __init parse_xsm_param(const char *s)
+{
+ int rc = 0;
+
+ if ( !strcmp(s, "dummy") )
+ xsm_bootparam = XSM_BOOTPARAM_DUMMY;
+#ifdef CONFIG_XSM_FLASK
+ else if ( !strcmp(s, "flask") )
+ xsm_bootparam = XSM_BOOTPARAM_FLASK;
+#endif
+ else
+ rc = -EINVAL;
+
+ return rc;
+}
+custom_param("xsm", parse_xsm_param);
+
static inline int verify(struct xsm_operations *ops)
{
/* verify the security_operations structure exists */
}
xsm_ops = &dummy_xsm_ops;
- flask_init(policy_buffer, policy_size);
+
+ switch ( xsm_bootparam )
+ {
+ case XSM_BOOTPARAM_DUMMY:
+ break;
+
+ case XSM_BOOTPARAM_FLASK:
+ flask_init(policy_buffer, policy_size);
+ break;
+
+ default:
+ ASSERT_UNREACHABLE();
+ break;
+ }
return 0;
}