From nobody Sun Feb 8 21:28:05 2026 Received: from mail-pf1-f172.google.com (mail-pf1-f172.google.com [209.85.210.172]) (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 6515828C87C for ; Thu, 8 Jan 2026 03:17:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767842234; cv=none; b=qwCF2ZYJsSq5u7oSgFJzjidhcyZ6MNTh7ta14imr/+2tDaOmEPM8U81cjyUUi4CzdGtSA9QJl5XK0PWwBOVD7wB6pzaHrMsa7ckuIxEtJXs9z5b59MO8pduRyhTShqKXeXWFjHiUw3nIaN1AUZ+m2ubeecTrjUmCAmPUZp6rt7U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767842234; c=relaxed/simple; bh=mYzJ+kJtBrf1ZOrVJNkEAMPCA73IwwJ3Vq1Lvdq2Ri0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=XOPFn5WsdIKqPpZ7xEBPAtnDG9gOWQAwX7hj6pq0WEmNTVkFlWst4LkCou4lx6iIbDgLDTe74nYNNEHgG/4h4vzKkmVdxAmbjAs19u5m3/hjdFaIEzavGhPWs2NajKFATyMQ7bwDvzOdkr2ng6oscCm/co6l2UkbY2IMSWIDvyw= 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=k/noFRlq; arc=none smtp.client-ip=209.85.210.172 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="k/noFRlq" Received: by mail-pf1-f172.google.com with SMTP id d2e1a72fcca58-7aab061e7cbso3007224b3a.1 for ; Wed, 07 Jan 2026 19:17:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1767842233; x=1768447033; 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=TUW7LB43dCgnLiOgR7S2ttrd8S36AZDQc8SQtsp0WmA=; b=k/noFRlqdM9BAgEccQmcUH6hvF33pgwCGHHMDp8+BHKmm2RqBN9XWZLujecfBdSkul sj+bM4EY1679wI0UyWECBJncXZZxDhqhFSqIg6zl4P3I0nRIZq3QaCTDeICtC6aXnXYw BaBYvTWlPQjmPFesNGSbUlQe9NgNrepwyJAqDlQBagnEhVYhnVnwF011TJBOixh0j0+D Zqa4SvylIT4PNH9VGBdkJ0KJ0D6+CirG7DvsoMcmpBpgKR1Q5AmKkH9drjAFQ7GaHnXO rVt84aZJaMyTEzEyjA0aPcChQR9epgT3ZV9CkCPRbnqMgN2k9mksog9jFVO/vCnjfac1 NUeg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767842233; x=1768447033; 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=TUW7LB43dCgnLiOgR7S2ttrd8S36AZDQc8SQtsp0WmA=; b=l58g+WLedT8x6yoX56qoYYMxBJBY2eLBHJ/Qm3ibKyJnWw7aGFJ40f9kqFCBd9zNvn A6wxZ1ikUCYhhbbj8zWnjDTIBDvi6T+61aXGu6Zj3P/IETDUdywmx7bRmNtktHX759cs q5mvHF2TgZ9U+LbBbHZ9woBMXRtoC4ALknCodSkIzxN8w8QYGqd2uEm9XBdLkcQCWI2A XCxDO3agwytVu0wUFj4KU7GFxH6tF3BDYrQxRZWASXLD33n/YGErkG1PNj1T6JIgEcyO fIOi4InIY4F+m0gyDTtBdom+yp3/ZMq/F8ZH+fR/tKComxicBiXy4lOwyKXDPqhGf/1u I98Q== X-Forwarded-Encrypted: i=1; AJvYcCVns5oUbypckwOrfZfPuoGbo5cWUQ8xCXvKxgLuRFvAlgkNQjJ6UWWTrpNMXVEAkKuB/0o6uIXjJnmFa1c=@vger.kernel.org X-Gm-Message-State: AOJu0YwWBhEITJJhEQTNercgF9clI7MKo8eZy+tmQY+GhVzuyhISG7Pi 2fj01doocNtoShyPyDDSnOHgrU1Caqo07AyHfjahCJNg77T0yM9BpgB05HGw/U1Xwfo= X-Gm-Gg: AY/fxX7jtWuV5/GbrewkGnJ2x7chqOx00rg0lzJBKk4WcajH9ZH689wn1rGaofooyWV P3XDmAELu/uPNg0OOU6mWdKdcOGWwyjSe+HoZNtUtBNEJprKugV5/Qazn/2RHbVxqSKG0ByR81Q Ktq0fytryC5qySOwmKxEBnE2nE3mWxmVl7HcxKb3JL1dAnDtik+q7VlzlWV2/SEqL04MQENXOsp ipNdtsmfzucsqr7cJDZZfPIEQs0V0eHV6pmp7JfXov671GCtIWV5FtCkeF9a7LmME8/ZSmHI3bL UU0TF/hQHOHBXAagG6/RBpyYMDbVSJ66xGzg29o0jdYvzXvvvOJQF0oaKzP1JzH2AvM9tHijstL nELVeLNAAC3aqj/U5TpLxLYamg5YgLHrsIt4L4pCYHgZMsE8ySCKM9TA2fYw4FTVuIPWUFRKrU0 fv8S5PxdFHtgYXFYEnRQ33J69BOB8= X-Google-Smtp-Source: AGHT+IHfnHd8Vmh9kg9OSxh8nSRnoLg5H121xuAGpZndMHXgdQZUDlZaIEVkSuU9Y3qrDpaUIElQPA== X-Received: by 2002:a05:6a00:2a08:b0:7e8:4433:8fb9 with SMTP id d2e1a72fcca58-81b801cc15emr3408043b3a.65.1767842232722; Wed, 07 Jan 2026 19:17:12 -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.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Jan 2026 19:17:12 -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 07/11] btf: Verify BTF sorting Date: Thu, 8 Jan 2026 11:16:41 +0800 Message-Id: <20260108031645.1350069-8-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. Specifically, vmlinux and kernel module BTFs are always sorted during the build phase with anonymous types placed before named types, so we only need to identify the starting ID of named types. Cc: Eduard Zingerman Cc: Alexei Starovoitov Cc: Andrii Nakryiko Cc: Alan Maguire Cc: Ihor Solodrai Cc: Xiaoqin Zhang Signed-off-by: Donglin Peng --- kernel/bpf/btf.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/kernel/bpf/btf.c b/kernel/bpf/btf.c index d1f4b984100d..12eecf59d71f 100644 --- a/kernel/bpf/btf.c +++ b/kernel/bpf/btf.c @@ -550,6 +550,46 @@ u32 btf_nr_types(const struct btf *btf) return total; } =20 +/* Note that vmlinux and kernel module BTFs are always sorted + * during the building phase. + */ +static void btf_check_sorted(struct btf *btf) +{ + u32 i, n, named_start_id =3D 0; + + n =3D btf_nr_types(btf); + if (btf_is_vmlinux(btf)) { + for (i =3D btf_start_id(btf); i < n; i++) { + const struct btf_type *t =3D btf_type_by_id(btf, i); + const char *n =3D btf_name_by_offset(btf, t->name_off); + + if (n[0] !=3D '\0') { + btf->named_start_id =3D i; + return; + } + } + return; + } + + for (i =3D btf_start_id(btf) + 1; i < n; i++) { + const struct btf_type *ta =3D btf_type_by_id(btf, i - 1); + const struct btf_type *tb =3D btf_type_by_id(btf, i); + const char *na =3D btf_name_by_offset(btf, ta->name_off); + const char *nb =3D btf_name_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; +} + /* btf_named_start_id - Get the named starting ID for the BTF * @btf: Pointer to the target BTF object * @own: Flag indicating whether to query only the current BTF (true =3D c= urrent BTF only, @@ -6302,6 +6342,7 @@ static struct btf *btf_parse_base(struct btf_verifier= _env *env, const char *name if (err) goto errout; =20 + btf_check_sorted(btf); refcount_set(&btf->refcnt, 1); =20 return btf; @@ -6436,6 +6477,7 @@ static struct btf *btf_parse_module(const char *modul= e_name, const void *data, } =20 btf_verifier_env_free(env); + btf_check_sorted(btf); refcount_set(&btf->refcnt, 1); return btf; =20 --=20 2.34.1