re: Staging: comedi: add usb dt9812 driver

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

 



Hello Anders,

The dt9812 driver seems to have a problem where it uses raw
insn->chanspec instead of CR_CHAN(insn->chanspec).  You don't want
to do that because then you would have to create a separate version
of comedi_check_chanlist() to verify that raw insn->chanspec values
are within bounds.  Otherwise a bug in calling the ioctl could lead
to memory corruption.

drivers/staging/comedi/drivers/dt9812.c
945  static int dt9812_di_rinsn(struct comedi_device *dev,
946                             struct comedi_subdevice *s, struct comedi_insn *insn,
947                             unsigned int *data)
948  {
949          struct comedi_dt9812 *devpriv = dev->private;
950          int n;
951          u8 bits = 0;
952  
953          dt9812_digital_in(devpriv->slot, &bits);
954          for (n = 0; n < insn->n; n++)
955                  data[n] = ((1 << insn->chanspec) & bits) != 0;
				      ^^^^^^^^^^^^^^
This should be something like:

	chan = CR_CHAN(insn->chanspec);
	data[n] = ((1 << chan) & bits) != 0;

956          return n;
957  }

regards,
dan carpenter

_______________________________________________
devel mailing list
devel@xxxxxxxxxxxxxxxxxxxxxx
http://driverdev.linuxdriverproject.org/mailman/listinfo/devel


[Index of Archives]     [Linux Driver Backports]     [DMA Engine]     [Linux GPIO]     [Linux SPI]     [Video for Linux]     [Linux USB Devel]     [Linux Coverity]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux