staging: comedi: comedi_bond: fix 'b_mask' calc in bonding_dio_insn_bits()
'b_chans' may be a valud up to 32. 'b_mask' is an unsigned int and a left shift of more than 31 bits has undefined behavior. Fix the calc so it works correctly with a 'b_chans' of 32.. Reported-by: coverity (CID 1192244) Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Reviewed-by: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
351f6689cc
commit
b3ab6fbfd8
@ -101,7 +101,8 @@ static int bonding_dio_insn_bits(struct comedi_device *dev,
|
||||
b_chans = bdev->nchans - base_chan;
|
||||
if (b_chans > n_left)
|
||||
b_chans = n_left;
|
||||
b_mask = (1U << b_chans) - 1;
|
||||
b_mask = (b_chans < 32) ? ((1 << b_chans) - 1)
|
||||
: 0xffffffff;
|
||||
b_write_mask = (write_mask >> n_done) & b_mask;
|
||||
b_data_bits = (data_bits >> n_done) & b_mask;
|
||||
/* Read/Write the new digital lines. */
|
||||
|
Loading…
Reference in New Issue
Block a user