Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp1633929imu; Thu, 17 Jan 2019 00:23:13 -0800 (PST) X-Google-Smtp-Source: ALg8bN6WPPiSAuRkJkoK7gLoY4Y2G3yBnYCUSiZVmJH4HV6E2PiUeMHnPnsF38bnWSL2xed+ZLNt X-Received: by 2002:a17:902:b406:: with SMTP id x6mr13487551plr.329.1547713393129; Thu, 17 Jan 2019 00:23:13 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1547713393; cv=none; d=google.com; s=arc-20160816; b=X+WX4ILcS6SdvcGC5m3L8fZMdRiqpRN9sTwVIjr8D3qiTnlGsfouVr6SO6waIeMhjO QuxlAzRRGnooTuZFOKTtPGTF6dXGuCS2GImF0HmEjWKponpdNKJBUTS9Epf9ZPXlLUZq SHPzjnRHVyZt2m9oQcFID4kDTMUJFyFKgQf8yCRg+V6TJMciHNE5U6XKaLiOZbHXZeJk jwzYup02AK+ENDSiBgQoPp2/WAUVKdQFR0A5749Mip0lhrNHsWLj2UIIAN6bIPZNtgd5 ASoi/JEesuiLzpGAM5L6rn/OzE6UK5toz/3GIpKtUG3qEeBOdV1RBBSSx1avivw+cDKX l5kw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from; bh=dkFpcfzUNUxXxqqxNU8xrUagOp7iGRMiMKkSdW/TWN0=; b=eUi19liUjz5bYmxxGDQ2jrdKcPpITjggVQBdUlBz5H9PvW+qjJSsq9KYJvyoIIXliF PZql34Shc0rJymo9oSj+8zI0650cO/Eqfq2R0ZJZjjAO4aCYLXzOA0pNB6HA6Dlf8Hto 3OVo/f+gNIoedySXTAMroYe8BYupWMC8BQODA5g2oKEBbCEq4AEFbFKUJFebFVg/oKF5 XVkqOE6SghtyHHGCkJBS6We9JQLcCp8nQRoeUdPoYPQuzMHkU3Ejn0GFPMGRRDAjDsDH oaXsvHZVFG0XEe91fUDjxaVpWsyaHna5rWfT/D2/HG/KxMJBcV74Ex4E3Rv177uqNZWO +45A== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d9si333095pgb.105.2019.01.17.00.22.57; Thu, 17 Jan 2019 00:23:13 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726993AbfAQAgL (ORCPT + 99 others); Wed, 16 Jan 2019 19:36:11 -0500 Received: from mga05.intel.com ([192.55.52.43]:42206 "EHLO mga05.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729776AbfAQAdg (ORCPT ); Wed, 16 Jan 2019 19:33:36 -0500 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga105.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 16 Jan 2019 16:33:36 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.56,488,1539673200"; d="scan'208";a="292166007" Received: from rpedgeco-desk5.jf.intel.com ([10.54.75.79]) by orsmga005.jf.intel.com with ESMTP; 16 Jan 2019 16:33:34 -0800 From: Rick Edgecombe To: Andy Lutomirski , Ingo Molnar Cc: linux-kernel@vger.kernel.org, x86@kernel.org, hpa@zytor.com, Thomas Gleixner , Borislav Petkov , Nadav Amit , Dave Hansen , Peter Zijlstra , linux_dti@icloud.com, linux-integrity@vger.kernel.org, linux-security-module@vger.kernel.org, akpm@linux-foundation.org, kernel-hardening@lists.openwall.com, linux-mm@kvack.org, will.deacon@arm.com, ard.biesheuvel@linaro.org, kristen@linux.intel.com, deneen.t.dock@intel.com, Rick Edgecombe Subject: [PATCH 00/17] Merge text_poke fixes and executable lockdowns Date: Wed, 16 Jan 2019 16:32:42 -0800 Message-Id: <20190117003259.23141-1-rick.p.edgecombe@intel.com> X-Mailer: git-send-email 2.17.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patchset improves several overlapping issues around stale TLB entries and W^X violations. It is combined from a slightly tweaked "x86/alternative: text_poke() enhancements v7" [1] and a next version of the "Don’t leave executable TLB entries to freed pages v2" [2] patchsets that were conflicting. The related issues that this fixes: 1. Fixmap PTEs that are used for patching are available for access from other cores and might be exploited. They are not even flushed from the TLB in remote cores, so the risk is even higher. Address this issue by introducing a temporary mm that is only used during patching. Unfortunately, due to init ordering, fixmap is still used during boot-time patching. Future patches can eliminate the need for it. 2. Missing lockdep assertion to ensure text_mutex is taken. It is actually not always taken, so fix the instances that were found not to take the lock (although they should be safe even without taking the lock). 3. Module_alloc returning memory that is RWX until a module is finished loading. 4. Sometimes when memory is freed via the module subsystem, an executable permissioned TLB entry can remain to a freed page. If the page is re-used to back an address that will receive data from userspace, it can result in user data being mapped as executable in the kernel. The root of this behavior is vfree lazily flushing the TLB, but not lazily freeing the underlying pages. The new changes from "Don’t leave executable TLB entries to freed pages v2": - Add support for case of hibernate trying to save an unmapped page on the directmap. (Ard Biesheuvel) - No week arch breakout for vfree-ing special memory (Andy Lutomirski) - Avoid changing deferred free code by moving modules init free to work queue (Andy Lutomirski) - Plug in new flag for kprobes and ftrace - More arch generic names for set_pages functions (Ard Biesheuvel) - Fix for TLB not always flushing the directmap (Nadav Amit) New changes from from "x86/alternative: text_poke() enhancements v7" - Fix build failure on CONFIG_RANDOMIZE_BASE=n (Rick) - Remove text_poke usage from ftrace (Nadav) [1] https://lkml.org/lkml/2018/12/5/200 [2] https://lkml.org/lkml/2018/12/11/1571 Andy Lutomirski (1): x86/mm: temporary mm struct Nadav Amit (12): Fix "x86/alternatives: Lockdep-enforce text_mutex in text_poke*()" x86/jump_label: Use text_poke_early() during early init fork: provide a function for copying init_mm x86/alternative: initializing temporary mm for patching x86/alternative: use temporary mm for text poking x86/kgdb: avoid redundant comparison of patched code x86/ftrace: set trampoline pages as executable x86/kprobes: Instruction pages initialization enhancements x86: avoid W^X being broken during modules loading x86/jump-label: remove support for custom poker x86/alternative: Remove the return value of text_poke_*() module: Prevent module removal racing with text_poke() Rick Edgecombe (4): Add set_alias_ function and x86 implementation mm: Make hibernate handle unmapped pages vmalloc: New flags for safe vfree on special perms Plug in new special vfree flag arch/Kconfig | 4 + arch/x86/Kconfig | 1 + arch/x86/include/asm/fixmap.h | 2 - arch/x86/include/asm/mmu_context.h | 32 +++++ arch/x86/include/asm/pgtable.h | 3 + arch/x86/include/asm/set_memory.h | 3 + arch/x86/include/asm/text-patching.h | 7 +- arch/x86/kernel/alternative.c | 197 ++++++++++++++++++++------- arch/x86/kernel/ftrace.c | 15 +- arch/x86/kernel/jump_label.c | 19 ++- arch/x86/kernel/kgdb.c | 25 +--- arch/x86/kernel/kprobes/core.c | 19 ++- arch/x86/kernel/module.c | 2 +- arch/x86/mm/init_64.c | 36 +++++ arch/x86/mm/pageattr.c | 16 ++- arch/x86/xen/mmu_pv.c | 2 - include/linux/filter.h | 18 +-- include/linux/mm.h | 18 +-- include/linux/sched/task.h | 1 + include/linux/set_memory.h | 10 ++ include/linux/vmalloc.h | 13 ++ init/main.c | 3 + kernel/bpf/core.c | 1 - kernel/fork.c | 24 +++- kernel/module.c | 87 ++++++------ mm/page_alloc.c | 6 +- mm/vmalloc.c | 122 ++++++++++++++--- 27 files changed, 497 insertions(+), 189 deletions(-) -- 2.17.1