CC: [email protected]
In-Reply-To: <[email protected]>
References: <[email protected]>
TO: Andy Shevchenko <[email protected]>
TO: [email protected]
TO: [email protected]
CC: "Greg Kroah-Hartman" <[email protected]>
CC: Jiri Slaby <[email protected]>
CC: Andy Shevchenko <[email protected]>

Hi Andy,

I love your patch! Perhaps something to improve:

[auto build test WARNING on tty/tty-testing]
[also build test WARNING on linux/master usb/usb-testing linus/master v5.14-rc1 
next-20210713]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    
https://github.com/0day-ci/linux/commits/Andy-Shevchenko/serial-8250_pci-Refactor-the-loop-in-pci_ite887x_init/20210713-184225
base:   https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty.git 
tty-testing
:::::: branch date: 6 hours ago
:::::: commit date: 6 hours ago
config: x86_64-randconfig-m001-20210713 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>
Reported-by: Dan Carpenter <[email protected]>

smatch warnings:
drivers/tty/serial/8250/8250_pci.c:927 pci_ite887x_init() error: buffer 
overflow 'inta_addr' 7 <= 7 (assuming for loop doesn't break)

vim +927 drivers/tty/serial/8250/8250_pci.c

84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 899  
97f2398f0f6a89 drivers/tty/serial/8250/8250_pci.c Andy Shevchenko    2021-07-13 
 900  /* inta_addr are the configuration addresses of the ITE */
97f2398f0f6a89 drivers/tty/serial/8250/8250_pci.c Andy Shevchenko    2021-07-13 
 901  static const short inta_addr[] = { 0x2a0, 0x2c0, 0x220, 0x240, 0x1e0, 
0x200, 0x280, };
f79abb828e1d85 drivers/serial/8250_pci.c          Ralf Baechle       2007-08-30 
 902  static int pci_ite887x_init(struct pci_dev *dev)
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 903  {
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 904    int ret, i, type;
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 905    struct resource *iobase = NULL;
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 906    u32 miscr, uartbar, ioport;
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 907  
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 908    /* search for the base-ioport */
97f2398f0f6a89 drivers/tty/serial/8250/8250_pci.c Andy Shevchenko    2021-07-13 
 909    for (i = 0; i < ARRAY_SIZE(inta_addr); i++) {
97f2398f0f6a89 drivers/tty/serial/8250/8250_pci.c Andy Shevchenko    2021-07-13 
 910            iobase = request_region(inta_addr[i], ITE_887x_IOSIZE, 
"ite887x");
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 911            if (iobase != NULL) {
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 912                    /* write POSIO0R - speed | size | ioport */
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 913                    pci_write_config_dword(dev, ITE_887x_POSIO0,
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 914                            ITE_887x_POSIO_ENABLE | ITE_887x_POSIO_SPEED |
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 915                            ITE_887x_POSIO_IOSIZE_32 | inta_addr[i]);
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 916                    /* write INTCBAR - ioport */
97f2398f0f6a89 drivers/tty/serial/8250/8250_pci.c Andy Shevchenko    2021-07-13 
 917                    pci_write_config_dword(dev, ITE_887x_INTCBAR, 
inta_addr[i]);
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 918                    ret = inb(inta_addr[i]);
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 919                    if (ret != 0xff) {
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 920                            /* ioport connected */
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 921                            break;
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 922                    }
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 923                    release_region(iobase->start, ITE_887x_IOSIZE);
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 924            }
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 925    }
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 926  
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
@927    if (!inta_addr[i]) {
af8c5b8debb046 drivers/tty/serial/8250/8250_pci.c Greg Kroah-Hartman 2013-09-28 
 928            dev_err(&dev->dev, "ite887x: could not find iobase\n");
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 929            return -ENODEV;
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 930    }
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 931  
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 932    /* start of undocumented type checking (see parport_pc.c) */
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 933    type = inb(iobase->start + 0x18) & 0x0f;
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 934  
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 935    switch (type) {
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 936    case 0x2:       /* ITE8871 (1P) */
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 937    case 0xa:       /* ITE8875 (1P) */
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 938            ret = 0;
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 939            break;
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 940    case 0xe:       /* ITE8872 (2S1P) */
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 941            ret = 2;
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 942            break;
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 943    case 0x6:       /* ITE8873 (1S) */
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 944            ret = 1;
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 945            break;
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 946    case 0x8:       /* ITE8874 (2S) */
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 947            ret = 2;
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 948            break;
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 949    default:
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 950            moan_device("Unknown ITE887x", dev);
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 951            ret = -ENODEV;
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 952    }
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 953  
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 954    /* configure all serial ports */
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 955    for (i = 0; i < ret; i++) {
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 956            /* read the I/O port from the device */
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 957            pci_read_config_dword(dev, ITE_887x_PS0BAR + (0x4 * (i + 1)),
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 958                                                            &ioport);
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 959            ioport &= 0x0000FF00;   /* the actual base address */
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 960            pci_write_config_dword(dev, ITE_887x_POSIO0 + (0x4 * (i + 1)),
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 961                    ITE_887x_POSIO_ENABLE | ITE_887x_POSIO_SPEED |
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 962                    ITE_887x_POSIO_IOSIZE_8 | ioport);
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 963  
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 964            /* write the ioport to the UARTBAR */
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 965            pci_read_config_dword(dev, ITE_887x_UARTBAR, &uartbar);
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 966            uartbar &= ~(0xffff << (16 * i));       /* clear half the reg */
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 967            uartbar |= (ioport << (16 * i));        /* set the ioport */
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 968            pci_write_config_dword(dev, ITE_887x_UARTBAR, uartbar);
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 969  
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 970            /* get current config */
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 971            pci_read_config_dword(dev, ITE_887x_MISCR, &miscr);
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 972            /* disable interrupts (UARTx_Routing[3:0]) */
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 973            miscr &= ~(0xf << (12 - 4 * i));
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 974            /* activate the UART (UARTx_En) */
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 975            miscr |= 1 << (23 - i);
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 976            /* write new config with activated UART */
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 977            pci_write_config_dword(dev, ITE_887x_MISCR, miscr);
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 978    }
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 979  
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 980    if (ret <= 0) {
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 981            /* the device has no UARTs if we get here */
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 982            release_region(iobase->start, ITE_887x_IOSIZE);
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 983    }
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 984  
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 985    return ret;
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 986  }
84f8c6fc0e3b6e drivers/serial/8250_pci.c          Niels de Vos       2007-08-22 
 987  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]

Attachment: .config.gz
Description: application/gzip

_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to