double fault during log(LOG_DEBUG)
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sun, 03 Nov 2024 14:56:31 UTC
Hello,
while I am waiting for my reviews.freebsd.org account to be approved, I
would like understand a particular crash that I observed while hacking a
kernel driver:
#33 0xffffffff810346be in panic (fmt=0xffffffff81a69212 "double fault")
at /usr/src/sys/kern/kern_shutdown.c:891
#34 0xffffffff81819ae2 in dblfault_handler (frame=0xfffffe001ea4ff30)
at /usr/src/sys/amd64/amd64/trap.c:1012
#35 <signal handler called>
#36 0xffffffff810bb574 in kvprintf (fmt=0xffffffff8197a48b ">", func=0x0,
arg=0xfffffe00f8029440, radix=10, ap=0xfffffe00f8029370)
at /usr/src/sys/kern/subr_prf.c:907
#37 0xffffffff810bc728 in sprintf (buf=0xfffffe00f8029440 "<",
cfmt=0xffffffff8197a488 "<%d>") at /usr/src/sys/kern/subr_prf.c:526
#38 0xffffffff810b4409 in msgbuf_addstr (mbp=0xfffff804417fffb8, pri=7,
str=0xfffffe00f8029a00 "Unhandled devclass: drm\n", filter_cr=1)
at /usr/src/sys/kern/subr_msgbuf.c:205
#39 0xffffffff810bc65b in msglogstr (
str=0xfffffe00f8029a00 "Unhandled devclass: drm\n", pri=7, filter_cr=1)
at /usr/src/sys/kern/subr_prf.c:1029
#40 0xffffffff810bd152 in prf_putbuf (
bufr=0xfffffe00f8029a00 "Unhandled devclass: drm\n", flags=5, pri=7)
at /usr/src/sys/kern/subr_prf.c:442
#41 0xffffffff810bd300 in putbuf (c=10, ap=0xfffffe00f80299b8)
at /usr/src/sys/kern/subr_prf.c:470
#42 0xffffffff810bbe7d in putchar (c=10, arg=0xfffffe00f80299b8)
at /usr/src/sys/kern/subr_prf.c:513
#43 0xffffffff810b9cf6 in kvprintf (fmt=0xffffffff8492e0ac "",
func=0xffffffff810bbdd0 <putchar>, arg=0xfffffe00f80299b8, radix=10,
ap=0xfffffe00f8029b00) at /usr/src/sys/kern/subr_prf.c:688
#44 0xffffffff810bc405 in _vprintf (level=7, flags=5,
fmt=0xffffffff8492e095 "Unhandled devclass: %s\n", ap=0xfffffe00f8029b00)
at /usr/src/sys/kern/subr_prf.c:295
#45 0xffffffff810bc331 in vlog (level=7,
fmt=0xffffffff8492e095 "Unhandled devclass: %s\n", ap=0xfffffe00f8029b00)
at /usr/src/sys/kern/subr_prf.c:326
#46 0xffffffff810b953d in log (level=7,
fmt=0xffffffff8492e095 "Unhandled devclass: %s\n")
at /usr/src/sys/kern/subr_prf.c:318
#47 0xffffffff8492a5ca in linsysfs_run_bus (dev=0xfffff8001542cc00,
dir=0xfffff800159f6900, scsi=0xfffff8000d289b00,
chardev=0xfffff8000d27d800, drm=0xfffff8000d289800,
path=0xfffff80015a05000 "/pci0000:00/0000:00:02.0",
prefix=0xffffffff8492e31a "0000")
at /usr/src/sys/compat/linsysfs/linsysfs.c:540
The "double fault" is reliably caused by the log(LOG_DEBUG) call (frame #46).
Once I commented it out, it was gone.
Interestingly, I couldn't provoke this bug in my VirtualBox, but only when I tried
to test it on my main installation. I don't have a "drm" device in VirtualBox, though.
The string "drm", it tries to log, comes from devclass_get_name(). I suppose this
string has static lifetime - it shouldn't be possible to become invalid.
And in fact, the double fault is obviously caused long after the string
has been read.
Best regards,
Robin