--- /dev/null
+diff -ur openssl-0.9.8k/crypto/engine/eng_all.c openssl-0.9.8k.new/crypto/engine/eng_all.c
+--- openssl-0.9.8k/crypto/engine/eng_all.c 2008-06-04 21:01:39.000000000 +0300
++++ openssl-0.9.8k.new/crypto/engine/eng_all.c 2009-11-24 13:41:49.000000000 +0200
+@@ -104,16 +104,15 @@
+ #endif
+ #endif
+ #ifndef OPENSSL_NO_HW
+-#if defined(__OpenBSD__) || defined(__FreeBSD__)
++# if (OpenBSD >= 200112) || ((__FreeBSD_version >= 470101 && __FreeBSD_version < 500000) || __FreeBSD_version >= 500041) || defined(__linux__)
+ ENGINE_load_cryptodev();
+-#endif
++# endif
+ #if defined(OPENSSL_SYS_WIN32) && !defined(OPENSSL_NO_CAPIENG)
+ ENGINE_load_capi();
+ #endif
+ #endif
+ }
+
+-#if defined(__OpenBSD__) || defined(__FreeBSD__)
+ void ENGINE_setup_bsd_cryptodev(void) {
+ static int bsd_cryptodev_default_loaded = 0;
+ if (!bsd_cryptodev_default_loaded) {
+@@ -122,4 +121,3 @@
+ }
+ bsd_cryptodev_default_loaded=1;
+ }
+-#endif
+diff -ur openssl-0.9.8k/crypto/engine/eng_cryptodev.c openssl-0.9.8k.new/crypto/engine/eng_cryptodev.c
+--- openssl-0.9.8k/crypto/engine/eng_cryptodev.c 2004-06-15 14:45:42.000000000 +0300
++++ openssl-0.9.8k.new/crypto/engine/eng_cryptodev.c 2009-11-24 13:45:31.000000000 +0200
+@@ -34,14 +34,15 @@
+ #if (defined(__unix__) || defined(unix)) && !defined(USG) && \
+ (defined(OpenBSD) || defined(__FreeBSD_version))
+ #include <sys/param.h>
+-# if (OpenBSD >= 200112) || ((__FreeBSD_version >= 470101 && __FreeBSD_version < 500000) || __FreeBSD_version >= 500041)
+-# define HAVE_CRYPTODEV
+-# endif
+ # if (OpenBSD >= 200110)
+ # define HAVE_SYSLOG_R
+ # endif
+ #endif
+
++#if (OpenBSD >= 200112) || ((__FreeBSD_version >= 470101 && __FreeBSD_version < 500000) || __FreeBSD_version >= 500041) || defined(__linux__)
++# define HAVE_CRYPTODEV
++#endif
++
+ #ifndef HAVE_CRYPTODEV
+
+ void
+@@ -54,7 +55,12 @@
+ #else
+
+ #include <sys/types.h>
+-#include <crypto/cryptodev.h>
++#if defined(__linux__)
++# include <linux/cryptodev.h>
++# define HAVE_CRYPTODEV_NAME
++#else
++# include <crypto/cryptodev.h>
++#endif
+ #include <sys/ioctl.h>
+ #include <errno.h>
+ #include <stdio.h>
+@@ -77,7 +83,11 @@
+ static int get_dev_crypto(void);
+ static int cryptodev_max_iv(int cipher);
+ static int cryptodev_key_length_valid(int cipher, int len);
+-static int cipher_nid_to_cryptodev(int nid);
++#ifndef HAVE_CRYPTODEV_NAME
++ static int cipher_nid_to_cryptodev(int nid);
++#else
++ static char *cipher_nid_to_cryptodev_name(int nid);
++#endif
+ static int get_cryptodev_ciphers(const int **cnids);
+ static int get_cryptodev_digests(const int **cnids);
+ static int cryptodev_usable_ciphers(const int **nids);
+diff -ur openssl-0.9.8k/crypto/engine/engine.h openssl-0.9.8k.new/crypto/engine/engine.h
+--- openssl-0.9.8k/crypto/engine/engine.h 2008-06-04 21:01:40.000000000 +0300
++++ openssl-0.9.8k.new/crypto/engine/engine.h 2009-11-24 13:41:49.000000000 +0200
+@@ -703,9 +703,7 @@
+ * values. */
+ void *ENGINE_get_static_state(void);
+
+-#if defined(__OpenBSD__) || defined(__FreeBSD__)
+ void ENGINE_setup_bsd_cryptodev(void);
+-#endif
+
+ /* BEGIN ERROR CODES */
+ /* The following lines are auto generated by the script mkerr.pl. Any changes
+diff -ur openssl-0.9.8k/crypto/evp/c_all.c openssl-0.9.8k.new/crypto/evp/c_all.c
+--- openssl-0.9.8k/crypto/evp/c_all.c 2004-08-29 19:36:04.000000000 +0300
++++ openssl-0.9.8k.new/crypto/evp/c_all.c 2009-11-24 13:41:49.000000000 +0200
+@@ -83,8 +83,6 @@
+ OpenSSL_add_all_ciphers();
+ OpenSSL_add_all_digests();
+ #ifndef OPENSSL_NO_ENGINE
+-# if defined(__OpenBSD__) || defined(__FreeBSD__)
+ ENGINE_setup_bsd_cryptodev();
+-# endif
+ #endif
+ }