NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

bin/58678: ntpd crashes on sparc64



>Number:         58678
>Category:       bin
>Synopsis:       ntpd crashes on sparc64
>Confidential:   no
>Severity:       critical
>Priority:       high
>Responsible:    bin-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Thu Sep 19 10:55:00 +0000 2024
>Originator:     Martin Husemann
>Release:        NetBSD 10.99.12
>Organization:
The NetBSD Foundation, Inc.
>Environment:
System: NetBSD thirdstage.duskware.de 10.99.12 NetBSD 10.99.12 (MODULAR) #747: Thu Sep 19 10:16:21 CEST 2024 martin%thirdstage.duskware.de@localhost:/home/martin/current/src/sys/arch/sparc64/compile/MODULAR sparc64
Architecture: sparc64
Machine: sparc64
>Description:

After updating to -current as of a few hours ago, ntpd(8) won't startup
on sparc64

Thread 2 "" received signal SIGBUS, Bus error.
alloc_res4 ()
    at /home/martin/current/src/external/bsd/ntp/dist/ntpd/ntp_restrict.c:243
243                     LINK_SLIST(resfree4, res, link);
(gdb) bt
#0  alloc_res4 ()
    at /home/martin/current/src/external/bsd/ntp/dist/ntpd/ntp_restrict.c:243
#1  hack_restrict (op=<optimized out>, resaddr=0x405ca824, 
    resmask=0xffffffffffffc918, ippeerlimit=<optimized out>, 
    mflags=<optimized out>, rflags=<optimized out>, expire=0)
    at /home/martin/current/src/external/bsd/ntp/dist/ntpd/ntp_restrict.c:705
#2  0x000000000014e2ac in create_interface (port=123, protot=0x405ca200)
    at /home/martin/current/src/external/bsd/ntp/dist/ntpd/ntp_io.c:2101
#3  update_interfaces (receiver=0x0, data=<optimized out>, port=123)
    at /home/martin/current/src/external/bsd/ntp/dist/ntpd/ntp_io.c:1912
#4  0x000000000014f140 in create_sockets (port=123)
    at /home/martin/current/src/external/bsd/ntp/dist/ntpd/ntp_io.c:2039
#5  io_open_sockets ()
    at /home/martin/current/src/external/bsd/ntp/dist/ntpd/ntp_io.c:514
#6  0x000000000013725c in config_ntpd (input_from_files=<optimized out>, 
    ptree=0x40592000)
(gdb) list    
238             }
239             rl = eallocarray(count, cb);
240             /* link all but the first onto free list */
241             res = (void *)((char *)rl + (count - 1) * cb);
242             for (i = count - 1; i > 0; i--) {
243                     LINK_SLIST(resfree4, res, link);
244                     res = (void *)((char *)res - cb);
245             }
246             DEBUG_INSIST(rl == res);
247             /* allocate the first */
(gdb) p resfree4
$1 = (restrict_u *) 0x0
(gdb) p res
$2 = (restrict_u *) 0x405e2384
(gdb) p link
$3 = {<text variable, no debug info>} 0x41467140 <link>

I guess "restrict_u" needs more than 4 byte alignment, the compiler uses
stx to store 64byte there:

(gdb) x/16i $pc
=> 0x16da50 <hack_restrict+1680>:       stx  %g2, [ %g1 ]
(gdb) p/x $g1
$6 = 0x405e2384


>How-To-Repeat:
s/a

>Fix:
n/a



Home | Main Index | Thread Index | Old Index