From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jiri Pirko Subject: Re: [PATCH net-next v2 05/15] xdp: allow attaching programs loaded for specific device Date: Sun, 12 Nov 2017 10:00:41 +0100 Message-ID: <20171112090041.GG1993@nanopsycho> References: <20171103205630.1083-1-jakub.kicinski@netronome.com> <20171103205630.1083-6-jakub.kicinski@netronome.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: netdev@vger.kernel.org, oss-drivers@netronome.com, alexei.starovoitov@gmail.com, daniel@iogearbox.net To: Jakub Kicinski Return-path: Received: from mail-wm0-f46.google.com ([74.125.82.46]:55004 "EHLO mail-wm0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753050AbdKLJAn (ORCPT ); Sun, 12 Nov 2017 04:00:43 -0500 Received: by mail-wm0-f46.google.com with SMTP id r68so9714271wmr.3 for ; Sun, 12 Nov 2017 01:00:43 -0800 (PST) Content-Disposition: inline In-Reply-To: <20171103205630.1083-6-jakub.kicinski@netronome.com> Sender: netdev-owner@vger.kernel.org List-ID: Fri, Nov 03, 2017 at 09:56:20PM CET, jakub.kicinski@netronome.com wrote: >Pass the netdev pointer to bpf_prog_get_type(). This way >BPF code can decide whether the device matches what the >code was loaded/translated for. > [...] >diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c >index 3217c20ea91b..68f9123acd39 100644 >--- a/kernel/bpf/syscall.c >+++ b/kernel/bpf/syscall.c >@@ -1057,7 +1057,22 @@ struct bpf_prog *bpf_prog_inc_not_zero(struct bpf_prog *prog) > } > EXPORT_SYMBOL_GPL(bpf_prog_inc_not_zero); > >-static struct bpf_prog *__bpf_prog_get(u32 ufd, enum bpf_prog_type *attach_type) >+static bool bpf_prog_can_attach(struct bpf_prog *prog, >+ enum bpf_prog_type *attach_type, >+ struct net_device *netdev) >+{ >+ struct bpf_dev_offload *offload = prog->aux->offload; >+ >+ if (prog->type != *attach_type) >+ return false; >+ if (offload && offload->netdev != netdev) This means you return false in case netdev function arg is NULL. Is that intentional? Seems wrong to me because for example in cls_bpf_prog_from_efd, you would get an error in case TCA_CLS_FLAGS_SKIP_SW is not set. >+ return false; >+ >+ return true; >+}