Input: feed more data into entropy pool
diff mbox

Message ID 20160518213244.GA3167@dtor-ws
State Accepted
Headers show

Commit Message

Dmitry Torokhov May 18, 2016, 9:32 p.m. UTC
Commit 4369c64c79a22 ("Input: Send events one packet at a time")
significantly reduced amount of entropy input core was feeding to the rest
of the system, because only the very first event in the event block would
be used as source of entropy.

With this change we will be calling add_input_randomness() for every event
that is not filtered by the input core as a duplicate. In addition, all
EV_SYN events are ignored.

Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
---
 drivers/input/input.c | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

Comments

Henrik Rydberg May 19, 2016, 6:46 a.m. UTC | #1
Hi Dmitry,

On 05/18/2016 11:32 PM, Dmitry Torokhov wrote:
> Commit 4369c64c79a22 ("Input: Send events one packet at a time")
> significantly reduced amount of entropy input core was feeding to the rest
> of the system, because only the very first event in the event block would
> be used as source of entropy.
> 
> With this change we will be calling add_input_randomness() for every event
> that is not filtered by the input core as a duplicate. In addition, all
> EV_SYN events are ignored.
> 
> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>

Acked-by: Henrik Rydberg <rydberg@bitmath.org>

Thanks for this, it has been nagging me as well.

> -	disposition = input_get_disposition(dev, type, code, &value);
> +	if (disposition != INPUT_IGNORE_EVENT && type != EV_SYN)
> +		add_input_randomness(type, code, value);

As a comment, it is not immediately clear to me how this will affect latency,
although it appears rather harmless.

Thanks,
Henrik

--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Benjamin Tissoires May 19, 2016, 7:15 a.m. UTC | #2
On May 18 2016 or thereabouts, Dmitry Torokhov wrote:
> Commit 4369c64c79a22 ("Input: Send events one packet at a time")
> significantly reduced amount of entropy input core was feeding to the rest
> of the system, because only the very first event in the event block would
> be used as source of entropy.
> 
> With this change we will be calling add_input_randomness() for every event
> that is not filtered by the input core as a duplicate. In addition, all
> EV_SYN events are ignored.
> 
> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>

Acked-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>

Thanks!
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Jiri Kosina May 19, 2016, 8:39 a.m. UTC | #3
On Wed, 18 May 2016, Dmitry Torokhov wrote:

> Commit 4369c64c79a22 ("Input: Send events one packet at a time")
> significantly reduced amount of entropy input core was feeding to the rest
> of the system, because only the very first event in the event block would
> be used as source of entropy.
> 
> With this change we will be calling add_input_randomness() for every event
> that is not filtered by the input core as a duplicate. In addition, all
> EV_SYN events are ignored.
> 
> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>

IMO absolutely reasonable thing to do. FWIW

	Acked-by: Jiri Kosina <jkosina@suse.cz>

Thanks,

Patch
diff mbox

diff --git a/drivers/input/input.c b/drivers/input/input.c
index b87ffbd..d95c34e 100644
--- a/drivers/input/input.c
+++ b/drivers/input/input.c
@@ -153,8 +153,6 @@  static void input_pass_values(struct input_dev *dev,
 
 	rcu_read_unlock();
 
-	add_input_randomness(vals->type, vals->code, vals->value);
-
 	/* trigger auto repeat for key events */
 	if (test_bit(EV_REP, dev->evbit) && test_bit(EV_KEY, dev->evbit)) {
 		for (v = vals; v != vals + count; v++) {
@@ -371,9 +369,10 @@  static int input_get_disposition(struct input_dev *dev,
 static void input_handle_event(struct input_dev *dev,
 			       unsigned int type, unsigned int code, int value)
 {
-	int disposition;
+	int disposition = input_get_disposition(dev, type, code, &value);
 
-	disposition = input_get_disposition(dev, type, code, &value);
+	if (disposition != INPUT_IGNORE_EVENT && type != EV_SYN)
+		add_input_randomness(type, code, value);
 
 	if ((disposition & INPUT_PASS_TO_DEVICE) && dev->event)
 		dev->event(dev, type, code, value);