Re: [PATCH v4] fs/coredump: Enable dynamic configuration of max file note size

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

 



>
> kernel test robot noticed the following build errors:
>
> [auto build test ERROR on kees/for-next/execve]
> [also build test ERROR on brauner-vfs/vfs.all linus/master v6.9-rc7 next-20240507]
> [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#_base_tree_information]
>
> url:    https://github.com/intel-lab-lkp/linux/commits/Allen-Pais/fs-coredump-Enable-dynamic-configuration-of-max-file-note-size/20240507-033907
> base:   https://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git for-next/execve
> patch link:    https://lore.kernel.org/r/20240506193700.7884-1-apais%40linux.microsoft.com
> patch subject: [PATCH v4] fs/coredump: Enable dynamic configuration of max file note size
> config: loongarch-randconfig-001-20240507 (https://download.01.org/0day-ci/archive/20240507/202405072249.fLkavX40-lkp@xxxxxxxxx/config)
> compiler: loongarch64-linux-gcc (GCC) 13.2.0
> reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240507/202405072249.fLkavX40-lkp@xxxxxxxxx/reproduce)
>
> If you fix the issue in a separate patch/commit (i.e. not just a new version of
> the same patch/commit), kindly add following tags
> | Reported-by: kernel test robot <lkp@xxxxxxxxx>
> | Closes: https://lore.kernel.org/oe-kbuild-all/202405072249.fLkavX40-lkp@xxxxxxxxx/
>

 Thanks for reporting. The kernel builds fine with
https://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git
for-next/execve.
The issue is with loongarch-randconfig, which has CONFIG_SYSCTL set to
"n". It is needed for this patch.


Thanks,
Allen

> All errors (new ones prefixed by >>):
>
>    fs/binfmt_elf.c: In function 'fill_files_note':
> >> fs/binfmt_elf.c:1598:21: error: 'core_file_note_size_min' undeclared (first use in this function)
>     1598 |         if (size >= core_file_note_size_min) {
>          |                     ^~~~~~~~~~~~~~~~~~~~~~~
>    fs/binfmt_elf.c:1598:21: note: each undeclared identifier is reported only once for each function it appears in
>
>
> vim +/core_file_note_size_min +1598 fs/binfmt_elf.c
>
>   1569
>   1570  /*
>   1571   * Format of NT_FILE note:
>   1572   *
>   1573   * long count     -- how many files are mapped
>   1574   * long page_size -- units for file_ofs
>   1575   * array of [COUNT] elements of
>   1576   *   long start
>   1577   *   long end
>   1578   *   long file_ofs
>   1579   * followed by COUNT filenames in ASCII: "FILE1" NUL "FILE2" NUL...
>   1580   */
>   1581  static int fill_files_note(struct memelfnote *note, struct coredump_params *cprm)
>   1582  {
>   1583          unsigned count, size, names_ofs, remaining, n;
>   1584          user_long_t *data;
>   1585          user_long_t *start_end_ofs;
>   1586          char *name_base, *name_curpos;
>   1587          int i;
>   1588
>   1589          /* *Estimated* file count and total data size needed */
>   1590          count = cprm->vma_count;
>   1591          if (count > UINT_MAX / 64)
>   1592                  return -EINVAL;
>   1593          size = count * 64;
>   1594
>   1595          names_ofs = (2 + 3 * count) * sizeof(data[0]);
>   1596   alloc:
>   1597          /* paranoia check */
> > 1598          if (size >= core_file_note_size_min) {
>   1599                  pr_warn_once("coredump Note size too large: %u (does kernel.core_file_note_size_min sysctl need adjustment?\n",
>   1600                                size);
>   1601                  return -EINVAL;
>   1602          }
>   1603          size = round_up(size, PAGE_SIZE);
>   1604          /*
>   1605           * "size" can be 0 here legitimately.
>   1606           * Let it ENOMEM and omit NT_FILE section which will be empty anyway.
>   1607           */
>   1608          data = kvmalloc(size, GFP_KERNEL);
>   1609          if (ZERO_OR_NULL_PTR(data))
>   1610                  return -ENOMEM;
>   1611
>   1612          start_end_ofs = data + 2;
>   1613          name_base = name_curpos = ((char *)data) + names_ofs;
>   1614          remaining = size - names_ofs;
>   1615          count = 0;
>   1616          for (i = 0; i < cprm->vma_count; i++) {
>   1617                  struct core_vma_metadata *m = &cprm->vma_meta[i];
>   1618                  struct file *file;
>   1619                  const char *filename;
>   1620
>   1621                  file = m->file;
>   1622                  if (!file)
>   1623                          continue;
>   1624                  filename = file_path(file, name_curpos, remaining);
>   1625                  if (IS_ERR(filename)) {
>   1626                          if (PTR_ERR(filename) == -ENAMETOOLONG) {
>   1627                                  kvfree(data);
>   1628                                  size = size * 5 / 4;
>   1629                                  goto alloc;
>   1630                          }
>   1631                          continue;
>   1632                  }
>   1633
>   1634                  /* file_path() fills at the end, move name down */
>   1635                  /* n = strlen(filename) + 1: */
>   1636                  n = (name_curpos + remaining) - filename;
>   1637                  remaining = filename - name_curpos;
>   1638                  memmove(name_curpos, filename, n);
>   1639                  name_curpos += n;
>   1640
>   1641                  *start_end_ofs++ = m->start;
>   1642                  *start_end_ofs++ = m->end;
>   1643                  *start_end_ofs++ = m->pgoff;
>   1644                  count++;
>   1645          }
>   1646
>   1647          /* Now we know exact count of files, can store it */
>   1648          data[0] = count;
>   1649          data[1] = PAGE_SIZE;
>   1650          /*
>   1651           * Count usually is less than mm->map_count,
>   1652           * we need to move filenames down.
>   1653           */
>   1654          n = cprm->vma_count - count;
>   1655          if (n != 0) {
>   1656                  unsigned shift_bytes = n * 3 * sizeof(data[0]);
>   1657                  memmove(name_base - shift_bytes, name_base,
>   1658                          name_curpos - name_base);
>   1659                  name_curpos -= shift_bytes;
>   1660          }
>   1661
>   1662          size = name_curpos - (char *)data;
>   1663          fill_note(note, "CORE", NT_FILE, size, data);
>   1664          return 0;
>   1665  }
>   1666
>
> --
> 0-DAY CI Kernel Test Service
> https://github.com/intel/lkp-tests/wiki



-- 
       - Allen




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux