Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp2817667yba; Mon, 22 Apr 2019 13:34:45 -0700 (PDT) X-Google-Smtp-Source: APXvYqwRcRjZl1JnVWsqNTChSghhdNIHhDT6/6RYDGt8cRm8dBv5CKUp1c4SHDLkHm0/MXVYp6Gz X-Received: by 2002:a63:3dca:: with SMTP id k193mr20937344pga.146.1555965285897; Mon, 22 Apr 2019 13:34:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1555965285; cv=none; d=google.com; s=arc-20160816; b=RncknTGUz1snYqw734CuUCY+d7E94ob2MGQdjGagHbA42M0MzwR1eQZat+semrlbGZ ts/EnrSFOt6q99Qai5N8j3EEXPNrGJOAbSa3SHtsaJaiGDedySOuzF88kVZudF/KwXtr DyL7NZtFleBvwZUBHesMR5WsZxolKXtQ0T2d5Y9hk/Ckekc8Qom5N5DOWHkmZmnMU3RC V4aywOFKePe9SkvF24pQcAH9J3EWMw39Yt5hqqzpvfyVxdVmXG01+3x2da9wXF1oFqIt SLxDVI8nsOZ0iGfUmYkzXl3gb395xS36RCpriAgcAeQqCdNFtfxyskKP2HwH8U/MhAt/ BHkQ== 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=wig8MszCtUvg2yw20GAeD+70ac75PEX/7kXXzCB+iko=; b=kNQrqbaMb32Cdd4vKb0nAzJrASz/10+ZHUbLAZSEYixZ4iZzQ55XgwLUFzYw73GJkI JNqI3+1k0fFVsg4oxQPFUOfJaJeuB/2hqQOr/vkOWNJOIO36rgGMGthOYv4T05dZc1EJ GsiVutIUbdY7rfc+W37YmJhwT94CW/rOwEFaXwcF2V/mayBiX/g52q08RXcwmf19uAvb srqUQ9nBU9Uvbx8Y3kUDfZr6zBImz0T7IdArdwrIiLeNdvOQL7iZApUOX3g1O+gQSF93 bbfQNBcatngXwnspStNAK+aYHu5JtLHuXvp+nAqt4IUGRrYB31+VjeEM5ii1NARZU7YR ZU+g== 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 s3si10790433plb.418.2019.04.22.13.34.19; Mon, 22 Apr 2019 13:34:45 -0700 (PDT) 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 S1728881AbfDVS7d (ORCPT + 99 others); Mon, 22 Apr 2019 14:59:33 -0400 Received: from mga11.intel.com ([192.55.52.93]:60347 "EHLO mga11.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728756AbfDVS6s (ORCPT ); Mon, 22 Apr 2019 14:58:48 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 22 Apr 2019 11:58:46 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.60,382,1549958400"; d="scan'208";a="136417170" Received: from linksys13920.jf.intel.com (HELO rpedgeco-DESK5.jf.intel.com) ([10.54.75.11]) by orsmga008.jf.intel.com with ESMTP; 22 Apr 2019 11:58:42 -0700 From: Rick Edgecombe To: Borislav Petkov , Andy Lutomirski , Ingo Molnar Cc: linux-kernel@vger.kernel.org, x86@kernel.org, hpa@zytor.com, Thomas Gleixner , 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 v4 18/23] bpf: Use vmalloc special flag Date: Mon, 22 Apr 2019 11:58:00 -0700 Message-Id: <20190422185805.1169-19-rick.p.edgecombe@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190422185805.1169-1-rick.p.edgecombe@intel.com> References: <20190422185805.1169-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 14ec3bdad9a9..7d3abde3f183 100644 --- a/include/linux/filter.h +++ b/include/linux/filter.h @@ -20,6 +20,7 @@ #include #include #include +#include #include @@ -503,7 +504,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? */ @@ -733,27 +733,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) { @@ -789,7 +779,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 ff09d32a8a1b..c605397c79f0 100644 --- a/kernel/bpf/core.c +++ b/kernel/bpf/core.c @@ -848,7 +848,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