[PATCH 2.6.10-rc2-bk15] sysfs_dir_close memory leak

From: Adam J. Richter
Date: Thu Dec 02 2004 - 22:03:35 EST


sysfs_dir_close did not free the "cursor" sysfs_dirent
used for keeping track of position in the list of sysfs_dirent nodes.
Consequently, doing a "find /sys" would leak a sysfs_dirent for
each of the 1140 directories in my /sys tree, or about 36kB
each time.

This patch was generated against a sysfs tree with a
bunch of other changes, but should apply to the stock Linux tree
with the appropriate line number adjustments.

If this patch looks OK, I would appreciate it if someone
would forward it downstream for integration.

__ ______________
Adam J. Richter \ /
adam@xxxxxxxxxxxxx | g g d r a s i l


diff -u9 linux.prev/fs/sysfs/dir.c linux.noleak/fs/sysfs/dir.c
--- linux.prev/fs/sysfs/dir.c 2004-12-02 14:51:01.000000000 +0800
+++ linux.noleak/fs/sysfs/dir.c 2004-12-03 10:42:06.000000000 +0800
@@ -346,18 +346,21 @@
static int sysfs_dir_close(struct inode *inode, struct file *file)
{
struct dentry * dentry = file->f_dentry;
struct sysfs_dirent * cursor = file->private_data;

down(&dentry->d_inode->i_sem);
list_del_init(&cursor->s_sibling);
up(&dentry->d_inode->i_sem);

+ BUG_ON(cursor->s_dentry != NULL);
+ release_sysfs_dirent(cursor);
+
return 0;
}

/* Relationship between s_mode and the DT_xxx types */
static inline unsigned char dt_type(struct sysfs_dirent *sd)
{
return (sd->s_mode >> 12) & 15;
}

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/