]> xenbits.xensource.com Git - xen.git/commitdiff
xen/xsm: Introduce new boot parameter xsm
authorXin Li <talons.lee@gmail.com>
Tue, 9 Oct 2018 09:33:19 +0000 (17:33 +0800)
committerJulien Grall <julien.grall@arm.com>
Fri, 14 Jun 2019 13:49:19 +0000 (14:49 +0100)
Introduce new boot parameter xsm to choose which xsm module is enabled,
and set default to dummy. And add new option in Kconfig to choose the
default XSM implementation.

Signed-off-by: Xin Li <xin.li@citrix.com>
Acked-by: Daniel De Graaf <dgdegra@tycho.nsa.gov>
Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
docs/misc/xen-command-line.markdown
xen/common/Kconfig
xen/xsm/xsm_core.c

index 85226212a9b15018c6f738a6959a459290746d16..d03830f837c9bd34f69d0f6f1292313b98cc2be3 100644 (file)
@@ -790,6 +790,19 @@ hardware domain is architecture dependent.
 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`
 
index dc8e87643986318bfa4d89d026b73ffa53c31b3a..c87422282f49d91899a2a552c1c8fb6bd37fcfa5 100644 (file)
@@ -99,7 +99,7 @@ config XSM
 
 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
@@ -137,6 +137,17 @@ config XSM_POLICY
 
          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
index 08994ee7a131e753097cd56500fcd41ce03da81a..e78f7d8ca2d56ce5086743e893bae930b5198ea9 100644 (file)
 
 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 */
@@ -53,7 +82,20 @@ static int __init xsm_core_init(const void *policy_buffer, size_t policy_size)
     }
 
     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;
 }