Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp338964yba; Fri, 26 Apr 2019 00:34:22 -0700 (PDT) X-Google-Smtp-Source: APXvYqyf+K/AMmSWUUd6o1BR20uVTiNkantkJw3P4FZb0pML6INGyNByqaviBlKYvkgLWzj8UZjB X-Received: by 2002:a62:aa05:: with SMTP id e5mr1658320pff.70.1556264062478; Fri, 26 Apr 2019 00:34:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1556264062; cv=none; d=google.com; s=arc-20160816; b=Kxq7Jo4fAsKmLPbTeM2C+ZlBMm/VW+WLrVahrQO8pkwmyLQCDS+f9lxMDX320+6YiK PbkYE+VK+rBpLSsRhQlEsL1nfw2rfmHekpQdCo91EwqKmLCc3fTzTuPeAsLaKj8kv3TR q681VxYkzUx71jNYnYocgAcK2m9tmcK0w2mGq+nw6KceAjU8SZBOFBFLq0Z9Wc6QItKq 8hgN9ZgsKTqV9zalUFkCEW1FA4j4OEoXaoCzqam7FvO7u9JbhIav8gHfFODyjkQIQLc0 r47JPCfzOda7Nr/Qml4UW0W2ivnJtc8Z70MXnQmjJpRejy3UFFizLtqfIRCe7Fr0QPmj Btjw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=03x8MyH4ONo6RL8TDAuJcYQYBUTk8Xfu5EMEl5vv8zs=; b=R7i6t0QaBuJLaGgxDacJeCtIeXdFh+L4Yy/CH3Au4OC8g14en/Zbw5wMebBERrhk8Z Of3UxXW3KHeHALznMvS9MvknKbhjXofg+CZL5m9u7W3OkYyYptyPhVPPEWlWAX43iIjL rI+vuYL6i4dgIfCkqHfqW0lL7BuQ7ob/09NM8gpVlFqsahw08q8c/nj/w3EUHTrWB4jd oy4lteo6MU0h3CwJYKdeycaDdBaRr1ufW07fDjfuHrUksNOwRF9g/0bCCnB8kISJgldC /6fQXa8NlXsW8DfpXrUmi5GvZ++1amfoEzvfdHtObvjxB91kTbljIXyqmOWPzDNUfyJr K9Xw== 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=QUARANTINE sp=NONE dis=NONE) header.from=vmware.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id j16si23856076pgl.335.2019.04.26.00.34.07; Fri, 26 Apr 2019 00:34:22 -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=QUARANTINE sp=NONE dis=NONE) header.from=vmware.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726659AbfDZHcu (ORCPT + 99 others); Fri, 26 Apr 2019 03:32:50 -0400 Received: from ex13-edg-ou-002.vmware.com ([208.91.0.190]:29121 "EHLO EX13-EDG-OU-002.vmware.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726436AbfDZHcW (ORCPT ); Fri, 26 Apr 2019 03:32:22 -0400 Received: from sc9-mailhost3.vmware.com (10.113.161.73) by EX13-EDG-OU-002.vmware.com (10.113.208.156) with Microsoft SMTP Server id 15.0.1156.6; Fri, 26 Apr 2019 00:31:44 -0700 Received: from sc2-haas01-esx0118.eng.vmware.com (sc2-haas01-esx0118.eng.vmware.com [10.172.44.118]) by sc9-mailhost3.vmware.com (Postfix) with ESMTP id 0758741298; Fri, 26 Apr 2019 00:31:46 -0700 (PDT) From: Nadav Amit To: Peter Zijlstra , Borislav Petkov , Andy Lutomirski , Ingo Molnar CC: , , , Thomas Gleixner , Nadav Amit , Dave Hansen , , , , , , , , , , , Rick Edgecombe , Daniel Borkmann , Alexei Starovoitov Subject: [PATCH v5 18/23] bpf: Use vmalloc special flag Date: Thu, 25 Apr 2019 17:11:38 -0700 Message-ID: <20190426001143.4983-19-namit@vmware.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190426001143.4983-1-namit@vmware.com> References: <20190426001143.4983-1-namit@vmware.com> MIME-Version: 1.0 Content-Type: text/plain Received-SPF: None (EX13-EDG-OU-002.vmware.com: namit@vmware.com does not designate permitted sender hosts) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Rick Edgecombe 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