summaryrefslogtreecommitdiffstats
path: root/sys/compat
diff options
context:
space:
mode:
authorhselasky <hselasky@FreeBSD.org>2015-12-31 14:47:45 +0000
committerhselasky <hselasky@FreeBSD.org>2015-12-31 14:47:45 +0000
commitc4acbb92b9330eaa35165a35044d46705be5cfcd (patch)
tree8f5adc186dd4fad8ac6b8e775caaea0dd58b5d59 /sys/compat
parenta7a7584c856f1480bfec0e1a68ca2b00eb704211 (diff)
downloadFreeBSD-src-c4acbb92b9330eaa35165a35044d46705be5cfcd.zip
FreeBSD-src-c4acbb92b9330eaa35165a35044d46705be5cfcd.tar.gz
Handle when filedescriptors are closed before initialized. An early
fdclose() call can cause fget_unlocked() to fail. Found by: mjg @ MFC after: 1 week Reviewed by: Mark Block <markb@mellanox.com> Sponsored by: Mellanox Technologies Differential Revision: https://reviews.freebsd.org/D4351
Diffstat (limited to 'sys/compat')
-rw-r--r--sys/compat/linuxkpi/common/include/linux/file.h7
1 files changed, 4 insertions, 3 deletions
diff --git a/sys/compat/linuxkpi/common/include/linux/file.h b/sys/compat/linuxkpi/common/include/linux/file.h
index e52afa5..559ac04 100644
--- a/sys/compat/linuxkpi/common/include/linux/file.h
+++ b/sys/compat/linuxkpi/common/include/linux/file.h
@@ -101,10 +101,11 @@ fd_install(unsigned int fd, struct linux_file *filp)
if (fget_unlocked(curthread->td_proc->p_fd, fd,
cap_rights_init(&rights), &file, NULL) != 0) {
- file = NULL;
+ filp->_file = NULL;
+ } else {
+ filp->_file = file;
+ finit(file, filp->f_mode, DTYPE_DEV, filp, &linuxfileops);
}
- filp->_file = file;
- finit(file, filp->f_mode, DTYPE_DEV, filp, &linuxfileops);
/* drop the extra reference */
fput(filp);
OpenPOWER on IntegriCloud