diff --git a/drivers/serial/serial.c b/drivers/serial/serial.c index ea64a7c07ed..9f101e0459f 100644 --- a/drivers/serial/serial.c +++ b/drivers/serial/serial.c @@ -1413,8 +1413,23 @@ static int uart_ioctl(FAR struct file *filep, int cmd, unsigned long arg) { /* Save the PID of the recipient of the SIGINT signal. */ - dev->pid = (pid_t)arg; - DEBUGASSERT((unsigned long)(dev->pid) == arg); + if ((int)arg < 0 || dev->pid >= 0) + { + ret = -EINVAL; + } + else + { + dev->pid = (pid_t)arg; + DEBUGASSERT((unsigned long)(dev->pid) == arg); + ret = 0; + } + } + break; + + case TIOCNOTTY: + { + dev->pid = (pid_t)-1; + ret = 0; } break; #endif