From a2e9747ee8491f338c9ce31ddcbac605315a3db4 Mon Sep 17 00:00:00 2001 From: EnderIce2 Date: Sun, 13 Oct 2024 14:58:29 +0300 Subject: [PATCH] driver: Check if process has an associated terminal Return ENOTTY if thisProcess->tty is null for any operation. --- core/driver/daemon.cpp | 35 ++++++++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/core/driver/daemon.cpp b/core/driver/daemon.cpp index a3bd54fd..eb1436ff 100644 --- a/core/driver/daemon.cpp +++ b/core/driver/daemon.cpp @@ -154,7 +154,12 @@ namespace Driver case 6: /* /dev/kcon */ return KernelConsole::CurrentTerminal.load()->Read(Buffer, Size, Offset); case 7: /* /dev/tty */ - return ((TTY::TeletypeDriver *)thisProcess->tty)->Read(Buffer, Size, Offset); + { + TTY::TeletypeDriver *tty = (TTY::TeletypeDriver *)thisProcess->tty; + if (tty == nullptr) + return -ENOTTY; + return tty->Read(Buffer, Size, Offset); + } case 8: /* /dev/ptmx */ return -ENOSYS; default: @@ -250,7 +255,12 @@ namespace Driver case 6: /* /dev/kcon */ return KernelConsole::CurrentTerminal.load()->Write(Buffer, Size, Offset); case 7: /* /dev/tty */ - return ((TTY::TeletypeDriver *)thisProcess->tty)->Write(Buffer, Size, Offset); + { + TTY::TeletypeDriver *tty = (TTY::TeletypeDriver *)thisProcess->tty; + if (tty == nullptr) + return -ENOTTY; + return tty->Write(Buffer, Size, Offset); + } case 8: /* /dev/ptmx */ return -ENOSYS; default: @@ -311,7 +321,12 @@ namespace Driver case 6: /* /dev/kcon */ return KernelConsole::CurrentTerminal.load()->Open(Flags, Mode); case 7: /* /dev/tty */ - return ((TTY::TeletypeDriver *)thisProcess->tty)->Open(Flags, Mode); + { + TTY::TeletypeDriver *tty = (TTY::TeletypeDriver *)thisProcess->tty; + if (tty == nullptr) + return -ENOTTY; + return tty->Open(Flags, Mode); + } case 8: /* /dev/ptmx */ return ptmx->Open(); default: @@ -367,7 +382,12 @@ namespace Driver case 6: /* /dev/kcon */ return KernelConsole::CurrentTerminal.load()->Close(); case 7: /* /dev/tty */ - return ((TTY::TeletypeDriver *)thisProcess->tty)->Close(); + { + TTY::TeletypeDriver *tty = (TTY::TeletypeDriver *)thisProcess->tty; + if (tty == nullptr) + return -ENOTTY; + return tty->Close(); + } case 8: /* /dev/ptmx */ return ptmx->Close(); default: @@ -423,7 +443,12 @@ namespace Driver case 6: /* /dev/kcon */ return KernelConsole::CurrentTerminal.load()->Ioctl(Request, Argp); case 7: /* /dev/tty */ - return ((TTY::TeletypeDriver *)thisProcess->tty)->Ioctl(Request, Argp); + { + TTY::TeletypeDriver *tty = (TTY::TeletypeDriver *)thisProcess->tty; + if (tty == nullptr) + return -ENOTTY; + return tty->Ioctl(Request, Argp); + } case 8: /* /dev/ptmx */ return -ENOSYS; default: