Date: Wed, 10 Sep 1997 14:40:45 +1000 From: Bruce Evans <bde@zeta.org.au> To: bde@zeta.org.au, jlemon@americantv.com Cc: emulation@FreeBSD.ORG, hfwirth@ping.at Subject: Re: Doscmd, debugging with gdb Message-ID: <199709100440.OAA10269@godzilla.zeta.org.au>
next in thread | raw e-mail | index | archive | help
>> > > cat /proc/<pid>/map >> > [.. snip ..] >> > 0x8012000 0x8014000 0 2 rwx COW vnode >> > 0x8014000 0x801c000 0 8 rwx default >> > [.. snip ..] >> > (gdb) set *0x8012000 = 0 >> > (gdb) set *0x8014000 = 0 >> > Error accessing memory address 0x8014000: Bad address. >> >> `w' apparently means write-protected here :-). All the r-x COW vnodes >> are writable and all the rwx COW vnodes are non-writable. > >No, I don't think that's it; the write to the 'rwx COW vnode' entry >succeeds, while the write to the 'rwx default' entry fails. Oops, I read from the wrong column in the map. >Also, the 'default' region in doscmd was allocated via brk(), so I'd >certainly hope that allocated memory isn't non-writeable. :-) > >I neglected to mention that this was on a -current machine, BTW. Even the stack is currently non-writable via ptrace :-). Try this fix. diff -c2 vm_map.c~ vm_map.c *** vm_map.c~ Mon Sep 1 18:00:38 1997 --- vm_map.c Wed Sep 10 14:02:48 1997 *************** *** 2288,2292 **** (entry->eflags & MAP_ENTRY_COW) == 0 || (entry->wired_count != 0)) { ! if ((fault_type & (prot)) != fault_type) RETURN(KERN_PROTECTION_FAILURE); } --- 2288,2293 ---- (entry->eflags & MAP_ENTRY_COW) == 0 || (entry->wired_count != 0)) { ! if ((fault_type & prot) != ! (fault_type & ~VM_PROT_OVERRIDE_WRITE)) RETURN(KERN_PROTECTION_FAILURE); } Bruce
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199709100440.OAA10269>