From nobody Sun Feb 8 19:40:13 2026 Received: from mail-pf1-f169.google.com (mail-pf1-f169.google.com [209.85.210.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E19DC288C3D for ; Thu, 8 Jan 2026 03:17:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767842229; cv=none; b=c0gsnPxV0W2bGNNd6rXaMNWaCcxcPko1J5s+8a48QgwY/NEmZXj3tBSttKxCUxN8TkMn1eyiEd1/oaC4jqjjuANv9nnXpPgwKA1RPWkUpcqxsku3pW2dwcsFEG1WxwVRCsuTHWa88aRHcBbRqCYk8tvQ6x1l7rQsTZS7lzZHFw4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767842229; c=relaxed/simple; bh=u1yosoqwlcymFoxHJmfX2OwDeaTdtE3Iyo0L6QN7j0w=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=nYF6J4Si6Nq6x4TEb5Igetoyb9Zy+d40gXIb1/XKjTTmKe+59NzC2WVbSPvx+fWoQMK9AzlTfhnASF6aKP7AmN33MEt7pImXWBW/AKW91d8bt39t06obTIUpH0i3/xeXa/xcOvwkHlIbe56QAFpcYysH5NDgDIzPqAfhsRh+VYg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=AnfeAN+G; arc=none smtp.client-ip=209.85.210.169 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="AnfeAN+G" Received: by mail-pf1-f169.google.com with SMTP id d2e1a72fcca58-803474aaa8bso826673b3a.0 for ; Wed, 07 Jan 2026 19:17:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1767842227; x=1768447027; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=4kABC1LLrrQty1VIIHsvBVH3NPqN0utmzldvVjxZi68=; b=AnfeAN+GH1SRHmcTuYE6zQB+jgkXYVl2jWltXt/rMI38y4RwIb2NXDiVuFAo8B2iTe af4EIiB59l9d3R5dRRNhg47t+CBUuzmHfw/7pCCdn2u4PFWS4CMpTrYISCv5xkFyfWDl EJsnlUgkDml9pFEXo8rG3YyO9f+muV/Oh3kbJOS8q9G4iHRxWZFoMfY2CBN+QByk9nOJ /fM0pshL8SbZL1w308WSstb3gANVfEmxi3Yf4aEtMW3epPAwswsoh9fhhLRZEBtzQdY/ 3osTzigNu/WCbK8kisUlwwPPL4Xx2GbNSLH+aLu4z0GMkPrzfyrOoSpsA5GAc5NVq+g6 Kjdg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767842227; x=1768447027; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=4kABC1LLrrQty1VIIHsvBVH3NPqN0utmzldvVjxZi68=; b=TuAgfZIVnVNZeICbAF7Ahjo3I4uxZMUp9+/6Z4jN3FOaX37YEuP2pi8hUAjRz1Prtk Q2eD0RFtlp3RWkHfUuGFJpQCdIXGwWaqqgtmFHyRWLssupZjSe1Rn5iWx+WI9Mz6JIDE Q+rc/ZSszQwM67YQmwX/lxn0fjRwJLmYCEri+CvvzuBQyuUJuJ0UXQxhRh+feIB2CS15 LOyk8h+zGN+LFQk8CaU8vrUhCefZEqPHlp7DDWX64ZQ+VyL9nUBKa0679irQ1Yw6y/PB KWobQ7ibEgBZf84QFQVHWhnMjuDhKl3ulAwJWQO+na/ae5Pf/8jGLFwwS11GH45bsQpq MdEA== X-Forwarded-Encrypted: i=1; AJvYcCUN+WwZFBkNitzz5s8GesUhiKDcC4SNLdz2SINW1HkmCcLgFHapJRWp8oINJmUYNSDea+a7/hvovx5HghA=@vger.kernel.org X-Gm-Message-State: AOJu0YxFtkzdgExPGelRFM3ld7d3rR+dfN7TnbuwuJSIcPCblfLWWEz2 sXk0qdpTjhuyhZ6Xlp4q8GHKyDkQWLn3iaj07nX/wDZHmQC2BWjyBAUI X-Gm-Gg: AY/fxX60Vw5Xxan/OM0I9ss8aC8TG3I1SDi0gt104GPstBo5KcUKylSb+Lki9S5Fcuh 3OW+8EqbmShWXINoTJZvO5nTUbU8V6ZaF7t9ot0ZwuQTpoBkYfcR+b2MBGsr6Tr+r+IY+B/b8QL eQr3+/RA4H+SUPqZfmVdEzaY/sOu+VPjPcq0uNxFakXTwLc/rnW2O9vCUHxbE4sNKje4TdHCi0s 391IuOaPfCaqycq51fjz/9tY9t2QUnz9vXRGhS8XbX9m8+t1ZL6Tw/8uawzdbMDLfHanVvVfdwm CqSG0uK+uFGgD30vw8Mmn01sZnamXRq1hEWQqJTntGSmb7ESeyjvZar1aD/VUKb7TQrzlvODXAb 19m7T4ov/BwhU95TNZ2GsSKI1+1wt2ZSEB/Gu8dkCnobwqLFljPlnmvXXVG45oYlTpXnfOdj93d FSDX91M67Gz/3ylLrzLREeuxzfuvg= X-Google-Smtp-Source: AGHT+IF5IP72Yw76UNPbKp3qcFOeQ6aRxn9rPrvIV8gootHoOjozaO2uZWqC24LWOtukGHVXMP68rw== X-Received: by 2002:a05:6a00:2b5b:b0:81c:5bca:8104 with SMTP id d2e1a72fcca58-81c5bca823fmr1632563b3a.24.1767842227105; Wed, 07 Jan 2026 19:17:07 -0800 (PST) Received: from pengdl-pc.mioffice.cn ([43.224.245.249]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-819c5de655bsm6134860b3a.60.2026.01.07.19.17.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Jan 2026 19:17:06 -0800 (PST) From: Donglin Peng To: ast@kernel.org, andrii.nakryiko@gmail.com, eddyz87@gmail.com Cc: zhangxiaoqin@xiaomi.com, ihor.solodrai@linux.dev, linux-kernel@vger.kernel.org, bpf@vger.kernel.org, Donglin Peng , Alan Maguire Subject: [PATCH bpf-next v11 05/11] libbpf: Verify BTF sorting Date: Thu, 8 Jan 2026 11:16:39 +0800 Message-Id: <20260108031645.1350069-6-dolinux.peng@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260108031645.1350069-1-dolinux.peng@gmail.com> References: <20260108031645.1350069-1-dolinux.peng@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Donglin Peng This patch checks whether the BTF is sorted by name in ascending order. If sorted, binary search will be used when looking up types. Cc: Eduard Zingerman Cc: Alexei Starovoitov Cc: Andrii Nakryiko Cc: Alan Maguire Cc: Ihor Solodrai Cc: Xiaoqin Zhang Signed-off-by: Donglin Peng Acked-by: Eduard Zingerman --- tools/lib/bpf/btf.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/tools/lib/bpf/btf.c b/tools/lib/bpf/btf.c index 60ff8eafea83..277df0077df6 100644 --- a/tools/lib/bpf/btf.c +++ b/tools/lib/bpf/btf.c @@ -899,6 +899,30 @@ int btf__resolve_type(const struct btf *btf, __u32 typ= e_id) return type_id; } =20 +static void btf_check_sorted(struct btf *btf) +{ + __u32 i, n, named_start_id =3D 0; + + n =3D btf__type_cnt(btf); + for (i =3D btf->start_id + 1; i < n; i++) { + struct btf_type *ta =3D btf_type_by_id(btf, i - 1); + struct btf_type *tb =3D btf_type_by_id(btf, i); + const char *na =3D btf__str_by_offset(btf, ta->name_off); + const char *nb =3D btf__str_by_offset(btf, tb->name_off); + + if (strcmp(na, nb) > 0) + return; + + if (named_start_id =3D=3D 0 && na[0] !=3D '\0') + named_start_id =3D i - 1; + if (named_start_id =3D=3D 0 && nb[0] !=3D '\0') + named_start_id =3D i; + } + + if (named_start_id) + btf->named_start_id =3D named_start_id; +} + static __s32 btf_find_type_by_name_bsearch(const struct btf *btf, const ch= ar *name, __s32 start_id) { @@ -1132,6 +1156,7 @@ static struct btf *btf_new(const void *data, __u32 si= ze, struct btf *base_btf, b err =3D err ?: btf_sanity_check(btf); if (err) goto done; + btf_check_sorted(btf); =20 done: if (err) { --=20 2.34.1