🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

1 total messages Started by Andreas Luik Sat, 07 Oct 1989 18:27
gdb 3.2: try_writing_regs_command crashes Sun3 under 4.0.3
#287
Author: Andreas Luik
Date: Sat, 07 Oct 1989 18:27
83 lines
3255 bytes
Hello,

a bug report:

Version:        gdb 3.2
Machine:        Sun 3/50 or 3/60
Op. Sys:        SunOS 4.0.3

Synopsis:

    the command try-writing-regs crashes the kernel

Description:

    If someone trys the command try-writing-regs, the function
    try_writing_regs_command() tries to display the values of the
    kernel address space starting from 0. After it displays
    " Failed at 0x1f00.", the kernel of our Sun crashes with the
    following messages:

	vmunix: sh:
	vmunix: trap address 0x8, pid 18329, pc = f028198, sr = 2000, stkfmt b, context 2
	vmunix: Bus Error Reg 80<INVALID>
	vmunix: data fault address ffffa000 faultc 0 faultb 0 dfault 1 rw 1 size 2 fcode 5
	vmunix: KERNEL MODE
	vmunix: page map 2000000 pmgrp f8
	vmunix: D0-D7  1ffe f0ba388 2 0 0 0 18 1ffe
	vmunix: A0-A7  1ffe 1fff8000 1ffe efffd68 f08446a f0ba388 ffff9768 ffff9744
	vmunix: Begin traceback...fp = ffff9768, sp = ffff9744
	vmunix: Called from f01d2ce, fp=ffff9780, args=ffffffff f0ba388 10 10
	vmunix: Called from f061904, fp=ffff97a8, args=0 20117 eca005c eca005c
	vmunix: Called from f004768, fp=efffd28, args=3b 0 0 0
	vmunix: End traceback...
	vmunix: panic: Bus error
	vmunix: syncing file systems... [5] [4] [1] done
	vmunix:
	vmunix: dumping to vp f11fa8c, offset 25123
	vmunix: 1022 total pages, dump succeeded
	vmunix: rebooting...
	vmunix: SunOS Release 4.0.3_EXPORT (GOEDEL) #3: Wed Aug 2 16:05:10 MET DST 1989


Fix:

    First, I reported this bug to Sun. The German Answer Center told me,
    that they will report the bug to the development team to ensure that
    the parameters of the ptrace() system call will be checked for legal
    values. The reason of the crash is that the loop is not terminated
    at the end of the address space. A correct version of the loop in
    try_writing_regs_command() should have the following form: (at least
    on a Sun):

	{
	    struct user user;

	    for (i = 0; i < sizeof (user); i += 2) {
		errno = 0;
		value = ptrace (3, pid, i, 0);
		ptrace (6, pid, i, value);
		if (errno == 0)
		    printf ("Succeeded with address 0x%x; value 0x%x (%d).\n",
			i, value, value);
		else if ((i & 0377) == 0)
		    printf ("Failed at 0x%x.\n", i);
	    }
	    break;
	}

    Note: The struct user is defined in <sys/user.h>.


    Is this a correct fix. How does this affect other architectures?


Thanks,

-- 
Andreas Luik
I S A  GmbH - Informationssysteme fuer computerintegrierte Automatisierung
Azenbergstr. 35, D-7000 Stuttgart 1, West-Germany, Phone: +49-711/22769-44

Domain: luik@isaak.isa.de  BITNET: luik%isaak.uucp@unido.bitnet
UUCP:   luik@isaak.uucp    Bang:   ...{uunet!unido,pyramid!iaoobel}!isaak!luik
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads