random: check for increase of entropy_count because of signed conversion
authorHannes Frederic Sowa <hannes@stressinduktion.org>
Fri, 18 Jul 2014 21:26:41 +0000 (17:26 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 28 Jul 2014 15:08:27 +0000 (08:08 -0700)
commit4476263109359f4d8f020ffa94c1da0b810fddbe
tree1596df7c40480ca252f856087892627f42be7953
parentf089f0e364939faf818fd14b45f41a33b23dca54
random: check for increase of entropy_count because of signed conversion

commit 79a8468747c5f95ed3d5ce8376a3e82e0c5857fc upstream.

The expression entropy_count -= ibytes << (ENTROPY_SHIFT + 3) could
actually increase entropy_count if during assignment of the unsigned
expression on the RHS (mind the -=) we reduce the value modulo
2^width(int) and assign it to entropy_count. Trinity found this.

[ Commit modified by tytso to add an additional safety check for a
  negative entropy_count -- which should never happen, and to also add
  an additional paranoia check to prevent overly large count values to
  be passed into urandom_read().  ]

Reported-by: Dave Jones <davej@redhat.com>
Signed-off-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/char/random.c