[prev in list] [next in list] [prev in thread] [next in thread] 

List:       freebsd-hackers
Subject:    Re: How to access kernel memory from user space
From:       John Baldwin <jhb () freebsd ! org>
Date:       2012-02-23 13:12:43
Message-ID: 201202230812.43126.jhb () freebsd ! org
[Download RAW message or body]

On Wednesday, February 22, 2012 8:06:20 pm Ryan Stone wrote:
> On Wed, Feb 22, 2012 at 2:15 PM, Ian Lepore
> <freebsd@damnhippie.dyndns.org> wrote:
> > I've never done this, but if I needed to, I think the first thing I'd
> > try is to use an mmap(2) of /dev/kmem to map the memory you need into
> > userspace (of course your userspace app will need to be running with
> > root privs to do this).
> >
> > That leaves the interesting problem of locating what offset within the
> > kernel virtual address space you need to map to get at your data.  Two
> > things come to mind... have your kernel module export the address in a
> > sysctl (that feels kind of hack-ish but it should be quick and easy to
> > do), or use libkvm's kvm_nlist() function to locate the symbol within
> > your module (I think that should be possible; again I've never actually
> > done any of this).
> 
> A far easier way to do this is to have the module create its own
> device in /dev that exports the memory by implementing the mmap
> interface in the cdev.

Yes.  Another option you can do if you want to let userland "donate" a buffer
to the kernel is to let userland create a buffer using shm_open() (probably
with SHM_ANON) and then use shm_map() in the kernel to map that into KVA.

-- 
John Baldwin
_______________________________________________
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org"
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic