kernel BUG() when using OCF library
From: Ico <hidden>
Date: 2007-08-06 17:09:50
Hello,
I've been trying to use OCF in one of my projects, but I run into a nasty
problem I can't seem to solve. I setup a session and call the crypto_dispatch()
function, after which a kernel BUG() occurs in one of the linux crypto.h
functions. There's problably something I forgot or did not properly initialize,
I hope anybody can give me a hint on how to debug and solve this.
The following is an extract of my code involving the crypto library:
/* Create session */
memset(&ci, 0, sizeof(ci));
ci.cri_alg = CRYPTO_ARC4;
ci.cri_klen = (sizeof(info->key)-1) * 8;
ci.cri_key = info->key;
r = crypto_newsession(&info->crypto_sid_cipher, &ci, 0);
...
char iv[32];
/* Reserve and create request */
co = crypto_getreq(1);
co->crp_sid = info->crypto_sid_cipher;
co->crp_ilen = skbcpy->tail - skbcpy->nh.raw;
co->crp_olen = skbcpy->tail - skbcpy->nh.raw;
co->crp_callback = ebt_crypt_done;
co->crp_flags = 0;
co->crp_buf = skbcpy->nh.raw;
co->crp_opaque = (void *)skbcpy;
co->crp_desc->crd_skip = 0;
co->crp_desc->crd_len = co->crp_ilen;
co->crp_desc->crd_inject = (void *)iv;
co->crp_desc->crd_flags = CRD_F_ENCRYPT;
co->crp_desc->crd_alg = CRYPTO_ARC4;
/* Dispatch */
r = crypto_dispatch(co);
The call to crypto_dispatch results in a kernel BUG message:
kernel BUG at include/linux/crypto.h:364!
...
[<c00e2bcc>] (__bug+0x0/0x58) from [<bf21d350>] (swcr_process+0xb18/0xc84 [cryptosoft])
[<bf21c838>] (swcr_process+0x0/0xc84 [cryptosoft]) from [<bf118170>] (crypto_invoke+0x17c/0x1a8 [ocf])
[<bf117ff4>] (crypto_invoke+0x0/0x1a8 [ocf]) from [<bf11776c>] (crypto_dispatch+0x154/0x2c8 [ocf])
[<bf117618>] (crypto_dispatch+0x0/0x2c8 [ocf]) from [<bf11f604>] (ebt_crypt_target+0x3a0/0x434 [ebt_crypt])
The snippet from crypto.h:
358: static inline int crypto_cipher_encrypt_iv(struct crypto_tfm *tfm,
359: struct scatterlist *dst,
360: struct scatterlist *src,
361: unsigned int nbytes, u8 *iv)
362: {
363: BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_CIPHER);
364: BUG_ON(tfm->crt_cipher.cit_mode == CRYPTO_TFM_MODE_ECB);
365: return tfm->crt_cipher.cit_encrypt_iv(tfm, dst, src, nbytes, iv);
366: }
Any hints ?
Thank you very much for your time,
Ico
--
:wq
^X^Cy^K^X^C^C^C^C