BPF List
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: Yazhou Tang <yazhoutang@foxmail.com>, bpf@vger.kernel.org
Cc: oe-kbuild-all@lists.linux.dev, ast@kernel.org,
	daniel@iogearbox.net, john.fastabend@gmail.com,
	andrii@kernel.org, martin.lau@linux.dev, eddyz87@gmail.com,
	song@kernel.org, yonghong.song@linux.dev, kpsingh@kernel.org,
	sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org,
	tangyazhou518@outlook.com, shenghaoyuan0928@163.com,
	ziye@zju.edu.cn
Subject: Re: [PATCH bpf-next 1/2] bpf: Add interval and tnum analysis for signed and unsigned BPF_DIV
Date: Tue, 23 Dec 2025 08:19:18 +0800	[thread overview]
Message-ID: <202512230859.IsGUdbZS-lkp@intel.com> (raw)
In-Reply-To: <tencent_7C98FAECA40C98489ACF4515CE346F031509@qq.com>

Hi Yazhou,

kernel test robot noticed the following build errors:

[auto build test ERROR on bpf-next/master]

url:    https://github.com/intel-lab-lkp/linux/commits/Yazhou-Tang/selftests-bpf-Add-tests-for-BPF_DIV-analysis/20251221-174300
base:   https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git master
patch link:    https://lore.kernel.org/r/tencent_7C98FAECA40C98489ACF4515CE346F031509%40qq.com
patch subject: [PATCH bpf-next 1/2] bpf: Add interval and tnum analysis for signed and unsigned BPF_DIV
config: i386-randconfig-053-20251222 (https://download.01.org/0day-ci/archive/20251223/202512230859.IsGUdbZS-lkp@intel.com/config)
compiler: gcc-14 (Debian 14.2.0-19) 14.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20251223/202512230859.IsGUdbZS-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202512230859.IsGUdbZS-lkp@intel.com/

All errors (new ones prefixed by >>):

   ld: kernel/bpf/verifier.o: in function `__bpf_sdiv':
>> kernel/bpf/verifier.c:15227:(.text+0xfcb2): undefined reference to `__divdi3'
>> ld: kernel/bpf/verifier.c:15227:(.text+0xfd37): undefined reference to `__divdi3'
   ld: kernel/bpf/verifier.c:15227:(.text+0xfdae): undefined reference to `__divdi3'
   ld: kernel/bpf/verifier.c:15227:(.text+0xfe0c): undefined reference to `__divdi3'
   ld: kernel/bpf/verifier.c:15227:(.text+0xff7c): undefined reference to `__divdi3'
   ld: kernel/bpf/verifier.o: in function `scalar_min_max_udiv':
>> kernel/bpf/verifier.c:15138:(.text+0x1b9bb): undefined reference to `__udivdi3'
>> ld: kernel/bpf/verifier.c:15139:(.text+0x1b9dc): undefined reference to `__udivdi3'
   ld: kernel/bpf/tnum.o: in function `tnum_udiv':
>> kernel/bpf/tnum.c:227:(.text+0x1b3): undefined reference to `__udivdi3'
>> ld: kernel/bpf/tnum.c:219:(.text+0x28d): undefined reference to `__udivdi3'
   ld: kernel/bpf/tnum.c:227:(.text+0xb05): undefined reference to `__udivdi3'
   ld: kernel/bpf/tnum.o:kernel/bpf/tnum.c:219: more undefined references to `__udivdi3' follow
   ld: kernel/bpf/tnum.o: in function `tnum_sdiv':
>> kernel/bpf/tnum.c:300:(.text+0x131d): undefined reference to `__divdi3'


vim +15227 kernel/bpf/verifier.c

 15118	
 15119	static void scalar_min_max_udiv(struct bpf_reg_state *dst_reg,
 15120					struct bpf_reg_state *src_reg)
 15121	{
 15122		u64 *dst_umin = &dst_reg->umin_value;
 15123		u64 *dst_umax = &dst_reg->umax_value;
 15124		u64 umin_val = src_reg->umin_value;
 15125		u64 umax_val = src_reg->umax_value;
 15126	
 15127		if (umin_val == 0) {
 15128			/* BPF div specification: x / 0 = 0
 15129			 * 1. If umin_val == umax_val == 0, i.e. divisor is certainly 0,
 15130			 * then the result must be 0, [a,b] / [0,0] = [0,0].
 15131			 * 2. If umin_val == 0 && umax_val != 0, then dst_umin = x / 0 = 0,
 15132			 * dst_umax = dst_umax / 1, remains unchanged, [a,b] / [0,x] = [0,b].
 15133			 */
 15134			*dst_umin = 0;
 15135			if (umax_val == 0)
 15136				*dst_umax = 0;
 15137		} else {
 15138			*dst_umin = *dst_umin / umax_val;
 15139			*dst_umax = *dst_umax / umin_val;
 15140		}
 15141	
 15142		/* Reset signed interval to TOP. */
 15143		dst_reg->smin_value = S64_MIN;
 15144		dst_reg->smax_value = S64_MAX;
 15145	}
 15146	
 15147	static s32 __bpf_sdiv32(s32 a, s32 b)
 15148	{
 15149		/* BPF div specification: x / 0 = 0 */
 15150		if (unlikely(b == 0))
 15151			return 0;
 15152		/* BPF mod specification: S32_MIN / -1 = S32_MIN */
 15153		if (unlikely(a == S32_MIN && b == -1))
 15154			return S32_MIN;
 15155		return a / b;
 15156	}
 15157	
 15158	/* The divisor interval does not cross 0,
 15159	 * i.e. src_min and src_max have same sign.
 15160	 */
 15161	static void __sdiv32_range(s32 dst_min, s32 dst_max, s32 src_min, s32 src_max,
 15162					s32 *res_min, s32 *res_max)
 15163	{
 15164		s32 tmp_res[4] = {
 15165			__bpf_sdiv32(dst_min, src_min),
 15166			__bpf_sdiv32(dst_min, src_max),
 15167			__bpf_sdiv32(dst_max, src_min),
 15168			__bpf_sdiv32(dst_max, src_max)
 15169		};
 15170	
 15171		*res_min = min_array(tmp_res, 4);
 15172		*res_max = max_array(tmp_res, 4);
 15173	}
 15174	
 15175	static void scalar32_min_max_sdiv(struct bpf_reg_state *dst_reg,
 15176					struct bpf_reg_state *src_reg)
 15177	{
 15178		u32 *dst_smin = &dst_reg->s32_min_value;
 15179		u32 *dst_smax = &dst_reg->s32_max_value;
 15180		u32 smin_val = src_reg->s32_min_value;
 15181		u32 smax_val = src_reg->s32_max_value;
 15182		s32 res_min, res_max, tmp_min, tmp_max;
 15183	
 15184		if (smin_val <= 0 && smax_val >= 0) {
 15185			/* BPF div specification: x / 0 = 0
 15186			 * Set initial result to 0, as 0 is in divisor interval.
 15187			 */
 15188			res_min = 0;
 15189			res_max = 0;
 15190			/* negative divisor interval: [a_min,a_max] / [b_min,-1] */
 15191			if (smin_val < 0) {
 15192				__sdiv32_range(*dst_smin, *dst_smax, smin_val, -1,
 15193						&tmp_min, &tmp_max);
 15194				__scalar32_min_max_join(&res_min, &res_max, tmp_min, tmp_max);
 15195			}
 15196			/* positive divisor interval: [a_min,a_max] / [1,b_max] */
 15197			if (smax_val > 0) {
 15198				__sdiv32_range(*dst_smin, *dst_smax, 1, smax_val,
 15199						&tmp_min, &tmp_max);
 15200				__scalar32_min_max_join(&res_min, &res_max, tmp_min, tmp_max);
 15201			}
 15202		} else {
 15203			__sdiv32_range(*dst_smin, *dst_smax, smin_val, smax_val,
 15204				&res_min, &res_max);
 15205		}
 15206	
 15207		/* BPF mod specification: S32_MIN / -1 = S32_MIN */
 15208		if (*dst_smin == S32_MIN && smin_val <= -1 && smax_val >= -1)
 15209			res_min = S32_MIN;
 15210	
 15211		*dst_smin = res_min;
 15212		*dst_smax = res_max;
 15213	
 15214		/* Reset unsigned interval to TOP. */
 15215		dst_reg->u32_min_value = 0;
 15216		dst_reg->u32_max_value = U32_MAX;
 15217	}
 15218	
 15219	static s64 __bpf_sdiv(s64 a, s64 b)
 15220	{
 15221		/* BPF div specification: x / 0 = 0 */
 15222		if (unlikely(b == 0))
 15223			return 0;
 15224		/* BPF div specification: S64_MIN / -1 = S64_MIN */
 15225		if (unlikely(a == S64_MIN && b == -1))
 15226			return S64_MIN;
 15227		return a / b;
 15228	}
 15229	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

  parent reply	other threads:[~2025-12-23  0:19 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20251221093955.109312-1-yazhoutang@foxmail.com>
2025-12-21  9:39 ` [PATCH bpf-next 1/2] bpf: Add interval and tnum analysis for signed and unsigned BPF_DIV Yazhou Tang
2025-12-21 10:07   ` bot+bpf-ci
2025-12-22 23:00   ` kernel test robot
2025-12-23  0:19   ` kernel test robot [this message]
2025-12-23 20:14   ` kernel test robot
2025-12-21  9:39 ` [PATCH bpf-next 2/2] selftests/bpf: Add tests for BPF_DIV analysis Yazhou Tang

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202512230859.IsGUdbZS-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=andrii@kernel.org \
    --cc=ast@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=daniel@iogearbox.net \
    --cc=eddyz87@gmail.com \
    --cc=haoluo@google.com \
    --cc=john.fastabend@gmail.com \
    --cc=jolsa@kernel.org \
    --cc=kpsingh@kernel.org \
    --cc=martin.lau@linux.dev \
    --cc=oe-kbuild-all@lists.linux.dev \
    --cc=sdf@fomichev.me \
    --cc=shenghaoyuan0928@163.com \
    --cc=song@kernel.org \
    --cc=tangyazhou518@outlook.com \
    --cc=yazhoutang@foxmail.com \
    --cc=yonghong.song@linux.dev \
    --cc=ziye@zju.edu.cn \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox