]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/commitdiff
Merge git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6
authorLinus Torvalds <torvalds@woody.linux-foundation.org>
Thu, 6 Mar 2008 16:14:18 +0000 (08:14 -0800)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Thu, 6 Mar 2008 16:14:18 +0000 (08:14 -0800)
* git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6:
  [CRYPTO] xcbc: Fix crash with IPsec
  [CRYPTO] xts: Use proper alignment
  [CRYPTO] digest: Include internal.h for prototypes
  [CRYPTO] authenc: Add missing Kconfig dependency on BLKCIPHER
  [CRYPTO] skcipher: Move chainiv/seqiv into crypto_blkcipher module

crypto/Kconfig
crypto/Makefile
crypto/ablkcipher.c
crypto/blkcipher.c
crypto/chainiv.c
crypto/digest.c
crypto/eseqiv.c
crypto/xcbc.c
crypto/xts.c
include/crypto/internal/skcipher.h

index 898acc5c1967b5d700901a8acf9a15b00f079049..69f1be6816f7cc6740ff206cf173e12feac7450e 100644 (file)
@@ -575,6 +575,7 @@ config CRYPTO_TEST
 config CRYPTO_AUTHENC
        tristate "Authenc support"
        select CRYPTO_AEAD
+       select CRYPTO_BLKCIPHER
        select CRYPTO_MANAGER
        select CRYPTO_HASH
        help
index 48c7583799541045751655aa6de6af80fed70ae9..7cf36253a75ee3b898e61c24a7a9c524cb524495 100644 (file)
@@ -12,9 +12,9 @@ obj-$(CONFIG_CRYPTO_AEAD) += aead.o
 
 crypto_blkcipher-objs := ablkcipher.o
 crypto_blkcipher-objs += blkcipher.o
+crypto_blkcipher-objs += chainiv.o
+crypto_blkcipher-objs += eseqiv.o
 obj-$(CONFIG_CRYPTO_BLKCIPHER) += crypto_blkcipher.o
-obj-$(CONFIG_CRYPTO_BLKCIPHER) += chainiv.o
-obj-$(CONFIG_CRYPTO_BLKCIPHER) += eseqiv.o
 obj-$(CONFIG_CRYPTO_SEQIV) += seqiv.o
 
 crypto_hash-objs := hash.o
index 3bcb099b4a85bd779d752f7d42868c48cb07d87a..94140b3756fcd598d49179deac34ed5a80a83ed5 100644 (file)
@@ -341,6 +341,3 @@ err:
        return ERR_PTR(err);
 }
 EXPORT_SYMBOL_GPL(crypto_alloc_ablkcipher);
-
-MODULE_LICENSE("GPL");
-MODULE_DESCRIPTION("Asynchronous block chaining cipher type");
index 4a7e65c4df4dc3ac6af007efa1d136e1232be053..185f955fb0d7f79770b7765660bd1a9cbbcfab2e 100644 (file)
@@ -696,5 +696,34 @@ void skcipher_geniv_exit(struct crypto_tfm *tfm)
 }
 EXPORT_SYMBOL_GPL(skcipher_geniv_exit);
 
+static int __init blkcipher_module_init(void)
+{
+       int err;
+
+       err = chainiv_module_init();
+       if (err)
+               goto out;
+
+       err = eseqiv_module_init();
+       if (err)
+               goto eseqiv_err;
+
+out:
+       return err;
+
+eseqiv_err:
+       chainiv_module_exit();
+       goto out;
+}
+
+static void __exit blkcipher_module_exit(void)
+{
+       eseqiv_module_exit();
+       chainiv_module_exit();
+}
+
+module_init(blkcipher_module_init);
+module_exit(blkcipher_module_exit);
+
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("Generic block chaining cipher type");
index d17fa0454dc30259baa69a111ff60f929311894e..0a7cac6e90891c3f7e77a5b2645e160f4fc7b1b2 100644 (file)
@@ -314,18 +314,14 @@ static struct crypto_template chainiv_tmpl = {
        .module = THIS_MODULE,
 };
 
-static int __init chainiv_module_init(void)
+int __init chainiv_module_init(void)
 {
        return crypto_register_template(&chainiv_tmpl);
 }
+EXPORT_SYMBOL_GPL(chainiv_module_init);
 
-static void __exit chainiv_module_exit(void)
+void __exit chainiv_module_exit(void)
 {
        crypto_unregister_template(&chainiv_tmpl);
 }
-
-module_init(chainiv_module_init);
-module_exit(chainiv_module_exit);
-
-MODULE_LICENSE("GPL");
-MODULE_DESCRIPTION("Chain IV Generator");
+EXPORT_SYMBOL_GPL(chainiv_module_exit);
index 6fd43bddd545e788546d868b097e3ad811867e76..b526cc348b79313e21bea12808976f392b5505a8 100644 (file)
@@ -21,6 +21,8 @@
 #include <linux/module.h>
 #include <linux/scatterlist.h>
 
