2008-02-20 11:24:30

by Milan Broz

[permalink] [raw]
Subject: Re: 2.6.25-rc[1,2]: failed to setup dm-crypt key mapping

Michael S. Tsirkin wrote:
> I am booting a thinkpad T60p off of an encrypted disk (with crypto
> modules in initramfs).
> This works fine in 2.6.24, but in both 2.6.25-rc1 and 2.6.25-rc2
> won't boot with the following messages on the console
> (copied by hand, sorry about typos):
> device-mapper: table: 254:0:crypt
> Error allocating crypto tfm
> Failed to setup dm_crypt key mapping.
> check kernel for support for the aes-cbc-essiv:sha256
> cipher spec and verify that /dev/sda6 contains at least 133 sectors.
> Failed to read from storage.
>
> git bisec points to the following commit:
>
> commit 3a7f6c990ad04e6f576a159876c602d14d6f7fef
> dm crypt: use async crypto
>
> Reverting commit 3a7f6c990ad04e6f576a159876c602d14d6f7fef
> on top of 2.6.25-rc2 results in a bootable configuration for me.
>
> .config attached.

It seems that some module dependency was lost,
dm-crypt with async crypto depends now on crypto_blkcipher module
for this configuration.

Herbert, any following change required for dm-crypt or it is only
crypto subsystem issue?
(With old kernel/dm-crypt it loads "blkcipher" not "crypto_blkcipher",
maybe some initramdisk change required too...)

Milan
--
[email protected]


2008-02-20 17:25:28

by Herbert Xu

[permalink] [raw]
Subject: Re: 2.6.25-rc[1,2]: failed to setup dm-crypt key mapping

On Wed, Feb 20, 2008 at 12:23:21PM +0100, Milan Broz wrote:
>
> It seems that some module dependency was lost,
> dm-crypt with async crypto depends now on crypto_blkcipher module
> for this configuration.
>
> Herbert, any following change required for dm-crypt or it is only
> crypto subsystem issue?
> (With old kernel/dm-crypt it loads "blkcipher" not "crypto_blkcipher",
> maybe some initramdisk change required too...)

Right blkcipher was renamed to crypto_blkcipher due to the merge
of blkcipher/ablkcipher. If this is causing a problem with the
initramfs then we need to fix the initramfs tools to look at the
actual dependencies rather than hard-coding it.

Cheers,
--
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

2008-02-20 17:48:58

by Milan Broz

[permalink] [raw]
Subject: Re: 2.6.25-rc[1,2]: failed to setup dm-crypt key mapping

Herbert Xu wrote:
> On Wed, Feb 20, 2008 at 12:23:21PM +0100, Milan Broz wrote:
>> It seems that some module dependency was lost,
>> dm-crypt with async crypto depends now on crypto_blkcipher module
>> for this configuration.
>>
>> Herbert, any following change required for dm-crypt or it is only
>> crypto subsystem issue?
>> (With old kernel/dm-crypt it loads "blkcipher" not "crypto_blkcipher",
>> maybe some initramdisk change required too...)
>
> Right blkcipher was renamed to crypto_blkcipher due to the merge
> of blkcipher/ablkcipher. If this is causing a problem with the
> initramfs then we need to fix the initramfs tools to look at the
> actual dependencies rather than hard-coding it.

I just tested one affected configuration and problem was in missing
"chainiv.ko" module on ramdisk.

Milan
--
[email protected]

2008-02-20 17:58:39

by Herbert Xu

[permalink] [raw]
Subject: Re: 2.6.25-rc[1,2]: failed to setup dm-crypt key mapping

On Wed, Feb 20, 2008 at 06:47:58PM +0100, Milan Broz wrote:
>
> I just tested one affected configuration and problem was in missing
> "chainiv.ko" module on ramdisk.

Ah OK. We probably should merge chainiv into the blkcipher
module too since it's the default IV generator. I'll take
care of it.

Thanks,
--
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

2008-02-20 20:29:59

by Michael S. Tsirkin

[permalink] [raw]
Subject: Re: 2.6.25-rc[1,2]: failed to setup dm-crypt key mapping

On Feb 20, 2008 7:58 PM, Herbert Xu <[email protected]> wrote:
> On Wed, Feb 20, 2008 at 06:47:58PM +0100, Milan Broz wrote:
> >
> > I just tested one affected configuration and problem was in missing
> > "chainiv.ko" module on ramdisk.
>
> Ah OK. We probably should merge chainiv into the blkcipher
> module too since it's the default IV generator. I'll take
> care of it.

Right. Manually adding chainiv.ko to initramfs makes it boot again.

2008-02-22 12:34:49

by Herbert Xu

[permalink] [raw]
Subject: Re: 2.6.25-rc[1,2]: failed to setup dm-crypt key mapping

