Re: Deadlock in current devfs with nested symlinks

Richard Gooch (rgooch@atnf.csiro.au)
Wed, 31 Oct 2001 10:25:59 +1100


[Apologies for not responding to your earlier email, but I've been
travelling, moving house and caught the 'flu]
Johannes Kloos writes:
> I have found a deadlock in the current version of devfs.
> It can be reproduced like this on a system with an IDE CD-ROM drive:
> 0. Make sure devfs is mounted on /dev and devfsd is running with
> MKOLDCOMPAT and MKNEWCOMPAT enabled.
> 1. Create a symlink from /dev/cdroms/cdrom0 to /dev/cdrom
> 2. rmmod ide-cd
> 3a. mount /dev/cdrom /mnt
> or
> 3b. file -L /dev/cdrom
>
> I've traced this bug to the symlink semaphore in devfs.
> As far as I can tell, the following events lead to a deadlock:
> 1. file -L tries to stat(2) /dev/cdrom. stat will follow the symlinks
> and acquires symlink_rwsem for reading.
> 2. /dev/cdroms/cdrom0 doesn't exist, so the kernel tells devfsd
> to look up /dev/cdroms/cdrom0.
> 3. devfsd loads ide-cd.o. Then, it will try to create the appropriate
> symlinks in /dev.
> 4. devfs_do_symlink tries to acquire symlink_rwsem for writing - deadlock.

Sigh. There's just no clean way of fixing this with the current
code. I'll probably just do what I've been avoiding, which is to
allocate temporary buffer space in the readlink() and follow_link()
methods, and free it prior to return. However, I'll be travelling for
the next couple of days, and will be out of 'net contact. But feel
free to code up a patch along these lines :-)

After this, I really want to avoid band-aid fixes and instead
concentrate on getting the new code to a usable state, since so many
of these problems are not there in the new code.

Regards,

Richard....
Permanent: rgooch@atnf.csiro.au
Current: rgooch@ras.ucalgary.ca
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/