mirror of
https://github.com/Mathewnd/Astral.git
synced 2026-11-01 23:18:21 +00:00
vfs: fix double release
This commit is contained in:
+7
-11
@@ -238,13 +238,11 @@ int vfs_write_iovec(vnode_t *node, iovec_iterator_t *iovec_iterator, size_t size
|
|||||||
*written = 0;
|
*written = 0;
|
||||||
// can't write a size 0 buffer
|
// can't write a size 0 buffer
|
||||||
if (size == 0)
|
if (size == 0)
|
||||||
goto leave;
|
return 0;
|
||||||
|
|
||||||
// overflow
|
// overflow
|
||||||
if (size + offset < offset) {
|
if (size + offset < offset)
|
||||||
err = EINVAL;
|
return EINVAL;
|
||||||
goto leave;
|
|
||||||
}
|
|
||||||
|
|
||||||
MUTEX_ACQUIRE(&node->size_lock);
|
MUTEX_ACQUIRE(&node->size_lock);
|
||||||
|
|
||||||
@@ -260,7 +258,7 @@ int vfs_write_iovec(vnode_t *node, iovec_iterator_t *iovec_iterator, size_t size
|
|||||||
if (node->type == V_TYPE_REGULAR && newsize) {
|
if (node->type == V_TYPE_REGULAR && newsize) {
|
||||||
// do resize stuff if regular and applicable
|
// do resize stuff if regular and applicable
|
||||||
VOP_LOCK(node);
|
VOP_LOCK(node);
|
||||||
err = VOP_RESIZE(node, newsize, ¤t_thread()->proc->cred);
|
err = VOP_RESIZE(node, newsize, getcred());
|
||||||
VOP_UNLOCK(node);
|
VOP_UNLOCK(node);
|
||||||
if (err)
|
if (err)
|
||||||
goto leave;
|
goto leave;
|
||||||
@@ -358,13 +356,11 @@ int vfs_read_iovec(vnode_t *node, iovec_iterator_t *iovec_iterator, size_t size,
|
|||||||
*bytesread = 0;
|
*bytesread = 0;
|
||||||
// can't read 0 bytes from the cache
|
// can't read 0 bytes from the cache
|
||||||
if (size == 0)
|
if (size == 0)
|
||||||
goto leave;
|
return 0;
|
||||||
|
|
||||||
// overflow
|
// overflow
|
||||||
if (size + offset < offset) {
|
if (size + offset < offset)
|
||||||
err = EINVAL;
|
return EINVAL;
|
||||||
goto leave;
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t nodesize = 0;
|
size_t nodesize = 0;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user