media: cec-pin: fix broken tx_ignore_nack_until_eom error injection
authorHans Verkuil <hverkuil@xs4all.nl>
Wed, 14 Nov 2018 08:37:53 +0000 (03:37 -0500)
committerMauro Carvalho Chehab <mchehab+samsung@kernel.org>
Fri, 23 Nov 2018 10:48:44 +0000 (05:48 -0500)
If the tx_ignore_nack_until_eom error injection was activated,
then tx_nacked was never set instead of setting it when the last
byte of the message was transmitted.

As a result the transmit was marked as OK, when it should have
been NACKed.

Modify the condition so that it always sets tx_nacked when the
last byte of the message was transmitted.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Cc: <stable@vger.kernel.org> # for v4.17 and up
Signed-off-by: Hans Verkuil <hansverk@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
drivers/media/cec/cec-pin.c

index 635db8e70ead57e24915f9d64fcfa1ccad48ec0e..8f987bc0dd883096c29851602d03ca2c62411a05 100644 (file)
@@ -601,8 +601,9 @@ static void cec_pin_tx_states(struct cec_pin *pin, ktime_t ts)
                        break;
                /* Was the message ACKed? */
                ack = cec_msg_is_broadcast(&pin->tx_msg) ? v : !v;
-               if (!ack && !pin->tx_ignore_nack_until_eom &&
-                   pin->tx_bit / 10 < pin->tx_msg.len && !pin->tx_post_eom) {
+               if (!ack && (!pin->tx_ignore_nack_until_eom ||
+                   pin->tx_bit / 10 == pin->tx_msg.len - 1) &&
+                   !pin->tx_post_eom) {
                        /*
                         * Note: the CEC spec is ambiguous regarding
                         * what action to take when a NACK appears