Hi Gabriel,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on staging/staging-testing]
[also build test WARNING on v4.17-rc7]
[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/Gabriel-Fedel/staging-speakup-remove-simple_strtoul/20180528-231304


coccinelle warnings: (new ones prefixed by >>)

>> drivers/staging/speakup/kobjects.c:163:2-5: alloc with no test, possible 
>> model on line 146
   drivers/staging/speakup/kobjects.c:163:2-5: alloc with no test, possible 
model on line 185
   drivers/staging/speakup/kobjects.c:809:2-5: alloc with no test, possible 
model on line 791

vim +163 drivers/staging/speakup/kobjects.c

   105  
   106  /*
   107   * This is called when a user changes the characters or chartab 
parameters.
   108   */
   109  static ssize_t chars_chartab_store(struct kobject *kobj,
   110                                     struct kobj_attribute *attr,
   111                                     const char *buf, size_t count)
   112  {
   113          char *cp = (char *)buf;
   114          char *end = cp + count; /* the null at the end of the buffer */
   115          char *linefeed = NULL;
   116          char keyword[MAX_DESC_LEN + 1];
   117          char *outptr = NULL;    /* Will hold keyword or desc. */
   118          char *temp = NULL;
   119          char *desc = NULL;
   120          char *num = NULL; /* The number part of cp */
   121          ssize_t retval = count;
   122          unsigned long flags;
   123          unsigned long index = 0;
   124          int charclass = 0;
   125          int received = 0;
   126          int used = 0;
   127          int rejected = 0;
   128          int reset = 0;
   129          int do_characters = !strcmp(attr->attr.name, "characters");
   130          size_t desc_length = 0;
   131          int i;
   132  
   133          spin_lock_irqsave(&speakup_info.spinlock, flags);
   134          while (cp < end) {
   135                  while ((cp < end) && (*cp == ' ' || *cp == '\t'))
   136                          cp++;
   137  
   138                  if (cp == end)
   139                          break;
   140                  if ((*cp == '\n') || strchr("dDrR", *cp)) {
   141                          reset = 1;
   142                          break;
   143                  }
   144                  received++;
   145  
 > 146                  linefeed = strchr(cp, '\n');
   147                  if (!linefeed) {
   148                          rejected++;
   149                          break;
   150                  }
   151  
   152                  if (!isdigit(*cp)) {
   153                          rejected++;
   154                          cp = linefeed + 1;
   155                          continue;
   156                  }
   157  
   158                  i = 0;
   159                  while (isdigit(*(cp + i)))
   160                          i = i + 1;
   161                  temp = cp + i;
   162  
 > 163                  num = kmalloc(i + 2, GFP_ATOMIC);
   164                  strscpy(num, cp, i + 1);
   165  
   166                  if (kstrtoul(num, 10, &index) != 0)
   167                          pr_warn("overflow or parsing error has 
occurred");
   168  
   169                  if (index > 255) {
   170                          rejected++;
   171                          cp = linefeed + 1;
   172                          continue;
   173                  }
   174  
   175                  while ((temp < linefeed) && (*temp == ' ' || *temp == 
'\t'))
   176                          temp++;
   177  
   178                  desc_length = linefeed - temp;
   179                  if (desc_length > MAX_DESC_LEN) {
   180                          rejected++;
   181                          cp = linefeed + 1;
   182                          continue;
   183                  }
   184                  if (do_characters) {
   185                          desc = kmalloc(desc_length + 1, GFP_ATOMIC);
   186                          if (!desc) {
   187                                  retval = -ENOMEM;
   188                                  reset = 1;      /* just reset on error. 
*/
   189                                  break;
   190                          }
   191                          outptr = desc;
   192                  } else {
   193                          outptr = keyword;
   194                  }
   195  
   196                  for (i = 0; i < desc_length; i++)
   197                          outptr[i] = temp[i];
   198                  outptr[desc_length] = '\0';
   199  
   200                  if (do_characters) {
   201                          if (spk_characters[index] != 
spk_default_chars[index])
   202                                  kfree(spk_characters[index]);
   203                          spk_characters[index] = desc;
   204                          used++;
   205                  } else {
   206                          charclass = spk_chartab_get_value(keyword);
   207                          if (charclass == 0) {
   208                                  rejected++;
   209                                  cp = linefeed + 1;
   210                                  continue;
   211                          }
   212                          if (charclass != spk_chartab[index]) {
   213                                  spk_chartab[index] = charclass;
   214                                  used++;
   215                          }
   216                  }
   217                  cp = linefeed + 1;
   218          }
   219  
   220          if (reset) {
   221                  if (do_characters)
   222                          spk_reset_default_chars();
   223                  else
   224                          spk_reset_default_chartab();
   225          }
   226  
   227          spin_unlock_irqrestore(&speakup_info.spinlock, flags);
   228          report_char_chartab_status(reset, received, used, rejected,
   229                                     do_characters);
   230          return retval;
   231  }
   232  

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
_______________________________________________
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to