2010-01-29 23:51:45

by Wolfgang Walter

[permalink] [raw]
Subject: 2.6.32: padlock_sha1 and hmac broken?

Hello,

I upgraded some machines with VIA processors from (vanilla) 2.6.31 to
2.6.32.7.

If I build the kernel 2.6.32.7 with CONFIG_CRYPTO_DEV_PADLOCK_SHA=y and
padlock supports sha, hmac(sha1) is missing and IPSEC with hmac(sha1) no
longer is possible.

If padlock does not support sha hmac(sha1) works.

If I build the kernel CONFIG_CRYPTO_DEV_PADLOCK_SHA=n hmac(sha1) works on all
padlocks (using sha1_generic).

**** Here is the /proc/cpuinfo and /proc/crypto for the case
CONFIG_CRYPTO_DEV_PADLOCK_SHA=y, padlock supports sha

===================================================================
processor : 0
vendor_id : CentaurHauls
cpu family : 6
model : 13
model name : VIA C7 Processor 1000MHz
stepping : 0
cpu MHz : 1000.021
cache size : 128 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 1
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge cmov pat clflush
acpi mmx fxsr sse sse2 tm nx pni est tm2 xtpr rng rng_en ace ace_en ace2
ace2_en phe phe_en pmm pmm_en
bogomips : 2000.37
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 32 bits virtual
power management:

===========

name : rfc3686(ctr(aes))
driver : rfc3686(ctr(aes-padlock))
module : kernel
priority : 300
refcnt : 1
selftest : passed
type : blkcipher
blocksize : 1
min keysize : 20
max keysize : 36
ivsize : 8
geniv : seqiv

name : ctr(aes)
driver : ctr(aes-padlock)
module : kernel
priority : 300
refcnt : 1
selftest : passed
type : blkcipher
blocksize : 1
min keysize : 16
max keysize : 32
ivsize : 16
geniv : chainiv

name : cbc(twofish)
driver : cbc(twofish-asm)
module : kernel
priority : 200
refcnt : 1
selftest : passed
type : blkcipher
blocksize : 16
min keysize : 16
max keysize : 32
ivsize : 16
geniv : <default>

name : cbc(camellia)
driver : cbc(camellia-generic)
module : kernel
priority : 100
refcnt : 1
selftest : passed
type : blkcipher
blocksize : 16
min keysize : 16
max keysize : 32
ivsize : 16
geniv : <default>

name : cbc(serpent)
driver : cbc(serpent-generic)
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : blkcipher
blocksize : 16
min keysize : 0
max keysize : 32
ivsize : 16
geniv : <default>

name : cbc(blowfish)
driver : cbc(blowfish-generic)
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : blkcipher
blocksize : 8
min keysize : 4
max keysize : 56
ivsize : 8
geniv : <default>

name : cbc(cast5)
driver : cbc(cast5-generic)
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : blkcipher
blocksize : 8
min keysize : 5
max keysize : 16
ivsize : 8
geniv : <default>

name : cbc(des3_ede)
driver : cbc(des3_ede-generic)
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : blkcipher
blocksize : 8
min keysize : 24
max keysize : 24
ivsize : 8
geniv : <default>

name : cbc(des)
driver : cbc(des-generic)
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : blkcipher
blocksize : 8
min keysize : 8
max keysize : 8
ivsize : 8
geniv : <default>

name : xcbc(aes)
driver : xcbc(aes-padlock)
module : kernel
priority : 300
refcnt : 1
selftest : passed
type : shash
blocksize : 16
digestsize : 16

name : hmac(rmd160)
driver : hmac(rmd160-generic)
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 20

name : hmac(md5)
driver : hmac(md5-generic)
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 16

name : sha256
driver : sha256-padlock
module : kernel
priority : 300
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 32

name : sha1
driver : sha1-padlock
module : kernel
priority : 300
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 20

name : cbc(aes)
driver : cbc-aes-padlock
module : kernel
priority : 400
refcnt : 1
selftest : passed
type : blkcipher
blocksize : 16
min keysize : 16
max keysize : 32
ivsize : 16
geniv : <default>

name : ecb(aes)
driver : ecb-aes-padlock
module : kernel
priority : 400
refcnt : 1
selftest : passed
type : blkcipher
blocksize : 16
min keysize : 16
max keysize : 32
ivsize : 0
geniv : <default>

name : aes
driver : aes-padlock
module : kernel
priority : 300
refcnt : 1
selftest : passed
type : cipher
blocksize : 16
min keysize : 16
max keysize : 32

name : ghash
driver : ghash-generic
module : kernel
priority : 100
refcnt : 1
selftest : passed
type : shash
blocksize : 16
digestsize : 16

name : stdrng
driver : ansi_cprng
module : kernel
priority : 100
refcnt : 1
selftest : passed
type : rng
seedsize : 48

name : stdrng
driver : krng
module : kernel
priority : 200
refcnt : 1
selftest : passed
type : rng
seedsize : 0

name : lzo
driver : lzo-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : compression

name : crc32c
driver : crc32c-generic
module : kernel
priority : 100
refcnt : 2
selftest : passed
type : shash
blocksize : 1
digestsize : 4

name : michael_mic
driver : michael_mic-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 8
digestsize : 8

name : zlib
driver : zlib-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : pcomp

name : deflate
driver : deflate-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : compression

name : salsa20
driver : salsa20-generic
module : kernel
priority : 100
refcnt : 1
selftest : passed
type : blkcipher
blocksize : 1
min keysize : 16
max keysize : 32
ivsize : 8
geniv : <default>

name : seed
driver : seed-generic
module : kernel
priority : 100
refcnt : 1
selftest : passed
type : cipher
blocksize : 16
min keysize : 16
max keysize : 16

name : anubis
driver : anubis-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : cipher
blocksize : 16
min keysize : 16
max keysize : 40

name : khazad
driver : khazad-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : cipher
blocksize : 8
min keysize : 16
max keysize : 16

name : xeta
driver : xeta-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : cipher
blocksize : 8
min keysize : 16
max keysize : 16

name : xtea
driver : xtea-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : cipher
blocksize : 8
min keysize : 16
max keysize : 16

name : tea
driver : tea-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : cipher
blocksize : 8
min keysize : 16
max keysize : 16

name : arc4
driver : arc4-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : cipher
blocksize : 1
min keysize : 1
max keysize : 256

name : cast6
driver : cast6-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : cipher
blocksize : 16
min keysize : 16
max keysize : 32

name : cast5
driver : cast5-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : cipher
blocksize : 8
min keysize : 5
max keysize : 16

name : camellia
driver : camellia-generic
module : kernel
priority : 100
refcnt : 1
selftest : passed
type : cipher
blocksize : 16
min keysize : 16
max keysize : 32

name : aes
driver : aes-generic
module : kernel
priority : 100
refcnt : 1
selftest : passed
type : cipher
blocksize : 16
min keysize : 16
max keysize : 32

name : tnepres
driver : tnepres-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : cipher
blocksize : 16
min keysize : 0
max keysize : 32

name : serpent
driver : serpent-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : cipher
blocksize : 16
min keysize : 0
max keysize : 32

name : twofish
driver : twofish-generic
module : kernel
priority : 100
refcnt : 1
selftest : passed
type : cipher
blocksize : 16
min keysize : 16
max keysize : 32

name : blowfish
driver : blowfish-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : cipher
blocksize : 8
min keysize : 4
max keysize : 56

name : fcrypt
driver : fcrypt-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : cipher
blocksize : 8
min keysize : 8
max keysize : 8

name : des3_ede
driver : des3_ede-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : cipher
blocksize : 8
min keysize : 24
max keysize : 24

name : des
driver : des-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : cipher
blocksize : 8
min keysize : 8
max keysize : 8

name : tgr128
driver : tgr128-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 16

name : tgr160
driver : tgr160-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 20

name : tgr192
driver : tgr192-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 24

name : wp256
driver : wp256-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 32

name : wp384
driver : wp384-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 48

name : wp512
driver : wp512-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 64

name : sha512
driver : sha512-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 128
digestsize : 64

name : sha384
driver : sha384-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 128
digestsize : 48

name : sha256
driver : sha256-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 32

name : sha224
driver : sha224-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 28

name : sha1
driver : sha1-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 20

name : rmd320
driver : rmd320-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 40

name : rmd256
driver : rmd256-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 32

name : rmd160
driver : rmd160-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 20

name : rmd128
driver : rmd128-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 16

name : md5
driver : md5-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 16

name : md4
driver : md4-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 16

name : compress_null
driver : compress_null-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : compression

name : digest_null
driver : digest_null-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 1
digestsize : 0

name : ecb(cipher_null)
driver : ecb-cipher_null
module : kernel
priority : 100
refcnt : 1
selftest : passed
type : blkcipher
blocksize : 1
min keysize : 0
max keysize : 0
ivsize : 0
geniv : <default>

name : cipher_null
driver : cipher_null-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : cipher
blocksize : 1
min keysize : 0
max keysize : 0

name : salsa20
driver : salsa20-asm
module : kernel
priority : 200
refcnt : 1
selftest : passed
type : blkcipher
blocksize : 1
min keysize : 16
max keysize : 32
ivsize : 8
geniv : <default>

name : twofish
driver : twofish-asm
module : kernel
priority : 200
refcnt : 1
selftest : passed
type : cipher
blocksize : 16
min keysize : 16
max keysize : 32

name : aes
driver : aes-asm
module : kernel
priority : 200
refcnt : 1
selftest : passed
type : cipher
blocksize : 16
min keysize : 16
max keysize : 32

===================================================================

**** Here is the /proc/crypto for the case CONFIG_CRYPTO_DEV_PADLOCK_SHA=n,
padlock supports sha

name : authenc(hmac(sha1),cbc(aes))
driver : authenc(hmac(sha1-generic),cbc-aes-padlock)
module : kernel
priority : 4000
refcnt : 89
selftest : passed
type : aead
async : yes
blocksize : 16
ivsize : 16
maxauthsize : 20
geniv : <built-in>

name : cbc(aes)
driver : cbc-aes-padlock
module : kernel
priority : 400
refcnt : 89
selftest : passed
type : givcipher
async : yes
blocksize : 16
min keysize : 16
max keysize : 32
ivsize : 16
geniv : chainiv

name : rfc3686(ctr(aes))
driver : rfc3686(ctr(aes-padlock))
module : kernel
priority : 300
refcnt : 1
selftest : passed
type : blkcipher
blocksize : 1
min keysize : 20
max keysize : 36
ivsize : 8
geniv : seqiv

name : ctr(aes)
driver : ctr(aes-padlock)
module : kernel
priority : 300
refcnt : 1
selftest : passed
type : blkcipher
blocksize : 1
min keysize : 16
max keysize : 32
ivsize : 16
geniv : chainiv

name : cbc(twofish)
driver : cbc(twofish-asm)
module : kernel
priority : 200
refcnt : 1
selftest : passed
type : blkcipher
blocksize : 16
min keysize : 16
max keysize : 32
ivsize : 16
geniv : <default>

name : cbc(camellia)
driver : cbc(camellia-generic)
module : kernel
priority : 100
refcnt : 1
selftest : passed
type : blkcipher
blocksize : 16
min keysize : 16
max keysize : 32
ivsize : 16
geniv : <default>

name : cbc(serpent)
driver : cbc(serpent-generic)
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : blkcipher
blocksize : 16
min keysize : 0
max keysize : 32
ivsize : 16
geniv : <default>

name : cbc(blowfish)
driver : cbc(blowfish-generic)
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : blkcipher
blocksize : 8
min keysize : 4
max keysize : 56
ivsize : 8
geniv : <default>

name : cbc(cast5)
driver : cbc(cast5-generic)
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : blkcipher
blocksize : 8
min keysize : 5
max keysize : 16
ivsize : 8
geniv : <default>

name : cbc(des3_ede)
driver : cbc(des3_ede-generic)
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : blkcipher
blocksize : 8
min keysize : 24
max keysize : 24
ivsize : 8
geniv : <default>

name : cbc(des)
driver : cbc(des-generic)
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : blkcipher
blocksize : 8
min keysize : 8
max keysize : 8
ivsize : 8
geniv : <default>

name : xcbc(aes)
driver : xcbc(aes-padlock)
module : kernel
priority : 300
refcnt : 1
selftest : passed
type : shash
blocksize : 16
digestsize : 16

name : hmac(rmd160)
driver : hmac(rmd160-generic)
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 20

name : hmac(sha256)
driver : hmac(sha256-generic)
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 32

name : hmac(sha1)
driver : hmac(sha1-generic)
module : kernel
priority : 0
refcnt : 177
selftest : passed
type : shash
blocksize : 64
digestsize : 20

name : hmac(md5)
driver : hmac(md5-generic)
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 16

name : cbc(aes)
driver : cbc-aes-padlock
module : kernel
priority : 400
refcnt : 89
selftest : passed
type : blkcipher
blocksize : 16
min keysize : 16
max keysize : 32
ivsize : 16
geniv : <default>

name : ecb(aes)
driver : ecb-aes-padlock
module : kernel
priority : 400
refcnt : 1
selftest : passed
type : blkcipher
blocksize : 16
min keysize : 16
max keysize : 32
ivsize : 0
geniv : <default>

name : aes
driver : aes-padlock
module : kernel
priority : 300
refcnt : 1
selftest : passed
type : cipher
blocksize : 16
min keysize : 16
max keysize : 32

name : ghash
driver : ghash-generic
module : kernel
priority : 100
refcnt : 1
selftest : passed
type : shash
blocksize : 16
digestsize : 16

name : stdrng
driver : ansi_cprng
module : kernel
priority : 100
refcnt : 1
selftest : passed
type : rng
seedsize : 48

name : stdrng
driver : krng
module : kernel
priority : 200
refcnt : 2
selftest : passed
type : rng
seedsize : 0

name : lzo
driver : lzo-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : compression

name : crc32c
driver : crc32c-generic
module : kernel
priority : 100
refcnt : 2
selftest : passed
type : shash
blocksize : 1
digestsize : 4

name : michael_mic
driver : michael_mic-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 8
digestsize : 8

name : zlib
driver : zlib-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : pcomp

name : deflate
driver : deflate-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : compression

name : salsa20
driver : salsa20-generic
module : kernel
priority : 100
refcnt : 1
selftest : passed
type : blkcipher
blocksize : 1
min keysize : 16
max keysize : 32
ivsize : 8
geniv : <default>

name : seed
driver : seed-generic
module : kernel
priority : 100
refcnt : 1
selftest : passed
type : cipher
blocksize : 16
min keysize : 16
max keysize : 16

name : anubis
driver : anubis-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : cipher
blocksize : 16
min keysize : 16
max keysize : 40

name : khazad
driver : khazad-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : cipher
blocksize : 8
min keysize : 16
max keysize : 16

name : xeta
driver : xeta-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : cipher
blocksize : 8
min keysize : 16
max keysize : 16

name : xtea
driver : xtea-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : cipher
blocksize : 8
min keysize : 16
max keysize : 16

name : tea
driver : tea-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : cipher
blocksize : 8
min keysize : 16
max keysize : 16

name : arc4
driver : arc4-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : cipher
blocksize : 1
min keysize : 1
max keysize : 256

name : cast6
driver : cast6-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : cipher
blocksize : 16
min keysize : 16
max keysize : 32

name : cast5
driver : cast5-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : cipher
blocksize : 8
min keysize : 5
max keysize : 16

name : camellia
driver : camellia-generic
module : kernel
priority : 100
refcnt : 1
selftest : passed
type : cipher
blocksize : 16
min keysize : 16
max keysize : 32

name : aes
driver : aes-generic
module : kernel
priority : 100
refcnt : 1
selftest : passed
type : cipher
blocksize : 16
min keysize : 16
max keysize : 32

name : tnepres
driver : tnepres-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : cipher
blocksize : 16
min keysize : 0
max keysize : 32

name : serpent
driver : serpent-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : cipher
blocksize : 16
min keysize : 0
max keysize : 32

name : twofish
driver : twofish-generic
module : kernel
priority : 100
refcnt : 1
selftest : passed
type : cipher
blocksize : 16
min keysize : 16
max keysize : 32

name : blowfish
driver : blowfish-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : cipher
blocksize : 8
min keysize : 4
max keysize : 56

name : fcrypt
driver : fcrypt-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : cipher
blocksize : 8
min keysize : 8
max keysize : 8

name : des3_ede
driver : des3_ede-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : cipher
blocksize : 8
min keysize : 24
max keysize : 24

name : des
driver : des-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : cipher
blocksize : 8
min keysize : 8
max keysize : 8

name : tgr128
driver : tgr128-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 16

name : tgr160
driver : tgr160-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 20

name : tgr192
driver : tgr192-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 24

name : wp256
driver : wp256-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 32

name : wp384
driver : wp384-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 48

name : wp512
driver : wp512-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 64

name : sha512
driver : sha512-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 128
digestsize : 64

name : sha384
driver : sha384-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 128
digestsize : 48

name : sha256
driver : sha256-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 32

name : sha224
driver : sha224-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 28

name : sha1
driver : sha1-generic
module : kernel
priority : 0
refcnt : 89
selftest : passed
type : shash
blocksize : 64
digestsize : 20

name : rmd320
driver : rmd320-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 40

name : rmd256
driver : rmd256-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 32

name : rmd160
driver : rmd160-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 20

name : rmd128
driver : rmd128-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 16

name : md5
driver : md5-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 16

name : md4
driver : md4-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 16

name : compress_null
driver : compress_null-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : compression

name : digest_null
driver : digest_null-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 1
digestsize : 0

name : ecb(cipher_null)
driver : ecb-cipher_null
module : kernel
priority : 100
refcnt : 1
selftest : passed
type : blkcipher
blocksize : 1
min keysize : 0
max keysize : 0
ivsize : 0
geniv : <default>

name : cipher_null
driver : cipher_null-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : cipher
blocksize : 1
min keysize : 0
max keysize : 0

name : salsa20
driver : salsa20-asm
module : kernel
priority : 200
refcnt : 1
selftest : passed
type : blkcipher
blocksize : 1
min keysize : 16
max keysize : 32
ivsize : 8
geniv : <default>

name : twofish
driver : twofish-asm
module : kernel
priority : 200
refcnt : 1
selftest : passed
type : cipher
blocksize : 16
min keysize : 16
max keysize : 32

name : aes
driver : aes-asm
module : kernel
priority : 200
refcnt : 1
selftest : passed
type : cipher
blocksize : 16
min keysize : 16
max keysize : 32

===================================================================


**** Here is the /proc/cpuinfo and /proc/crypto for the case
CONFIG_CRYPTO_DEV_PADLOCK_SHA=y, padlock does not support sha

===================================================================
processor : 0
vendor_id : CentaurHauls
cpu family : 6
model : 9
model name : VIA Nehemiah
stepping : 8
cpu MHz : 1002.228
cache size : 64 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 1
wp : yes
flags : fpu vme de pse tsc msr cx8 sep mtrr pge cmov pat mmx fxsr sse rng
rng_en ace ace_en
bogomips : 2005.97
clflush size : 32
cache_alignment : 32
address sizes : 32 bits physical, 32 bits virtual
power management:

===================================================================

name : authenc(hmac(sha1),cbc(aes))
driver : authenc(hmac(sha1-generic),cbc-aes-padlock)
module : kernel
priority : 4000
refcnt : 231
selftest : passed
type : aead
async : yes
blocksize : 16
ivsize : 16
maxauthsize : 20
geniv : <built-in>

name : cbc(aes)
driver : cbc-aes-padlock
module : kernel
priority : 400
refcnt : 231
selftest : passed
type : givcipher
async : yes
blocksize : 16
min keysize : 16
max keysize : 32
ivsize : 16
geniv : chainiv

name : rfc3686(ctr(aes))
driver : rfc3686(ctr(aes-padlock))
module : kernel
priority : 300
refcnt : 1
selftest : passed
type : blkcipher
blocksize : 1
min keysize : 20
max keysize : 36
ivsize : 8
geniv : seqiv

name : ctr(aes)
driver : ctr(aes-padlock)
module : kernel
priority : 300
refcnt : 1
selftest : passed
type : blkcipher
blocksize : 1
min keysize : 16
max keysize : 32
ivsize : 16
geniv : chainiv

name : cbc(twofish)
driver : cbc(twofish-asm)
module : kernel
priority : 200
refcnt : 1
selftest : passed
type : blkcipher
blocksize : 16
min keysize : 16
max keysize : 32
ivsize : 16
geniv : <default>

name : cbc(camellia)
driver : cbc(camellia-generic)
module : kernel
priority : 100
refcnt : 1
selftest : passed
type : blkcipher
blocksize : 16
min keysize : 16
max keysize : 32
ivsize : 16
geniv : <default>

name : cbc(serpent)
driver : cbc(serpent-generic)
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : blkcipher
blocksize : 16
min keysize : 0
max keysize : 32
ivsize : 16
geniv : <default>

name : cbc(blowfish)
driver : cbc(blowfish-generic)
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : blkcipher
blocksize : 8
min keysize : 4
max keysize : 56
ivsize : 8
geniv : <default>

name : cbc(cast5)
driver : cbc(cast5-generic)
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : blkcipher
blocksize : 8
min keysize : 5
max keysize : 16
ivsize : 8
geniv : <default>

name : cbc(des3_ede)
driver : cbc(des3_ede-generic)
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : blkcipher
blocksize : 8
min keysize : 24
max keysize : 24
ivsize : 8
geniv : <default>

name : cbc(des)
driver : cbc(des-generic)
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : blkcipher
blocksize : 8
min keysize : 8
max keysize : 8
ivsize : 8
geniv : <default>

name : xcbc(aes)
driver : xcbc(aes-padlock)
module : kernel
priority : 300
refcnt : 1
selftest : passed
type : shash
blocksize : 16
digestsize : 16

name : hmac(rmd160)
driver : hmac(rmd160-generic)
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 20

name : hmac(sha256)
driver : hmac(sha256-generic)
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 32

name : hmac(sha1)
driver : hmac(sha1-generic)
module : kernel
priority : 0
refcnt : 461
selftest : passed
type : shash
blocksize : 64
digestsize : 20

name : hmac(md5)
driver : hmac(md5-generic)
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 16

name : cbc(aes)
driver : cbc-aes-padlock
module : kernel
priority : 400
refcnt : 231
selftest : passed
type : blkcipher
blocksize : 16
min keysize : 16
max keysize : 32
ivsize : 16
geniv : <default>

name : ecb(aes)
driver : ecb-aes-padlock
module : kernel
priority : 400
refcnt : 1
selftest : passed
type : blkcipher
blocksize : 16
min keysize : 16
max keysize : 32
ivsize : 0
geniv : <default>

name : aes
driver : aes-padlock
module : kernel
priority : 300
refcnt : 1
selftest : passed
type : cipher
blocksize : 16
min keysize : 16
max keysize : 32

name : ghash
driver : ghash-generic
module : kernel
priority : 100
refcnt : 1
selftest : passed
type : shash
blocksize : 16
digestsize : 16

name : stdrng
driver : ansi_cprng
module : kernel
priority : 100
refcnt : 1
selftest : passed
type : rng
seedsize : 48

name : stdrng
driver : krng
module : kernel
priority : 200
refcnt : 2
selftest : passed
type : rng
seedsize : 0

name : lzo
driver : lzo-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : compression

name : crc32c
driver : crc32c-generic
module : kernel
priority : 100
refcnt : 2
selftest : passed
type : shash
blocksize : 1
digestsize : 4

name : michael_mic
driver : michael_mic-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 8
digestsize : 8

name : zlib
driver : zlib-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : pcomp

name : deflate
driver : deflate-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : compression

name : salsa20
driver : salsa20-generic
module : kernel
priority : 100
refcnt : 1
selftest : passed
type : blkcipher
blocksize : 1
min keysize : 16
max keysize : 32
ivsize : 8
geniv : <default>

name : seed
driver : seed-generic
module : kernel
priority : 100
refcnt : 1
selftest : passed
type : cipher
blocksize : 16
min keysize : 16
max keysize : 16

name : anubis
driver : anubis-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : cipher
blocksize : 16
min keysize : 16
max keysize : 40

name : khazad
driver : khazad-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : cipher
blocksize : 8
min keysize : 16
max keysize : 16

name : xeta
driver : xeta-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : cipher
blocksize : 8
min keysize : 16
max keysize : 16

name : xtea
driver : xtea-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : cipher
blocksize : 8
min keysize : 16
max keysize : 16

name : tea
driver : tea-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : cipher
blocksize : 8
min keysize : 16
max keysize : 16

name : arc4
driver : arc4-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : cipher
blocksize : 1
min keysize : 1
max keysize : 256

name : cast6
driver : cast6-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : cipher
blocksize : 16
min keysize : 16
max keysize : 32

name : cast5
driver : cast5-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : cipher
blocksize : 8
min keysize : 5
max keysize : 16

name : camellia
driver : camellia-generic
module : kernel
priority : 100
refcnt : 1
selftest : passed
type : cipher
blocksize : 16
min keysize : 16
max keysize : 32

name : aes
driver : aes-generic
module : kernel
priority : 100
refcnt : 1
selftest : passed
type : cipher
blocksize : 16
min keysize : 16
max keysize : 32

name : tnepres
driver : tnepres-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : cipher
blocksize : 16
min keysize : 0
max keysize : 32

name : serpent
driver : serpent-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : cipher
blocksize : 16
min keysize : 0
max keysize : 32

name : twofish
driver : twofish-generic
module : kernel
priority : 100
refcnt : 1
selftest : passed
type : cipher
blocksize : 16
min keysize : 16
max keysize : 32

name : blowfish
driver : blowfish-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : cipher
blocksize : 8
min keysize : 4
max keysize : 56

name : fcrypt
driver : fcrypt-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : cipher
blocksize : 8
min keysize : 8
max keysize : 8

name : des3_ede
driver : des3_ede-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : cipher
blocksize : 8
min keysize : 24
max keysize : 24

name : des
driver : des-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : cipher
blocksize : 8
min keysize : 8
max keysize : 8

name : tgr128
driver : tgr128-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 16

name : tgr160
driver : tgr160-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 20

name : tgr192
driver : tgr192-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 24

name : wp256
driver : wp256-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 32

name : wp384
driver : wp384-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 48

name : wp512
driver : wp512-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 64

name : sha512
driver : sha512-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 128
digestsize : 64

name : sha384
driver : sha384-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 128
digestsize : 48

name : sha256
driver : sha256-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 32

name : sha224
driver : sha224-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 28

name : sha1
driver : sha1-generic
module : kernel
priority : 0
refcnt : 231
selftest : passed
type : shash
blocksize : 64
digestsize : 20

name : rmd320
driver : rmd320-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 40

name : rmd256
driver : rmd256-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 32

name : rmd160
driver : rmd160-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 20

name : rmd128
driver : rmd128-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 16

name : md5
driver : md5-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 16

name : md4
driver : md4-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 64
digestsize : 16

name : compress_null
driver : compress_null-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : compression

name : digest_null
driver : digest_null-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : shash
blocksize : 1
digestsize : 0

name : ecb(cipher_null)
driver : ecb-cipher_null
module : kernel
priority : 100
refcnt : 1
selftest : passed
type : blkcipher
blocksize : 1
min keysize : 0
max keysize : 0
ivsize : 0
geniv : <default>

name : cipher_null
driver : cipher_null-generic
module : kernel
priority : 0
refcnt : 1
selftest : passed
type : cipher
blocksize : 1
min keysize : 0
max keysize : 0

name : salsa20
driver : salsa20-asm
module : kernel
priority : 200
refcnt : 1
selftest : passed
type : blkcipher
blocksize : 1
min keysize : 16
max keysize : 32
ivsize : 8
geniv : <default>

name : twofish
driver : twofish-asm
module : kernel
priority : 200
refcnt : 1
selftest : passed
type : cipher
blocksize : 16
min keysize : 16
max keysize : 32

name : aes
driver : aes-asm
module : kernel
priority : 200
refcnt : 1
selftest : passed
type : cipher
blocksize : 16
min keysize : 16
max keysize : 32

============================

Regards
--
Wolfgang Walter
Studentenwerk M?nchen
Anstalt des ?ffentlichen Rechts


2010-01-30 02:27:25

by Herbert Xu

[permalink] [raw]
Subject: Re: 2.6.32: padlock_sha1 and hmac broken?

On Sat, Jan 30, 2010 at 12:44:15AM +0100, Wolfgang Walter wrote:
> Hello,
>
> I upgraded some machines with VIA processors from (vanilla) 2.6.31 to
> 2.6.32.7.
>
> If I build the kernel 2.6.32.7 with CONFIG_CRYPTO_DEV_PADLOCK_SHA=y and
> padlock supports sha, hmac(sha1) is missing and IPSEC with hmac(sha1) no
> longer is possible.

Can you please attach the dmesg output so we can see if there
were any error messages?

Please also try "modprobe tcrypt mode=101".

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

2010-01-30 16:34:51

by Wolfgang Walter

[permalink] [raw]
Subject: Re: 2.6.32: padlock_sha1 and hmac broken?

Am Samstag, 30. Januar 2010 schrieben Sie:
> On Sat, Jan 30, 2010 at 12:44:15AM +0100, Wolfgang Walter wrote:
> > Hello,
> >
> > I upgraded some machines with VIA processors from (vanilla) 2.6.31 to
> > 2.6.32.7.
> >
> > If I build the kernel 2.6.32.7 with CONFIG_CRYPTO_DEV_PADLOCK_SHA=y and
> > padlock supports sha, hmac(sha1) is missing and IPSEC with hmac(sha1) no
> > longer is possible.
>
> Can you please attach the dmesg output so we can see if there
> were any error messages?

