Re: PATCH: Crash while suspending on FreeBSD/amd64 8.1-RC2

Jung-uk Kim <[email protected]>
Newsgroups gmane.os.freebsd.devel.mobile
Message-ID <[email protected]>
On Thursday 01 July 2010 02:43 pm, Yamagi Burmeister wrote:
> Okay, with the help of a friend of mine I managed to track this
> down.
>
> > (kgdb) bt
> > #0  doadump () at pcpu.h:223
> > #1  0xffffffff8020dfe9 in boot (howto=260) at
> > /usr/src/sys/kern/kern_shutdown.c:416
> > #2  0xffffffff8020e41c in panic (fmt=0xffffffff8044ebbb "%s")
> >    at /usr/src/sys/kern/kern_shutdown.c:590
> > #3  0xffffffff80408bc8 in trap_fatal (frame=0xffffff0004a4e000,
> > eva=Variable "eva" is not available.
> > )
> >    at /usr/src/sys/amd64/amd64/trap.c:777
> > #4  0xffffffff80408f94 in trap_pfault (frame=0xffffff803da285e0,
> > usermode=0)
> >    at /usr/src/sys/amd64/amd64/trap.c:693
> > #5  0xffffffff804097da in trap (frame=0xffffff803da285e0)
> >    at /usr/src/sys/amd64/amd64/trap.c:451
> > #6  0xffffffff803ef543 in calltrap () at
> > /usr/src/sys/amd64/amd64/exception.S:223
> > #7  0xffffffff80406f16 in bcopy () at
> > /usr/src/sys/amd64/amd64/support.S:124
> > #8  0xffffffff80745fb7 in vesa_bios_save_restore (code=1,
> > p=0xffffff80002a6004,
> >    size=4928) at
> > /usr/src/sys/modules/vesa/../../dev/fb/vesa.c:551 #9 
> > 0xffffffff80746059 in vesa_save_state (adp=Variable "adp" is not
> > available.
> > )
> >    at /usr/src/sys/modules/vesa/../../dev/fb/vesa.c:1429
> > #10 0xffffffff80424144 in vga_suspend (dev=0xffffff0001632a00)
> >    at /usr/src/sys/isa/vga_isa.c:81
> > #11 0xffffffff804241d7 in isavga_suspend (dev=0xffffff0001632a00)
> >    at /usr/src/sys/isa/vga_isa.c:234
>
> The problem is on stack level 8. Line 538 in sys/dev/fb/vesa.c
> returns NULL because x86bios_alloc(&offs, size); couldn't allocate
> memory. In line 551 the nullpointer is passed to bcopy(), causing
> the crash. A simple sollution is to add a nullpointer check like
> the attached patch does. But I'm not sure if that's the right
> solution, since the VGA state will not be saved if the check
> triggers.
>
> --- vesa.c_	2010-07-01 20:38:54.000000000 +0200
> +++ vesa.c	2010-07-01 20:38:03.000000000 +0200
> @@ -536,6 +536,8 @@
>  		return (1);
>
>  	buf = x86bios_alloc(&offs, size);
> +	if (buf == NULL)
> +		return (1);
>
>  	x86bios_init_regs(&regs);
>  	regs.R_AX = 0x4f04;

Fixed on HEAD.  Will be MFC'ed soon.

Thanks!

Jung-uk Kim
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-mobile
To unsubscribe, send any mail to "[email protected]"
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.