diff options
author | Eric W. Biederman <ebiederm@aristanetworks.com> | 2009-03-04 14:57:20 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2009-03-24 19:38:26 -0400 |
commit | e0edd3c65aa5b53e20280565a7ce11675eb7ed6b (patch) | |
tree | e9d7a8834eba3f19635f770f5d19bfe88a2485e4 /fs/sysfs/dir.c | |
parent | ae1b41715ee2aae356fbcca032838b71d70b855f (diff) |
sysfs: don't block indefinitely for unmapped files.
Modify sysfs bin files so that we can remove the bin file while they are
still mapped. When the kobject is removed we unmap the bin file and
arrange for future accesses to the mapping to receive SIGBUS.
Implementing this prevents a nasty DOS when pci devices are hot plugged
and unplugged. Where if any of their resources were mmaped the kernel
could not free up their pci resources or release their pci data
structures.
[akpm@linux-foundation.org: remove unused var]
Signed-off-by: Eric W. Biederman <ebiederm@aristanetworks.com>
Cc: Jesse Barnes <jbarnes@virtuousgeek.org>
Acked-by: Tejun Heo <tj@kernel.org>
Cc: Kay Sievers <kay.sievers@vrfy.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'fs/sysfs/dir.c')
-rw-r--r-- | fs/sysfs/dir.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/fs/sysfs/dir.c b/fs/sysfs/dir.c index f13d852ab3c1..66aeb4fff0c3 100644 --- a/fs/sysfs/dir.c +++ b/fs/sysfs/dir.c | |||
@@ -609,6 +609,7 @@ void sysfs_addrm_finish(struct sysfs_addrm_cxt *acxt) | |||
609 | 609 | ||
610 | sysfs_drop_dentry(sd); | 610 | sysfs_drop_dentry(sd); |
611 | sysfs_deactivate(sd); | 611 | sysfs_deactivate(sd); |
612 | unmap_bin_file(sd); | ||
612 | sysfs_put(sd); | 613 | sysfs_put(sd); |
613 | } | 614 | } |
614 | } | 615 | } |