crypto: inside-secure - do not process request if no command was issued
authorAntoine Tenart <antoine.tenart@bootlin.com>
Tue, 13 Feb 2018 08:26:54 +0000 (09:26 +0100)
committerHerbert Xu <herbert@gondor.apana.org.au>
Thu, 22 Feb 2018 14:16:26 +0000 (22:16 +0800)
This patch adds a check in the SafeXcel dequeue function, to avoid
processing request further if no hardware command was issued. This can
happen in certain cases where the ->send() function caches all the data
that would have been send.

Fixes: 809778e02cd4 ("crypto: inside-secure - fix hash when length is a multiple of a block")
Signed-off-by: Antoine Tenart <antoine.tenart@bootlin.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/inside-secure/safexcel.c

index 5cb90bcd3f18e5d9ca6c5c33fbf759f75ab6a168..0642d7181c9eefc9c18982b85d243867ab583164 100644 (file)
@@ -490,6 +490,15 @@ handle_req:
                if (backlog)
                        backlog->complete(backlog, -EINPROGRESS);
 
+               /* In case the send() helper did not issue any command to push
+                * to the engine because the input data was cached, continue to
+                * dequeue other requests as this is valid and not an error.
+                */
+               if (!commands && !results) {
+                       kfree(request);
+                       continue;
+               }
+
                spin_lock_bh(&priv->ring[ring].egress_lock);
                list_add_tail(&request->list, &priv->ring[ring].list);
                spin_unlock_bh(&priv->ring[ring].egress_lock);