Author: jhb
Date: Wed Aug 26 21:28:47 2020
New Revision: 364840
URL: https://svnweb.freebsd.org/changeset/base/364840

Log:
  Add freebsd32 compat support for CIOCCRYPTAEAD.
  
  Reviewed by:  markj (earlier version)
  Sponsored by: Netflix
  Differential Revision:        https://reviews.freebsd.org/D26179

Modified:
  head/sys/opencrypto/cryptodev.c

Modified: head/sys/opencrypto/cryptodev.c
==============================================================================
--- head/sys/opencrypto/cryptodev.c     Wed Aug 26 21:19:05 2020        
(r364839)
+++ head/sys/opencrypto/cryptodev.c     Wed Aug 26 21:28:47 2020        
(r364840)
@@ -103,6 +103,20 @@ struct crypt_op32 {
        u_int32_t       iv;
 };
 
+struct crypt_aead32 {
+       u_int32_t       ses;
+       u_int16_t       op;
+       u_int16_t       flags;
+       u_int           len;
+       u_int           aadlen;
+       u_int           ivlen;
+       u_int32_t       src;
+       u_int32_t       dst;
+       u_int32_t       aad;
+       u_int32_t       tag;
+       u_int32_t       iv;
+};
+
 struct crparam32 {
        u_int32_t       crp_p;
        u_int           crp_nbits;
@@ -122,6 +136,7 @@ struct crypt_kop32 {
 #define        CIOCKEY32       _IOWR('c', 104, struct crypt_kop32)
 #define        CIOCGSESSION232 _IOWR('c', 106, struct session2_op32)
 #define        CIOCKEY232      _IOWR('c', 107, struct crypt_kop32)
+#define        CIOCCRYPTAEAD32 _IOWR('c', 109, struct crypt_aead32)
 
 static void
 session_op_from_32(const struct session_op32 *from, struct session2_op *to)
@@ -196,6 +211,40 @@ crypt_op_to_32(const struct crypt_op *from, struct cry
 }
 
 static void
+crypt_aead_from_32(const struct crypt_aead32 *from, struct crypt_aead *to)
+{
+
+       CP(*from, *to, ses);
+       CP(*from, *to, op);
+       CP(*from, *to, flags);
+       CP(*from, *to, len);
+       CP(*from, *to, aadlen);
+       CP(*from, *to, ivlen);
+       PTRIN_CP(*from, *to, src);
+       PTRIN_CP(*from, *to, dst);
+       PTRIN_CP(*from, *to, aad);
+       PTRIN_CP(*from, *to, tag);
+       PTRIN_CP(*from, *to, iv);
+}
+
+static void
+crypt_aead_to_32(const struct crypt_aead *from, struct crypt_aead32 *to)
+{
+
+       CP(*from, *to, ses);
+       CP(*from, *to, op);
+       CP(*from, *to, flags);
+       CP(*from, *to, len);
+       CP(*from, *to, aadlen);
+       CP(*from, *to, ivlen);
+       PTROUT_CP(*from, *to, src);
+       PTROUT_CP(*from, *to, dst);
+       PTROUT_CP(*from, *to, aad);
+       PTROUT_CP(*from, *to, tag);
+       PTROUT_CP(*from, *to, iv);
+}
+
+static void
 crparam_from_32(const struct crparam32 *from, struct crparam *to)
 {
 
@@ -388,6 +437,7 @@ cryptof_ioctl(
                struct session2_op sopc;
 #ifdef COMPAT_FREEBSD32
                struct crypt_op copc;
+               struct crypt_aead aeadc;
                struct crypt_kop kopc;
 #endif
        };
@@ -419,6 +469,13 @@ cryptof_ioctl(
                data = &copc;
                crypt_op_from_32((struct crypt_op32 *)data32, &copc);
                break;
+       case CIOCCRYPTAEAD32:
+               cmd32 = cmd;
+               data32 = data;
+               cmd = CIOCCRYPTAEAD;
+               data = &aeadc;
+               crypt_aead_from_32((struct crypt_aead32 *)data32, &aeadc);
+               break;
        case CIOCKEY32:
        case CIOCKEY232:
                cmd32 = cmd;
@@ -822,6 +879,10 @@ bail:
        case CIOCCRYPT32:
                if (error == 0)
                        crypt_op_to_32(data, data32);
+               break;
+       case CIOCCRYPTAEAD32:
+               if (error == 0)
+                       crypt_aead_to_32(data, data32);
                break;
        case CIOCKEY32:
        case CIOCKEY232:
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to