From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755255AbdDDSeD (ORCPT ); Tue, 4 Apr 2017 14:34:03 -0400 Received: from mail-qt0-f194.google.com ([209.85.216.194]:36229 "EHLO mail-qt0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753714AbdDDSeB (ORCPT ); Tue, 4 Apr 2017 14:34:01 -0400 From: Aaron Conole To: Alexei Starovoitov Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC net-next] bpf: taint loading !is_gpl programs Date: Tue, 4 Apr 2017 14:33:54 -0400 Message-Id: <20170404183354.8579-1-aconole@bytheb.org> X-Mailer: git-send-email 2.9.3 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The eBPF framework is used for more than just socket level filtering. It can also provide tracing, and even change the way packets coming into the system look. Most of the eBPF callable symbols are available to non-gpl programs, and this includes helper functions which modify packets. This allows proprietary eBPF code to link to the kernel and make decisions which can negatively impact network performance. Since the sources for these programs are only available under a proprietary license, it seems better to treat them the same as other proprietary modules: set the system taint flag. An exemption is made for socket-level filters, since they do not really impact networking for the whole kernel. Signed-off-by: Aaron Conole --- kernel/bpf/syscall.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c index ab0cf4c4..1255b51 100644 --- a/kernel/bpf/syscall.c +++ b/kernel/bpf/syscall.c @@ -860,6 +860,11 @@ static int bpf_prog_load(union bpf_attr *attr) bpf_prog_kallsyms_add(prog); trace_bpf_prog_load(prog, err); + if (type != BPF_PROG_TYPE_SOCKET_FILTER && !is_gpl && !(err < 0)) { + if (!test_taint(TAINT_PROPRIETARY_MODULE)) + pr_warn("bpf license '%s' taints kernel.\n", license); + add_taint(TAINT_PROPRIETARY_MODULE, LOCKDEP_STILL_OK); + } return err; free_used_maps: -- 2.9.3