From 1ce32ef675aa576e4d99c9408539c32c5bbc40d5 Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Thu, 27 May 2021 09:13:49 +0200 Subject: [PATCH] Kernel: Let the user read/write more than one page from/to dev files Previously reads and writes to /dev/zero, /dev/full, /dev/null and /dev/random were limited to 4096 bytes. This removes that restriction so that users can enjoy more zero bytes in their buffers. --- Kernel/Devices/FullDevice.cpp | 5 ++--- Kernel/Devices/NullDevice.cpp | 2 +- Kernel/Devices/RandomDevice.cpp | 2 +- Kernel/Devices/ZeroDevice.cpp | 7 +++---- 4 files changed, 7 insertions(+), 9 deletions(-) diff --git a/Kernel/Devices/FullDevice.cpp b/Kernel/Devices/FullDevice.cpp index 318dec6486..6aab209181 100644 --- a/Kernel/Devices/FullDevice.cpp +++ b/Kernel/Devices/FullDevice.cpp @@ -28,10 +28,9 @@ bool FullDevice::can_read(const FileDescription&, size_t) const KResultOr FullDevice::read(FileDescription&, u64, UserOrKernelBuffer& buffer, size_t size) { - ssize_t count = min(static_cast(PAGE_SIZE), size); - if (!buffer.memset(0, count)) + if (!buffer.memset(0, size)) return EFAULT; - return count; + return size; } KResultOr FullDevice::write(FileDescription&, u64, const UserOrKernelBuffer&, size_t size) diff --git a/Kernel/Devices/NullDevice.cpp b/Kernel/Devices/NullDevice.cpp index ace053aa51..9ceda5a96f 100644 --- a/Kernel/Devices/NullDevice.cpp +++ b/Kernel/Devices/NullDevice.cpp @@ -43,7 +43,7 @@ KResultOr NullDevice::read(FileDescription&, u64, UserOrKernelBuffer&, s KResultOr NullDevice::write(FileDescription&, u64, const UserOrKernelBuffer&, size_t buffer_size) { - return min(static_cast(PAGE_SIZE), buffer_size); + return buffer_size; } } diff --git a/Kernel/Devices/RandomDevice.cpp b/Kernel/Devices/RandomDevice.cpp index 6ada0a36d4..1af96d818c 100644 --- a/Kernel/Devices/RandomDevice.cpp +++ b/Kernel/Devices/RandomDevice.cpp @@ -34,7 +34,7 @@ KResultOr RandomDevice::read(FileDescription&, u64, UserOrKernelBuffer& KResultOr RandomDevice::write(FileDescription&, u64, const UserOrKernelBuffer&, size_t size) { // FIXME: Use input for entropy? I guess that could be a neat feature? - return min(static_cast(PAGE_SIZE), size); + return size; } } diff --git a/Kernel/Devices/ZeroDevice.cpp b/Kernel/Devices/ZeroDevice.cpp index 9bebece43f..1f3fddbf07 100644 --- a/Kernel/Devices/ZeroDevice.cpp +++ b/Kernel/Devices/ZeroDevice.cpp @@ -26,15 +26,14 @@ bool ZeroDevice::can_read(const FileDescription&, size_t) const KResultOr ZeroDevice::read(FileDescription&, u64, UserOrKernelBuffer& buffer, size_t size) { - ssize_t count = min(static_cast(PAGE_SIZE), size); - if (!buffer.memset(0, count)) + if (!buffer.memset(0, size)) return EFAULT; - return count; + return size; } KResultOr ZeroDevice::write(FileDescription&, u64, const UserOrKernelBuffer&, size_t size) { - return min(static_cast(PAGE_SIZE), size); + return size; } }