=============
E# disabled
[ 0.144494] HPET not enabled in BIOS. You might try hpet=force boot option
[ 0.144634] pci 0000:00:11.5: reg 10 io port: [0xec00-0xecff]
[ 0.144698] pci 0000:00:11.5: supports D1 D2
[ 0.144787] pci 0000:01:00.0: reg 10 32bit mmio pref: [0xf4000000-0xf7ffffff]
[ 0.144803] pci 0000:01:00.0: reg 14 32bit mmio: [0xfb000000-0xfbffffff]
[ 0.144835] pci 0000:01:00.0: reg 30 32bit mmio pref: [0x000000-0x00ffff]
[ 0.144865] pci 0000:01:00.0: supports D1 D2
[ 0.144921] pci 0000:00:01.0: bridge io port: [0xd000-0xdfff]
[ 0.144933] pci 0000:00:01.0: bridge 32bit mmio: [0xfb000000-0xfcffffff]
[ 0.144946] pci 0000:00:01.0: bridge 32bit mmio pref: [0xf4000000-0xf7ffffff]
[ 0.144965] pci_bus 0000:00: on NUMA node 0
[ 0.144985] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT]
[ 0.327624] ACPI: PCI Interrupt Link [LNKA] (IRQs 3 4 6 7 10 11 12) *5
[ 0.328584] ACPI: PCI Interrupt Link [LNKB] (IRQs 3 4 6 7 10 *11 12)
[ 0.329501] ACPI: PCI Interrupt Link [LNKC] (IRQs 3 4 6 7 *10 11 12)
[ 0.330402] ACPI: PCI Interrupt Link [LNKD] (IRQs 3 4 6 7 10 11 12) *0, disabled.
[ 0.331336] ACPI: PCI Interrupt Link [LNKE] (IRQs 3 4 6 7 10 11 12) *0, disabled.
[ 0.332247] ACPI: PCI Interrupt Link [LNKF] (IRQs 3 4 6 7 10 11 12) *0, disabled.
[ 0.333159] ACPI: PCI Interrupt Link [LNK0] (IRQs 3 4 6 7 10 11 12) *0, disabled.
[ 0.334095] ACPI: PCI Interrupt Link [LNK1] (IRQs 3 4 6 7 10 11 12) *0, disabled.
[ 0.335140] ACPI: PCI Interrupt Link [ALKA] (IRQs *20)
[ 0.335828] ACPI: PCI Interrupt Link [ALKB] (IRQs *21)
[ 0.336519] ACPI: PCI Interrupt Link [ALKC] (IRQs *22)
[ 0.337280] ACPI: PCI Interrupt Link [ALKD] (IRQs *23), disabled.
[ 0.337998] vgaarb: device added: PCI:0000:01:00.0,decodes=io+mem,owns=io+mem,locks=none
[ 0.338080] vgaarb: loaded
[ 0.338528] SCSI subsystem initialized
[ 0.338658] libata version 3.00 loaded.
[ 0.339062] usbcore: registered new interface driver usbfs
[ 0.339205] usbcore: registered new interface driver hub
[ 0.339364] usbcore: registered new device driver usb
[ 0.339798] PCI: Using ACPI for IRQ routing
[ 0.340410] Switching to clocksource tsc
[ 0.340531] pnp: PnP ACPI init
[ 0.340606] ACPI: bus type pnp registered
[ 0.354181] pnp: PnP ACPI: found 11 devices
[ 0.354252] ACPI: ACPI bus type pnp unregistered
[ 0.354343] system 00:00: iomem range 0xf0000-0xfffff could not be reserved
[ 0.354415] system 00:00: iomem range 0x1eee0000-0x1eefffff could not be reserved
[ 0.354496] system 00:00: iomem range 0xffff0000-0xffffffff has been reserved
[ 0.354568] system 00:00: iomem range 0x0-0x9ffff could not be reserved
[ 0.354638] system 00:00: iomem range 0x100000-0x1eedffff could not be reserved
[ 0.354717] system 00:00: iomem range 0xfec00000-0xfec00fff could not be reserved
[ 0.354797] system 00:00: iomem range 0xfee00000-0xfee00fff has been reserved
[ 0.354869] system 00:00: iomem range 0xfff80000-0xfffeffff has been reserved
[ 0.354951] system 00:02: ioport range 0x400-0x47f has been reserved
[ 0.355020] system 00:02: ioport range 0x500-0x50f has been reserved
[ 0.355131] system 00:03: ioport range 0x4d0-0x4d1 has been reserved
[ 0.355200] system 00:03: ioport range 0x800-0x87f has been reserved
[ 0.355269] system 00:03: ioport range 0x880-0x8ff has been reserved
[ 0.391005] pci 0000:00:01.0: PCI bridge, secondary bus 0000:01
[ 0.391081] pci 0000:00:01.0: IO window: 0xd000-0xdfff
[ 0.391151] pci 0000:00:01.0: MEM window: 0xfb000000-0xfcffffff
[ 0.391222] pci 0000:00:01.0: PREFETCH window: 0xf4000000-0xf7ffffff
[ 0.391311] pci 0000:00:01.0: setting latency timer to 64
[ 0.391326] pci_bus 0000:00: resource 0 io: [0x00-0xffff]
[ 0.391337] pci_bus 0000:00: resource 1 mem: [0x000000-0xffffffff]
[ 0.391348] pci_bus 0000:01: resource 0 io: [0xd000-0xdfff]
[ 0.391359] pci_bus 0000:01: resource 1 mem: [0xfb000000-0xfcffffff]
[ 0.391370] pci_bus 0000:01: resource 2 pref mem [0xf4000000-0xf7ffffff]
[ 0.391471] NET: Registered protocol family 2
[ 0.391849] IP route cache hash table entries: 4096 (order: 2, 16384 bytes)
[ 0.392765] TCP established hash table entries: 16384 (order: 5, 131072 bytes)
[ 0.393170] TCP bind hash table entries: 16384 (order: 4, 65536 bytes)
[ 0.394127] TCP: Hash tables configured (established 16384 bind 16384)
[ 0.394195] TCP reno registered
[ 0.394459] NET: Registered protocol family 1
[ 0.394579] pci 0000:00:01.0: disabling DAC on VIA PCI bridge
[ 0.394773] pci 0000:00:11.0: Bypassing VIA 8237 APIC De-Assert Message
[ 0.394853] pci 0000:01:00.0: Boot video device
[ 0.394985] Trying to unpack rootfs image as initramfs...
[ 0.397158] rootfs image is not initramfs (no cpio magic); looks like an initrd
[ 0.583043] Freeing initrd memory: 42677k freed
[ 0.657473] cpufreq-nforce2: No nForce2 chipset.
[ 0.667097] msgmni has been set to 970
[ 0.667379] alg: No test for cipher_null (cipher_null-generic)
[ 0.667498] alg: No test for ecb(cipher_null) (ecb-cipher_null)
[ 0.667610] alg: No test for digest_null (digest_null-generic)
[ 0.667718] alg: No test for compress_null (compress_null-generic)
[ 0.670760] alg: No test for fcrypt (fcrypt-generic)
[ 0.679058] alg: No test for stdrng (krng)
[ 0.716094] alg: No test for ghash (ghash-generic)
[ 0.716212] io scheduler noop registered
[ 0.716272] io scheduler anticipatory registered
[ 0.716334] io scheduler deadline registered
[ 0.716680] io scheduler cfq registered (default)
[ 0.717179] fan PNP0C0B:00: registered as cooling_device0
[ 0.717255] ACPI: Fan [FAN] (on)
[ 0.717565] processor LNXCPU:00: registered as cooling_device1
[ 0.719182] thermal LNXTHERM:01: registered as thermal_zone0
[ 0.719267] ACPI: Thermal Zone [THRM] (-248 C)
[ 0.727205] Real Time Clock Driver v1.12b
[ 0.727761] VIA RNG detected
[ 0.727936] Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
[ 0.728201] serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[ 0.728473] serial8250: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A
[ 0.729423] 00:08: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[ 0.729847] 00:09: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A
[ 0.734418] brd: module loaded
[ 0.736455] loop: module loaded
[ 0.737003] sata_via 0000:00:0f.0: version 2.4
[ 0.737729] ACPI: PCI Interrupt Link [ALKA] enabled at IRQ 20
[ 0.737818] sata_via 0000:00:0f.0: PCI INT B -> Link[ALKA] -> GSI 20 (level, low) -> IRQ 20
[ 0.737980] sata_via 0000:00:0f.0: routed to hard irq line 11
[ 0.738200] scsi0 : sata_via
[ 0.738633] scsi1 : sata_via
[ 0.743265] ata1: SATA max UDMA/133 cmd 0xff00 ctl 0xfe00 bmdma 0xfb00 irq 20
[ 0.743344] ata2: SATA max UDMA/133 cmd 0xfd00 ctl 0xfc00 bmdma 0xfb08 irq 20
[ 0.744718] pata_via 0000:00:0f.1: version 0.3.4
[ 0.744767] pata_via 0000:00:0f.1: PCI INT A -> Link[ALKA] -> GSI 20 (level, low) -> IRQ 20
[ 0.745103] scsi2 : pata_via
[ 0.745412] scsi3 : pata_via
[ 0.749245] ata3: PATA max UDMA/133 cmd 0x1f0 ctl 0x3f6 bmdma 0xfa00 irq 14
[ 0.749322] ata4: PATA max UDMA/133 cmd 0x170 ctl 0x376 bmdma 0xfa08 irq 15
[ 0.751538] Intel(R) PRO/1000 Network Driver - version 7.3.21-k5-NAPI
[ 0.751614] Copyright (c) 1999-2006 Intel Corporation.
[ 0.751788] e1000e: Intel(R) PRO/1000 Network Driver - 1.0.2-k2
[ 0.751854] e1000e: Copyright (c) 1999-2008 Intel Corporation.
[ 0.752023] Intel(R) Gigabit Ethernet Network Driver - version 1.3.16-k2
[ 0.752091] Copyright (c) 2007-2009 Intel Corporation.
[ 0.752247] Ethernet Channel Bonding Driver: v3.5.0 (November 4, 2008)
[ 0.752318] bonding: Warning: either miimon or arp_interval and arp_ip_target module parameters must be
specified, otherwise bonding will not detect link failures! see bonding.txt for details.
[ 0.753414] Atheros(R) L2 Ethernet Driver - version 2.2.3
[ 0.753481] Copyright (c) 2007 Atheros Corporation.
[ 0.753651] e100: Intel(R) PRO/100 Network Driver, 3.5.24-k2-NAPI
[ 0.753717] e100: Copyright(c) 1999-2006 Intel Corporation
[ 0.754053] via-rhine: Broken BIOS detected, avoid_D3 enabled.
[ 0.754409] PPP generic driver version 2.4.2
[ 0.754714] PPP Deflate Compression module registered
[ 0.754779] NET: Registered protocol family 24
[ 0.754865] PPPoL2TP kernel driver, V1.0
[ 0.755766] 8139too Fast Ethernet driver 0.9.28
[ 0.755863] 8139too 0000:00:05.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
[ 0.757379] eth0: RealTek RTL8139 at 0xdf7d2000, 00:30:18:4c:69:5f, IRQ 16
[ 0.757495] 8139too 0000:00:06.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17
[ 0.758684] eth1: RealTek RTL8139 at 0xdf7d6000, 00:30:18:4c:69:5e, IRQ 17
[ 0.758785] 8139too 0000:00:07.0: PCI INT A -> GSI 18 (level, low) -> IRQ 18
[ 0.760026] eth2: RealTek RTL8139 at 0xdf7da000, 00:30:18:4c:69:5d, IRQ 18
[ 0.760197] tun: Universal TUN/TAP device driver, 1.6
[ 0.760260] tun: (C) 1999-2004 Max Krasnyansky <[email protected]>
[ 0.761031] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[ 0.761857] ACPI: PCI Interrupt Link [ALKB] enabled at IRQ 21
[ 0.761940] ehci_hcd 0000:00:10.4: PCI INT C -> Link[ALKB] -> GSI 21 (level, low) -> IRQ 21
[ 0.762052] ehci_hcd 0000:00:10.4: EHCI Host Controller
[ 0.762355] ehci_hcd 0000:00:10.4: new USB bus registered, assigned bus number 1
[ 0.762532] ehci_hcd 0000:00:10.4: irq 21, io mem 0xfdffc000
[ 0.769490] ehci_hcd 0000:00:10.4: USB 2.0 started, EHCI 1.00
[ 0.769830] usb usb1: configuration #1 chosen from 1 choice
[ 0.770025] hub 1-0:1.0: USB hub found
[ 0.770103] hub 1-0:1.0: 8 ports detected
[ 0.770359] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
[ 0.770533] uhci_hcd: USB Universal Host Controller Interface driver
[ 0.770727] uhci_hcd 0000:00:10.0: PCI INT A -> Link[ALKB] -> GSI 21 (level, low) -> IRQ 21
[ 0.770820] uhci_hcd 0000:00:10.0: UHCI Host Controller
[ 0.771050] uhci_hcd 0000:00:10.0: new USB bus registered, assigned bus number 2
[ 0.771162] uhci_hcd 0000:00:10.0: irq 21, io base 0x0000f900
[ 0.771537] usb usb2: configuration #1 chosen from 1 choice
[ 0.771724] hub 2-0:1.0: USB hub found
[ 0.771802] hub 2-0:1.0: 2 ports detected
[ 0.771986] uhci_hcd 0000:00:10.1: PCI INT A -> Link[ALKB] -> GSI 21 (level, low) -> IRQ 21
[ 0.772076] uhci_hcd 0000:00:10.1: UHCI Host Controller
[ 0.772300] uhci_hcd 0000:00:10.1: new USB bus registered, assigned bus number 3
[ 0.772412] uhci_hcd 0000:00:10.1: irq 21, io base 0x0000f800
[ 0.772780] usb usb3: configuration #1 chosen from 1 choice
[ 0.773014] hub 3-0:1.0: USB hub found
[ 0.773090] hub 3-0:1.0: 2 ports detected
[ 0.773289] uhci_hcd 0000:00:10.2: PCI INT B -> Link[ALKB] -> GSI 21 (level, low) -> IRQ 21
[ 0.773381] uhci_hcd 0000:00:10.2: UHCI Host Controller
[ 0.773597] uhci_hcd 0000:00:10.2: new USB bus registered, assigned bus number 4
[ 0.773709] uhci_hcd 0000:00:10.2: irq 21, io base 0x0000f700
[ 0.774087] usb usb4: configuration #1 chosen from 1 choice
[ 0.774286] hub 4-0:1.0: USB hub found
[ 0.774362] hub 4-0:1.0: 2 ports detected
[ 0.774543] uhci_hcd 0000:00:10.3: PCI INT B -> Link[ALKB] -> GSI 21 (level, low) -> IRQ 21
[ 0.774632] uhci_hcd 0000:00:10.3: UHCI Host Controller
[ 0.774849] uhci_hcd 0000:00:10.3: new USB bus registered, assigned bus number 5
[ 0.774961] uhci_hcd 0000:00:10.3: irq 21, io base 0x0000f600
[ 0.775332] usb usb5: configuration #1 chosen from 1 choice
[ 0.775528] hub 5-0:1.0: USB hub found
[ 0.775605] hub 5-0:1.0: 2 ports detected
[ 0.775847] Initializing USB Mass Storage driver...
[ 0.776082] usbcore: registered new interface driver usb-storage
[ 0.776240] USB Mass Storage support registered.
[ 0.776614] PNP: No PS/2 controller found. Probing ports directly.
[ 0.952805] ata1: SATA link down 1.5 Gbps (SStatus 0 SControl 300)
[ 1.039562] serio: i8042 KBD port at 0x60,0x64 irq 1
[ 1.040107] mice: PS/2 mouse device common for all mice
[ 1.040511] vt1211: Found VT1211 chip at 0x6000, revision 2
[ 1.040751] hwmon-vid: Unknown VRM version of your x86 CPU
[ 1.041244] EDAC MC: Ver: 2.1.0 Jan 29 2010
[ 1.041624] cpuidle: using governor ladder
[ 1.041985] padlock: Using VIA PadLock ACE for AES algorithm.
[ 1.042208] padlock: Using VIA PadLock ACE for SHA1/SHA256 algorithms.
[ 1.044696] usbcore: registered new interface driver hiddev
[ 1.044855] usbcore: registered new interface driver usbhid
[ 1.044921] usbhid: v2.6:USB HID core driver
[ 1.045210] GACT probability on
[ 1.045269] Mirror/redirect action on
[ 1.045329] Simple TC action Loaded
[ 1.046549] netem: version 1.2
[ 1.046610] u32 classifier
[ 1.046664] Performance counters on
[ 1.046722] input device check on
[ 1.046779] Actions configured
[ 1.046842] Netfilter messages via NETLINK v0.30.
[ 1.047083] xt_time: kernel timezone is -0000
[ 1.048522] IPv4 over IPv4 tunneling driver
[ 1.050009] GRE over IPv4 tunneling driver
[ 1.051417] ip_tables: (C) 2000-2006 Netfilter Core Team
[ 1.051547] arp_tables: (C) 2002 David S. Miller
[ 1.051695] TCP cubic registered
[ 1.051752] Initializing XFRM netlink socket
[ 1.051816] IPv6: Loaded, but administratively disabled, reboot required to enable
[ 1.051892] ipv6 ah init: can't add xfrm type
[ 1.051952] ipv6 esp init: can't add xfrm type
[ 1.052012] ipcomp6 init: can't add xfrm type
[ 1.052089] ip6_tables: (C) 2000-2006 Netfilter Core Team
[ 1.052212] IPv6 over IPv4 tunneling driver
[ 1.054635] NET: Registered protocol family 17
[ 1.054715] NET: Registered protocol family 15
[ 1.055004] Bridge firewalling registered
[ 1.055071] Ebtables v2.0 registered
[ 1.055189] 802.1Q VLAN Support v1.8 Ben Greear <[email protected]>
[ 1.055256] All bugs added by David S. Miller <[email protected]>
[ 1.055363] Using IPI Shortcut mode
[ 1.166687] ata2: SATA link down 1.5 Gbps (SStatus 0 SControl 300)
[ 1.357068] ata4.00: ATA-0: TRANSCEND, 20070312, max MWDMA2
[ 1.357136] ata4.00: 996912 sectors, multi 0: LBA
[ 1.370307] ata4.00: configured for PIO4
[ 1.390304] ata4.00: configured for PIO4
[ 1.390365] ata4: EH complete
[ 1.403538] scsi 3:0:0:0: Direct-Access ATA TRANSCEND 2007 PQ: 0 ANSI: 5
[ 1.404179] sd 3:0:0:0: [sda] 996912 512-byte logical blocks: (510 MB/486 MiB)
[ 1.404337] sd 3:0:0:0: [sda] Write Protect is off
[ 1.404403] sd 3:0:0:0: [sda] Mode Sense: 00 3a 00 00
[ 1.404450] sd 3:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
[ 1.404811] sda: sda1
[ 1.406838] sd 3:0:0:0: Attached scsi generic sg0 type 0
[ 1.407324] sd 3:0:0:0: [sda] Attached SCSI disk
[ 1.426851] RAMDISK: gzip image found at block 0
[ 8.951329] VFS: Mounted root (ext2 filesystem) readonly on device 1:0.
[ 8.951452] devtmpfs: mounted
[ 8.951542] Freeing unused kernel memory: 316k freed
[ 10.473262] IPv4 FIB: Using LC-trie version 0.409
[ 10.917146] eth2: link up, 100Mbps, full-duplex, lpa 0x41E1
[ 10.917722] eth1: link up, 100Mbps, full-duplex, lpa 0xC5E1
[ 10.918198] eth0: link up, 100Mbps, full-duplex, lpa 0x41E1
[ 11.885269] nf_conntrack version 0.5.0 (7766 buckets, 31064 max)
[ 11.885768] CONFIG_NF_CT_ACCT is deprecated and will be removed soon. Please use
[ 11.885778] nf_conntrack.acct=1 kernel parameter, acct=1 nf_conntrack module option or
[ 11.885786] sysctl net.netfilter.nf_conntrack_acct=1 to enable it.

=============

>
> Please also try "modprobe tcrypt mode=101".
>


[ 474.947508] alg: hash: Failed to load transform for hmac(sha1): -2
[ 474.952660] alg: hash: Failed to load transform for hmac(sha1): -2
[ 474.952737] tcrypt: one or more tests failed!


Regards,
--
Wolfgang Walter
Studentenwerk M?nchen
Anstalt des ?ffentlichen Rechts

2010-01-30 22:17:37

by Herbert Xu

[permalink] [raw]
Subject: Re: 2.6.32: padlock_sha1 and hmac broken?

On Sat, Jan 30, 2010 at 05:34:45PM +0100, Wolfgang Walter wrote:
>
> > Please also try "modprobe tcrypt mode=101".
>
> [ 474.947508] alg: hash: Failed to load transform for hmac(sha1): -2
> [ 474.952660] alg: hash: Failed to load transform for hmac(sha1): -2
> [ 474.952737] tcrypt: one or more tests failed!

Oops, it looks like this has been broken ever since we added
prehashing to hmac.

Please try this patch and let me know whether it makes it work
again.

diff --git a/drivers/crypto/padlock-sha.c b/drivers/crypto/padlock-sha.c
index 0af8057..a1180ca 100644
--- a/drivers/crypto/padlock-sha.c
+++ b/drivers/crypto/padlock-sha.c
@@ -57,6 +57,20 @@ static int padlock_sha_update(struct shash_desc *desc,
return crypto_shash_update(&dctx->fallback, data, length);
}

+static int padlock_sha_export(struct shash_desc *desc, void *out)
+{
+ struct padlock_sha_desc *dctx = shash_desc_ctx(desc);
+
+ return crypto_shash_export(&dctx->fallback, out);
+}
+
+static int padlock_sha_import(struct shash_desc *desc, const void *in)
+{
+ struct padlock_sha_desc *dctx = shash_desc_ctx(desc);
+
+ return crypto_shash_import(&dctx->fallback, in);
+}
+
static inline void padlock_output_block(uint32_t *src,
uint32_t *dst, size_t count)
{
@@ -235,7 +249,10 @@ static struct shash_alg sha1_alg = {
.update = padlock_sha_update,
.finup = padlock_sha1_finup,
.final = padlock_sha1_final,
+ .export = padlock_sha_export,
+ .import = padlock_sha_import,
.descsize = sizeof(struct padlock_sha_desc),
+ .statesize = sizeof(struct sha1_state),
.base = {
.cra_name = "sha1",
.cra_driver_name = "sha1-padlock",
@@ -256,7 +273,10 @@ static struct shash_alg sha256_alg = {
.update = padlock_sha_update,
.finup = padlock_sha256_finup,
.final = padlock_sha256_final,
+ .export = padlock_sha_export,
+ .import = padlock_sha_import,
.descsize = sizeof(struct padlock_sha_desc),
+ .statesize = sizeof(struct sha256_state),
.base = {
.cra_name = "sha256",
.cra_driver_name = "sha256-padlock",

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

2010-01-31 02:11:27

by Wolfgang Walter

[permalink] [raw]
Subject: Re: 2.6.32: padlock_sha1 and hmac broken?

Am Samstag, 30. Januar 2010 schrieb Herbert Xu:
> On Sat, Jan 30, 2010 at 05:34:45PM +0100, Wolfgang Walter wrote:
> > > Please also try "modprobe tcrypt mode=101".
> >
> > [ 474.947508] alg: hash: Failed to load transform for hmac(sha1): -2
> > [ 474.952660] alg: hash: Failed to load transform for hmac(sha1): -2
> > [ 474.952737] tcrypt: one or more tests failed!
>
> Oops, it looks like this has been broken ever since we added
> prehashing to hmac.
>
> Please try this patch and let me know whether it makes it work
> again.
>
> diff --git a/drivers/crypto/padlock-sha.c b/drivers/crypto/padlock-sha.c
> index 0af8057..a1180ca 100644
> --- a/drivers/crypto/padlock-sha.c
> +++ b/drivers/crypto/padlock-sha.c
> @@ -57,6 +57,20 @@ static int padlock_sha_update(struct shash_desc *desc,
> return crypto_shash_update(&dctx->fallback, data, length);
> }
>
> +static int padlock_sha_export(struct shash_desc *desc, void *out)
> +{
> + struct padlock_sha_desc *dctx = shash_desc_ctx(desc);
> +
> + return crypto_shash_export(&dctx->fallback, out);
> +}
> +
> +static int padlock_sha_import(struct shash_desc *desc, const void *in)
> +{
> + struct padlock_sha_desc *dctx = shash_desc_ctx(desc);
> +
> + return crypto_shash_import(&dctx->fallback, in);
> +}
> +
> static inline void padlock_output_block(uint32_t *src,
> uint32_t *dst, size_t count)
> {
> @@ -235,7 +249,10 @@ static struct shash_alg sha1_alg = {
> .update = padlock_sha_update,
> .finup = padlock_sha1_finup,
> .final = padlock_sha1_final,
> + .export = padlock_sha_export,
> + .import = padlock_sha_import,
> .descsize = sizeof(struct padlock_sha_desc),
> + .statesize = sizeof(struct sha1_state),
> .base = {
> .cra_name = "sha1",
> .cra_driver_name = "sha1-padlock",
> @@ -256,7 +273,10 @@ static struct shash_alg sha256_alg = {
> .update = padlock_sha_update,
> .finup = padlock_sha256_finup,
> .final = padlock_sha256_final,
> + .export = padlock_sha_export,
> + .import = padlock_sha_import,
> .descsize = sizeof(struct padlock_sha_desc),
> + .statesize = sizeof(struct sha256_state),
> .base = {
> .cra_name = "sha256",
> .cra_driver_name = "sha256-padlock",
>
> Thanks,

Not sure.

When I do

modprobe tcrypt mode=101

I get a kernel oops:

[ 113.074210] BUG: unable to handle kernel NULL pointer dereference at
00000034
[ 113.074375] IP: [<dfc92042>] padlock_sha_import+0xa/0x15 [padlock_sha]
[ 113.074493] *pde = 00000000
[ 113.074590] Oops: 0000 [#1] PREEMPT
[ 113.074727] last sysfs file: /sys/module/vt/parameters/default_utf8
[ 113.074792] Modules linked in: tcrypt(+) padlock_sha nf_conntrack_tftp
nf_conntrack_sip nf_conntrack_sane nf_conntrack_ftp xt_connlimit xt_connbytes
xt_CONNMARK xt_connmark xt_helper xt_NOTRACK xt_conntrack nf_conntrack_ipv4
nf_conntrack nf_defrag_ipv4
[ 113.075595]
[ 113.075653] Pid: 1701, comm: cryptomgr_test Not tainted (2.6.32.7 #1)
[ 113.075722] EIP: 0060:[<dfc92042>] EFLAGS: 00010246 CPU: 0
[ 113.075789] EIP is at padlock_sha_import+0xa/0x15 [padlock_sha]
[ 113.075855] EAX: 00000000 EBX: d74619f8 ECX: dfc925d4 EDX: cd280238
[ 113.075923] ESI: dc0d2a2c EDI: d74619f0 EBP: cdb77d80 ESP: cdb77d7c
[ 113.075990] DS: 007b ES: 007b FS: 0000 GS: 0000 SS: 0068
[ 113.076057] Process cryptomgr_test (pid: 1701, ti=cdb76000 task=d97d3b80
task.ti=cdb76000)
[ 113.076133] Stack:
[ 113.076187] cd280238 cdb77d94 c01ec148 00000000 d74619c0 d74619e8 cdb77d9c
c01ec165
[ 113.076671] <0> cdb77db4 c01e9581 00000008 d74619c0 00000000 00000000
cdb77dbc c01e95b6
[ 113.076671] <0> cdb77dd4 c01e89c5 c01e959c c056fdd8 00000000 cd489008
cdb77ddc c01e89dd
[ 113.076671] Call Trace:
[ 113.076671] [<c01ec148>] ? hmac_import+0x3b/0x40
[ 113.076671] [<c01ec165>] ? hmac_init+0x18/0x1a
[ 113.076671] [<c01e9581>] ? shash_ahash_digest+0x8c/0xa7
[ 113.076671] [<c01e95b6>] ? shash_async_digest+0x1a/0x1c
[ 113.076671] [<c01e89c5>] ? crypto_ahash_op+0x8f/0x99
[ 113.076671] [<c01e959c>] ? shash_async_digest+0x0/0x1c
[ 113.076671] [<c01e89dd>] ? crypto_ahash_digest+0xe/0x10
[ 113.076671] [<c01ea4cb>] ? test_hash+0x17c/0x4fd
[ 113.076671] [<c01e4643>] ? crypto_larval_lookup+0x30/0xfe
[ 113.076671] [<c01e4278>] ? crypto_alloc_tfm+0x3d/0x71
[ 113.076671] [<c01e9114>] ? crypto_alloc_shash+0x10/0x12
[ 113.076671] [<dfc92429>] ? padlock_cra_init+0x1c/0x4b [padlock_sha]
[ 113.076671] [<c01e420c>] ? crypto_create_tfm+0x59/0x88
[ 113.076671] [<c01e4eb4>] ? crypto_spawn_tfm2+0x20/0x37
[ 113.076671] [<c01ec551>] ? hmac_init_tfm+0x1b/0x46
[ 113.076671] [<c01e420c>] ? crypto_create_tfm+0x59/0x88
[ 113.076671] [<c01ea88b>] ? alg_test_hash+0x3f/0x55
[ 113.076671] [<c01ec06b>] ? alg_test+0x168/0x1e9
[ 113.076671] [<c011c37e>] ? pick_next_task_fair+0x8b/0xb5
[ 113.076671] [<c0440b4e>] ? schedule+0x1db/0x382
[ 113.076671] [<c01e9a0e>] ? cryptomgr_test+0x0/0x3e
[ 113.076671] [<c01e9a30>] ? cryptomgr_test+0x22/0x3e
[ 113.076671] [<c01308ef>] ? kthread+0x60/0x65
[ 113.076671] [<c013088f>] ? kthread+0x0/0x65
[ 113.076671] [<c0103147>] ? kernel_thread_helper+0x7/0x10
[ 113.076671] Code: 41 04 89 c8 8b 52 34 ff 52 d4 5d c3 55 89 e5 53 8d 58 08
8b 40 08 8b 48 34 89 d8 ff 51 e8 5b 5d c3 55 89 e5 53 8d 58 08 8b 40 08 <8b>
48 34 89 d8 ff 51 ec 5b 5d c3 55 89 e5 53 8d 58 08 8b 40 04
[ 113.076671] EIP: [<dfc92042>] padlock_sha_import+0xa/0x15 [padlock_sha]
SS:ESP 0068:cdb77d7c
[ 113.076671] CR2: 0000000000000034
[ 113.092662] ---[ end trace d25b6d64215b111e ]---
[ 123.233370] alg: hash: Failed to load transform for hmac(sha1): -4
[ 123.233472] alg: hash: Failed to load transform for hmac(sha1): -4
[ 123.233538] tcrypt: one or more tests failed!



Regards,
--
Wolfgang Walter
Studentenwerk M?nchen
Anstalt des ?ffentlichen Rechts

2010-01-31 09:22:31

by Herbert Xu

[permalink] [raw]
Subject: Re: 2.6.32: padlock_sha1 and hmac broken?

On Sun, Jan 31, 2010 at 03:11:22AM +0100, Wolfgang Walter wrote:
>
> Not sure.
>
> When I do
>
> modprobe tcrypt mode=101
>
> I get a kernel oops:

Sorry, this one should have a better chance at working.

diff --git a/drivers/crypto/padlock-sha.c b/drivers/crypto/padlock-sha.c
index 0af8057..d3a27e0 100644
--- a/drivers/crypto/padlock-sha.c
+++ b/drivers/crypto/padlock-sha.c
@@ -57,6 +57,23 @@ static int padlock_sha_update(struct shash_desc *desc,
return crypto_shash_update(&dctx->fallback, data, length);
}

+static int padlock_sha_export(struct shash_desc *desc, void *out)
+{
+ struct padlock_sha_desc *dctx = shash_desc_ctx(desc);
+
+ return crypto_shash_export(&dctx->fallback, out);
+}
+
+static int padlock_sha_import(struct shash_desc *desc, const void *in)
+{
+ struct padlock_sha_desc *dctx = shash_desc_ctx(desc);
+ struct padlock_sha_ctx *ctx = crypto_shash_ctx(desc->tfm);
+
+ dctx->fallback.tfm = ctx->fallback;
+ dctx->fallback.flags = desc->flags & CRYPTO_TFM_REQ_MAY_SLEEP;
+ return crypto_shash_import(&dctx->fallback, in);
+}
+
static inline void padlock_output_block(uint32_t *src,
uint32_t *dst, size_t count)
{
@@ -235,7 +252,10 @@ static struct shash_alg sha1_alg = {
.update = padlock_sha_update,
.finup = padlock_sha1_finup,
.final = padlock_sha1_final,
+ .export = padlock_sha_export,
+ .import = padlock_sha_import,
.descsize = sizeof(struct padlock_sha_desc),
+ .statesize = sizeof(struct sha1_state),
.base = {
.cra_name = "sha1",
.cra_driver_name = "sha1-padlock",
@@ -256,7 +276,10 @@ static struct shash_alg sha256_alg = {
.update = padlock_sha_update,
.finup = padlock_sha256_finup,
.final = padlock_sha256_final,
+ .export = padlock_sha_export,
+ .import = padlock_sha_import,
.descsize = sizeof(struct padlock_sha_desc),
+ .statesize = sizeof(struct sha256_state),
.base = {
.cra_name = "sha256",
.cra_driver_name = "sha256-padlock",

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

2010-01-31 13:38:00

by Wolfgang Walter

[permalink] [raw]
Subject: Re: 2.6.32: padlock_sha1 and hmac broken?

Am Sonntag, 31. Januar 2010 schrieb Herbert Xu:
> On Sun, Jan 31, 2010 at 03:11:22AM +0100, Wolfgang Walter wrote:
> > Not sure.
> >
> > When I do
> >
> > modprobe tcrypt mode=101
> >
> > I get a kernel oops:
>
> Sorry, this one should have a better chance at working.
>
> diff --git a/drivers/crypto/padlock-sha.c b/drivers/crypto/padlock-sha.c
> index 0af8057..d3a27e0 100644
> --- a/drivers/crypto/padlock-sha.c
> +++ b/drivers/crypto/padlock-sha.c
> @@ -57,6 +57,23 @@ static int padlock_sha_update(struct shash_desc *desc,
> return crypto_shash_update(&dctx->fallback, data, length);
> }
>
> +static int padlock_sha_export(struct shash_desc *desc, void *out)
> +{
> + struct padlock_sha_desc *dctx = shash_desc_ctx(desc);
> +
> + return crypto_shash_export(&dctx->fallback, out);
> +}
> +
> +static int padlock_sha_import(struct shash_desc *desc, const void *in)
> +{
> + struct padlock_sha_desc *dctx = shash_desc_ctx(desc);
> + struct padlock_sha_ctx *ctx = crypto_shash_ctx(desc->tfm);
> +
> + dctx->fallback.tfm = ctx->fallback;
> + dctx->fallback.flags = desc->flags & CRYPTO_TFM_REQ_MAY_SLEEP;
> + return crypto_shash_import(&dctx->fallback, in);
> +}
> +
> static inline void padlock_output_block(uint32_t *src,
> uint32_t *dst, size_t count)
> {
> @@ -235,7 +252,10 @@ static struct shash_alg sha1_alg = {
> .update = padlock_sha_update,
> .finup = padlock_sha1_finup,
> .final = padlock_sha1_final,
> + .export = padlock_sha_export,
> + .import = padlock_sha_import,
> .descsize = sizeof(struct padlock_sha_desc),
> + .statesize = sizeof(struct sha1_state),
> .base = {
> .cra_name = "sha1",
> .cra_driver_name = "sha1-padlock",
> @@ -256,7 +276,10 @@ static struct shash_alg sha256_alg = {
> .update = padlock_sha_update,
> .finup = padlock_sha256_finup,
> .final = padlock_sha256_final,
> + .export = padlock_sha_export,
> + .import = padlock_sha_import,
> .descsize = sizeof(struct padlock_sha_desc),
> + .statesize = sizeof(struct sha256_state),
> .base = {
> .cra_name = "sha256",
> .cra_driver_name = "sha256-padlock",
>
> Thanks,

This patch works. /proc/crypto shows

name : authenc(hmac(sha1),cbc(aes))
driver : authenc(hmac(sha1-padlock),cbc-aes-padlock)
module : kernel
priority : 4300
refcnt : 85
selftest : passed
type : aead
async : yes
blocksize : 16
ivsize : 16
maxauthsize : 20
geniv : <built-in>

....
....

and

modprobe tcrypt mode=101

logs nothing.

Thanks a lot,
--
Wolfgang Walter
Studentenwerk M?nchen
Anstalt des ?ffentlichen Rechts

2010-01-31 23:18:14

by Herbert Xu

[permalink] [raw]
Subject: Re: 2.6.32: padlock_sha1 and hmac broken?

On Sun, Jan 31, 2010 at 02:37:55PM +0100, Wolfgang Walter wrote:
>
> This patch works. /proc/crypto shows
>
> name : authenc(hmac(sha1),cbc(aes))
> driver : authenc(hmac(sha1-padlock),cbc-aes-padlock)
> module : kernel
> priority : 4300
> refcnt : 85
> selftest : passed
> type : aead
> async : yes
> blocksize : 16
> ivsize : 16
> maxauthsize : 20
> geniv : <built-in>

Thank you for checking!

I've added this patch into crypto-2.6 and will push to stable
when it is merged upstream.

commit 137bb21e8f03758eeffb464a5033338f34446b4e
Author: Herbert Xu <[email protected]>
Date: Mon Feb 1 09:17:56 2010 +1100

crypto: padlock-sha - Add import/export support

As the padlock driver for SHA uses a software fallback to perform
partial hashing, it must implement custom import/export functions.
Otherwise hmac which depends on import/export for prehashing will
not work with padlock-sha.

Reported-by: Wolfgang Walter <[email protected]>
Signed-off-by: Herbert Xu <[email protected]>

diff --git a/drivers/crypto/padlock-sha.c b/drivers/crypto/padlock-sha.c
index 0af8057..d3a27e0 100644
--- a/drivers/crypto/padlock-sha.c
+++ b/drivers/crypto/padlock-sha.c
@@ -57,6 +57,23 @@ static int padlock_sha_update(struct shash_desc *desc,
return crypto_shash_update(&dctx->fallback, data, length);
}

+static int padlock_sha_export(struct shash_desc *desc, void *out)
+{
+ struct padlock_sha_desc *dctx = shash_desc_ctx(desc);
+
+ return crypto_shash_export(&dctx->fallback, out);
+}
+
+static int padlock_sha_import(struct shash_desc *desc, const void *in)
+{
+ struct padlock_sha_desc *dctx = shash_desc_ctx(desc);
+ struct padlock_sha_ctx *ctx = crypto_shash_ctx(desc->tfm);
+
+ dctx->fallback.tfm = ctx->fallback;
+ dctx->fallback.flags = desc->flags & CRYPTO_TFM_REQ_MAY_SLEEP;
+ return crypto_shash_import(&dctx->fallback, in);
+}
+
static inline void padlock_output_block(uint32_t *src,
uint32_t *dst, size_t count)
{
@@ -235,7 +252,10 @@ static struct shash_alg sha1_alg = {
.update = padlock_sha_update,
.finup = padlock_sha1_finup,
.final = padlock_sha1_final,
+ .export = padlock_sha_export,
+ .import = padlock_sha_import,
.descsize = sizeof(struct padlock_sha_desc),
+ .statesize = sizeof(struct sha1_state),
.base = {
.cra_name = "sha1",
.cra_driver_name = "sha1-padlock",
@@ -256,7 +276,10 @@ static struct shash_alg sha256_alg = {
.update = padlock_sha_update,
.finup = padlock_sha256_finup,
.final = padlock_sha256_final,
+ .export = padlock_sha_export,
+ .import = padlock_sha_import,
.descsize = sizeof(struct padlock_sha_desc),
+ .statesize = sizeof(struct sha256_state),
.base = {
.cra_name = "sha256",
.cra_driver_name = "sha256-padlock",


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