Browse Source

crypto: inside-secure - do not process request if no command was issued

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>
Antoine Tenart 7 years ago
parent
commit
95831ceafc
1 changed files with 9 additions and 0 deletions
  1. 9 0
      drivers/crypto/inside-secure/safexcel.c

+ 9 - 0
drivers/crypto/inside-secure/safexcel.c

@@ -490,6 +490,15 @@ handle_req:
 		if (backlog)
 		if (backlog)
 			backlog->complete(backlog, -EINPROGRESS);
 			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);
 		spin_lock_bh(&priv->ring[ring].egress_lock);
 		list_add_tail(&request->list, &priv->ring[ring].list);
 		list_add_tail(&request->list, &priv->ring[ring].list);
 		spin_unlock_bh(&priv->ring[ring].egress_lock);
 		spin_unlock_bh(&priv->ring[ring].egress_lock);