Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp959374ybl; Fri, 24 Jan 2020 12:43:58 -0800 (PST) X-Google-Smtp-Source: APXvYqylWWhV3qf2+q9TXTTlK3kdOcmJSD6MsfM2cZdp+GvJ4baIPnBUEoNofG0IRWU5ZfvIF4yQ X-Received: by 2002:a9d:4f11:: with SMTP id d17mr3919904otl.228.1579898637890; Fri, 24 Jan 2020 12:43:57 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1579898637; cv=none; d=google.com; s=arc-20160816; b=GZusRiK4WUQQlum1g9WlqQYx7I92A+rqlkuA9y7B48jEIRXMicOPTO2N35drwPJ8Xa 8IFZt4s2I3n4JfT5N7zvoX3yb7tDqtmmPInJ5R7OYpVckc8vKBHZ10laoTrVm22yvGKF Yea1dIwDczVsng5HZ/KTQq+LnMeh9gAPpGT4uoUAGek/lXg8sqwMLOtihexE1+qiXyu6 4k7aj6pFZeIUHXJ5r7CMdz+fYmbwKTs8f/6O2TrJ+w6BdcZGImZtwkaV4X+qRlvqbtvh LV1luvZz8PlcpufdJDB7FGYxd6PCPH34lkgBdY227ovG8xGRz4/T1DvhAVNZNPpo1jEc wyow== 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=ASOtb96BI6lTR6mu+ywHC0FfQOfd7+/ZeIlUMSQ1MgU=; b=YduHvsGdy7mk0NBraRi27v6SgS/vonIc6OiqXWtjeyQaSVBWZEOLiD0x91MjPiHL6O ghtdf2pJ4xS+NiBcWhrL/YqvtSlt9QbASsE8b/0KtJ5xp4szBE2+ZeamODUpu16Trlbb tMPCFg/JRiqEesZZf7Feb35UpsvzStQdH+s7y/5vFw2m5rfJI5uhAupQCmlLHWV0CEOh Sq6vtiXI3Rh2A34rjVcWGSG3ozUMX0W6K0NfghpwQ83otKP9kk3pUy798etxtVn5+FLy JjAS8zsWL2eSvdXbD6VAdASIdvcwvgA6gFVDp7SKA0jnWjvyuZ/y+WnYc4Wslb80bSiJ 3jUA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=kmOyBuxl; 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 x20si3354107otq.222.2020.01.24.12.43.46; Fri, 24 Jan 2020 12:43:57 -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=kmOyBuxl; 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 S2388960AbgAXOQM (ORCPT + 99 others); Fri, 24 Jan 2020 09:16:12 -0500 Received: from mail-pj1-f65.google.com ([209.85.216.65]:39065 "EHLO mail-pj1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388691AbgAXOQM (ORCPT ); Fri, 24 Jan 2020 09:16:12 -0500 Received: by mail-pj1-f65.google.com with SMTP id e11so1179500pjt.4 for ; Fri, 24 Jan 2020 06:16:11 -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=ASOtb96BI6lTR6mu+ywHC0FfQOfd7+/ZeIlUMSQ1MgU=; b=kmOyBuxl6PiajDWOBlWoRTw9yCno28+dJhqCOaiVgt6OckuzVAlVVZRw10RbyxwIBa uzMgDELMRyNUlNoW+CptCJeZidIZIYqFTEpTEhkuNiGGPZE/WdP8i3rmgFINfGzlkZdo sLYYApupXDdvLWAGmDrqQIwwialBjxVF2Ry8Q= 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=ASOtb96BI6lTR6mu+ywHC0FfQOfd7+/ZeIlUMSQ1MgU=; b=hRsAmFIsUAZcuUUO8uYeGqUIoxePJiPmiFeGNTHnrZ8OzUJ/zHFW/SQxdGrO9zbKJR VnkylwuJgBp+ynuSn8sVQl4JnI5NckpGS4DpShBtFdHf2fbXSCxTYdJLIPUzwDqEJQhs 4WXYCam4cy8awZJnNuRTsTC62wl0oNRvj4cwragKebZghCs8+Ae/q4hF2BZWc/yx062R mCD7yOtFK+p+1rvp/0ALC71yscJlzOarVyUM6PuxIFAQbQILEDjK1kjEF2VRxthVUYrb 3rqxQ4eP46bcwAauKBiZ9eoetQZ0C29EED84N9/EzHETQ0uOvqQX10P9XKIiqrr2lpH1 7MoA== X-Gm-Message-State: APjAAAVtNFl5I6sbxBV5JkpUjiWzBiIUo5wvUyFsIi6GGkIvL+duBD+8 tO0Qew73VN9tiLN781K59M69yA== X-Received: by 2002:a17:90a:2203:: with SMTP id c3mr3394823pje.68.1579875371008; Fri, 24 Jan 2020 06:16:11 -0800 (PST) Received: from chromium.org ([2601:647:4903:8020:88e3:d812:557:e2e5]) by smtp.gmail.com with ESMTPSA id v8sm6549623pff.151.2020.01.24.06.16.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2020 06:16:10 -0800 (PST) From: KP Singh X-Google-Original-From: KP Singh Date: Fri, 24 Jan 2020 06:16:00 -0800 To: Andrii Nakryiko Cc: open list , bpf , linux-security-module@vger.kernel.org, Brendan Jackman , Florent Revest , Thomas Garnier , 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 v3 08/10] tools/libbpf: Add support for BPF_PROG_TYPE_LSM Message-ID: <20200124141600.GB21334@chromium.org> References: <20200123152440.28956-1-kpsingh@chromium.org> <20200123152440.28956-9-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 Thu, Jan 23, 2020 at 7:25 AM KP Singh wrote: > > > > From: KP Singh > > > > * Add functionality in libbpf to attach eBPF program to LSM hooks > > * Lookup the index of the LSM hook in security_hook_heads and pass it in > > attr->lsm_hook_idx > > > > Signed-off-by: KP Singh > > Reviewed-by: Brendan Jackman > > Reviewed-by: Florent Revest > > Reviewed-by: Thomas Garnier > > --- > > Looks good, but see few nits below. > > Acked-by: Andrii Nakryiko Thanks! > > > tools/lib/bpf/bpf.c | 6 ++- > > tools/lib/bpf/bpf.h | 1 + > > tools/lib/bpf/libbpf.c | 104 +++++++++++++++++++++++++++++++++++++-- > > tools/lib/bpf/libbpf.h | 4 ++ > > tools/lib/bpf/libbpf.map | 3 ++ > > 5 files changed, 114 insertions(+), 4 deletions(-) > > > > [...] > > > @@ -5084,6 +5099,8 @@ __bpf_object__open(const char *path, const void *obj_buf, size_t obj_buf_sz, > > if (prog->type != BPF_PROG_TYPE_UNSPEC) > > continue; > > > > + > > + > > why these extra lines? Ah this might have crept in my latest rebase. Will remove these. > > > err = libbpf_prog_type_by_name(prog->section_name, &prog_type, > > &attach_type); > > if (err == -ESRCH) > > @@ -6160,6 +6177,7 @@ bool bpf_program__is_##NAME(const struct bpf_program *prog) \ > > } \ > > > > BPF_PROG_TYPE_FNS(socket_filter, BPF_PROG_TYPE_SOCKET_FILTER); > > +BPF_PROG_TYPE_FNS(lsm, BPF_PROG_TYPE_LSM); > > BPF_PROG_TYPE_FNS(kprobe, BPF_PROG_TYPE_KPROBE); > > BPF_PROG_TYPE_FNS(sched_cls, BPF_PROG_TYPE_SCHED_CLS); > > BPF_PROG_TYPE_FNS(sched_act, BPF_PROG_TYPE_SCHED_ACT); > > @@ -6226,6 +6244,8 @@ static struct bpf_link *attach_raw_tp(const struct bpf_sec_def *sec, > > struct bpf_program *prog); > > static struct bpf_link *attach_trace(const struct bpf_sec_def *sec, > > struct bpf_program *prog); > > +static struct bpf_link *attach_lsm(const struct bpf_sec_def *sec, > > + struct bpf_program *prog); > > > > struct bpf_sec_def { > > const char *sec; > > @@ -6272,6 +6292,9 @@ static const struct bpf_sec_def section_defs[] = { > > SEC_DEF("freplace/", EXT, > > .is_attach_btf = true, > > .attach_fn = attach_trace), > > + SEC_DEF("lsm/", LSM, > > + .expected_attach_type = BPF_LSM_MAC, > > curious, will there be non-MAC LSM programs? if yes, how they are > going to be different and which prefix will we use then? One can think BPF_LSM_AUDIT programs which will only be used to log information from the LSM hooks and not enforce a policy. Currently, one can sort of do that by disabling CONFIG_SECURITY_BPF_ENFORCE but that's an all or none hammer. > > > + .attach_fn = attach_lsm), > > BPF_PROG_SEC("xdp", BPF_PROG_TYPE_XDP), > > BPF_PROG_SEC("perf_event", BPF_PROG_TYPE_PERF_EVENT), > > BPF_PROG_SEC("lwt_in", BPF_PROG_TYPE_LWT_IN), > > @@ -6533,6 +6556,44 @@ static int bpf_object__collect_struct_ops_map_reloc(struct bpf_object *obj, > > return -EINVAL; > > } > > > > +static __s32 find_lsm_hook_idx(struct bpf_program *prog) > > nit: I'd stick to int for return result, we barely ever use __s32 in libbpf.c Sure. Changed to int. - KP > > [...]