From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-11.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id DE6B9C433C1 for ; Fri, 19 Mar 2021 21:28:45 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 627DA6194A for ; Fri, 19 Mar 2021 21:28:45 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 627DA6194A Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=chromium.org Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id A69666B0070; Fri, 19 Mar 2021 17:28:44 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id A01716B0072; Fri, 19 Mar 2021 17:28:44 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 86CEB6B0071; Fri, 19 Mar 2021 17:28:44 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0162.hostedemail.com [216.40.44.162]) by kanga.kvack.org (Postfix) with ESMTP id 6D3946B006E for ; Fri, 19 Mar 2021 17:28:44 -0400 (EDT) Received: from smtpin13.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay01.hostedemail.com (Postfix) with ESMTP id 1B34A1801D017 for ; Fri, 19 Mar 2021 21:28:44 +0000 (UTC) X-FDA: 77937913368.13.F94E718 Received: from mail-pf1-f174.google.com (mail-pf1-f174.google.com [209.85.210.174]) by imf06.hostedemail.com (Postfix) with ESMTP id 9D102C001C40 for ; Fri, 19 Mar 2021 21:28:40 +0000 (UTC) Received: by mail-pf1-f174.google.com with SMTP id j25so6774467pfe.2 for ; Fri, 19 Mar 2021 14:28:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=COYequ/Al4vh0bS6DyJKs6KMlXrnC5mSUzfXzkBff1k=; b=I8TknAyVLcDhMIatOxfg+fdU62BWJHBXwg3Rx8TWavaNLBa3eNY1/bJ+QswJecZL+u dxQZJxpcqrjERo37QE97Ja+SJjY29erRLfmXZqZDZ0A18U3QnAljIYefhpB0s3kMil0o OHt2KyuJ0VnoNR446RaOmtyETkgphZPoeTESE= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=COYequ/Al4vh0bS6DyJKs6KMlXrnC5mSUzfXzkBff1k=; b=lkAE1Gu9D7LcgkrOzzYbAelXwG37CgZK1g4a1vynUf4yesaF6FzVDYeRLEkt1bJM+D 1+4Gimn7Gcgjpda3yfVR0bN1fO2dJMwTb0omkawdmQNNIHXJRd7iivPlhQc9qreAxE+Q 7XpwcsO4P11UG8B5nWEZ4ISrIHwtA12ExL/TlOOqqtV2BIalE4UFOk7RhS4aKHUt2R5u 10rDF/ZJdA0h1vVW3PHClbxZ1orkNdjaoy7B92I2xzS6hzEsW/7kpFe867K3FgWm7p6D VfnpMK3E+vKA8RjNKRuO1lbqJnEmKSm/W/n5NyvYkKl4asBZ6XfBdo3ggexmrO3gjRwm wagw== X-Gm-Message-State: AOAM531AyyUHvEUtrGu0VSPRCpUsSoRSXLeUjNoeb0WmfzXyGTlMmOGQ s2wSRf6VYRXQZ2u1EIbeJsUW3g== X-Google-Smtp-Source: ABdhPJyZr4/GDEamWBieVEFuuZx6Q7tu0xmdbWTaLaDKNdCcZA75rRto0XPpcUkqhpQvA6Nqpe018g== X-Received: by 2002:aa7:9081:0:b029:1f9:26c9:1609 with SMTP id i1-20020aa790810000b02901f926c91609mr10885048pfa.54.1616189319323; Fri, 19 Mar 2021 14:28:39 -0700 (PDT) Received: from www.outflux.net (smtp.outflux.net. [198.145.64.163]) by smtp.gmail.com with ESMTPSA id t19sm6136631pgj.8.2021.03.19.14.28.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 19 Mar 2021 14:28:38 -0700 (PDT) From: Kees Cook To: Thomas Gleixner Cc: Kees Cook , Elena Reshetova , x86@kernel.org, Andy Lutomirski , Peter Zijlstra , Catalin Marinas , Will Deacon , Mark Rutland , Alexander Potapenko , Alexander Popov , Ard Biesheuvel , Jann Horn , Vlastimil Babka , David Hildenbrand , Mike Rapoport , Andrew Morton , Jonathan Corbet , Randy Dunlap , kernel-hardening@lists.openwall.com, linux-hardening@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: [PATCH v7 0/6] Optionally randomize kernel stack offset each syscall Date: Fri, 19 Mar 2021 14:28:29 -0700 Message-Id: <20210319212835.3928492-1-keescook@chromium.org> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: 9D102C001C40 X-Stat-Signature: 3cusheqb59gpyaj1b1rab5y3fc18ypar Received-SPF: none (chromium.org>: No applicable sender policy available) receiver=imf06; identity=mailfrom; envelope-from=""; helo=mail-pf1-f174.google.com; client-ip=209.85.210.174 X-HE-DKIM-Result: pass/pass X-HE-Tag: 1616189320-287391 Content-Transfer-Encoding: quoted-printable X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: v7: - fix copy/paste-o from v6 CONFIG additions. v6: https://lore.kernel.org/lkml/20210315180229.1224655-1-keescook@chromi= um.org/ v5: https://lore.kernel.org/lkml/20210309214301.678739-1-keescook@chromiu= m.org/ v4: https://lore.kernel.org/lkml/20200622193146.2985288-1-keescook@chromi= um.org/ v3: https://lore.kernel.org/lkml/20200406231606.37619-1-keescook@chromium= .org/ v2: https://lore.kernel.org/lkml/20200324203231.64324-1-keescook@chromium= .org/ rfc: https://lore.kernel.org/kernel-hardening/20190329081358.30497-1-elen= a.reshetova@intel.com/ Hi, This is a continuation and refactoring of Elena's earlier effort to add kernel stack base offset randomization. In the time since the earlier discussions, two attacks[1][2] were made public that depended on stack determinism, so we're no longer in the position of "this is a good idea but we have no examples of attacks". :) Earlier discussions also devolved into debates on entropy sources, which is mostly a red herring, given the already low entropy available due to stack size. Regardless, entropy can be changed/improved separately from this series as needed. Earlier discussions also got stuck debating how much syscall overhead was too much, but this is also a red herring since the feature itself needs to be selectable at boot with no cost for those that don't want it: this is solved here with static branches. So, here is the latest improved version, made as arch-agnostic as possible, with usage added for x86 and arm64. It also includes some small static branch clean ups, and addresses some surprise performance issues due to the stack canary[3]. At the very least, the first two patches can land separately (already Acked and Reviewed), since they're kind of "separate", but introduce macros that are used in the core stack changes. If I can get an Ack from an arm64 maintainer, I think this could all land via -tip to make merging easiest. Thanks! -Kees [1] https://a13xp0p0v.github.io/2020/02/15/CVE-2019-18683.html [2] https://repositorio-aberto.up.pt/bitstream/10216/125357/2/374717.pdf [3] https://lore.kernel.org/lkml/202003281520.A9BFF461@keescook/ Kees Cook (6): jump_label: Provide CONFIG-driven build state defaults init_on_alloc: Optimize static branches stack: Optionally randomize kernel stack offset each syscall x86/entry: Enable random_kstack_offset support arm64: entry: Enable random_kstack_offset support lkdtm: Add REPORT_STACK for checking stack offsets .../admin-guide/kernel-parameters.txt | 11 +++++ Makefile | 4 ++ arch/Kconfig | 23 ++++++++++ arch/arm64/Kconfig | 1 + arch/arm64/kernel/Makefile | 5 +++ arch/arm64/kernel/syscall.c | 10 +++++ arch/x86/Kconfig | 1 + arch/x86/entry/common.c | 3 ++ arch/x86/include/asm/entry-common.h | 8 ++++ drivers/misc/lkdtm/bugs.c | 17 ++++++++ drivers/misc/lkdtm/core.c | 1 + drivers/misc/lkdtm/lkdtm.h | 1 + include/linux/jump_label.h | 19 +++++++++ include/linux/mm.h | 10 +++-- include/linux/randomize_kstack.h | 42 +++++++++++++++++++ init/main.c | 23 ++++++++++ mm/page_alloc.c | 4 +- mm/slab.h | 6 ++- 18 files changed, 181 insertions(+), 8 deletions(-) create mode 100644 include/linux/randomize_kstack.h --=20 2.25.1