Page MenuHomeFreeBSD

D17307.diff
No OneTemporary

D17307.diff

Index: head/sys/opencrypto/cryptosoft.h
===================================================================
--- head/sys/opencrypto/cryptosoft.h
+++ head/sys/opencrypto/cryptosoft.h
@@ -58,6 +58,7 @@
};
struct swcr_session {
+ struct mtx swcr_lock;
struct swcr_data swcr_algorithms[2];
unsigned swcr_nalgs;
};
Index: head/sys/opencrypto/cryptosoft.c
===================================================================
--- head/sys/opencrypto/cryptosoft.c
+++ head/sys/opencrypto/cryptosoft.c
@@ -45,6 +45,7 @@
#include <sys/rwlock.h>
#include <sys/endian.h>
#include <sys/limits.h>
+#include <sys/mutex.h>
#include <crypto/blowfish/blowfish.h>
#include <crypto/sha1.h>
@@ -765,6 +766,7 @@
return EINVAL;
ses = crypto_get_driver_session(cses);
+ mtx_init(&ses->swcr_lock, "swcr session lock", NULL, MTX_DEF);
for (i = 0; cri != NULL && i < nitems(ses->swcr_algorithms); i++) {
swd = &ses->swcr_algorithms[i];
@@ -1022,6 +1024,7 @@
ses = crypto_get_driver_session(cses);
+ mtx_destroy(&ses->swcr_lock);
for (i = 0; i < nitems(ses->swcr_algorithms); i++) {
swd = &ses->swcr_algorithms[i];
@@ -1109,7 +1112,7 @@
static int
swcr_process(device_t dev, struct cryptop *crp, int hint)
{
- struct swcr_session *ses;
+ struct swcr_session *ses = NULL;
struct cryptodesc *crd;
struct swcr_data *sw;
size_t i;
@@ -1124,6 +1127,7 @@
}
ses = crypto_get_driver_session(crp->crp_session);
+ mtx_lock(&ses->swcr_lock);
/* Go through crypto descriptors, processing as we go */
for (crd = crp->crp_desc; crd; crd = crd->crd_next) {
@@ -1213,6 +1217,8 @@
}
done:
+ if (ses)
+ mtx_unlock(&ses->swcr_lock);
crypto_done(crp);
return 0;
}

File Metadata

Mime Type
text/plain
Expires
Sun, Oct 12, 9:32 PM (7 h, 27 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
23641934
Default Alt Text
D17307.diff (1 KB)

Event Timeline