algif_skcipher.c (866c9b94ef968445c52214b3748ecc52a8491bca) | algif_skcipher.c (7d2c3f54e6f646887d019faa45f35d6fe9fe82ce) |
---|---|
1/* 2 * algif_skcipher: User-space interface for skcipher algorithms 3 * 4 * This file provides the user-space API for symmetric key ciphers. 5 * 6 * Copyright (c) 2010 Herbert Xu <herbert@gondor.apana.org.au> 7 * 8 * This program is free software; you can redistribute it and/or modify it --- 103 unchanged lines hidden (view full) --- 112 113 /* Initialize the crypto operation */ 114 skcipher_request_set_tfm(&areq->cra_u.skcipher_req, tfm); 115 skcipher_request_set_crypt(&areq->cra_u.skcipher_req, areq->tsgl, 116 areq->first_rsgl.sgl.sg, len, ctx->iv); 117 118 if (msg->msg_iocb && !is_sync_kiocb(msg->msg_iocb)) { 119 /* AIO operation */ | 1/* 2 * algif_skcipher: User-space interface for skcipher algorithms 3 * 4 * This file provides the user-space API for symmetric key ciphers. 5 * 6 * Copyright (c) 2010 Herbert Xu <herbert@gondor.apana.org.au> 7 * 8 * This program is free software; you can redistribute it and/or modify it --- 103 unchanged lines hidden (view full) --- 112 113 /* Initialize the crypto operation */ 114 skcipher_request_set_tfm(&areq->cra_u.skcipher_req, tfm); 115 skcipher_request_set_crypt(&areq->cra_u.skcipher_req, areq->tsgl, 116 areq->first_rsgl.sgl.sg, len, ctx->iv); 117 118 if (msg->msg_iocb && !is_sync_kiocb(msg->msg_iocb)) { 119 /* AIO operation */ |
120 sock_hold(sk); |
|
120 areq->iocb = msg->msg_iocb; 121 skcipher_request_set_callback(&areq->cra_u.skcipher_req, 122 CRYPTO_TFM_REQ_MAY_SLEEP, 123 af_alg_async_cb, areq); 124 err = ctx->enc ? 125 crypto_skcipher_encrypt(&areq->cra_u.skcipher_req) : 126 crypto_skcipher_decrypt(&areq->cra_u.skcipher_req); | 121 areq->iocb = msg->msg_iocb; 122 skcipher_request_set_callback(&areq->cra_u.skcipher_req, 123 CRYPTO_TFM_REQ_MAY_SLEEP, 124 af_alg_async_cb, areq); 125 err = ctx->enc ? 126 crypto_skcipher_encrypt(&areq->cra_u.skcipher_req) : 127 crypto_skcipher_decrypt(&areq->cra_u.skcipher_req); |
128 129 /* AIO operation in progress */ 130 if (err == -EINPROGRESS || err == -EBUSY) { 131 /* Remember output size that will be generated. */ 132 areq->outlen = len; 133 134 return -EIOCBQUEUED; 135 } 136 137 sock_put(sk); |
|
127 } else { 128 /* Synchronous operation */ 129 skcipher_request_set_callback(&areq->cra_u.skcipher_req, 130 CRYPTO_TFM_REQ_MAY_SLEEP | 131 CRYPTO_TFM_REQ_MAY_BACKLOG, 132 crypto_req_done, &ctx->wait); 133 err = crypto_wait_req(ctx->enc ? 134 crypto_skcipher_encrypt(&areq->cra_u.skcipher_req) : 135 crypto_skcipher_decrypt(&areq->cra_u.skcipher_req), 136 &ctx->wait); 137 } 138 | 138 } else { 139 /* Synchronous operation */ 140 skcipher_request_set_callback(&areq->cra_u.skcipher_req, 141 CRYPTO_TFM_REQ_MAY_SLEEP | 142 CRYPTO_TFM_REQ_MAY_BACKLOG, 143 crypto_req_done, &ctx->wait); 144 err = crypto_wait_req(ctx->enc ? 145 crypto_skcipher_encrypt(&areq->cra_u.skcipher_req) : 146 crypto_skcipher_decrypt(&areq->cra_u.skcipher_req), 147 &ctx->wait); 148 } 149 |
139 /* AIO operation in progress */ 140 if (err == -EINPROGRESS) { 141 sock_hold(sk); | |
142 | 150 |
143 /* Remember output size that will be generated. */ 144 areq->outlen = len; 145 146 return -EIOCBQUEUED; 147 } 148 | |
149free: | 151free: |
150 af_alg_free_areq_sgls(areq); 151 sock_kfree_s(sk, areq, areq->areqlen); | 152 af_alg_free_resources(areq); |
152 153 return err ? err : len; 154} 155 156static int skcipher_recvmsg(struct socket *sock, struct msghdr *msg, 157 size_t ignored, int flags) 158{ 159 struct sock *sk = sock->sk; --- 275 unchanged lines hidden --- | 153 154 return err ? err : len; 155} 156 157static int skcipher_recvmsg(struct socket *sock, struct msghdr *msg, 158 size_t ignored, int flags) 159{ 160 struct sock *sk = sock->sk; --- 275 unchanged lines hidden --- |