summaryrefslogtreecommitdiff
path: root/Kernel/DoubleBuffer.cpp
diff options
context:
space:
mode:
authorSahan Fernando <sahan.h.fernando@gmail.com>2021-05-13 12:19:53 +1000
committerAndreas Kling <kling@serenityos.org>2021-05-18 16:47:26 +0200
commit63a1be14066c6367d37cc792a171d3dfaeac517f (patch)
tree189894823a88d5805f86aa78328a8205634da35a /Kernel/DoubleBuffer.cpp
parentc3b670c09213107ce52990e1d897aa3a68ad5851 (diff)
downloadserenity-63a1be14066c6367d37cc792a171d3dfaeac517f.zip
Kernel: Don't update write_pos in DoubleBuffer if userspace copy fails
Diffstat (limited to 'Kernel/DoubleBuffer.cpp')
-rw-r--r--Kernel/DoubleBuffer.cpp4
1 files changed, 2 insertions, 2 deletions
diff --git a/Kernel/DoubleBuffer.cpp b/Kernel/DoubleBuffer.cpp
index 2d3b39adac..41236e4c2b 100644
--- a/Kernel/DoubleBuffer.cpp
+++ b/Kernel/DoubleBuffer.cpp
@@ -47,10 +47,10 @@ ssize_t DoubleBuffer::write(const UserOrKernelBuffer& data, size_t size)
Locker locker(m_lock);
size_t bytes_to_write = min(size, m_space_for_writing);
u8* write_ptr = m_write_buffer->data + m_write_buffer->size;
- m_write_buffer->size += bytes_to_write;
- compute_lockfree_metadata();
if (!data.read(write_ptr, bytes_to_write))
return -EFAULT;
+ m_write_buffer->size += bytes_to_write;
+ compute_lockfree_metadata();
if (m_unblock_callback && !m_empty)
m_unblock_callback();
return (ssize_t)bytes_to_write;