]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - crypto/af_alg.c
Merge tag 'omap-for-v3.20/dt-pt1' of git://git.kernel.org/pub/scm/linux/kernel/git...
[karo-tx-linux.git] / crypto / af_alg.c
index 6a3ad801158531435848a40936a9bd74a7a522e6..4665b79c729ac1d59d699907d3e5c75628231cdb 100644 (file)
@@ -399,7 +399,7 @@ int af_alg_cmsg_send(struct msghdr *msg, struct af_alg_control *con)
 {
        struct cmsghdr *cmsg;
 
-       for (cmsg = CMSG_FIRSTHDR(msg); cmsg; cmsg = CMSG_NXTHDR(msg, cmsg)) {
+       for_each_cmsghdr(cmsg, msg) {
                if (!CMSG_OK(msg, cmsg))
                        return -EINVAL;
                if (cmsg->cmsg_level != SOL_ALG)
@@ -421,6 +421,12 @@ int af_alg_cmsg_send(struct msghdr *msg, struct af_alg_control *con)
                        con->op = *(u32 *)CMSG_DATA(cmsg);
                        break;
 
+               case ALG_SET_AEAD_ASSOCLEN:
+                       if (cmsg->cmsg_len < CMSG_LEN(sizeof(u32)))
+                               return -EINVAL;
+                       con->aead_assoclen = *(u32 *)CMSG_DATA(cmsg);
+                       break;
+
                default:
                        return -EINVAL;
                }
@@ -449,6 +455,9 @@ void af_alg_complete(struct crypto_async_request *req, int err)
 {
        struct af_alg_completion *completion = req->data;
 
+       if (err == -EINPROGRESS)
+               return;
+
        completion->err = err;
        complete(&completion->completion);
 }