proc: proc_get_inode() should get module only once

Any file under /proc/net opened more than once leaked the refcounter
on the module it belongs to.

The problem is that module_get is called for each file opening while
module_put is called only when /proc inode is destroyed. So, lets put
module counter if we are dealing with already initialised inode.

Addresses http://bugzilla.kernel.org/show_bug.cgi?id=10737

Signed-off-by: Denis V. Lunev <[email protected]>
Cc: David Miller <[email protected]>
Cc: Patrick McHardy <[email protected]>
Acked-by: Pavel Emelyanov <[email protected]>
Acked-by: Robert Olsson <[email protected]>
Acked-by: Eric W. Biederman <[email protected]>
Reported-by: Roland Kletzing <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
This commit is contained in:
Denis V. Lunev 2008-05-23 13:04:47 -07:00 • committed by Linus Torvalds
commit c4185a0e01

View file

@ -425,7 +425,8 @@ struct inode *proc_get_inode(struct super_block *sb, unsigned int ino,
}
}
unlock_new_inode(inode);
}
} else
module_put(de->owner);
return inode;
out_ino: