serial: 8250: 8250_omap: Fix possible array out of bounds access
PATCH 1/2 serial: 8250: 8250_omap: Fix possible array out of bounds access
k3_soc_devices array is missing a sentinel entry which may result in out of bounds access as reported by kernel KASAN.
Fix this by adding a sentinel entry.
Fixes 439c7183e5b9 ("serial: 8250: 8250_omap: Disable RX interrupt after DMA enable")
Reported-by Naresh Kamboju <[email protected]>
Signed-off-by Vignesh Raghavendra <[email protected]>
--- drivers/tty/serial/8250/8250_omap.c | 1 + 1 file changed, 1 insertion(+)
drivers/tty/serial/8250/8250_omap.c +1 -0
@@ -1199,6 +1199,7 @@ static int omap8250_no_handle_irq(struct uart_port *port)static const struct soc_device_attribute k3_soc_devices[] = { { .family ="AM65X" , }, { .family ="J721E" , .revision ="SR1.0" }, + {/* sentinel */ } };static struct omap8250_dma_params am654_dma = {
Signature · 1 line
2.29.2
PATCH 2/2 serial: 8250: 8250_omap: Fix unused variable warning
With commit 439c7183e5b9 ("serial: 8250: 8250_omap: Disable RX interrupt after DMA enable"), below warning is seen with W=1 and CONFIG_SERIAL_8250_DMA is disabled:
drivers/tty/serial/8250/8250_omap.c:1199:42: warning: unused variable 'k3_soc_devices' [-Wunused-const-variable]
Fix this by moving the code using k3_soc_devices array to omap_serial_fill_features_erratas() that handles other errata flags as well.
Fixes 439c7183e5b9 ("serial: 8250: 8250_omap: Disable RX interrupt after DMA enable")
Reported-by kernel test robot <[email protected]>
Signed-off-by Vignesh Raghavendra <[email protected]>
--- drivers/tty/serial/8250/8250_omap.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-)
drivers/tty/serial/8250/8250_omap.c +13 -13
@@ -539,6 +539,11 @@ static void omap_8250_pm(struct uart_port *port, unsigned int state,static void omap_serial_fill_features_erratas (struct uart_8250_port *up,struct omap8250_priv *priv) { +const struct soc_device_attribute k3_soc_devices[] = { + { .family ="AM65X" , }, + { .family ="J721E" , .revision ="SR1.0" }, + {/* sentinel */ } + };u32 mvr, scheme;u16 revision, major, minor;
@@ -586,6 +591,14 @@ static void omap_serial_fill_features_erratas(struct uart_8250_port *up,default :break ; } + +/* +* AM65x SR1.0, AM65x SR2.0 and J721e SR1.0 don't +* don't have RHR_IT_DIS bit in IER2 register. So drop to flag +* to enable errata workaround. +*/ +if (soc_device_match (k3_soc_devices)) + priv->habit &= ~UART_HAS_RHR_IT_DIS ; }static void omap8250_uart_qos_work (struct work_struct *work)
@@ -1196,12 +1209,6 @@ static int omap8250_no_handle_irq(struct uart_port *port)return 0 ; } -static const struct soc_device_attribute k3_soc_devices[] = { - { .family ="AM65X" , }, - { .family ="J721E" , .revision ="SR1.0" }, - {/* sentinel */ } -}; -static struct omap8250_dma_params am654_dma = { .rx_size =SZ_2K , .rx_trigger =1 ,
@@ -1406,13 +1413,6 @@ static int omap8250_probe(struct platform_device *pdev) up.dma->rxconf.src_maxburst =RX_TRIGGER ; up.dma->txconf.dst_maxburst = TX_TRIGGER; } - -/* -* AM65x SR1.0, AM65x SR2.0 and J721e SR1.0 don't -* don't have RHR_IT_DIS bit in IER2 register -*/ -if (soc_device_match (k3_soc_devices)) - priv->habit &= ~UART_HAS_RHR_IT_DIS ; }#endif ret =serial8250_register_8250_port (&up);
Signature · 1 line
2.29.2