mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 18:40:43 +03:00
Fixed invalid resource re-use in file_find()
File descriptors are a per-process resource. The same descriptor in different processes can refer to different files. find_file() incorrectly assumed that file descriptors are globally unique. Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes ZFS issue #386
This commit is contained in:
committed by
Brian Behlendorf
parent
4a777c028c
commit
763b2f3b57
@@ -511,7 +511,7 @@ file_find(int fd)
|
||||
ASSERT(spin_is_locked(&vn_file_lock));
|
||||
|
||||
list_for_each_entry(fp, &vn_file_list, f_list) {
|
||||
if (fd == fp->f_fd) {
|
||||
if (fd == fp->f_fd && fp->f_task == current) {
|
||||
ASSERT(atomic_read(&fp->f_ref) != 0);
|
||||
return fp;
|
||||
}
|
||||
@@ -550,6 +550,7 @@ vn_getf(int fd)
|
||||
mutex_enter(&fp->f_lock);
|
||||
|
||||
fp->f_fd = fd;
|
||||
fp->f_task = current;
|
||||
fp->f_offset = 0;
|
||||
atomic_inc(&fp->f_ref);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user