lkml.org 
[lkml]   [2019]   [Jul]   [31]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    Subject[PATCH V37 10/29] hibernate: Disable when the kernel is locked down
    From
    From: Josh Boyer <jwboyer@fedoraproject.org>

    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
    ---
    include/linux/security.h | 1 +
    kernel/power/hibernate.c | 3 ++-
    security/lockdown/lockdown.c | 1 +
    3 files changed, 4 insertions(+), 1 deletion(-)

    diff --git a/include/linux/security.h b/include/linux/security.h
    index 69c5de539e9a..304a155a5628 100644
    --- a/include/linux/security.h
    +++ b/include/linux/security.h
    @@ -106,6 +106,7 @@ enum lockdown_reason {
    LOCKDOWN_MODULE_SIGNATURE,
    LOCKDOWN_DEV_MEM,
    LOCKDOWN_KEXEC,
    + LOCKDOWN_HIBERNATION,
    LOCKDOWN_INTEGRITY_MAX,
    LOCKDOWN_CONFIDENTIALITY_MAX,
    };
    diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c
    index cd7434e6000d..3c0a5a8170b0 100644
    --- a/kernel/power/hibernate.c
    +++ b/kernel/power/hibernate.c
    @@ -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);
    }

    /**
    diff --git a/security/lockdown/lockdown.c b/security/lockdown/lockdown.c
    index 6f302c156bc8..a0996f75629f 100644
    --- a/security/lockdown/lockdown.c
    +++ b/security/lockdown/lockdown.c
    @@ -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",
    };
    --
    2.22.0.770.g0f2c4a37fd-goog
    \
     
     \ /
      Last update: 2019-08-01 00:20    [W:2.287 / U:0.060 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site