

It can miss an fput() if passed the fd of a file which has no ->mapping.



 mm/fadvise.c |    7 +++++--
 1 files changed, 5 insertions(+), 2 deletions(-)

diff -puN mm/fadvise.c~fadvise-file-leak mm/fadvise.c
--- 25/mm/fadvise.c~fadvise-file-leak	2003-04-03 01:25:29.000000000 -0800
+++ 25-akpm/mm/fadvise.c	2003-04-03 01:26:15.000000000 -0800
@@ -33,8 +33,10 @@ long sys_fadvise64(int fd, loff_t offset
 
 	inode = file->f_dentry->d_inode;
 	mapping = inode->i_mapping;
-	if (!mapping)
-		return -EINVAL;
+	if (!mapping) {
+		ret = -EINVAL;
+		goto out;
+	}
 
 	bdi = mapping->backing_dev_info;
 
@@ -69,6 +71,7 @@ long sys_fadvise64(int fd, loff_t offset
 	default:
 		ret = -EINVAL;
 	}
+out:
 	fput(file);
 	return ret;
 }

_
