Re: sys/modules/linux/linux_ioctl.o - LOR [I think]

From: Brooks Davis <brooks_at_one-eyed-alien.net>
Date: Wed, 23 Mar 2005 21:42:19 -0800
On Wed, Mar 23, 2005 at 03:46:40PM -0500, John Baldwin wrote:
> On Tuesday 01 March 2005 09:04 pm, Wilkinson, Alex wrote:
> > Version: FreeBSD 6.0-CURRENT #1: Tue Feb 22 12:47:37 CST 2005
> >
> > Seeing these error on console:
> >
> >   --- syscall (54, Linux ELF, linux_ioctl), eip = 0x283bf2a4, esp =
> > 0xbfbf8ed0, ebp = 0xbfbf8f80 --- Calling uiomove() with the following
> > non-sleepable locks held:
> >    exclusive sleep mutex ifnet r = 0 (0xc09b8ea0) locked _at_
> > /usr/src/sys/modules/linux/../../compat/linux/linux_ioctl.c:2135 KDB: stack
> > backtrace:
> >    witness_warn(2,0,c08a71b8,ec80fbec,0) at witness_warn+0x175
> >    uiomove(ec80fc64,20,ec80fc44,0,1) at uiomove+0x4d
> >    linux_ioctl_socket(c6b52000,ec80fd14,ec80fcd0,c08aa46e,68d) at
> > linux_ioctl_socket+0x8f4 linux_ioctl(c6b52000,ec80fd14,c08c8f72,3ad,3) at
> > linux_ioctl+0x69 syscall(2f,2f,2f,bfbfd36c,4) at syscall+0x13b
> >    Xint0x80_syscall() at Xint0x80_syscall+0x1f
> >    --- syscall (54, Linux ELF, linux_ioctl), eip = 0x283bf2a4, esp =
> > 0xbfbfd290, ebp = 0xbfbfd300 --- Calling uiomove() with the following
> > non-sleepable locks held:
> >    exclusive sleep mutex ifnet r = 0 (0xc09b8ea0) locked _at_
> > /usr/src/sys/modules/linux/../../compat/linux/linux_ioctl.c:2135 KDB: stack
> > backtrace:
> >    witness_warn(2,0,c08a71b8,0,0) at witness_warn+0x175
> >    uiomove(ec80fc64,20,ec80fc44,0,1) at uiomove+0x4d
> >    linux_ioctl_socket(c6b52000,ec80fd14,ec80fcd0,c08aa46e,68d) at
> >    linux_ioctl_socket+0x8f4
> >    linux_ioctl(c6b52000,ec80fd14,c08c8f72,3ad,3) at linux_ioctl+0x69
> >    syscall(2f,2f,2f,bfbfd36c,4) at syscall+0x13b
> >    Xint0x80_syscall() at Xint0x80_syscall+0x1f
> >    --- syscall (54, Linux ELF, linux_ioctl), eip = 0x283bf2a4, esp =
> > 0xbfbfd290, ebp = 0xbfbfd300 ---
> 
> Definitely a bug.  The linux_ioctl() code needs to unlock the ifnet lock 
> before it calls uiomove() unless it knows for certain that it is talking to 
> UIO_SYSSPACE.

Hmm, it looks like this stack trace is wrong.  The only uiomove call in
linux_ioctl.c is in linux_ifconf which is in fact broken.  The solution
here is almost certaintly to adapt the ifconf code I wrote to fix the LOR
in the native version.

-- Brooks

-- 
Any statement of the form "X is the one, true Y" is FALSE.
PGP fingerprint 655D 519C 26A7 82E7 2529  9BF0 5D8E 8BE9 F238 1AD4

Received on Thu Mar 24 2005 - 04:42:22 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:30 UTC