[linux-next:master] [mul_u64_u64_div_u64] 1266b1896f: UBSAN:shift-out-of-bounds_in_lib/math/div64.c

From: kernel test robot
Date: Fri Jul 12 2024 - 04:17:53 EST




Hello,

kernel test robot noticed "UBSAN:shift-out-of-bounds_in_lib/math/div64.c" on:

commit: 1266b1896f98fbe5733b16858cc042b729b52ece ("mul_u64_u64_div_u64: make it precise always")
https://git.kernel.org/cgit/linux/kernel/git/next/linux-next.git master

[test failed on linux-next/master f477dd6eede3ecedc8963478571d99ec3bf3f762]

in testcase: trinity
version: trinity-static-i386-x86_64-f93256fb_2019-08-28
with following parameters:

runtime: 300s
group: group-03
nr_groups: 5



compiler: gcc-13
test machine: qemu-system-x86_64 -enable-kvm -cpu SandyBridge -smp 2 -m 16G

(please refer to attached dmesg/kmsg for entire log/backtrace)



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 <oliver.sang@xxxxxxxxx>
| Closes: https://lore.kernel.org/oe-lkp/202407121652.69e657c5-oliver.sang@xxxxxxxxx


[ 181.992621][ T3569] ------------[ cut here ]------------
[ 181.993267][ T3569] UBSAN: shift-out-of-bounds in lib/math/div64.c:219:35
[ 181.994037][ T3569] shift exponent 64 is too large for 64-bit type 'long long unsigned int'
[ 181.994783][ T3569] CPU: 0 UID: 65534 PID: 3569 Comm: trinity-main Tainted: G S W 6.10.0-rc6-00123-g1266b1896f98 #1
[ 181.995795][ T3569] Tainted: [S]=CPU_OUT_OF_SPEC, [W]=WARN
[ 181.996338][ T3569] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.2-debian-1.16.2-1 04/01/2014
[ 181.997262][ T3569] Call Trace:
[ 181.997559][ T3569] dump_stack_lvl (lib/dump_stack.c:122)
[ 181.998005][ T3569] dump_stack (lib/dump_stack.c:129)
[ 181.998376][ T3569] __ubsan_handle_shift_out_of_bounds (lib/ubsan.c:232 lib/ubsan.c:468)
[ 181.998960][ T3569] ? __lock_acquire (kernel/locking/lockdep.c:5137 (discriminator 1))
[ 181.999435][ T3569] ? lock_acquire (kernel/locking/lockdep.c:467 (discriminator 4) kernel/locking/lockdep.c:5756 (discriminator 4) kernel/locking/lockdep.c:5719 (discriminator 4))
[ 181.999878][ T3569] mul_u64_u64_div_u64.cold (lib/math/div64.c:219 (discriminator 4))
[ 182.000403][ T3569] cputime_adjust (kernel/sched/cputime.c:604)
[ 182.000854][ T3569] ? cputime_adjust (kernel/sched/cputime.c:604)
[ 182.001298][ T3569] thread_group_cputime_adjusted (kernel/sched/cputime.c:635)
[ 182.001753][ T3569] do_task_stat (fs/proc/array.c:582)
[ 182.002166][ T3569] ? get_pid_task (include/linux/rcupdate.h:338 include/linux/rcupdate.h:811 kernel/pid.c:468)
[ 182.002587][ T3569] ? proc_tid_stat (fs/proc/array.c:679)
[ 182.003001][ T3569] proc_tgid_stat (fs/proc/array.c:681)
[ 182.003401][ T3569] proc_single_show (include/linux/sched/task.h:127 fs/proc/base.c:780)
[ 182.003827][ T3569] seq_read_iter (fs/seq_file.c:230)
[ 182.004259][ T3569] seq_read (fs/seq_file.c:163)
[ 182.004629][ T3569] ? seq_read_iter (fs/seq_file.c:152)
[ 182.005057][ T3569] vfs_read (fs/read_write.c:474)
[ 182.005419][ T3569] ? __task_pid_nr_ns (include/linux/rcupdate.h:338 include/linux/rcupdate.h:811 kernel/pid.c:514)
[ 182.005862][ T3569] ? lock_release (kernel/locking/lockdep.c:467 (discriminator 4) kernel/locking/lockdep.c:5776 (discriminator 4))
[ 182.006285][ T3569] ? mutex_lock_nested (kernel/locking/mutex.c:805)
[ 182.006741][ T3569] ksys_read (fs/read_write.c:620)
[ 182.007147][ T3569] __ia32_sys_read (fs/read_write.c:627)
[ 182.007590][ T3569] ia32_sys_call (arch/x86/entry/syscall_32.c:42)
[ 182.008041][ T3569] do_int80_syscall_32 (arch/x86/entry/common.c:165 (discriminator 1) arch/x86/entry/common.c:339 (discriminator 1))
[ 182.008510][ T3569] ? syscall_exit_to_user_mode_prepare (kernel/entry/common.c:199 (discriminator 1))
[ 182.009087][ T3569] ? syscall_exit_to_user_mode (kernel/entry/common.c:221)
[ 182.009588][ T3569] ? do_int80_syscall_32 (arch/x86/entry/common.c:343)
[ 182.010049][ T3569] ? mutex_unlock (kernel/locking/mutex.c:549)
[ 182.010449][ T3569] ? __f_unlock_pos (fs/file.c:1199)
[ 182.010861][ T3569] ? ksys_read (include/linux/file.h:47 include/linux/file.h:83 fs/read_write.c:622)
[ 182.011238][ T3569] ? syscall_exit_to_user_mode_prepare (kernel/entry/common.c:199 (discriminator 1))
[ 182.011844][ T3569] ? syscall_exit_to_user_mode (kernel/entry/common.c:221)
[ 182.016479][ T3569] ? do_int80_syscall_32 (arch/x86/entry/common.c:343)
[ 182.016985][ T3569] ? __lock_acquire (kernel/locking/lockdep.c:5137 (discriminator 1))
[ 182.017435][ T3569] ? __lock_acquire (kernel/locking/lockdep.c:5137 (discriminator 1))
[ 182.017885][ T3569] ? __lock_acquire (kernel/locking/lockdep.c:5137 (discriminator 1))
[ 182.018322][ T3569] ? lock_acquire (kernel/locking/lockdep.c:467 (discriminator 4) kernel/locking/lockdep.c:5756 (discriminator 4) kernel/locking/lockdep.c:5719 (discriminator 4))
[ 182.018725][ T3569] ? find_held_lock (kernel/locking/lockdep.c:5244 (discriminator 1))
[ 182.019160][ T3569] ? __lock_release+0x43/0x130
[ 182.019647][ T3569] ? do_perf_sw_event+0xe3/0x1e0
[ 182.020221][ T3569] ? do_perf_sw_event+0xe3/0x1e0
[ 182.020740][ T3569] ? lock_release (kernel/locking/lockdep.c:467 (discriminator 4) kernel/locking/lockdep.c:5776 (discriminator 4))
[ 182.021151][ T3569] ? do_perf_sw_event+0xf2/0x1e0
[ 182.021666][ T3569] ? ___perf_sw_event (kernel/events/core.c:9986)
[ 182.022090][ T3569] ? look_up_lock_class (kernel/locking/lockdep.c:926 (discriminator 28))
[ 182.022552][ T3569] ? register_lock_class (kernel/locking/lockdep.c:1284)
[ 182.023023][ T3569] ? __lock_acquire (kernel/locking/lockdep.c:5137 (discriminator 1))
[ 182.023470][ T3569] ? lock_acquire (kernel/locking/lockdep.c:467 (discriminator 4) kernel/locking/lockdep.c:5756 (discriminator 4) kernel/locking/lockdep.c:5719 (discriminator 4))
[ 182.023891][ T3569] ? __lock_acquire (kernel/locking/lockdep.c:5137 (discriminator 1))
[ 182.024353][ T3569] ? find_held_lock (kernel/locking/lockdep.c:5244 (discriminator 1))
[ 182.024766][ T3569] ? __lock_release+0x43/0x130
[ 182.025263][ T3569] ? __f_unlock_pos (fs/file.c:1199)
[ 182.025688][ T3569] ? __f_unlock_pos (fs/file.c:1199)
[ 182.026126][ T3569] ? lock_release (kernel/locking/lockdep.c:467 (discriminator 4) kernel/locking/lockdep.c:5776 (discriminator 4))
[ 182.026538][ T3569] ? __mutex_unlock_slowpath (arch/x86/include/asm/atomic.h:23 include/linux/atomic/atomic-arch-fallback.h:457 include/linux/atomic/atomic-long.h:40 include/linux/atomic/atomic-instrumented.h:3189 kernel/locking/mutex.c:921)
[ 182.027023][ T3569] ? seq_list_next_rcu (fs/seq_file.c:309)
[ 182.027477][ T3569] ? mutex_unlock (kernel/locking/mutex.c:549)
[ 182.027901][ T3569] ? __f_unlock_pos (fs/file.c:1199)
[ 182.028416][ T3569] ? __ia32_sys_llseek (include/linux/file.h:47 include/linux/file.h:83 fs/read_write.c:350 fs/read_write.c:325 fs/read_write.c:325)
[ 182.028892][ T3569] ? syscall_exit_to_user_mode_prepare (kernel/entry/common.c:199 (discriminator 1))
[ 182.029473][ T3569] ? syscall_exit_to_user_mode (kernel/entry/common.c:221)
[ 182.029984][ T3569] ? do_int80_syscall_32 (arch/x86/entry/common.c:343)
[ 182.030447][ T3569] ? up_read (kernel/locking/rwsem.c:1623)
[ 182.030816][ T3569] ? irqentry_exit_to_user_mode (kernel/entry/common.c:234)
[ 182.031338][ T3569] ? irqentry_exit (kernel/entry/common.c:367)
[ 182.031743][ T3569] ? exc_page_fault (arch/x86/mm/fault.c:1543)
[ 182.032174][ T3569] entry_INT80_32 (arch/x86/entry/entry_32.S:944)
[ 182.032569][ T3569] EIP: 0x8097522
[ 182.032881][ T3569] Code: 89 c8 c3 90 8d 74 26 00 85 c0 c7 01 01 00 00 00 75 d8 a1 cc 3c ad 08 eb d1 66 90 66 90 66 90 66 90 66 90 66 90 66 90 90 cd 80 <c3> 8d b6 00 00 00 00 8d bc 27 00 00 00 00 8b 10 a3 f4 3c ad 08 85
All code
========
0: 89 c8 mov %ecx,%eax
2: c3 ret
3: 90 nop
4: 8d 74 26 00 lea 0x0(%rsi,%riz,1),%esi
8: 85 c0 test %eax,%eax
a: c7 01 01 00 00 00 movl $0x1,(%rcx)
10: 75 d8 jne 0xffffffffffffffea
12: a1 cc 3c ad 08 eb d1 movabs 0x9066d1eb08ad3ccc,%eax
19: 66 90
1b: 66 90 xchg %ax,%ax
1d: 66 90 xchg %ax,%ax
1f: 66 90 xchg %ax,%ax
21: 66 90 xchg %ax,%ax
23: 66 90 xchg %ax,%ax
25: 66 90 xchg %ax,%ax
27: 90 nop
28: cd 80 int $0x80
2a:* c3 ret <-- trapping instruction
2b: 8d b6 00 00 00 00 lea 0x0(%rsi),%esi
31: 8d bc 27 00 00 00 00 lea 0x0(%rdi,%riz,1),%edi
38: 8b 10 mov (%rax),%edx
3a: a3 .byte 0xa3
3b: f4 hlt
3c: 3c ad cmp $0xad,%al
3e: 08 .byte 0x8
3f: 85 .byte 0x85

Code starting with the faulting instruction
===========================================
0: c3 ret
1: 8d b6 00 00 00 00 lea 0x0(%rsi),%esi
7: 8d bc 27 00 00 00 00 lea 0x0(%rdi,%riz,1),%edi
e: 8b 10 mov (%rax),%edx
10: a3 .byte 0xa3
11: f4 hlt
12: 3c ad cmp $0xad,%al
14: 08 .byte 0x8
15: 85 .byte 0x85


The kernel config and materials to reproduce are available at:
https://download.01.org/0day-ci/archive/20240712/202407121652.69e657c5-oliver.sang@xxxxxxxxx



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