[lkml]   [2000]   [Nov]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
SubjectRe: Address translation
> The reason that everyone else uses copy_{to,from}_user is that there
> is no way to guarantee that the userspace pointer is valid. That
> memory may have been swapped out. The copy macros are prepared to
> fault the memory in. The rest of the kernel is not.
> Jeff

I may be wrong on this, but I thought that copy_{to,from}_user are
only necessary if the address range you are accessing might cause a
fault which Linux cannot handle (ie. one which would cause the
application to segfault if it accessed that memory). If it is only a
matter of paging the memory in (and you are _sure_ the address range is
otherwise valid) I think the access macros are unnecessary. I would be
*very* glad if someone could confirm this, or shoot me down. :)

For instance, a kernel module I am writing allocates some memory in
the current process's address space as follows:

s->table = (void **)get_unmapped_area(0, SIZEOF_TABLE);
if ( s->table != NULL )
do_brk((unsigned long)s->table, SIZEOF_TABLE);

Some questions:
(1) In a "top half" thread, can I now access this memory without the
access macros (since I know the address range is valid)?
(2) Can I also access this memory from an interrupt/exception
context, or must I lock it? (ie. can faults be handled from such
a context)
(3) Is the above code sensible at all, or barking? It took me a while
to figure that the above would work, and I think/hope it is the
most elegant way to share memory between kernel and a process.

Thanks in advance for any info!
-- Keir Fraser

PS. Please cc me directly ( with any replies.
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to
Please read the FAQ at

 \ /
  Last update: 2005-03-22 12:47    [W:0.072 / U:0.164 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site