Re: [PATCH 1/11] oprofile: add check_user_page_readable()

From: Greg Banks
Date: Tue Nov 09 2004 - 06:40:07 EST


On Tue, 2004-11-09 at 22:04, Andrew Morton wrote:
> Greg Banks <gnb@xxxxxxxxxxxxxxxxx> wrote:
> >
> > Add check_user_page_readable() for kernel modules which need
> > to follow user space addresses but can't use get_user().
>
> Strange. What is the usage pattern for this?

The i386 callgraph code attempts to follow user stacks, from
an interrupt (perfmon, NMI, or timer) where get_user() is
explicitly disallowed by Documentation/DocBook/kernel-locking.tmpl.
AFAICS from the ia64 and i386 page fault handlers get_user should
"just work" and return -EFAULT if the page isn't resident or
readable, but the doc says...

Currently this is only an issue for i386. The ia64 code doesn't
even try to look at user stacks (shudder).

> And why is that usage
> pattern not racy in the presence of paging activity?

The i386 backtracer takes the &current->mm->page_table_lock, and
just drops out of the trace early if a page isn't resident. It
doesn't expect or try to page in. After all this is only statistical
sampling not write() data.

>
> Did you consider use_mm(), in conjunction with get_user()?

No, but glancing at use_mm() the comment says

* (Note: this routine is intended to be called only
* from a kernel thread context)

Greg.
--
Greg Banks, R&D Software Engineer, SGI Australian Software Group.
I don't speak for SGI.


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/