Accessing address space of a process through kld!!

Andrey Simonenko simon at comsys.ntu-kpi.kiev.ua
Wed Mar 1 06:06:21 PST 2006


On Tue, Feb 28, 2006 at 01:33:47PM -0500, John Baldwin wrote:
> On Monday 27 February 2006 13:31, John-Mark Gurney wrote:
> > Tanmay wrote this message on Mon, Feb 27, 2006 at 13:56 +0530:
> > > How do I access the address space ie text,data and stack of a (user
> > > level)process whose pid I know from my kld. for eg: Suppose 'vi' is running
> > > and I want to access its address space through my kld, then how do I do it?
> > 
> > You look up the process with pfind(9), and then you can use uio(9) to
> > transfer data into kernel space...  Don't forget to PROC_UNLOCK the
> > struct once you are done referencing it.
> 
> You can use the proc_rwmem() function (it takes a uio and a struct proc)
> to do the actual I/O portion.  You can see example use in the ptrace()
> syscall.

I have two questions about this function:

1.	vm_fault() does not guarantee, that (possibly) faulted in page
	will be in the object or in one of backing objects when
	vm_fault() returns, because a page can become not resident
	again.  Why not to wire needed page in vm_fault() (by giving
	a special flag to vm_fault() function)?

2.	When the object which owns the page is unlocked, which lock
	guarantees, then m will point to a page?  I mean m, which is
	used in vm_page_hold(m), which is called after VM_OBJECT_UNLOCK()
	(I mean a gap of time between VM_OBJECT_UNLOCK() and
	vm_page_lock_queues() function calls).

Can you answer these two question?  Thanks.


More information about the freebsd-hackers mailing list