+#include "internal.h"
+
 static int init(struct hash_desc *desc)
 {
        struct crypto_tfm *tfm = crypto_hash_tfm(desc->tfm);
index eb90d27ae118e0b79bc2d24daf94b476a4f89075..6f2cd063b6fef51e636cd5f55aef02902b800aea 100644 (file)
@@ -247,18 +247,14 @@ static struct crypto_template eseqiv_tmpl = {
        .module = THIS_MODULE,
 };
 
-static int __init eseqiv_module_init(void)
+int __init eseqiv_module_init(void)
 {
        return crypto_register_template(&eseqiv_tmpl);
 }
+EXPORT_SYMBOL_GPL(eseqiv_module_init);
 
-static void __exit eseqiv_module_exit(void)
+void __exit eseqiv_module_exit(void)
 {
        crypto_unregister_template(&eseqiv_tmpl);
 }
-
-module_init(eseqiv_module_init);
-module_exit(eseqiv_module_exit);
-
-MODULE_LICENSE("GPL");
-MODULE_DESCRIPTION("Encrypted Sequence Number IV Generator");
+EXPORT_SYMBOL_GPL(eseqiv_module_exit);
index 86727403e5ab1f0e5e7bbd15f3703046f4390548..2feb0f239c38179c579cbead01e7fe168d4ea0dd 100644 (file)
@@ -124,6 +124,11 @@ static int crypto_xcbc_digest_update2(struct hash_desc *pdesc,
                unsigned int offset = sg[i].offset;
                unsigned int slen = sg[i].length;
 
+               if (unlikely(slen > nbytes))
+                       slen = nbytes;
+
+               nbytes -= slen;
+
                while (slen > 0) {
                        unsigned int len = min(slen, ((unsigned int)(PAGE_SIZE)) - offset);
                        char *p = crypto_kmap(pg, 0) + offset;
@@ -177,7 +182,6 @@ static int crypto_xcbc_digest_update2(struct hash_desc *pdesc,
                        offset = 0;
                        pg++;
                }
-               nbytes-=sg[i].length;
                i++;
        } while (nbytes>0);
 
index 8eb08bfaf7c099cc5b4dd0e06cbd48eb4f381c26..d87b0f3102c322337e38a8c67b8d7b0f0a69e661 100644 (file)
@@ -77,16 +77,16 @@ static int setkey(struct crypto_tfm *parent, const u8 *key,
 }
 
 struct sinfo {
-       be128 t;
+       be128 *t;
        struct crypto_tfm *tfm;
        void (*fn)(struct crypto_tfm *, u8 *, const u8 *);
 };
 
 static inline void xts_round(struct sinfo *s, void *dst, const void *src)
 {
-       be128_xor(dst, &s->t, src);             /* PP <- T xor P */
+       be128_xor(dst, s->t, src);              /* PP <- T xor P */
        s->fn(s->tfm, dst, dst);                /* CC <- E(Key1,PP) */
-       be128_xor(dst, dst, &s->t);             /* C <- T xor CC */
+       be128_xor(dst, dst, s->t);              /* C <- T xor CC */
 }
 
 static int crypt(struct blkcipher_desc *d,
@@ -101,7 +101,6 @@ static int crypt(struct blkcipher_desc *d,
                .tfm = crypto_cipher_tfm(ctx->child),
                .fn = fn
        };
-       be128 *iv;
        u8 *wsrc;
        u8 *wdst;
 
@@ -109,20 +108,20 @@ static int crypt(struct blkcipher_desc *d,
        if (!w->nbytes)
                return err;
 
+       s.t = (be128 *)w->iv;
        avail = w->nbytes;
 
        wsrc = w->src.virt.addr;
        wdst = w->dst.virt.addr;
 
        /* calculate first value of T */
-       iv = (be128 *)w->iv;
-       tw(crypto_cipher_tfm(ctx->tweak), (void *)&s.t, w->iv);
+       tw(crypto_cipher_tfm(ctx->tweak), w->iv, w->iv);
 
        goto first;
 
        for (;;) {
                do {
-                       gf128mul_x_ble(&s.t, &s.t);
+                       gf128mul_x_ble(s.t, s.t);
 
 first:
                        xts_round(&s, wdst, wsrc);
index 2ba42cd7d6aa4c4fa708ba2733b6a20a59c3c526..a8f12644a13c73f6a7044ca0d1d206ca0b0565d9 100644 (file)
@@ -15,6 +15,7 @@
 
 #include <crypto/algapi.h>
 #include <crypto/skcipher.h>
+#include <linux/init.h>
 #include <linux/types.h>
 
 struct rtattr;
@@ -64,6 +65,11 @@ void skcipher_geniv_free(struct crypto_instance *inst);
 int skcipher_geniv_init(struct crypto_tfm *tfm);
 void skcipher_geniv_exit(struct crypto_tfm *tfm);
 
+int __init eseqiv_module_init(void);
+void __exit eseqiv_module_exit(void);
+int __init chainiv_module_init(void);
+void __exit chainiv_module_exit(void);
+
 static inline struct crypto_ablkcipher *skcipher_geniv_cipher(
        struct crypto_ablkcipher *geniv)
 {