patch "sysfs: handle failure path correctly for readdir()" added to driver-core tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
sysfs: handle failure path correctly for readdir()
to my driver-core git tree which can be found at
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core.git
in the driver-core-linus branch.
The patch will show up in the next release of the linux-next tree (usually sometime within the next 24 hours during the week.)
The patch will hopefully also be merged in Linus's tree for the next -rc kernel release.
If you have any questions about this process, please let me know.
Quoted 1 line
From
e5110f411d2ee35bf8d202ccca2e89c633060dcaMon Sep 17 00:00:00 2001
From: Ming Lei <[email protected]>
Date: Wed, 20 Mar 2013 23:25:25 +0800
Subject: sysfs: handle failure path correctly for readdir()
In case of 'if (filp->f_pos == 0 or 1)' of sysfs_readdir(), the failure from filldir() isn't handled, and the reference counter of the sysfs_dirent object pointed by filp->private_data will be released without clearing filp->private_data, so use after free bug will be triggered later.
This patch returns immeadiately under the situation for fixing the bug, and it is reasonable to return from readdir() when filldir() fails.
--- fs/sysfs/dir.c | 4 ++++ 1 file changed, 4 insertions(+)
fs/sysfs/dir.c +4 -0
@@ -1020,6 +1020,8 @@ static int sysfs_readdir(struct file * filp, void * dirent, filldir_t filldir) ino = parent_sd->s_ino;if (filldir (dirent,"." ,1 , filp->f_pos, ino,DT_DIR ) ==0 ) filp->f_pos++; +else +return 0 ; }if (filp->f_pos ==1 ) {if (parent_sd->s_parent)
@@ -1028,6 +1030,8 @@ static int sysfs_readdir(struct file * filp, void * dirent, filldir_t filldir) ino = parent_sd->s_ino;if (filldir (dirent,".." ,2 , filp->f_pos, ino,DT_DIR ) ==0 ) filp->f_pos++; +else +return 0 ; }mutex_lock (&sysfs_mutex); for (pos = sysfs_dir_pos(ns, parent_sd, filp->f_pos, pos);
Signature · 1 line
1.8.0.rc0.18.gf84667d