sysfs: Don't allow the creation of symlinks we can't remove
authorEric W. Biederman <ebiederm@xmission.com>
Thu, 8 Jul 2010 16:31:24 +0000 (09:31 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Mon, 26 Jul 2010 19:02:41 +0000 (12:02 -0700)
commit96d6523adffbab64f099561a021892125e0c672c
tree0a6c3845c7832d4d3ad6bd120c95c3823dc780a2
parentdbbe4649d683577de1063dbd9f6da7d4b8de2fed
sysfs: Don't allow the creation of symlinks we can't remove

Recently my tagged sysfs support revealed a flaw in the device core
that a few rare drivers are running into such that we don't always put
network devices in a class subdirectory named net/.

Since we are not creating the class directory the network devices wind
up in a non-tagged directory, but the symlinks to the network devices
from /sys/class/net are in a tagged directory.  All of which works
until we go to remove or rename the symlink.  When we remove or rename
a symlink we look in the namespace of the target of the symlink.
Since the target of the symlink is in a non-tagged sysfs directory we
don't have a namespace to look in, and we fail to remove the symlink.

Detect this problem up front and simply don't create symlinks we won't
be able to remove later.  This prevents symlink leakage and fails in
a much clearer and more understandable way.

Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Rafael J. Wysocki <rjw@sisk.pl>
Cc: Maciej W. Rozycki <macro@linux-mips.org>
Cc: Kay Sievers <kay.sievers@vrfy.org>
Cc: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
fs/sysfs/symlink.c