From nobody Mon Feb 9 05:40:24 2026 Received: from mail-pl1-f179.google.com (mail-pl1-f179.google.com [209.85.214.179]) (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 49D7435C1B8 for ; Fri, 9 Jan 2026 13:00:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767963632; cv=none; b=OC1T48HGcu2ugXQch5PJvWOzSlsUFh8otzeet/pfid8xHVgNwzJLtBTkQBe11P0Fq4rqiK1MT3x1bwrmUTOHCPbpd3NQnXobc+ChYj34JEmyyIR+FC7MWxb5pNMg3HiZc9q/EKeZ2gsou7V5yLfC6epXPPeNeTU7R/HRBEHxA3g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767963632; c=relaxed/simple; bh=mYzJ+kJtBrf1ZOrVJNkEAMPCA73IwwJ3Vq1Lvdq2Ri0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=joTSfhjKWGHa19v6aMGmxyzXmFjj+AY1AWUwYtbvgnYpjHQkIRPO+P51z5wCoT6d+uJuVS86pwWiEYeE8tdcauhM8pciPBPiNYdsJ7jMJftn9+zv7Szfd82Ol6w8+Cx+F1Ud5K6h+H8zOBLb6AwIkLNk4saHVrPMBfF9JL0XQzM= 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=MZTOBZn3; arc=none smtp.client-ip=209.85.214.179 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="MZTOBZn3" Received: by mail-pl1-f179.google.com with SMTP id d9443c01a7336-2a0834769f0so31985155ad.2 for ; Fri, 09 Jan 2026 05:00:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1767963631; x=1768568431; 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=MZTOBZn39HLC/jnQgGqREw3LqW29Y6bNB+PAzbre8wyPQkFmeoYjL/sQMMd4nYuJIR IJCsyfMqYNV9GCWUCiH2PH0O6UOhZGLpfZ2gIS4Q+uP3vKAcdh/yqeIoJU4Ee4Um90br yfnYhU7lcifIvnkc0mtXeTL0uFcl2IwGS4KSLHijtML68neuiAywg2IBRQMagyVM8/yh 3e0scd3JWdAo/aOA82zVvucDmB6OG+QMMBjnbdsAjHbdMhziiatwMZCWeiACkY2lmAJw wEFOEjQDHxK81ukldOMmzG5MBSk11zUjvOMSRRoOJzsOPt8sp/8cF/whlt/geBLcDv8e VqCQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767963631; x=1768568431; 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=BCzwkYAAzAjLTryP+rP6B2bAKaawymD4hZfcFxE9eZ71JiPbu+EWNEkbSgM2qognWS pI4eEoW4nuK8BLOIkI1EKoj/EFPu7NVTWEXcXgoKsknZFZ6jfS7tWyr4efrggKs2DvCQ Eg61ucQmjn+MxWi8CdBcyFhR8M+QzE9emRJwyldpN/4qLCdjkFVUrJ1PqFiVPbTXJN7b gv5R3KeaWBQrK8i+YiELgr6CnTUfwWeFSVOV1y/ciepy2uuZ0HNbiyy6k4rYXWGEN99M smkZjQ1dmN+ZQgE4oqA1a2/nGvI9iEDq1HWPQ1q/1jRtDB987VstYnkAB59vTGay3U68 fuLQ== X-Forwarded-Encrypted: i=1; AJvYcCWe2v7wVkmiPvzYbqm0dXCYZsJp8CYzgGiaL6DNgL8Z8Q8ziH+e+dqiCRYUiAMtrOk/8QtvFWuuAFNgkJY=@vger.kernel.org X-Gm-Message-State: AOJu0YzJ6YkqNXaqqGwX4HqbCWgy62qazUkr3xIt5wakeBf7/xddRB/k 95kNv4Oljd03nVN5kq3+Y4qDoc5CW5MQGBa6Te6/40ws9xVSmBtD5L/J X-Gm-Gg: AY/fxX55f0x1gc1O1s9iDNVV8lneBCimF8723TGEdMRsbjPfBs4NnuqW3Ua8IVox+Ga anCNNm92VQuqjJDFIpj8EKlpiAx0idygsiM99YGstq9Nwz9YvGeFAFwFb0PIHpFR2xVGUsWEXpd Gfh5Hu5CADc9nP69WyNSYgkdOqwOTxCEf5wA9X5nT5UtXwc0nAwmsRXr+8O2CKdHT/Wz+LBSQs2 1HUzMiDpsRvDPcqk86qkNVvVPrEocueZCpTBBvgjCVxsqesMZErqHxu7pNLpjsFa+ErBAY2aHAF MamKopDwNw5qoUH1/T9PgRYqTxHjL80EWVwLTpFWHNlMwYKbVtkQBUkg97Co2zlyytN+56x8OJ8 iIGb8nlAqbX5BNKkJhP+VRrVlob0EmBuh22K1RVnkcHhKiIA3gFfjKMkhM1ANtMdeLrtR/QLZNu ikCdGz+Cp8/OouDzinGo/af63RY8g= X-Google-Smtp-Source: AGHT+IFZdcePi4FWnR5ODfZLAiRMhV1+kMAPOJFuJ1swEbYXGuIYwPL7AAx1NXjqZtbj+QKXNQIdGg== X-Received: by 2002:a17:903:38cc:b0:2a0:e5da:febf with SMTP id d9443c01a7336-2a3ee4aaa9cmr92963955ad.46.1767963630236; Fri, 09 Jan 2026 05:00:30 -0800 (PST) Received: from pengdl-pc.mioffice.cn ([43.224.245.249]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a3e3c3a328sm104927325ad.4.2026.01.09.05.00.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 09 Jan 2026 05:00:29 -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 v12 07/11] btf: Verify BTF sorting Date: Fri, 9 Jan 2026 20:59:59 +0800 Message-Id: <20260109130003.3313716-8-dolinux.peng@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260109130003.3313716-1-dolinux.peng@gmail.com> References: <20260109130003.3313716-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