On Thu, Feb 21, 2008 at 01:58:19AM +0800, Herbert Xu wrote:
> On Wed, Feb 20, 2008 at 06:47:58PM +0100, Milan Broz wrote:
> >
> > I just tested one affected configuration and problem was in missing
> > "chainiv.ko" module on ramdisk.
>
> Ah OK. We probably should merge chainiv into the blkcipher
> module too since it's the default IV generator. I'll take
> care of it.

Does this patch fix the problem?

Thanks,
--
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
--
diff --git a/crypto/Makefile b/crypto/Makefile
index 48c7583..7cf3625 100644
--- a/crypto/Makefile
+++ b/crypto/Makefile
@@ -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
diff --git a/crypto/ablkcipher.c b/crypto/ablkcipher.c
index 3bcb099..94140b3 100644
--- a/crypto/ablkcipher.c
+++ b/crypto/ablkcipher.c
@@ -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");
diff --git a/crypto/blkcipher.c b/crypto/blkcipher.c
index 4a7e65c..185f955 100644
--- a/crypto/blkcipher.c
+++ b/crypto/blkcipher.c
@@ -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");
diff --git a/crypto/chainiv.c b/crypto/chainiv.c
index d17fa04..0a7cac6 100644
--- a/crypto/chainiv.c
+++ b/crypto/chainiv.c
@@ -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);
diff --git a/crypto/eseqiv.c b/crypto/eseqiv.c
index eb90d27..6f2cd06 100644
--- a/crypto/eseqiv.c
+++ b/crypto/eseqiv.c
@@ -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);
diff --git a/include/crypto/internal/skcipher.h b/include/crypto/internal/skcipher.h
index 2ba42cd..a8f1264 100644
--- a/include/crypto/internal/skcipher.h
+++ b/include/crypto/internal/skcipher.h
@@ -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)
{

2008-02-25 19:17:04

by Jan Niehusmann

[permalink] [raw]
Subject: Re: 2.6.25-rc[1,2]: failed to setup dm-crypt key mapping

On Fri, Feb 22, 2008 at 08:34:23PM +0800, Herbert Xu wrote:
> Does this patch fix the problem?

It does fix the problem on my system.

Jan

2008-03-07 18:14:23

by Dan Williams

[permalink] [raw]
Subject: Re: 2.6.25-rc[1,2]: failed to setup dm-crypt key mapping

On Fri, Feb 22, 2008 at 5:34 AM, Herbert Xu <[email protected]> wrote:
> Does this patch fix the problem?
[..]

I believe this is in mainline as 76fc60a2 "[CRYPTO] skcipher: Move
chainiv/seqiv into crypto_blkcipher module". With a iop13xx_defconfig
I get:

`chainiv_module_exit' referenced in section `.init.text' of
crypto/built-in.o: defined in discarded section `.exit.text' of
crypto/built-in.o
`chainiv_module_exit' referenced in section `__ksymtab_gpl' of
crypto/built-in.o: defined in discarded section `.exit.text' of
crypto/built-in.o
`eseqiv_module_exit' referenced in section `__ksymtab_gpl' of
crypto/built-in.o: defined in discarded section `.exit.text' of
crypto/built-in.o
make: *** [.tmp_vmlinux1] Error 1

Reverting this (git show 76fc60a2 | patch -p1 -R) gets me back to a
working build.:

arm-none-linux-gnueabi-gcc --version
arm-none-linux-gnueabi-gcc (CodeSourcery Sourcery G++ Lite 2007q1-21)
4.2.0 20070413 (prerelease)

--
Dan

2008-03-07 18:18:49

by Luck, Tony

[permalink] [raw]
Subject: Re: 2.6.25-rc[1,2]: failed to setup dm-crypt key mapping

On Fri, Feb 22, 2008 at 4:34 AM, Herbert Xu
<[email protected]> wrote:
> Does this patch fix the problem?
...
> diff --git a/include/crypto/internal/skcipher.h b/include/crypto/internal/skcipher.h
> index 2ba42cd..a8f1264 100644
> --- a/include/crypto/internal/skcipher.h
> +++ b/include/crypto/internal/skcipher.h
...
> +int __init eseqiv_module_init(void);
> +void __exit eseqiv_module_exit(void);
> +int __init chainiv_module_init(void);
> +void __exit chainiv_module_exit(void);

The zx1_defconfig in ia64 tree has CONFIG_CRYPTO_BLK_CONFIG=y ... making
these symbols not only causes build warnings:
chainiv_module_exit' referenced in section `.init.text' of
crypto/built-in.o: defined in discarded section `.exit.text'
eseqiv_module_exit' referenced in section `__ksymtab_gpl' of
crypto/built-in.o: defined in discarded section `.exit.text'

it also manages to make my "ld" dump core!

-Tony

2008-03-08 01:25:29

by Herbert Xu

[permalink] [raw]
Subject: Re: 2.6.25-rc[1,2]: failed to setup dm-crypt key mapping

On Fri, Mar 07, 2008 at 11:14:07AM -0700, Dan Williams wrote:
>
> I believe this is in mainline as 76fc60a2 "[CRYPTO] skcipher: Move
> chainiv/seqiv into crypto_blkcipher module". With a iop13xx_defconfig
> I get:
>
> `chainiv_module_exit' referenced in section `.init.text' of
> crypto/built-in.o: defined in discarded section `.exit.text' of
> crypto/built-in.o
> `chainiv_module_exit' referenced in section `__ksymtab_gpl' of
> crypto/built-in.o: defined in discarded section `.exit.text' of
> crypto/built-in.o
> `eseqiv_module_exit' referenced in section `__ksymtab_gpl' of
> crypto/built-in.o: defined in discarded section `.exit.text' of
> crypto/built-in.o
> make: *** [.tmp_vmlinux1] Error 1

Does this help?

Thanks,
--
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
--
diff --git a/crypto/chainiv.c b/crypto/chainiv.c
index 0a7cac6..a23e1ce 100644
--- a/crypto/chainiv.c
+++ b/crypto/chainiv.c
@@ -320,7 +320,7 @@ int __init chainiv_module_init(void)
}
EXPORT_SYMBOL_GPL(chainiv_module_init);

-void __exit chainiv_module_exit(void)
+void chainiv_module_exit(void)
{
crypto_unregister_template(&chainiv_tmpl);
}
diff --git a/include/crypto/internal/skcipher.h b/include/crypto/internal/skcipher.h
index a8f1264..ccc32ba 100644
--- a/include/crypto/internal/skcipher.h
+++ b/include/crypto/internal/skcipher.h
@@ -68,7 +68,7 @@ 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);
+void chainiv_module_exit(void);

static inline struct crypto_ablkcipher *skcipher_geniv_cipher(
struct crypto_ablkcipher *geniv)

2008-03-08 03:42:58

by Dan Williams

[permalink] [raw]
Subject: Re: 2.6.25-rc[1,2]: failed to setup dm-crypt key mapping

On Fri, 2008-03-07 at 18:24 -0700, Herbert Xu wrote:
> On Fri, Mar 07, 2008 at 11:14:07AM -0700, Dan Williams wrote:
> >
> > I believe this is in mainline as 76fc60a2 "[CRYPTO] skcipher: Move
> > chainiv/seqiv into crypto_blkcipher module". With a iop13xx_defconfig
> > I get:
> >
> > `chainiv_module_exit' referenced in section `.init.text' of
> > crypto/built-in.o: defined in discarded section `.exit.text' of
> > crypto/built-in.o
> > `chainiv_module_exit' referenced in section `__ksymtab_gpl' of
> > crypto/built-in.o: defined in discarded section `.exit.text' of
> > crypto/built-in.o
> > `eseqiv_module_exit' referenced in section `__ksymtab_gpl' of
> > crypto/built-in.o: defined in discarded section `.exit.text' of
> > crypto/built-in.o
> > make: *** [.tmp_vmlinux1] Error 1
>
> Does this help?
>
Yup, and doing the same for eseqiv_module_exit completes the fix.

LD arch/arm/boot/compressed/vmlinux
OBJCOPY arch/arm/boot/zImage
Kernel: arch/arm/boot/zImage is ready

Thanks,
Dan

2008-03-08 12:29:21

by Herbert Xu

[permalink] [raw]
Subject: Re: 2.6.25-rc[1,2]: failed to setup dm-crypt key mapping

On Fri, Mar 07, 2008 at 08:42:44PM -0700, Dan Williams wrote:
> On Fri, 2008-03-07 at 18:24 -0700, Herbert Xu wrote:
> > On Fri, Mar 07, 2008 at 11:14:07AM -0700, Dan Williams wrote:
> > >
> > > I believe this is in mainline as 76fc60a2 "[CRYPTO] skcipher: Move
> > > chainiv/seqiv into crypto_blkcipher module". With a iop13xx_defconfig
> > > I get:
> > >
> > > `chainiv_module_exit' referenced in section `.init.text' of
> > > crypto/built-in.o: defined in discarded section `.exit.text' of
> > > crypto/built-in.o
> > > `chainiv_module_exit' referenced in section `__ksymtab_gpl' of
> > > crypto/built-in.o: defined in discarded section `.exit.text' of
> > > crypto/built-in.o
> > > `eseqiv_module_exit' referenced in section `__ksymtab_gpl' of
> > > crypto/built-in.o: defined in discarded section `.exit.text' of
> > > crypto/built-in.o
> > > make: *** [.tmp_vmlinux1] Error 1
> >
> > Does this help?
> >
> Yup, and doing the same for eseqiv_module_exit completes the fix.
>
> LD arch/arm/boot/compressed/vmlinux
> OBJCOPY arch/arm/boot/zImage
> Kernel: arch/arm/boot/zImage is ready

Oh right I should remove the exports since they're in the same
module.

Cheers,
--
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt