Hi Paul,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on linus/master]
[also build test ERROR on v5.2-rc1 next-20190520]
[if your patch is applied to the wrong git tree, please drop us a note to help 
improve the system]

url:    
https://github.com/0day-ci/linux/commits/Paul-Wise/coredump-Split-pipe-command-whitespace-before-expanding-template/20190520-212130
config: riscv-defconfig (attached as .config)
compiler: riscv64-linux-gcc (GCC) 8.1.0
reproduce:
        wget 
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O 
~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        GCC_VERSION=8.1.0 make.cross ARCH=riscv 

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <[email protected]>

All errors (new ones prefixed by >>):

   fs/coredump.c: In function 'format_corename':
>> fs/coredump.c:210:4: error: invalid type argument of unary '*' (have 'int')
      (*argvs) = kmalloc_array(argvs, sizeof(**argv), GFP_KERNEL);
       ^~~~~~

vim +210 fs/coredump.c

   186  
   187  /* format_corename will inspect the pattern parameter, and output a
   188   * name into corename, which must have space for at least
   189   * CORENAME_MAX_SIZE bytes plus one byte for the zero terminator.
   190   */
   191  static int format_corename(struct core_name *cn, struct coredump_params 
*cprm,
   192                             size_t **argv, int *argc)
   193  {
   194          const struct cred *cred = current_cred();
   195          const char *pat_ptr = core_pattern;
   196          int ispipe = (*pat_ptr == '|');
   197          bool was_space = false;
   198          int pid_in_pattern = 0;
   199          int err = 0;
   200  
   201          cn->used = 0;
   202          cn->corename = NULL;
   203          if (expand_corename(cn, core_name_size))
   204                  return -ENOMEM;
   205          cn->corename[0] = '\0';
   206  
   207          if (ispipe) {
   208                  /* sizeof(core_pattern) / 2 is the maximum number of 
args. */
   209                  int argvs = sizeof(core_pattern) / 2;
 > 210                  (*argvs) = kmalloc_array(argvs, sizeof(**argv), 
 > GFP_KERNEL);
   211                  if (!(*argv))
   212                          return -ENOMEM;
   213                  (*argv)[(*argc)++] = 0;
   214                  ++pat_ptr;
   215          }
   216  
   217          /* Repeat as long as we have more pattern to process and more 
output
   218             space */
   219          while (*pat_ptr) {
   220                  /*
   221                   * Split on spaces before doing template expansion so 
that
   222                   * %e and %E don't get split if they have spaces in them
   223                   */
   224                  if (ispipe) {
   225                          if (isspace(*pat_ptr)) {
   226                                  was_space = true;
   227                                  pat_ptr++;
   228                                  continue;
   229                          } else if (was_space) {
   230                                  was_space = false;
   231                                  err = cn_printf(cn, "%c", '\0');
   232                                  if (err)
   233                                          return err;
   234                                  (*argv)[(*argc)++] = cn->used;
   235                          }
   236                  }
   237                  if (*pat_ptr != '%') {
   238                          err = cn_printf(cn, "%c", *pat_ptr++);
   239                  } else {
   240                          switch (*++pat_ptr) {
   241                          /* single % at the end, drop that */
   242                          case 0:
   243                                  goto out;
   244                          /* Double percent, output one percent */
   245                          case '%':
   246                                  err = cn_printf(cn, "%c", '%');
   247                                  break;
   248                          /* pid */
   249                          case 'p':
   250                                  pid_in_pattern = 1;
   251                                  err = cn_printf(cn, "%d",
   252                                                task_tgid_vnr(current));
   253                                  break;
   254                          /* global pid */
   255                          case 'P':
   256                                  err = cn_printf(cn, "%d",
   257                                                task_tgid_nr(current));
   258                                  break;
   259                          case 'i':
   260                                  err = cn_printf(cn, "%d",
   261                                                task_pid_vnr(current));
   262                                  break;
   263                          case 'I':
   264                                  err = cn_printf(cn, "%d",
   265                                                task_pid_nr(current));
   266                                  break;
   267                          /* uid */
   268                          case 'u':
   269                                  err = cn_printf(cn, "%u",
   270                                                  from_kuid(&init_user_ns,
   271                                                            cred->uid));
   272                                  break;
   273                          /* gid */
   274                          case 'g':
   275                                  err = cn_printf(cn, "%u",
   276                                                  from_kgid(&init_user_ns,
   277                                                            cred->gid));
   278                                  break;
   279                          case 'd':
   280                                  err = cn_printf(cn, "%d",
   281                                          __get_dumpable(cprm->mm_flags));
   282                                  break;
   283                          /* signal that caused the coredump */
   284                          case 's':
   285                                  err = cn_printf(cn, "%d",
   286                                                  
cprm->siginfo->si_signo);
   287                                  break;
   288                          /* UNIX time of coredump */
   289                          case 't': {
   290                                  time64_t time;
   291  
   292                                  time = ktime_get_real_seconds();
   293                                  err = cn_printf(cn, "%lld", time);
   294                                  break;
   295                          }
   296                          /* hostname */
   297                          case 'h':
   298                                  down_read(&uts_sem);
   299                                  err = cn_esc_printf(cn, "%s",
   300                                                utsname()->nodename);
   301                                  up_read(&uts_sem);
   302                                  break;
   303                          /* executable */
   304                          case 'e':
   305                                  err = cn_esc_printf(cn, "%s", 
current->comm);
   306                                  break;
   307                          case 'E':
   308                                  err = cn_print_exe_file(cn);
   309                                  break;
   310                          /* core limit size */
   311                          case 'c':
   312                                  err = cn_printf(cn, "%lu",
   313                                                rlimit(RLIMIT_CORE));
   314                                  break;
   315                          default:
   316                                  break;
   317                          }
   318                          ++pat_ptr;
   319                  }
   320  
   321                  if (err)
   322                          return err;
   323          }
   324  
   325  out:
   326          /* Backward compatibility with core_uses_pid:
   327           *
   328           * If core_pattern does not include a %p (as is the default)
   329           * and core_uses_pid is set, then .%pid will be appended to
   330           * the filename. Do not do this for piped commands. */
   331          if (!ispipe && !pid_in_pattern && core_uses_pid) {
   332                  err = cn_printf(cn, ".%d", task_tgid_vnr(current));
   333                  if (err)
   334                          return err;
   335          }
   336          return ispipe;
   337  }
   338  

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Attachment: .config.gz
Description: application/gzip

Reply via email to