diff options
author | Sahan Fernando <sahan.h.fernando@gmail.com> | 2021-05-13 12:19:53 +1000 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2021-05-18 16:47:26 +0200 |
commit | 63a1be14066c6367d37cc792a171d3dfaeac517f (patch) | |
tree | 189894823a88d5805f86aa78328a8205634da35a /Kernel/DoubleBuffer.cpp | |
parent | c3b670c09213107ce52990e1d897aa3a68ad5851 (diff) | |
download | serenity-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.cpp | 4 |
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; |