kern/145452: [geom] panic in geom_part_mbr when undoing destroy command

Andrey V. Elsukov bu7cher at yandex.ru
Wed Apr 7 08:40:07 UTC 2010


>Number:         145452
>Category:       kern
>Synopsis:       [geom] panic in geom_part_mbr when undoing destroy command
>Confidential:   no
>Severity:       serious
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Wed Apr 07 08:40:06 UTC 2010
>Closed-Date:
>Last-Modified:
>Originator:     Andrey V. Elsukov
>Release:        FreeBSD 9.0-CURRENT amd64
>Organization:
>Environment:
System: FreeBSD 9.0-CURRENT i386/amd64

>Description:
	System panic when trying undo destroy MBR scheme:
	Fatal trap 18: integer divide fault while in kernel mode.
	Backtrace attached.
>How-To-Repeat:
	# mdconfig -s 50m
	# gpart create -s mbr md0
	# gpart destroy -f x md0
	# gpart undo md0
>Fix:
	Don't know how to fix it in a right way.
	It seems it can be fixed by adding at the end of g_part_mbr_read method
	after loop on partitions entries some code, which will be check and
	properly initialize basetable->gpt_sectors. 
	Also it can be fixed somewhere in g_part.c, but currently it is not so 
	easy for me to found right place where :)

	

--- bt.txt begins here ---
(kgdb) bt
#0  doadump () at pcpu.h:246
#1  0xc05bf707 in boot (howto=260) at /usr/src/sys/kern/kern_shutdown.c:416
#2  0xc05bf9f9 in panic (fmt=) at /usr/src/sys/kern/kern_shutdown.c:579
#3  0xc084632c in trap_fatal (frame=0xc3af2a10, eva=0)
    at /usr/src/sys/i386/i386/trap.c:940
#4  0xc084707d in trap (frame=0xc3af2a10) at /usr/src/sys/i386/i386/trap.c:729
#5  0xc082905b in calltrap () at /usr/src/sys/i386/i386/exception.s:165
#6  0xc084e6ab in __qdivrem (uq=) at /usr/src/sys/libkern/qdivrem.c:97
#7  0xc084e5d1 in __moddi3 (a=102400, b=) at /usr/src/sys/libkern/moddi3.c:60
#8  0xc056af6f in g_part_mbr_read (basetable=0xc3ea9c00, cp=0xcc7a1d40)
    at /usr/src/sys/geom/part/g_part_mbr.c:433
#9  0xc0566521 in g_part_ctlreq (req=0xcc7a1300, mp=0xc08e9c60, 
    verb=0xd023e760 "undo") at g_part_if.h:190
#10 0xc055933e in g_ctl_req (arg=0xcc7a1300, flag=0)
    at /usr/src/sys/geom/geom_ctl.c:454
#11 0xc055c454 in g_run_events () at /usr/src/sys/geom/geom_event.c:211
#12 0xc055d945 in g_event_procbody () at /usr/src/sys/geom/geom_kern.c:141
#13 0xc0594e31 in fork_exit (callout=0xc055d8e0 <g_event_procbody>, arg=0x0, 
    frame=0xc3af2d38) at /usr/src/sys/kern/kern_fork.c:843
#14 0xc08290d0 in fork_trampoline () at /usr/src/sys/i386/i386/exception.s:270
(kgdb) f 8
#8  0xc056af6f in g_part_mbr_read (basetable=0xc3ea9c00, cp=0xcc7a1d40)
    at /usr/src/sys/geom/part/g_part_mbr.c:433
433		basetable->gpt_last = msize - (msize % basetable->gpt_sectors) - 1;
(kgdb) p *basetable
$1 = {ops = 0xc566d800, gpt_scheme = 0xc08ea420, gpt_gp = 0xc946c280, 
  gpt_entry = {lh_first = 0x0}, gpt_first = 0, gpt_last = 0, gpt_entries = 4, 
  gpt_smhead = 0, gpt_smtail = 0, gpt_sectors = 0, gpt_heads = 0, 
  gpt_depth = 0, gpt_isleaf = 0, gpt_created = 0, gpt_modified = 0, 
  gpt_opened = 0, gpt_fixgeom = 0}
(kgdb) p *basetable->gpt_scheme
$2 = {name = 0xc08a33fe "MBR", methods = 0xc08ea480, size = 572, 
  baseclasses = 0x0, refs = 1, ops = 0xc566d800, gps_entrysz = 60, 
  gps_minent = 4, gps_maxent = 4, gps_bootcodesz = 512, scheme_list = {
    tqe_next = 0x0, tqe_prev = 0xc08ea388}}
(kgdb) 
--- bt.txt ends here ---


>Release-Note:
>Audit-Trail:
>Unformatted:


More information about the freebsd-bugs mailing list