diff options
author | hselasky <hselasky@FreeBSD.org> | 2015-12-31 14:47:45 +0000 |
---|---|---|
committer | hselasky <hselasky@FreeBSD.org> | 2015-12-31 14:47:45 +0000 |
commit | c4acbb92b9330eaa35165a35044d46705be5cfcd (patch) | |
tree | 8f5adc186dd4fad8ac6b8e775caaea0dd58b5d59 /sys/compat | |
parent | a7a7584c856f1480bfec0e1a68ca2b00eb704211 (diff) | |
download | FreeBSD-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.h | 7 |
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); |