hibernate: Disable when the kernel is locked down
authorJosh Boyer <jwboyer@fedoraproject.org>
Tue, 20 Aug 2019 00:17:46 +0000 (17:17 -0700)
committerJames Morris <jmorris@namei.org>
Tue, 20 Aug 2019 04:54:15 +0000 (21:54 -0700)
There is currently no way to verify the resume image when returning
from hibernate.  This might compromise the signed modules trust model,
so until we can work with signed hibernate images we disable it when the
kernel is locked down.

Signed-off-by: Josh Boyer <jwboyer@fedoraproject.org>
Signed-off-by: David Howells <dhowells@redhat.com>
Signed-off-by: Matthew Garrett <mjg59@google.com>
Reviewed-by: Kees Cook <keescook@chromium.org>
Cc: rjw@rjwysocki.net
Cc: pavel@ucw.cz
cc: linux-pm@vger.kernel.org
Signed-off-by: James Morris <jmorris@namei.org>
include/linux/security.h
kernel/power/hibernate.c
security/lockdown/lockdown.c

index b607a8ac97fe6b18d3ae400abd7f068bc0956633..80ac7fb27aa998b11b70afb6e4f01089d5b914b6 100644 (file)
@@ -106,6 +106,7 @@ enum lockdown_reason {
        LOCKDOWN_MODULE_SIGNATURE,
        LOCKDOWN_DEV_MEM,
        LOCKDOWN_KEXEC,
+       LOCKDOWN_HIBERNATION,
        LOCKDOWN_INTEGRITY_MAX,
        LOCKDOWN_CONFIDENTIALITY_MAX,
 };
index cd7434e6000d90eb5be5a179ec6815e77b21201a..3c0a5a8170b02634df7c289be46d49124718023d 100644 (file)
@@ -30,6 +30,7 @@
 #include <linux/ctype.h>
 #include <linux/genhd.h>
 #include <linux/ktime.h>
+#include <linux/security.h>
 #include <trace/events/power.h>
 
 #include "power.h"
@@ -68,7 +69,7 @@ static const struct platform_hibernation_ops *hibernation_ops;
 
 bool hibernation_available(void)
 {
-       return (nohibernate == 0);
+       return nohibernate == 0 && !security_locked_down(LOCKDOWN_HIBERNATION);
 }
 
 /**
index aaf30ad351f990d9846b80d735aab83b651f8e5b..3462f7edcaac1e8424d2d87469aea1385b7476eb 100644 (file)
@@ -21,6 +21,7 @@ static char *lockdown_reasons[LOCKDOWN_CONFIDENTIALITY_MAX+1] = {
        [LOCKDOWN_MODULE_SIGNATURE] = "unsigned module loading",
        [LOCKDOWN_DEV_MEM] = "/dev/mem,kmem,port",
        [LOCKDOWN_KEXEC] = "kexec of unsigned images",
+       [LOCKDOWN_HIBERNATION] = "hibernation",
        [LOCKDOWN_INTEGRITY_MAX] = "integrity",
        [LOCKDOWN_CONFIDENTIALITY_MAX] = "confidentiality",
 };