spi_mpc83xx: reject invalid transfer sizes
Error out on transfer length != multiple of bytes per word with -EINVAL. Fixes a buffer overrun crash if length < bytes per word. Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk> Acked-by: Joakim Tjernlund <Joakim.Tjernlund@transmode.se> Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
53604dbe13
commit
aa77d96ba9
@@ -312,11 +312,20 @@ static int mpc83xx_spi_bufs(struct spi_device *spi, struct spi_transfer *t)
|
|||||||
if (t->bits_per_word)
|
if (t->bits_per_word)
|
||||||
bits_per_word = t->bits_per_word;
|
bits_per_word = t->bits_per_word;
|
||||||
len = t->len;
|
len = t->len;
|
||||||
if (bits_per_word > 8)
|
if (bits_per_word > 8) {
|
||||||
|
/* invalid length? */
|
||||||
|
if (len & 1)
|
||||||
|
return -EINVAL;
|
||||||
len /= 2;
|
len /= 2;
|
||||||
if (bits_per_word > 16)
|
}
|
||||||
|
if (bits_per_word > 16) {
|
||||||
|
/* invalid length? */
|
||||||
|
if (len & 1)
|
||||||
|
return -EINVAL;
|
||||||
len /= 2;
|
len /= 2;
|
||||||
|
}
|
||||||
mpc83xx_spi->count = len;
|
mpc83xx_spi->count = len;
|
||||||
|
|
||||||
INIT_COMPLETION(mpc83xx_spi->done);
|
INIT_COMPLETION(mpc83xx_spi->done);
|
||||||
|
|
||||||
/* enable rx ints */
|
/* enable rx ints */
|
||||||
|
Reference in New Issue
Block a user