RE: [bug report] IB/hfi1: Rework fault injection machinery

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

 



We will fix it.

Thank you!

Kaike

> -----Original Message-----
> From: linux-rdma-owner@xxxxxxxxxxxxxxx [mailto:linux-rdma-
> owner@xxxxxxxxxxxxxxx] On Behalf Of Dan Carpenter
> Sent: Thursday, May 30, 2019 5:10 AM
> To: mitko.haralanov@xxxxxxxxx
> Cc: linux-rdma@xxxxxxxxxxxxxxx
> Subject: [bug report] IB/hfi1: Rework fault injection machinery
> 
> Hello Mitko Haralanov,
> 
> The patch a74d5307caba: "IB/hfi1: Rework fault injection machinery"
> from May 2, 2018, leads to the following static checker warning:
> 
> 	drivers/infiniband/hw/hfi1/fault.c:183 fault_opcodes_write()
> 	error: passing untrusted data 'i' to 'clear_bit()'
> 
> drivers/infiniband/hw/hfi1/fault.c
>    144          if (copy_from_user(data, buf, copy))
>    145                  return -EFAULT;
>    146
>    147          ret = debugfs_file_get(file->f_path.dentry);
>    148          if (unlikely(ret))
>    149                  return ret;
>    150          ptr = data;
>    151          token = ptr;
>    152          for (ptr = data; *ptr; ptr = end + 1, token = ptr) {
>    153                  char *dash;
>    154                  unsigned long range_start, range_end, i;
>    155                  bool remove = false;
>    156
>    157                  end = strchr(ptr, ',');
>    158                  if (end)
>    159                          *end = '\0';
>    160                  if (token[0] == '-') {
>    161                          remove = true;
>    162                          token++;
>    163                  }
>    164                  dash = strchr(token, '-');
>    165                  if (dash)
>    166                          *dash = '\0';
>    167                  if (kstrtoul(token, 0, &range_start))
>                                                ^^^^^^^^^^^^ Smatch marks this as untrusted
> 
>    168                          break;
>    169                  if (dash) {
>    170                          token = dash + 1;
>    171                          if (kstrtoul(token, 0, &range_end))
>                                                        ^^^^^^^^^^ and this also
> 
>    172                                  break;
>    173                  } else {
>    174                          range_end = range_start;
>    175                  }
>    176                  if (range_start == range_end && range_start == -1UL) {
>    177                          bitmap_zero(fault->opcodes, sizeof(fault->opcodes) *
>    178                                      BITS_PER_BYTE);
>    179                          break;
>    180                  }
>    181                  for (i = range_start; i <= range_end; i++) {
>    182                          if (remove)
>    183                                  clear_bit(i, fault->opcodes);
>                                                   ^
>    184                          else
>    185                                  set_bit(i, fault->opcodes);
>                                                 ^
> 
> Smatch complains that "i" can be beyond the end of bitmap.
> 
>    186                  }
>    187                  if (!end)
>    188                          break;
> 
> regards,
> dan carpenter



[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Photo]     [Yosemite News]     [Yosemite Photos]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux