cifs: fix dentry refcount leak when opening a FIFO on lookup
authorJeff Layton <jlayton@redhat.com>
Thu, 23 Feb 2012 14:37:45 +0000 (09:37 -0500)
committerSteve French <smfrench@gmail.com>
Mon, 27 Feb 2012 05:16:26 +0000 (23:16 -0600)
commit5bccda0ebc7c0331b81ac47d39e4b920b198b2cd
tree542363c187479df4124bed5441a7fc66bafc4065
parent6de2ce423157d06f73d570ef7044f08c2f8697da
cifs: fix dentry refcount leak when opening a FIFO on lookup

The cifs code will attempt to open files on lookup under certain
circumstances. What happens though if we find that the file we opened
was actually a FIFO or other special file?

Currently, the open filehandle just ends up being leaked leading to
a dentry refcount mismatch and oops on umount. Fix this by having the
code close the filehandle on the server if it turns out not to be a
regular file. While we're at it, change this spaghetti if statement
into a switch too.

Cc: stable@vger.kernel.org
Reported-by: CAI Qian <caiqian@redhat.com>
Tested-by: CAI Qian <caiqian@redhat.com>
Reviewed-by: Shirish Pargaonkar <shirishpargaonkar@gmail.com>
Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Steve French <smfrench@gmail.com>
fs/cifs/dir.c