Re: [vhost:vhost 24/24] drivers/firmware/qemu_fw_cfg.c:499:22: error: storage size of 'files' isn't known

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi

On Wed, Feb 14, 2018 at 9:27 PM, kbuild test robot
<fengguang.wu@xxxxxxxxx> wrote:
> tree:   https://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost.git vhost
> head:   5d457fe6aeaab9d0a1665eafc8af7139bc6b6f2e
> commit: 5d457fe6aeaab9d0a1665eafc8af7139bc6b6f2e [24/24] fw_cfg: fix sparse warnings around FW_CFG_FILE_DIR read
> config: i386-randconfig-x015-201806 (attached as .config)
> compiler: gcc-7 (Debian 7.3.0-1) 7.3.0
> reproduce:
>         git checkout 5d457fe6aeaab9d0a1665eafc8af7139bc6b6f2e
>         # save the attached .config to linux build tree
>         make ARCH=i386
>
> All errors (new ones prefixed by >>):
>
>    drivers/firmware/qemu_fw_cfg.c: In function 'fw_cfg_register_dir_entries':
>>> drivers/firmware/qemu_fw_cfg.c:499:22: error: storage size of 'files' isn't known
>      struct fw_cfg_files files;
>                          ^~~~~

struct fw_cfg_files {
        __be32 count; /* number of entries */
        struct fw_cfg_file f[];
};

Interesting, I don't have that warning with 7.3.1.

I thought the size would be sizeof(count) by standard.

I replaced it with a __be32 files_count variable instead.

>    drivers/firmware/qemu_fw_cfg.c:499:22: warning: unused variable 'files' [-Wunused-variable]
>

files.count is used 3 lines below, that looks like a compiler bug to me.

> vim +499 drivers/firmware/qemu_fw_cfg.c
>
>    493
>    494  /* iterate over all fw_cfg directory entries, registering each one */
>    495  static int fw_cfg_register_dir_entries(void)
>    496  {
>    497          int ret = 0;
>    498          u32 count, i;
>  > 499          struct fw_cfg_files files;
>    500          struct fw_cfg_file *dir;
>    501          size_t dir_size;
>    502
>    503          fw_cfg_read_blob(FW_CFG_FILE_DIR, &files.count, 0, sizeof(files.count));
>    504          count = be32_to_cpu(files.count);
>    505          dir_size = count * sizeof(struct fw_cfg_file);
>    506
>    507          dir = kmalloc(dir_size, GFP_KERNEL);
>    508          if (!dir)
>    509                  return -ENOMEM;
>    510
>    511          fw_cfg_read_blob(FW_CFG_FILE_DIR, dir, sizeof(files.count), dir_size);
>    512
>    513          for (i = 0; i < count; i++) {
>    514                  ret = fw_cfg_register_file(&dir[i]);
>    515                  if (ret)
>    516                          break;
>    517          }
>    518
>    519          kfree(dir);
>    520          return ret;
>    521  }
>    522
>
> ---
> 0-DAY kernel test infrastructure                Open Source Technology Center
> https://lists.01.org/pipermail/kbuild-all                   Intel Corporation



[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux