From: Douglas Thompson <[EMAIL PROTECTED]> In tracking down one of my bugs in using sysfs, I found the kernel doing a NULL de-reference in function fs/sysfs/inode.c:sysfs_hash_and_remove(), when I (incorrectly) passed in a dentry value of NULL.
The check for NULL should occur BEFORE the dereference of 'dir'. This patch modifies the sequence and does the check FIRST Signed-off-by: Douglas Thompson <[EMAIL PROTECTED]> --- Index: linux-2.6.22-rc4-mm2/fs/sysfs/inode.c =================================================================== --- linux-2.6.22-rc4-mm2.orig/fs/sysfs/inode.c +++ linux-2.6.22-rc4-mm2/fs/sysfs/inode.c @@ -285,7 +285,7 @@ void sysfs_drop_dentry(struct sysfs_dire int sysfs_hash_and_remove(struct dentry * dir, const char * name) { struct sysfs_dirent **pos, *sd; - struct sysfs_dirent *parent_sd = dir->d_fsdata; + struct sysfs_dirent *parent_sd; int found = 0; if (!dir) @@ -295,6 +295,8 @@ int sysfs_hash_and_remove(struct dentry /* no inode means this hasn't been made visible yet */ return -ENOENT; + parent_sd = dir->d_fsdata; + mutex_lock_nested(&dir->d_inode->i_mutex, I_MUTEX_PARENT); for (pos = &parent_sd->s_children; *pos; pos = &(*pos)->s_sibling) { sd = *pos; - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/