mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-30 00:46:39 +07:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty-2.6: 68328serial: check return value of copy_*_user() instead of access_ok() synclink: add mutex_unlock() on error path rocket: add a mutex_unlock() ip2: return -EFAULT on copy_to_user errors ip2: remove unneeded NULL check serial: print early console device address in hex
This commit is contained in:
commit
472e449c10
@ -1650,7 +1650,7 @@ ip2_close( PTTY tty, struct file *pFile )
|
||||
/* disable DSS reporting */
|
||||
i2QueueCommands(PTYPE_INLINE, pCh, 100, 4,
|
||||
CMD_DCD_NREP, CMD_CTS_NREP, CMD_DSR_NREP, CMD_RI_NREP);
|
||||
if ( !tty || (tty->termios->c_cflag & HUPCL) ) {
|
||||
if (tty->termios->c_cflag & HUPCL) {
|
||||
i2QueueCommands(PTYPE_INLINE, pCh, 100, 2, CMD_RTSDN, CMD_DTRDN);
|
||||
pCh->dataSetOut &= ~(I2_DTR | I2_RTS);
|
||||
i2QueueCommands( PTYPE_INLINE, pCh, 100, 1, CMD_PAUSE(25));
|
||||
@ -2930,6 +2930,8 @@ ip2_ipl_ioctl (struct file *pFile, UINT cmd, ULONG arg )
|
||||
if ( pCh )
|
||||
{
|
||||
rc = copy_to_user(argp, pCh, sizeof(i2ChanStr));
|
||||
if (rc)
|
||||
rc = -EFAULT;
|
||||
} else {
|
||||
rc = -ENODEV;
|
||||
}
|
||||
|
@ -1244,6 +1244,7 @@ static int set_config(struct tty_struct *tty, struct r_port *info,
|
||||
}
|
||||
info->flags = ((info->flags & ~ROCKET_USR_MASK) | (new_serial.flags & ROCKET_USR_MASK));
|
||||
configure_r_port(tty, info, NULL);
|
||||
mutex_unlock(&info->port.mutex);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -691,8 +691,10 @@ static int open(struct tty_struct *tty, struct file *filp)
|
||||
if (info->port.count == 1) {
|
||||
/* 1st open on this device, init hardware */
|
||||
retval = startup(info);
|
||||
if (retval < 0)
|
||||
if (retval < 0) {
|
||||
mutex_unlock(&info->port.mutex);
|
||||
goto cleanup;
|
||||
}
|
||||
}
|
||||
mutex_unlock(&info->port.mutex);
|
||||
retval = block_til_ready(tty, filp, info);
|
||||
|
@ -869,7 +869,9 @@ static int get_serial_info(struct m68k_serial * info,
|
||||
tmp.close_delay = info->close_delay;
|
||||
tmp.closing_wait = info->closing_wait;
|
||||
tmp.custom_divisor = info->custom_divisor;
|
||||
copy_to_user(retinfo,&tmp,sizeof(*retinfo));
|
||||
if (copy_to_user(retinfo, &tmp, sizeof(*retinfo)))
|
||||
return -EFAULT;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -882,7 +884,8 @@ static int set_serial_info(struct m68k_serial * info,
|
||||
|
||||
if (!new_info)
|
||||
return -EFAULT;
|
||||
copy_from_user(&new_serial,new_info,sizeof(new_serial));
|
||||
if (copy_from_user(&new_serial, new_info, sizeof(new_serial)))
|
||||
return -EFAULT;
|
||||
old_info = *info;
|
||||
|
||||
if (!capable(CAP_SYS_ADMIN)) {
|
||||
@ -943,8 +946,7 @@ static int get_lsr_info(struct m68k_serial * info, unsigned int *value)
|
||||
status = 0;
|
||||
#endif
|
||||
local_irq_restore(flags);
|
||||
put_user(status,value);
|
||||
return 0;
|
||||
return put_user(status, value);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -999,27 +1001,18 @@ static int rs_ioctl(struct tty_struct *tty, struct file * file,
|
||||
send_break(info, arg ? arg*(100) : 250);
|
||||
return 0;
|
||||
case TIOCGSERIAL:
|
||||
if (access_ok(VERIFY_WRITE, (void *) arg,
|
||||
sizeof(struct serial_struct)))
|
||||
return get_serial_info(info,
|
||||
(struct serial_struct *) arg);
|
||||
return -EFAULT;
|
||||
return get_serial_info(info,
|
||||
(struct serial_struct *) arg);
|
||||
case TIOCSSERIAL:
|
||||
return set_serial_info(info,
|
||||
(struct serial_struct *) arg);
|
||||
case TIOCSERGETLSR: /* Get line status register */
|
||||
if (access_ok(VERIFY_WRITE, (void *) arg,
|
||||
sizeof(unsigned int)))
|
||||
return get_lsr_info(info, (unsigned int *) arg);
|
||||
return -EFAULT;
|
||||
return get_lsr_info(info, (unsigned int *) arg);
|
||||
case TIOCSERGSTRUCT:
|
||||
if (!access_ok(VERIFY_WRITE, (void *) arg,
|
||||
sizeof(struct m68k_serial)))
|
||||
if (copy_to_user((struct m68k_serial *) arg,
|
||||
info, sizeof(struct m68k_serial)))
|
||||
return -EFAULT;
|
||||
copy_to_user((struct m68k_serial *) arg,
|
||||
info, sizeof(struct m68k_serial));
|
||||
return 0;
|
||||
|
||||
default:
|
||||
return -ENOIOCTLCMD;
|
||||
}
|
||||
|
@ -203,13 +203,13 @@ static int __init parse_options(struct early_serial8250_device *device,
|
||||
|
||||
if (mmio || mmio32)
|
||||
printk(KERN_INFO
|
||||
"Early serial console at MMIO%s 0x%llu (options '%s')\n",
|
||||
"Early serial console at MMIO%s 0x%llx (options '%s')\n",
|
||||
mmio32 ? "32" : "",
|
||||
(unsigned long long)port->mapbase,
|
||||
device->options);
|
||||
else
|
||||
printk(KERN_INFO
|
||||
"Early serial console at I/O port 0x%lu (options '%s')\n",
|
||||
"Early serial console at I/O port 0x%lx (options '%s')\n",
|
||||
port->iobase,
|
||||
device->options);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user