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; } _