maharmstone / btrfs

WinBtrfs - an open-source btrfs driver for Windows
GNU Lesser General Public License v3.0
5.52k stars 220 forks source link

btrfs/src/devctrl.c:query_filesystems: unreleased lock on error paths #648

Open aakova opened 2 months ago

aakova commented 2 months ago

[ btrfs/src/devctrl/c:query_filesystems ]

bfs->next_entry = 0;
RtlCopyMemory(&bfs->uuid, &Vcb->superblock.uuid, sizeof(BTRFS_UUID));

[ Lock acquired here: ]

ExAcquireResourceSharedLite(&Vcb->tree_lock, true);

[...]

        if (dev->devobj) {
    Status = dev_ioctl(dev->devobj, IOCTL_MOUNTDEV_QUERY_DEVICE_NA!
    if (!NT_SUCCESS(Status) && Status != STATUS_BUFFER_OVERFLOW) {
                ExReleaseResourceLite(&Vcb->tree_lock);
                ERR("IOCTL_MOUNTDEV_QUERY_DEVICE_NAME returned %08lx\n", S!

[ When an error occurs we goto 'end': ]

                goto end;
    }

[...]

[ Skipping release of this lock: ]

    ExReleaseResourceLite(&Vcb->tree_lock);

le = le->Flink;
}

Status = STATUS_SUCCESS;

end: ExReleaseResourceLite(&global_loading_lock);

[ Leaving the function without releasing the lock: ]

return Status;

}