> fatal protection fault in supervisor mode

Finally I was able to build custom ramdisk kernel with DDB to get stacktrace.

Kernel ident:
OpenBSD 7.3 (RAMDISK_CD) #1: Fri May 26 20:28:53 CEST 2023
    root@openbsd-kvm.default:/usr/src/sys/arch/amd64/compile/RAMDISK_CD

While installing sets from cd0:
wdc_atapi_start: not ready, st = 50
kernel: protection fault trap, code=0
Stopped at      wdcstart+0x19:  movl    0x58(%rdi),%eax
ddb> trace
wdcstart(ffff80000007c168,ffff80000007c168,ffff80000007c168,10,ffff800021712d88,10282)
 at wdcstart+0x19
wdc_atapi_the_machine(ffff80000007c168,fffffd807e9aed08,2,ffff80000007c168,ffff80000007c168,fffffd807e9aed08)
 at wdc_atapi_the_machine+0x14a
wdc_atapi_intr(ffff80000007c168,fffffd807e9aed08,1,ffff80000007c168,fffffd807e9aed08,ffff80000007c168)
 at wdc_atapi_intr+0x47
wdcintr(ffff80000007c168,ffff80000007c168,ffff800000024dc0,0,6,1) at 
wdcintr+0xae
intr_handler(ffff800021712ed8,ffff800000065500,ffff800000065680,ffffffff811f91b0,ffffffff81211216,ffff800021712ec8)
 at intr_handler+0x26
Xintr_ioapic_edge14_untramp(0,ffffffff811f91b0,0,18041969,ffff800000024dc0,6) 
at Xintr_ioapic_edge14_untramp+0x18f
Xspllower(0,0,ffff800000024d00,0,ffffffff81211455,602) at Xspllower+0xc
scsi_xsh_runqueue(ffff800000024d00,ffff800000024d00,0,ffff800000024d00,ffff80000014b100,ffff800000023970)
 at scsi_xsh_runqueue+0xe3
scsi_xsh_add(ffff800000023970,ffff800000023970,fffffd806ccfc700,ffff800000023800,fffffd806ccfc7f0,6)
 at scsi_xsh_add+0x80
cdstrategy(fffffd806ccfc700,fffffd806ccfc700,fffffd806ccfc700,fffffd806ccfc700,fffffd806ccfc7f0,150)
 at cdstrategy+0xe4
spec_strategy(ffff8000217130c0,ffff8000217130c0,fffffd806ccfc700,1f,ffffffff81141f01,ffff8000217130b0)
 at spec_strategy+0x3f
VOP_STRATEGY(fffffd807de4f6c8,fffffd806ccfc700,fffffd806ccfc700,fffffd807de4f6c8,ffffffff8114026b,ffff8000217130e0)
 at VOP_STRATEGY+0x3c
cd9660_strategy(ffff800021713130,ffff800021713130,fffffd806ccfc700,4,fffffd807e9d2970,fffffd807e9d2970)
 at cd9660_strategy+0xce
VOP_STRATEGY(fffffd807e9d2970,fffffd806ccfc700,fffffd806ccfc700,fffffd807e9d2970,ffffffff8114026b,ffff800021713150)
 at VOP_STRATEGY+0x3c
bio_doread(fffffd807e9d2970,1c1e,800,4,ffff800000148f00,20) at bio_doread+0x67
breadn(fffffd807e9d2970,1bfe,800,ffff800000148e00,ffff800000148f00,20) at 
breadn+0x71
cd9660_read(ffff8000217132b0,ffff8000217132b0,fffffd807edfb170,fffffd807e9d2970,0,ffff8000217133e0)
 at cd9660_read+0x12b
VOP_READ(fffffd807e9d2970,ffff8000217133e0,0,fffffd807f7bff08,fffffd807f7bff08,ffff800000000000)
 at VOP_READ+0x31
vn_read(fffffd807edfb170,ffff8000217133e0,0,fffffd807edfb170,fffffd807edfb170,20000)
 at vn_read+0xad
dofilereadv(ffff8000216cd888,3,ffff8000217133e0,0,ffff8000217134a0,ffff8000216cd888)
 at dofilereadv+0x62
sys_read(ffff8000216cd888,ffff800021713450,ffff8000217134a0,ffff8000216cd888,1000,2d0170000)
 at sys_read+0x43
syscall(ffff800021713500,ffff800021713500,0,ffff8000216cd888,0,0) at 
syscall+0x201
Xsyscall(0,3,0,3,0,238128000) at Xsyscall+0x128
end of kernel
end trace frame: 0x79ff6e90a870, count: -23
ddb>

Please let me know if you need more information on specific frame.

I build my custom ramdisk kernel this way:
1. installed these sets: `sys` and `src`
2. added to /usr/src/sys/arch/amd64/conf/RAMDISK_CD

option DDB
option DDB_SAFE_CONSOLE

3. prepared config but did not build kernel yet

cd /usr/src/sys/arch/amd64/conf
config RAMDISK_CD

4. Now tricky part - short circuit to make kernel with ramdisk...

cd /usr/src
make obj
# workaround for error "-lstubs not found"
cd /usr/src/distrib/special/libstubs
make
# now back to work...
cd /usr/src/distrib/amd64/ramdisk_cd/
# don't do this BUILDUSER=root on production!
make bsd.gz BUILDUSER=root

5. obj/bsd.gz is your own gzipped kernel with installation ramdisk you can boot.
   (I used virtual hdd with exiting OpenBSD 7.3/amd64 to boot this kernel and 
(re)installing
    OpenBSD from CD there to trigger that trap).

Best regards
--
  --Henryk Paluch

Reply via email to