mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-20 04:19:41 +00:00
TTY/Serial fixes for 6.4-rc3
Here are some small tty and serial driver fixes for 6.4-rc3 to resolve some reported problems, and add some new device ids. These include: - termios documentation updates - vc_screen use-after-free fix - memory leak fix in arc_uart driver - new 8250 driver ids - other small serial driver fixes All of these have been in linux-next for a while with no reported problems. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> -----BEGIN PGP SIGNATURE----- iG0EABECAC0WIQT0tgzFv3jCIUoxPcsxR9QN2y37KQUCZGj81w8cZ3JlZ0Brcm9h aC5jb20ACgkQMUfUDdst+ymjHACfSNJWXivuDTI5KEAkUPLfi1zg5xUAn0x1Demd NYV1GFn76O0Ijfs6JLll =0YxQ -----END PGP SIGNATURE----- Merge tag 'tty-6.4-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty Pull tty / serial fixes from Greg KH: "Here are some small tty and serial driver fixes for 6.4-rc3 to resolve some reported problems, and add some new device ids. These include: - termios documentation updates - vc_screen use-after-free fix - memory leak fix in arc_uart driver - new 8250 driver ids - other small serial driver fixes All of these have been in linux-next for a while with no reported problems" * tag 'tty-6.4-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty: vc_screen: reload load of struct vc_data pointer in vcs_write() to avoid UAF serial: qcom-geni: fix enabling deactivated interrupt serial: 8250_bcm7271: fix leak in `brcmuart_probe` serial: 8250_bcm7271: balance clk_enable calls serial: arc_uart: fix of_iomap leak in `arc_serial_probe` serial: 8250: Document termios parameter of serial8250_em485_config() serial: Add support for Advantech PCI-1611U card serial: 8250_exar: Add support for USR298x PCI Modems
This commit is contained in:
commit
0dd2a6fb1e
@ -1012,7 +1012,7 @@ static int brcmuart_probe(struct platform_device *pdev)
|
||||
of_property_read_u32(np, "clock-frequency", &clk_rate);
|
||||
|
||||
/* See if a Baud clock has been specified */
|
||||
baud_mux_clk = of_clk_get_by_name(np, "sw_baud");
|
||||
baud_mux_clk = devm_clk_get(dev, "sw_baud");
|
||||
if (IS_ERR(baud_mux_clk)) {
|
||||
if (PTR_ERR(baud_mux_clk) == -EPROBE_DEFER) {
|
||||
ret = -EPROBE_DEFER;
|
||||
@ -1032,7 +1032,7 @@ static int brcmuart_probe(struct platform_device *pdev)
|
||||
if (clk_rate == 0) {
|
||||
dev_err(dev, "clock-frequency or clk not defined\n");
|
||||
ret = -EINVAL;
|
||||
goto release_dma;
|
||||
goto err_clk_disable;
|
||||
}
|
||||
|
||||
dev_dbg(dev, "DMA is %senabled\n", priv->dma_enabled ? "" : "not ");
|
||||
@ -1119,6 +1119,8 @@ err1:
|
||||
serial8250_unregister_port(priv->line);
|
||||
err:
|
||||
brcmuart_free_bufs(dev, priv);
|
||||
err_clk_disable:
|
||||
clk_disable_unprepare(baud_mux_clk);
|
||||
release_dma:
|
||||
if (priv->dma_enabled)
|
||||
brcmuart_arbitration(priv, 0);
|
||||
@ -1133,6 +1135,7 @@ static int brcmuart_remove(struct platform_device *pdev)
|
||||
hrtimer_cancel(&priv->hrt);
|
||||
serial8250_unregister_port(priv->line);
|
||||
brcmuart_free_bufs(&pdev->dev, priv);
|
||||
clk_disable_unprepare(priv->baud_mux_clk);
|
||||
if (priv->dma_enabled)
|
||||
brcmuart_arbitration(priv, 0);
|
||||
return 0;
|
||||
|
@ -40,9 +40,13 @@
|
||||
#define PCI_DEVICE_ID_COMMTECH_4224PCIE 0x0020
|
||||
#define PCI_DEVICE_ID_COMMTECH_4228PCIE 0x0021
|
||||
#define PCI_DEVICE_ID_COMMTECH_4222PCIE 0x0022
|
||||
|
||||
#define PCI_DEVICE_ID_EXAR_XR17V4358 0x4358
|
||||
#define PCI_DEVICE_ID_EXAR_XR17V8358 0x8358
|
||||
|
||||
#define PCI_SUBDEVICE_ID_USR_2980 0x0128
|
||||
#define PCI_SUBDEVICE_ID_USR_2981 0x0129
|
||||
|
||||
#define PCI_DEVICE_ID_SEALEVEL_710xC 0x1001
|
||||
#define PCI_DEVICE_ID_SEALEVEL_720xC 0x1002
|
||||
#define PCI_DEVICE_ID_SEALEVEL_740xC 0x1004
|
||||
@ -829,6 +833,15 @@ static const struct exar8250_board pbn_exar_XR17V8358 = {
|
||||
(kernel_ulong_t)&bd \
|
||||
}
|
||||
|
||||
#define USR_DEVICE(devid, sdevid, bd) { \
|
||||
PCI_DEVICE_SUB( \
|
||||
PCI_VENDOR_ID_USR, \
|
||||
PCI_DEVICE_ID_EXAR_##devid, \
|
||||
PCI_VENDOR_ID_EXAR, \
|
||||
PCI_SUBDEVICE_ID_USR_##sdevid), 0, 0, \
|
||||
(kernel_ulong_t)&bd \
|
||||
}
|
||||
|
||||
static const struct pci_device_id exar_pci_tbl[] = {
|
||||
EXAR_DEVICE(ACCESSIO, COM_2S, pbn_exar_XR17C15x),
|
||||
EXAR_DEVICE(ACCESSIO, COM_4S, pbn_exar_XR17C15x),
|
||||
@ -853,6 +866,10 @@ static const struct pci_device_id exar_pci_tbl[] = {
|
||||
|
||||
IBM_DEVICE(XR17C152, SATURN_SERIAL_ONE_PORT, pbn_exar_ibm_saturn),
|
||||
|
||||
/* USRobotics USR298x-OEM PCI Modems */
|
||||
USR_DEVICE(XR17C152, 2980, pbn_exar_XR17C15x),
|
||||
USR_DEVICE(XR17C152, 2981, pbn_exar_XR17C15x),
|
||||
|
||||
/* Exar Corp. XR17C15[248] Dual/Quad/Octal UART */
|
||||
EXAR_DEVICE(EXAR, XR17C152, pbn_exar_XR17C15x),
|
||||
EXAR_DEVICE(EXAR, XR17C154, pbn_exar_XR17C15x),
|
||||
|
@ -1920,6 +1920,8 @@ pci_moxa_setup(struct serial_private *priv,
|
||||
#define PCI_SUBDEVICE_ID_SIIG_DUAL_30 0x2530
|
||||
#define PCI_VENDOR_ID_ADVANTECH 0x13fe
|
||||
#define PCI_DEVICE_ID_INTEL_CE4100_UART 0x2e66
|
||||
#define PCI_DEVICE_ID_ADVANTECH_PCI1600 0x1600
|
||||
#define PCI_DEVICE_ID_ADVANTECH_PCI1600_1611 0x1611
|
||||
#define PCI_DEVICE_ID_ADVANTECH_PCI3620 0x3620
|
||||
#define PCI_DEVICE_ID_ADVANTECH_PCI3618 0x3618
|
||||
#define PCI_DEVICE_ID_ADVANTECH_PCIf618 0xf618
|
||||
@ -4085,6 +4087,9 @@ static SIMPLE_DEV_PM_OPS(pciserial_pm_ops, pciserial_suspend_one,
|
||||
pciserial_resume_one);
|
||||
|
||||
static const struct pci_device_id serial_pci_tbl[] = {
|
||||
{ PCI_VENDOR_ID_ADVANTECH, PCI_DEVICE_ID_ADVANTECH_PCI1600,
|
||||
PCI_DEVICE_ID_ADVANTECH_PCI1600_1611, PCI_ANY_ID, 0, 0,
|
||||
pbn_b0_4_921600 },
|
||||
/* Advantech use PCI_DEVICE_ID_ADVANTECH_PCI3620 (0x3620) as 'PCI_SUBVENDOR_ID' */
|
||||
{ PCI_VENDOR_ID_ADVANTECH, PCI_DEVICE_ID_ADVANTECH_PCI3620,
|
||||
PCI_DEVICE_ID_ADVANTECH_PCI3620, 0x0001, 0, 0,
|
||||
|
@ -669,6 +669,7 @@ EXPORT_SYMBOL_GPL(serial8250_em485_supported);
|
||||
/**
|
||||
* serial8250_em485_config() - generic ->rs485_config() callback
|
||||
* @port: uart port
|
||||
* @termios: termios structure
|
||||
* @rs485: rs485 settings
|
||||
*
|
||||
* Generic callback usable by 8250 uart drivers to activate rs485 settings
|
||||
|
@ -606,10 +606,11 @@ static int arc_serial_probe(struct platform_device *pdev)
|
||||
}
|
||||
uart->baud = val;
|
||||
|
||||
port->membase = of_iomap(np, 0);
|
||||
if (!port->membase)
|
||||
port->membase = devm_platform_ioremap_resource(pdev, 0);
|
||||
if (IS_ERR(port->membase)) {
|
||||
/* No point of dev_err since UART itself is hosed here */
|
||||
return -ENXIO;
|
||||
return PTR_ERR(port->membase);
|
||||
}
|
||||
|
||||
port->irq = irq_of_parse_and_map(np, 0);
|
||||
|
||||
|
@ -1664,19 +1664,18 @@ static int qcom_geni_serial_probe(struct platform_device *pdev)
|
||||
uport->private_data = &port->private_data;
|
||||
platform_set_drvdata(pdev, port);
|
||||
|
||||
ret = uart_add_one_port(drv, uport);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
irq_set_status_flags(uport->irq, IRQ_NOAUTOEN);
|
||||
ret = devm_request_irq(uport->dev, uport->irq, qcom_geni_serial_isr,
|
||||
IRQF_TRIGGER_HIGH, port->name, uport);
|
||||
if (ret) {
|
||||
dev_err(uport->dev, "Failed to get IRQ ret %d\n", ret);
|
||||
uart_remove_one_port(drv, uport);
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = uart_add_one_port(drv, uport);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/*
|
||||
* Set pm_runtime status as ACTIVE so that wakeup_irq gets
|
||||
* enabled/disabled from dev_pm_arm_wake_irq during system
|
||||
|
@ -656,10 +656,17 @@ vcs_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos)
|
||||
}
|
||||
}
|
||||
|
||||
/* The vcs_size might have changed while we slept to grab
|
||||
* the user buffer, so recheck.
|
||||
/* The vc might have been freed or vcs_size might have changed
|
||||
* while we slept to grab the user buffer, so recheck.
|
||||
* Return data written up to now on failure.
|
||||
*/
|
||||
vc = vcs_vc(inode, &viewed);
|
||||
if (!vc) {
|
||||
if (written)
|
||||
break;
|
||||
ret = -ENXIO;
|
||||
goto unlock_out;
|
||||
}
|
||||
size = vcs_size(vc, attr, false);
|
||||
if (size < 0) {
|
||||
if (written)
|
||||
|
Loading…
x
Reference in New Issue
Block a user