hc
2024-01-05 071106ecf68c401173c58808b1cf5f68cc50d390
kernel/crypto/algif_skcipher.c
....@@ -1,14 +1,10 @@
1
+// SPDX-License-Identifier: GPL-2.0-or-later
12 /*
23 * algif_skcipher: User-space interface for skcipher algorithms
34 *
45 * This file provides the user-space API for symmetric key ciphers.
56 *
67 * 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
9
- * under the terms of the GNU General Public License as published by the Free
10
- * Software Foundation; either version 2 of the License, or (at your option)
11
- * any later version.
128 *
139 * The following concept of the memory management is used:
1410 *
....@@ -60,13 +56,13 @@
6056 struct alg_sock *pask = alg_sk(psk);
6157 struct af_alg_ctx *ctx = ask->private;
6258 struct crypto_skcipher *tfm = pask->private;
63
- unsigned int bs = crypto_skcipher_blocksize(tfm);
59
+ unsigned int bs = crypto_skcipher_chunksize(tfm);
6460 struct af_alg_async_req *areq;
6561 int err = 0;
6662 size_t len = 0;
6763
68
- if (!ctx->used) {
69
- err = af_alg_wait_for_data(sk, flags);
64
+ if (!ctx->init || (ctx->more && ctx->used < bs)) {
65
+ err = af_alg_wait_for_data(sk, flags, bs);
7066 if (err)
7167 return err;
7268 }
....@@ -192,11 +188,9 @@
192188 .ioctl = sock_no_ioctl,
193189 .listen = sock_no_listen,
194190 .shutdown = sock_no_shutdown,
195
- .getsockopt = sock_no_getsockopt,
196191 .mmap = sock_no_mmap,
197192 .bind = sock_no_bind,
198193 .accept = sock_no_accept,
199
- .setsockopt = sock_no_setsockopt,
200194
201195 .release = af_alg_release,
202196 .sendmsg = skcipher_sendmsg,
....@@ -285,11 +279,9 @@
285279 .ioctl = sock_no_ioctl,
286280 .listen = sock_no_listen,
287281 .shutdown = sock_no_shutdown,
288
- .getsockopt = sock_no_getsockopt,
289282 .mmap = sock_no_mmap,
290283 .bind = sock_no_bind,
291284 .accept = sock_no_accept,
292
- .setsockopt = sock_no_setsockopt,
293285
294286 .release = af_alg_release,
295287 .sendmsg = skcipher_sendmsg_nokey,
....@@ -337,6 +329,7 @@
337329 ctx = sock_kmalloc(sk, len, GFP_KERNEL);
338330 if (!ctx)
339331 return -ENOMEM;
332
+ memset(ctx, 0, len);
340333
341334 ctx->iv = sock_kmalloc(sk, crypto_skcipher_ivsize(tfm),
342335 GFP_KERNEL);
....@@ -344,16 +337,10 @@
344337 sock_kfree_s(sk, ctx, len);
345338 return -ENOMEM;
346339 }
347
-
348340 memset(ctx->iv, 0, crypto_skcipher_ivsize(tfm));
349341
350342 INIT_LIST_HEAD(&ctx->tsgl_list);
351343 ctx->len = len;
352
- ctx->used = 0;
353
- atomic_set(&ctx->rcvused, 0);
354
- ctx->more = 0;
355
- ctx->merge = 0;
356
- ctx->enc = 0;
357344 crypto_init_wait(&ctx->wait);
358345
359346 ask->private = ctx;