svn commit: r203696 - in head: lib/libc/sys sys/kern sys/sys

Kostik Belousov kostikbel at gmail.com
Tue Feb 9 09:57:28 UTC 2010


On Tue, Feb 09, 2010 at 05:52:35AM +0000, Marcel Moolenaar wrote:
> Author: marcel
> Date: Tue Feb  9 05:52:35 2010
> New Revision: 203696
> URL: http://svn.freebsd.org/changeset/base/203696
> 
> Log:
>   Add PT_VM_TIMESTAMP and PT_VM_ENTRY so that the tracing process can
>   obtain the memory map of the traced process. PT_VM_TIMESTAMP can be
>   used to check if the memory map changed since the last time to avoid
>   iterating over all the VM entries unnecesarily.
>   
>   MFC after:	1 month
> 
...
> +static int
> +ptrace_vm_entry(struct thread *td, struct proc *p, struct ptrace_vm_entry *pve)
> +{
> +	vm_map_t map;
> +	vm_map_entry_t entry;
> +	vm_object_t obj, tobj, lobj;
> +	struct vnode *vp;
> +	char *freepath, *fullpath;
> +	u_int pathlen;
> +	int error, vfslocked;
> +
> +	map = &p->p_vmspace->vm_map;
I think this place lacks two safety measures:
- vmspace should be referenced by vmspace_acquire_ref()
- vm_map should be read-locked before iterating the map entries.

Vmspace may be shared between stopped debugee and other process using
rfork(2), thus modified despite the fact that traced process is stopped.

> +	entry = map->header.next;
> +	if (pve->pve_cookie != NULL) {
> +		while (entry != &map->header && entry != pve->pve_cookie)
> +			entry = entry->next;
Could the entry pointed by pve_cookie be reused between ptrace(PT_VM_ENTRY)
invocations ? I think the debugger should be informed about this situation,
otherwise interface is too unreliable.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 196 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/svn-src-all/attachments/20100209/bbcce94e/attachment-0001.pgp


More information about the svn-src-all mailing list