diff options
Diffstat (limited to 'engines/e_devcrypto.c')
-rw-r--r-- | engines/e_devcrypto.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/engines/e_devcrypto.c b/engines/e_devcrypto.c index d54ca3bbc1..6715ef408e 100644 --- a/engines/e_devcrypto.c +++ b/engines/e_devcrypto.c @@ -1172,10 +1172,12 @@ static int devcrypto_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f) (void)) */ static int open_devcrypto(void) { + int fd; + if (cfd >= 0) return 1; - if ((cfd = open("/dev/crypto", O_RDWR, 0)) < 0) { + if ((fd = open("/dev/crypto", O_RDWR, 0)) < 0) { #ifndef ENGINE_DEVCRYPTO_DEBUG if (errno != ENOENT) #endif @@ -1183,6 +1185,16 @@ static int open_devcrypto(void) return 0; } +#ifdef CRIOGET + if (ioctl(fd, CRIOGET, &cfd) < 0) { + fprintf(stderr, "Could not create crypto fd: %s\n", strerror(errno)); + cfd = -1; + return 0; + } +#else + cfd = fd; +#endif + return 1; } |