BUG: sleeping function called from invalid context at kernel/rwsem.c:20
Stone, Joshua I
joshua.i.stone@intel.com
Fri Sep 8 22:02:00 GMT 2006
On Friday, September 08, 2006 11:38 AM, Keshavamurthy Anil S wrote:
> On Fri, Sep 08, 2006 at 11:09:48AM -0700, Keshavamurthy Anil S wrote:
> More debugging resulted that Systemtap generated code is
> calling down_read() in the probe handler code path.
>
> down_read()->might_sleep()->__might_sleep(__FILE__, __LINE__);
>
> If CONFIG_DEBUG_SPINLOCK_SLEEP is turned off, then we don;t see the
> dump. But Red Hat's default kernel config has this option turned on.
>
> Overall, looks to me that Systemtap in the first place should not use
> rw_semaphore calls in the probe handler code path.
The call stack you listed before showed that you were in
ia64_page_fault, preceded by user_string_quoted. That function is
apparently not protecting against faults properly. user_string_quoted
calls _stp_text_str with the 'user' flag set. _stp_text_str only
validates access_ok on the first byte of the string, and then it calls
__get_user to read the rest. I thought that __get_user would catch
faults, but maybe not...
The other user_string_* functions call _stp_strncpy_from_user, which
checks access_ok on the length of the *destination* buffer. This also
seems wrong, because the source might be a very short string, where
reading a longer string would be invalid.
Josh
More information about the Systemtap
mailing list