Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp19113665ybl; Fri, 3 Jan 2020 16:10:50 -0800 (PST) X-Google-Smtp-Source: APXvYqzS4hxWAvxfn5+LqE2ZaKgRR9GWQy8OW47j9stLh32sdjqIiBhOECQxVrpmUd4biamK6IuZ X-Received: by 2002:aca:b943:: with SMTP id j64mr5069781oif.155.1578096649992; Fri, 03 Jan 2020 16:10:49 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1578096649; cv=none; d=google.com; s=arc-20160816; b=WbK8CP5YZjc13Fk01FPHaE3wyBq3V7X6tgB+jApO+kDogcrpNuJk119v0c6PiwoIFT txXYANTITunrcjMco06bzeSchcYGp86X/4vTsluFryGt9UzAi9BA2igOuGeFNYrKe2Af IRHbJfD22i2PHX9eHbYQ/lXKE4yawxQ+80I4dndIDPBll7DnWWtXDoczNCptSagJ8tJZ Uz0cKBF0aYTEv0E07b3vuF1riv6f5CDLRPU0rw2U6ErpT/MuXqp/wHKldgMYmw1yYW/2 +7s1DqbU0oRjKTTRPiS7geCvoObhtIhV3whu6vWshamOrqZkKwvn0hfHUxQEom8JpPP3 OF6Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:date:from:dkim-signature; bh=mZInC9bs1GJK5S1VRMG9W+fYRlRD1KYZ+adhd929at4=; b=qV3q7AOlNTisTC0YyMhDwd49r1daosem8VNiEkMJjWIdUa4G0FadVAopsJ/5jqw4aZ 2pWk2qfId/9M4xeYf1w7qe7Iji92WroY4ChAo4AEVOJedVA7Fm1mUfLjxJOT1g7ZLbEb uUNui9n09dFTbxWqBaP9dczSeSnjFo+qTgwfMApxP6A/atmi08Vrk1exI6HrZ4R0rd+m SVz5YkqkrAR9wWiYWQDvgU2NzpnB4EQK8DMogF7huiZ67l7Im1IS2idpU5+nTb2q2EHf MeOXizMdfWj7c+BeggysKk5oNeR0/ZGKtQnb07VnqgtgE8zXjz5VARtl8j/G9Y3SmNSK Jj0Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=PHUCh4j9; 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=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 14si29478062oie.181.2020.01.03.16.10.35; Fri, 03 Jan 2020 16:10:49 -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; dkim=pass header.i=@chromium.org header.s=google header.b=PHUCh4j9; 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=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726647AbgADAJo (ORCPT + 99 others); Fri, 3 Jan 2020 19:09:44 -0500 Received: from mail-wm1-f68.google.com ([209.85.128.68]:52498 "EHLO mail-wm1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726426AbgADAJo (ORCPT ); Fri, 3 Jan 2020 19:09:44 -0500 Received: by mail-wm1-f68.google.com with SMTP id p9so9715087wmc.2 for ; Fri, 03 Jan 2020 16:09:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:date:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=mZInC9bs1GJK5S1VRMG9W+fYRlRD1KYZ+adhd929at4=; b=PHUCh4j9bv3MKh2xfjtcFmyZPOA3I2o+KBPzt0Jx1fHilzZND1yoG4A7yvL+xajEHS DKPU9P0CLYeuuqAMZhY8alWdplYKY0hPPq3fK4bntBjH8LZ5twRVgtrsumRyr28J4YKG +XjFsHxPW1qK1FtBgxtXqNzMmzCao0EZQXNKE= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:date:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=mZInC9bs1GJK5S1VRMG9W+fYRlRD1KYZ+adhd929at4=; b=pTJDRe+y2Ikm2sS/hH27Vz7BcVZEYYXCBJPjmpjX9PYt7Z/R3DuPlFm2LoWZ5xfJin TjhuyBZAgO7jPdSq4cKdFVojUFv7fv/CSwVCwhL0IHbvWFoxe2Q41sqrAfFmOy6cs6tq 4iBO8FPKFEZx447gru4S8ZPZZExDN5pr4x47DYB9hwl+sNaI2ji2KVEusl32ZWg14ftB nnja89nMwoS8nBWeV8z8PbKKF+Blf6FSnpqOckczYEsa1Sq/iChgE5/Jg0k/xK/qkSXS vylCIeJsJUMChatrSpbdP/UL03OtkZk6WLn7Wnh2eKpaDeovZPwTZPQ+RMc6zLbGEGcI joHg== X-Gm-Message-State: APjAAAVVR+Mz/ubyXplr7mXKQodbEyN5FZ2tTgZ5PvRypwXTwQ/rQcwy 7wmgipOj7r5NG2Lh1To8D/Q44g== X-Received: by 2002:a05:600c:2c7:: with SMTP id 7mr21039287wmn.87.1578096581662; Fri, 03 Jan 2020 16:09:41 -0800 (PST) Received: from chromium.org (77-56-209-237.dclient.hispeed.ch. [77.56.209.237]) by smtp.gmail.com with ESMTPSA id a1sm14047106wmj.40.2020.01.03.16.09.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Jan 2020 16:09:40 -0800 (PST) From: KP Singh X-Google-Original-From: KP Singh Date: Sat, 4 Jan 2020 01:09:55 +0100 To: Andrii Nakryiko Cc: open list , bpf , linux-security-module@vger.kernel.org, Alexei Starovoitov , Daniel Borkmann , James Morris , Kees Cook , Thomas Garnier , Michael Halcrow , Paul Turner , Brendan Gregg , Jann Horn , Matthew Garrett , Christian Brauner , =?iso-8859-1?Q?Micka=EBl_Sala=FCn?= , Florent Revest , Brendan Jackman , Martin KaFai Lau , Song Liu , Yonghong Song , "Serge E. Hallyn" , Mauro Carvalho Chehab , "David S. Miller" , Greg Kroah-Hartman , Nicolas Ferre , Stanislav Fomichev , Quentin Monnet , Andrey Ignatov , Joe Stringer Subject: Re: [PATCH bpf-next v1 12/13] bpf: lsm: Add selftests for BPF_PROG_TYPE_LSM Message-ID: <20200104000955.GB23487@chromium.org> References: <20191220154208.15895-1-kpsingh@chromium.org> <20191220154208.15895-13-kpsingh@chromium.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.10.1 (2018-07-13) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 23-Dez 22:49, Andrii Nakryiko wrote: > On Fri, Dec 20, 2019 at 7:42 AM KP Singh wrote: > > > > From: KP Singh > > > > * Load a BPF program that audits mprotect calls > > * Attach the program to the "file_mprotect" LSM hook > > * Verify if the program is actually loading by reading > > securityfs > > * Initialize the perf events buffer and poll for audit events > > * Do an mprotect on some memory allocated on the heap > > * Verify if the audit event was received > > > > Signed-off-by: KP Singh > > --- > > MAINTAINERS | 2 + > > .../bpf/prog_tests/lsm_mprotect_audit.c | 129 ++++++++++++++++++ > > .../selftests/bpf/progs/lsm_mprotect_audit.c | 58 ++++++++ > > 3 files changed, 189 insertions(+) > > create mode 100644 tools/testing/selftests/bpf/prog_tests/lsm_mprotect_audit.c > > create mode 100644 tools/testing/selftests/bpf/progs/lsm_mprotect_audit.c > > > > [...] > > > +/* > > + * Define some of the structs used in the BPF program. > > + * Only the field names and their sizes need to be the > > + * same as the kernel type, the order is irrelevant. > > + */ > > +struct mm_struct { > > + unsigned long start_brk, brk, start_stack; > > +}; > > + > > +struct vm_area_struct { > > + unsigned long start_brk, brk, start_stack; > > + unsigned long vm_start, vm_end; > > + struct mm_struct *vm_mm; > > + unsigned long vm_flags; > > +}; > > + > > +BPF_TRACE_3("lsm/file_mprotect", mprotect_audit, > > + struct vm_area_struct *, vma, > > + unsigned long, reqprot, unsigned long, prot) > > +{ > > + struct mprotect_audit_log audit_log = {}; > > + int is_heap = 0; > > + > > + __builtin_preserve_access_index(({ > > you don't need __builtin_preserve_access_index, if you mark > vm_area_struct and mm_struct with > __attribute__((preserve_access_index) Cool, updated! > > > + is_heap = (vma->vm_start >= vma->vm_mm->start_brk && > > + vma->vm_end <= vma->vm_mm->brk); > > + })); > > + > > + audit_log.magic = MPROTECT_AUDIT_MAGIC; > > + audit_log.is_heap = is_heap; > > + bpf_lsm_event_output(&perf_buf_map, BPF_F_CURRENT_CPU, &audit_log, > > + sizeof(audit_log)); > > You test would be much simpler if you use global variables to pass > data back to userspace, instead of using perf buffer. > > Also please see fentry_fexit.c test for example of using BPF skeleton > to shorten and simpify userspace part of test. Thanks for the skeleton work! This makes using global variables easier and the tests are indeed much simpler, I have updated it for the next revision. One follow up question regarding global variables, let's say I have the following global variable defined in the BPF program: struct result_info { __u32 count; }; struct result_info result = { .count = 0, }; The defintion of result_info needs to be included before the .skel.h as it's not automatically generated or maybe I am missing a trick here? For now, I have defined this in a header which gets included both in the program and the test. - KP > > > + return 0; > > +} > > -- > > 2.20.1 > >