From c6e23e45c587cfd771ccafbb8359a9cfbde27f70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20R=2E=20Kusiak?= Date: Sat, 18 Sep 2021 04:07:19 +0200 Subject: [PATCH] Kernel: Let MouseDevice and KeyboardDevice write method return EINVAL Currently, writing anything to `/dev/mouse0` or `/dev/keyboard0` causes the Kernel to panic. The reason for this is that `[Mouse,Keyboard]Device::write` always returns 0, which is explicitly prohibited by `VERIFY` macro in `Process::sys$write`. The fix seems trivial; `write` should return EINVAL instead (as is the case with, for example, `KCOVDevice`). --- Kernel/Devices/HID/KeyboardDevice.cpp | 5 ----- Kernel/Devices/HID/KeyboardDevice.h | 2 +- Kernel/Devices/HID/MouseDevice.cpp | 5 ----- Kernel/Devices/HID/MouseDevice.h | 2 +- 4 files changed, 2 insertions(+), 12 deletions(-) diff --git a/Kernel/Devices/HID/KeyboardDevice.cpp b/Kernel/Devices/HID/KeyboardDevice.cpp index 68a5efedc2e..fd59ffe8253 100644 --- a/Kernel/Devices/HID/KeyboardDevice.cpp +++ b/Kernel/Devices/HID/KeyboardDevice.cpp @@ -306,11 +306,6 @@ KResultOr KeyboardDevice::read(OpenFileDescription&, u64, UserOrKernelBu return nread; } -KResultOr KeyboardDevice::write(OpenFileDescription&, u64, const UserOrKernelBuffer&, size_t) -{ - return 0; -} - KResult KeyboardDevice::ioctl(OpenFileDescription&, unsigned request, Userspace arg) { switch (request) { diff --git a/Kernel/Devices/HID/KeyboardDevice.h b/Kernel/Devices/HID/KeyboardDevice.h index 05353fe3455..b6f80ddf4b9 100644 --- a/Kernel/Devices/HID/KeyboardDevice.h +++ b/Kernel/Devices/HID/KeyboardDevice.h @@ -27,7 +27,7 @@ public: // ^CharacterDevice virtual KResultOr read(OpenFileDescription&, u64, UserOrKernelBuffer&, size_t) override; virtual bool can_read(const OpenFileDescription&, size_t) const override; - virtual KResultOr write(OpenFileDescription&, u64, const UserOrKernelBuffer&, size_t) override; + virtual KResultOr write(OpenFileDescription&, u64, const UserOrKernelBuffer&, size_t) override { return EINVAL; } virtual bool can_write(const OpenFileDescription&, size_t) const override { return true; } // ^HIDDevice diff --git a/Kernel/Devices/HID/MouseDevice.cpp b/Kernel/Devices/HID/MouseDevice.cpp index a3c263d570f..152ded74212 100644 --- a/Kernel/Devices/HID/MouseDevice.cpp +++ b/Kernel/Devices/HID/MouseDevice.cpp @@ -48,9 +48,4 @@ KResultOr MouseDevice::read(OpenFileDescription&, u64, UserOrKernelBuffe return nread; } -KResultOr MouseDevice::write(OpenFileDescription&, u64, const UserOrKernelBuffer&, size_t) -{ - return 0; -} - } diff --git a/Kernel/Devices/HID/MouseDevice.h b/Kernel/Devices/HID/MouseDevice.h index 6df59de9d78..14029050fee 100644 --- a/Kernel/Devices/HID/MouseDevice.h +++ b/Kernel/Devices/HID/MouseDevice.h @@ -25,7 +25,7 @@ public: // ^CharacterDevice virtual KResultOr read(OpenFileDescription&, u64, UserOrKernelBuffer&, size_t) override; virtual bool can_read(const OpenFileDescription&, size_t) const override; - virtual KResultOr write(OpenFileDescription&, u64, const UserOrKernelBuffer&, size_t) override; + virtual KResultOr write(OpenFileDescription&, u64, const UserOrKernelBuffer&, size_t) override { return EINVAL; } virtual bool can_write(const OpenFileDescription&, size_t) const override { return true; } // ^HIDDevice