Received: by 2002:ac0:a679:0:0:0:0:0 with SMTP id p54csp990309imp; Thu, 21 Feb 2019 15:53:43 -0800 (PST) X-Google-Smtp-Source: AHgI3IbRFKKRIosipFQ9tiJctCPIFevkeDjv5GrIEvtMYeCmo8NaitxlSLH9GBxYhcxKXYUaoyTz X-Received: by 2002:a62:4ec5:: with SMTP id c188mr1166125pfb.230.1550793223437; Thu, 21 Feb 2019 15:53:43 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1550793223; cv=none; d=google.com; s=arc-20160816; b=G2NdDtuIrF3qSEoSCpSOsxN5+2qZqO0e4Tdf8sZXQKG0Aa51xTUenOsoC0geNy1XTc ANvSvq6BtRvAuo+LvX7WfdGaUM8soZZL5VpzaRPvSNZZ0x9dOBNIfHHcY7nwAGwVQsaS cKa3jfVRf8ZYGBgyZrrBNtABtGYzMeFb8OMv1L6rHU26mXfiIiJb48HvznA0D8M6IGed SNR161/dcOhMVTR/vl7KkWeSFly8zC3Br4NzW/Z+g4in58yd/VFnl12dI7S86ZXeQQaP 3tVXfus0Y2VgPWAFq1GUIHz9yFmHALsiEnYdPRH5b910VnkXs0IUo4R/ibNS4lYghx2T 8iiQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from; bh=wlyB6G1b+Tm41nLBBmWshnK0KkaA3tTinkVpxpprDWU=; b=pgbERRmFnv4h72nqxP//1VOw/t2YyhY9sGlGcwzx7jqYgRi7DUG1MXFg9v9MOQddBW KPavKyO6hCWkY4HttOQkUVLxuo4dBxiFzcLs5FE44z1pGLvRKW/dpjDlSrhQRwH3U6xE W3IpsAsUbyXNFdRjjFFczPz+NOv+glVylPjdCoPnf2tPppsPiFYArQIluCBZFKao7uow yBc8oGIjKzNLiRH9df5O9BUtWpobjH+XL8ZX4JTbU7duaZYP5E8LA1hYe/hR1CkiWvek gBY95Vrmd0xgzgHx5Eo7LLxqX36+THu8B2bUnpwLDLqYkVxvzhiVUfj71gG52BgxU3OZ kWDA== 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 n9si248605pge.12.2019.02.21.15.53.28; Thu, 21 Feb 2019 15:53:43 -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 S1727413AbfBUXvc (ORCPT + 99 others); Thu, 21 Feb 2019 18:51:32 -0500 Received: from mga14.intel.com ([192.55.52.115]:3152 "EHLO mga14.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727285AbfBUXvK (ORCPT ); Thu, 21 Feb 2019 18:51:10 -0500 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 21 Feb 2019 15:51:09 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.58,397,1544515200"; d="scan'208";a="322394951" Received: from linksys13920.jf.intel.com (HELO rpedgeco-DESK5.jf.intel.com) ([10.54.75.11]) by fmsmga005.fm.intel.com with ESMTP; 21 Feb 2019 15:51:08 -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 , Daniel Borkmann , Alexei Starovoitov Subject: [PATCH v3 17/20] bpf: Use vmalloc special flag Date: Thu, 21 Feb 2019 15:44:48 -0800 Message-Id: <20190221234451.17632-18-rick.p.edgecombe@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190221234451.17632-1-rick.p.edgecombe@intel.com> References: <20190221234451.17632-1-rick.p.edgecombe@intel.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Use new flag VM_FLUSH_RESET_PERMS for handling freeing of special permissioned memory in vmalloc and remove places where memory was set RW before freeing which is no longer needed. Don't track if the memory is RO anymore because it is now tracked in vmalloc. Cc: Daniel Borkmann Cc: Alexei Starovoitov Signed-off-by: Rick Edgecombe --- include/linux/filter.h | 17 +++-------------- kernel/bpf/core.c | 1 - 2 files changed, 3 insertions(+), 15 deletions(-) diff --git a/include/linux/filter.h b/include/linux/filter.h index b9f93e62db96..f7b6c8a2e591 100644 --- a/include/linux/filter.h +++ b/include/linux/filter.h @@ -20,6 +20,7 @@ #include #include #include +#include #include @@ -483,7 +484,6 @@ struct bpf_prog { u16 pages; /* Number of allocated pages */ u16 jited:1, /* Is our filter JIT'ed? */ jit_requested:1,/* archs need to JIT the prog */ - undo_set_mem:1, /* Passed set_memory_ro() checkpoint */ gpl_compatible:1, /* Is filter GPL compatible? */ cb_access:1, /* Is control block accessed? */ dst_needed:1, /* Do we need dst entry? */ @@ -681,27 +681,17 @@ bpf_ctx_narrow_access_ok(u32 off, u32 size, u32 size_default) static inline void bpf_prog_lock_ro(struct bpf_prog *fp) { - fp->undo_set_mem = 1; + set_vm_flush_reset_perms(fp); set_memory_ro((unsigned long)fp, fp->pages); } -static inline void bpf_prog_unlock_ro(struct bpf_prog *fp) -{ - if (fp->undo_set_mem) - set_memory_rw((unsigned long)fp, fp->pages); -} - static inline void bpf_jit_binary_lock_ro(struct bpf_binary_header *hdr) { + set_vm_flush_reset_perms(hdr); set_memory_ro((unsigned long)hdr, hdr->pages); set_memory_x((unsigned long)hdr, hdr->pages); } -static inline void bpf_jit_binary_unlock_ro(struct bpf_binary_header *hdr) -{ - set_memory_rw((unsigned long)hdr, hdr->pages); -} - static inline struct bpf_binary_header * bpf_jit_binary_hdr(const struct bpf_prog *fp) { @@ -736,7 +726,6 @@ void __bpf_prog_free(struct bpf_prog *fp); static inline void bpf_prog_unlock_free(struct bpf_prog *fp) { - bpf_prog_unlock_ro(fp); __bpf_prog_free(fp); } diff --git a/kernel/bpf/core.c b/kernel/bpf/core.c index 19c49313c709..465c1c3623e8 100644 --- a/kernel/bpf/core.c +++ b/kernel/bpf/core.c @@ -804,7 +804,6 @@ void __weak bpf_jit_free(struct bpf_prog *fp) if (fp->jited) { struct bpf_binary_header *hdr = bpf_jit_binary_hdr(fp); - bpf_jit_binary_unlock_ro(hdr); bpf_jit_binary_free(hdr); WARN_ON_ONCE(!bpf_prog_kallsyms_verify_off(fp)); -- 2.17.1