Kernel Space Memory Allocation

Mark Tinguely marktinguely at gmail.com
Thu Oct 27 13:20:09 UTC 2011


On 10/27/2011 3:31 AM, Daniel Grech wrote:
> Hi,
>
> I am allocating memory from a device driver in the kernel and passing it on
> to another driver. In the other driver it is neccessary for me to determine
> whether the address passed is from user space or kernel space as this driver
> can also be called from user space. I am currently using the following check
> to determine if the address is in kernel space or userspace :
>
> if ( ( (char *) VM_MIN_KERNEL_ADDRESS<= address)&&   (address<= (char *)
> VM_MAX_KERNEL_ADDRESS) )
> {
>          KERNEL SPACE
> }
> else
> {
>         USER SPACE
> }
>
> However, this does not always work. Sometimes although I allocate memory in
> the kernel using the malloc macro, this returns an address which is not in
> the above range. Is there any workaround for this problem?
>
> Thanks in advance for your help.
>
> Daniel
> _______________________________________________
> freebsd-hackers at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> To unsubscribe, send any mail to "freebsd-hackers-unsubscribe at freebsd.org"
>

Be careful if using user virtual addresses in DMA POST commands, because 
the interrupt handler may not have the the same address space as the 
caller. For example: BUS_DMASYNC_POSTREAD copying a bounce buffer to a 
user VA.

--Mark Tinguely


More information about the freebsd-hackers mailing list