From patchwork Tue Mar 10 07:32:29 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yoshiki Komachi X-Patchwork-Id: 1251986 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Original-To: incoming-bpf@patchwork.ozlabs.org Delivered-To: patchwork-incoming-bpf@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=bpf-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=kLAnE58Y; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 48c6Hx6JN9z9sQx for ; Tue, 10 Mar 2020 18:32:45 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726258AbgCJHcm (ORCPT ); Tue, 10 Mar 2020 03:32:42 -0400 Received: from mail-pf1-f194.google.com ([209.85.210.194]:42214 "EHLO mail-pf1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726202AbgCJHcm (ORCPT ); Tue, 10 Mar 2020 03:32:42 -0400 Received: by mail-pf1-f194.google.com with SMTP id f5so6076935pfk.9; Tue, 10 Mar 2020 00:32:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=MJwg8iSfmsfomv5k6r5ohZ+xPIbEpaoDC7tA7oRqZ/M=; b=kLAnE58YjRDod5y2i2IGRAETVIJ4f8HUj61lM09pIurs2dU+CfbkAF9gsolWl7F3Fs bjDuD47zYl/EDEFO4fFgHg+DavRV8CuoQ1Awx1D5CNzhonu3lD1UrXiwjSkWYwgUhRee 4MYWXxS0sQ6aAngxCsWAPIFTlXCuNRenLaghlfkRgIEP9eBYe3uMxP0BgGKsarGrDUET k20Sdl6X0u6qO5YlI7P/FQ8Hd2ztrlWkvvX+AIMpr8H7LxL8c6tFaYC21Zf7xMfYmkQJ 8B2RXbeyTnplymzYEZ8e3oWcUDBQ+sM9nergOVt7UqpngTgA6JitNTusJT1zzUIf7c+p 6Omw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=MJwg8iSfmsfomv5k6r5ohZ+xPIbEpaoDC7tA7oRqZ/M=; b=ujqdY8V6I+f4H/If2QYdRZ5QmtKNMQ/u0lo5kgHE2ZgznYm9DYATWMACFq7Q89l1LZ BAexSSkoJWwM1CnsXzQefLJAfEAEDAzTf78EryQYIB69pPHEW3Mx5KNyuLABKhWAR2zm r+tiqSJbeiExcmB9E8rL4m8QjTd6R/A6hF/TLDW3GWMoVD2RWFGZZz9EMnvgjoMpILAj uTnPv5fDjzsTSvCnEO8FCQYgw3y2FKJEiGh0nlt/9YyDWvjrRU1Xsz3+98iqsyeJUFzw OqDAHyDPCBrUAeKibo6b+67mJk8SU7fKmD/5K0RqQE4yKgMs7es9+04CrMY6C8T0cM08 WwBA== X-Gm-Message-State: ANhLgQ0F7qNsNrCrV8yfShk2+lXRRs9BYYvKBa7+enbyWpDBg7ilJ26S Vo0NFBk3O5AyEFx5hfhpwUM= X-Google-Smtp-Source: ADFU+vuOyhEKtlEnwciCNGzmRJyLvT7Bpi6puVDKDuCjQKm7BI8GGpl4k+b731XAdwvASUG/j6p0BQ== X-Received: by 2002:a63:67c5:: with SMTP id b188mr19736305pgc.111.1583825561728; Tue, 10 Mar 2020 00:32:41 -0700 (PDT) Received: from dali.ht.sfc.keio.ac.jp (dali.ht.sfc.keio.ac.jp. [133.27.170.2]) by smtp.gmail.com with ESMTPSA id t8sm1075109pjy.11.2020.03.10.00.32.39 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 10 Mar 2020 00:32:41 -0700 (PDT) From: Yoshiki Komachi To: "David S. Miller" , Alexei Starovoitov , Daniel Borkmann , Martin KaFai Lau , Song Liu , Yonghong Song , Andrii Nakryiko Cc: Yoshiki Komachi , netdev@vger.kernel.org, bpf@vger.kernel.org Subject: [PATCH bpf 1/2] bpf/btf: Fix BTF verification of enum members in struct/union Date: Tue, 10 Mar 2020 16:32:29 +0900 Message-Id: <1583825550-18606-2-git-send-email-komachi.yoshiki@gmail.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1583825550-18606-1-git-send-email-komachi.yoshiki@gmail.com> References: <1583825550-18606-1-git-send-email-komachi.yoshiki@gmail.com> Sender: bpf-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: bpf@vger.kernel.org btf_enum_check_member() was currently sure to recognize the size of "enum" type members in struct/union as the size of "int" even if its size was packed. This patch fixes BTF enum verification to use the correct size of member in BPF programs. Fixes: 179cde8cef7e ("bpf: btf: Check members of struct/union") Signed-off-by: Yoshiki Komachi --- kernel/bpf/btf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/bpf/btf.c b/kernel/bpf/btf.c index 7871400..32ab922 100644 --- a/kernel/bpf/btf.c +++ b/kernel/bpf/btf.c @@ -2418,7 +2418,7 @@ static int btf_enum_check_member(struct btf_verifier_env *env, struct_size = struct_type->size; bytes_offset = BITS_ROUNDDOWN_BYTES(struct_bits_off); - if (struct_size - bytes_offset < sizeof(int)) { + if (struct_size - bytes_offset < member_type->size) { btf_verifier_log_member(env, struct_type, member, "Member exceeds struct_size"); return -EINVAL; From patchwork Tue Mar 10 07:32:30 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yoshiki Komachi X-Patchwork-Id: 1251989 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=f4ty7DwU; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 48c6J76PTZz9sRY for ; Tue, 10 Mar 2020 18:32:55 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726316AbgCJHcq (ORCPT ); Tue, 10 Mar 2020 03:32:46 -0400 Received: from mail-pf1-f193.google.com ([209.85.210.193]:38558 "EHLO mail-pf1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726202AbgCJHcq (ORCPT ); Tue, 10 Mar 2020 03:32:46 -0400 Received: by mail-pf1-f193.google.com with SMTP id z5so1202574pfn.5; Tue, 10 Mar 2020 00:32:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=SEH8DDPD4t4iwsEOpSlyk77FYqwoHHGvfn5pB2B75r0=; b=f4ty7DwUYN/eCaH9QV//IzQBNLL3Lrnfdk5Fv3ZKur/iKUWeYRWr30l6VXx8toB9CF Ni7jZ3QQZGiyfJoMZQZ1cMO36zNX1WD00xZni2kAqRC68VBp3gCBtIU2WgkH7m67V7C5 gvLVBpltC3C1jIzZ8hkEplXzM28GsRIUbuZVKchkoBjGramM94pX/LZfBX3CJ/Iaptwj gp7JT0i6UmnLIUD2dyOxsT4l0/tFCf3brgcIkLxthJgD9pue5FO/CuAsNLlV6W9tNjaW XLdIQc1PyJ7cHDjRSwUGXpBtYoWlMS/YnDZelth9k87z1DKGvspG+W+fsrYL6pFC6mda zpVw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=SEH8DDPD4t4iwsEOpSlyk77FYqwoHHGvfn5pB2B75r0=; b=FJyBBVnqnRhHiXaegsmOO23S8z72kUOST/DmHmkrEXzcLKChfayg3JPYjClSuTz9bc enThT5j17guEivG6XGl9DVEzgYsg3XS0A9Lu5n9sPoLAO4mSn7S6m6y6w2/wiYHZp8BM l+/+oVFh4+/MgGIEs7NJqI9EQe9V48kgLXZgFQ24bxGAsywU6bibUr2Ta2UdfPT+Tetb bwwpzLi88W0AHLym5m8Jmi66LtoiR34dSteySil4FSPEGr8rVzhJdU+jDZaSCBW6OzQi rS7GRabUZIHbDMXjSR+a5ZLpGAXoL4YvbL+sTkuVuBP4j1C8wdfkz3FgjwJdXhhUMllQ rgfw== X-Gm-Message-State: ANhLgQ3HqdjzF35ztSdivHc4CAMVtHOfAAcU0w3sY+US88kyG+diHwEK 8msKjPYyYGTouPLycGj0tzEbMp/vWHw= X-Google-Smtp-Source: ADFU+vv5I9OHJrzKDv9Dli1pHXEk/4NUCPEG8Dke3T8nKNyG9Pm1txLTYARKWgY+3cAsKE/ZoSiOiQ== X-Received: by 2002:a63:8343:: with SMTP id h64mr19156614pge.73.1583825565314; Tue, 10 Mar 2020 00:32:45 -0700 (PDT) Received: from dali.ht.sfc.keio.ac.jp (dali.ht.sfc.keio.ac.jp. [133.27.170.2]) by smtp.gmail.com with ESMTPSA id t8sm1075109pjy.11.2020.03.10.00.32.42 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 10 Mar 2020 00:32:44 -0700 (PDT) From: Yoshiki Komachi To: "David S. Miller" , Alexei Starovoitov , Daniel Borkmann , Martin KaFai Lau , Song Liu , Yonghong Song , Andrii Nakryiko Cc: Yoshiki Komachi , netdev@vger.kernel.org, bpf@vger.kernel.org Subject: [PATCH bpf 2/2] selftests/bpf: Add test for the packed enum member in struct/union Date: Tue, 10 Mar 2020 16:32:30 +0900 Message-Id: <1583825550-18606-3-git-send-email-komachi.yoshiki@gmail.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1583825550-18606-1-git-send-email-komachi.yoshiki@gmail.com> References: <1583825550-18606-1-git-send-email-komachi.yoshiki@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Add a simple test to the existing selftest program in order to make sure that a packed enum member in struct unexceeds the struct_size. Signed-off-by: Yoshiki Komachi --- tools/testing/selftests/bpf/test_btf.c | 42 ++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/tools/testing/selftests/bpf/test_btf.c b/tools/testing/selftests/bpf/test_btf.c index 93040ca..8da77cd 100644 --- a/tools/testing/selftests/bpf/test_btf.c +++ b/tools/testing/selftests/bpf/test_btf.c @@ -1062,6 +1062,48 @@ struct btf_raw_test { .err_str = "Member exceeds struct_size", }, +/* Test member unexceeds the size of struct + * + * enum E { + * E0, + * E1, + * }; + * + * struct A { + * char m; + * enum E __attribute__((packed)) n; + * }; + */ +{ + .descr = "size check test #5", + .raw_types = { + /* int */ /* [1] */ + BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, sizeof(int)), + /* char */ /* [2] */ + BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 8, 1), + /* enum E { */ /* [3] */ + BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_ENUM, 0, 2), 1), + BTF_ENUM_ENC(NAME_TBD, 0), + BTF_ENUM_ENC(NAME_TBD, 1), + /* } */ + /* struct A { */ /* [4] */ + BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_STRUCT, 0, 2), 2), + BTF_MEMBER_ENC(NAME_TBD, 2, 0), /* char m; */ + BTF_MEMBER_ENC(NAME_TBD, 3, 8),/* enum E __attribute__((packed)) n; */ + /* } */ + BTF_END_RAW, + }, + .str_sec = "\0E\0E0\0E1\0A\0m\0n", + .str_sec_size = sizeof("\0E\0E0\0E1\0A\0m\0n"), + .map_type = BPF_MAP_TYPE_ARRAY, + .map_name = "size_check5_map", + .key_size = sizeof(int), + .value_size = 2, + .key_type_id = 1, + .value_type_id = 4, + .max_entries = 4, +}, + /* typedef const void * const_void_ptr; * struct A { * const_void_ptr m;