* [PATCH crypto -v4 1/2] AES-NI: Add support to access underlying blkcipher under cryptd ablkcipher
@ 2009-01-15 8:28 Huang Ying
2009-01-15 8:47 ` Herbert Xu
0 siblings, 1 reply; 6+ messages in thread
From: Huang Ying @ 2009-01-15 8:28 UTC (permalink / raw)
To: Herbert Xu; +Cc: Sebastian Siewior, linux-kernel, linux-crypto
[-- Attachment #1: Type: text/plain, Size: 2801 bytes --]
cryptd_alloc_ablkcipher() will allocate a cryptd-ed ablkcipher for
specified algorithm name. The new allocated one is guaranteed to be
cryptd-ed ablkcipher, so the blkcipher underlying can be gotten via
cryptd_ablkcipher_child().
Signed-off-by: Huang Ying <ying.huang@intel.com>
---
crypto/cryptd.c | 30 ++++++++++++++++++++++++++++++
include/crypto/algapi.h | 16 ++++++++++++++++
2 files changed, 46 insertions(+)
--- a/crypto/cryptd.c
+++ b/crypto/cryptd.c
@@ -537,6 +537,36 @@ static struct crypto_template cryptd_tmp
.module = THIS_MODULE,
};
+struct cryptd_ablkcipher *cryptd_alloc_ablkcipher(const char *alg_name,
+ u32 type, u32 mask)
+{
+ char cryptd_alg_name[CRYPTO_MAX_ALG_NAME];
+ struct crypto_ablkcipher *tfm;
+
+ if (snprintf(cryptd_alg_name, CRYPTO_MAX_ALG_NAME,
+ "cryptd(%s)", alg_name) >= CRYPTO_MAX_ALG_NAME)
+ return ERR_PTR(-EINVAL);
+ tfm = crypto_alloc_ablkcipher(cryptd_alg_name, type, mask);
+ BUG_ON(crypto_ablkcipher_tfm(tfm)->__crt_alg->cra_module !=
+ THIS_MODULE);
+
+ return __cryptd_ablkcipher_cast(tfm);
+}
+EXPORT_SYMBOL_GPL(cryptd_alloc_ablkcipher);
+
+struct crypto_blkcipher *cryptd_ablkcipher_child(struct cryptd_ablkcipher *tfm)
+{
+ struct cryptd_blkcipher_ctx *ctx = crypto_ablkcipher_ctx(&tfm->base);
+ return ctx->child;
+}
+EXPORT_SYMBOL_GPL(cryptd_ablkcipher_child);
+
+void cryptd_free_ablkcipher(struct cryptd_ablkcipher *tfm)
+{
+ crypto_free_ablkcipher(&tfm->base);
+}
+EXPORT_SYMBOL_GPL(cryptd_free_ablkcipher);
+
static inline int cryptd_create_thread(struct cryptd_state *state,
int (*fn)(void *data), const char *name)
{
--- a/include/crypto/algapi.h
+++ b/include/crypto/algapi.h
@@ -94,6 +94,10 @@ struct blkcipher_walk {
unsigned int blocksize;
};
+struct cryptd_ablkcipher {
+ struct crypto_ablkcipher base;
+};
+
extern const struct crypto_type crypto_ablkcipher_type;
extern const struct crypto_type crypto_aead_type;
extern const struct crypto_type crypto_blkcipher_type;
@@ -145,6 +149,18 @@ int blkcipher_walk_virt_block(struct blk
struct blkcipher_walk *walk,
unsigned int blocksize);
+static inline struct cryptd_ablkcipher *__cryptd_ablkcipher_cast(
+ struct crypto_ablkcipher *tfm)
+{
+ return (struct cryptd_ablkcipher *)tfm;
+}
+
+/* alg_name should be algorithm to be cryptd-ed */
+struct cryptd_ablkcipher *cryptd_alloc_ablkcipher(const char *alg_name,
+ u32 type, u32 mask);
+struct crypto_blkcipher *cryptd_ablkcipher_child(struct cryptd_ablkcipher *tfm);
+void cryptd_free_ablkcipher(struct cryptd_ablkcipher *tfm);
+
static inline void *crypto_tfm_ctx_aligned(struct crypto_tfm *tfm)
{
unsigned long addr = (unsigned long)crypto_tfm_ctx(tfm);
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 197 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread* Re: [PATCH crypto -v4 1/2] AES-NI: Add support to access underlying blkcipher under cryptd ablkcipher
2009-01-15 8:28 [PATCH crypto -v4 1/2] AES-NI: Add support to access underlying blkcipher under cryptd ablkcipher Huang Ying
@ 2009-01-15 8:47 ` Herbert Xu
2009-01-15 9:21 ` Huang Ying
0 siblings, 1 reply; 6+ messages in thread
From: Herbert Xu @ 2009-01-15 8:47 UTC (permalink / raw)
To: Huang Ying; +Cc: Sebastian Siewior, linux-kernel, linux-crypto
On Thu, Jan 15, 2009 at 04:28:33PM +0800, Huang Ying wrote:
>
> + tfm = crypto_alloc_ablkcipher(cryptd_alg_name, type, mask);
> + BUG_ON(crypto_ablkcipher_tfm(tfm)->__crt_alg->cra_module !=
> + THIS_MODULE);
You need to check whether tfm is an error before dereferencing it.
Also it's probably better to free the tfm and return an error rather
than invoking BUG.
> --- a/include/crypto/algapi.h
> +++ b/include/crypto/algapi.h
Please create a new file for this, e.g., include/crypto/cryptd.h.
Thanks,
--
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
^ permalink raw reply [flat|nested] 6+ messages in thread* Re: [PATCH crypto -v4 1/2] AES-NI: Add support to access underlying blkcipher under cryptd ablkcipher
2009-01-15 8:47 ` Herbert Xu
@ 2009-01-15 9:21 ` Huang Ying
2009-01-15 9:23 ` Herbert Xu
0 siblings, 1 reply; 6+ messages in thread
From: Huang Ying @ 2009-01-15 9:21 UTC (permalink / raw)
To: Herbert Xu
Cc: Sebastian Siewior, linux-kernel@vger.kernel.org,
linux-crypto@vger.kernel.org
[-- Attachment #1: Type: text/plain, Size: 769 bytes --]
On Thu, 2009-01-15 at 16:47 +0800, Herbert Xu wrote:
> On Thu, Jan 15, 2009 at 04:28:33PM +0800, Huang Ying wrote:
> >
> > + tfm = crypto_alloc_ablkcipher(cryptd_alg_name, type, mask);
> > + BUG_ON(crypto_ablkcipher_tfm(tfm)->__crt_alg->cra_module !=
> > + THIS_MODULE);
>
> You need to check whether tfm is an error before dereferencing it.
> Also it's probably better to free the tfm and return an error rather
> than invoking BUG.
Why do we need this check? Someone else may register cryptd template?
Which error number should be return? -EINVAL?
> > --- a/include/crypto/algapi.h
> > +++ b/include/crypto/algapi.h
>
> Please create a new file for this, e.g., include/crypto/cryptd.h.
OK. I will do that.
Best Regards,
Huang Ying
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 197 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH crypto -v4 1/2] AES-NI: Add support to access underlying blkcipher under cryptd ablkcipher
2009-01-15 9:21 ` Huang Ying
@ 2009-01-15 9:23 ` Herbert Xu
2009-01-15 9:30 ` Huang Ying
0 siblings, 1 reply; 6+ messages in thread
From: Herbert Xu @ 2009-01-15 9:23 UTC (permalink / raw)
To: Huang Ying
Cc: Sebastian Siewior, linux-kernel@vger.kernel.org,
linux-crypto@vger.kernel.org
On Thu, Jan 15, 2009 at 05:21:47PM +0800, Huang Ying wrote:
> On Thu, 2009-01-15 at 16:47 +0800, Herbert Xu wrote:
> > On Thu, Jan 15, 2009 at 04:28:33PM +0800, Huang Ying wrote:
> > >
> > > + tfm = crypto_alloc_ablkcipher(cryptd_alg_name, type, mask);
> > > + BUG_ON(crypto_ablkcipher_tfm(tfm)->__crt_alg->cra_module !=
> > > + THIS_MODULE);
> >
> > You need to check whether tfm is an error before dereferencing it.
> > Also it's probably better to free the tfm and return an error rather
> > than invoking BUG.
>
> Why do we need this check? Someone else may register cryptd template?
> Which error number should be return? -EINVAL?
-ENOMEM for example.
Cheers,
--
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
^ permalink raw reply [flat|nested] 6+ messages in thread* Re: [PATCH crypto -v4 1/2] AES-NI: Add support to access underlying blkcipher under cryptd ablkcipher
2009-01-15 9:23 ` Herbert Xu
@ 2009-01-15 9:30 ` Huang Ying
2009-01-15 9:49 ` Herbert Xu
0 siblings, 1 reply; 6+ messages in thread
From: Huang Ying @ 2009-01-15 9:30 UTC (permalink / raw)
To: Herbert Xu
Cc: Sebastian Siewior, linux-kernel@vger.kernel.org,
linux-crypto@vger.kernel.org
[-- Attachment #1: Type: text/plain, Size: 1110 bytes --]
On Thu, 2009-01-15 at 17:23 +0800, Herbert Xu wrote:
> On Thu, Jan 15, 2009 at 05:21:47PM +0800, Huang Ying wrote:
> > On Thu, 2009-01-15 at 16:47 +0800, Herbert Xu wrote:
> > > On Thu, Jan 15, 2009 at 04:28:33PM +0800, Huang Ying wrote:
> > > >
> > > > + tfm = crypto_alloc_ablkcipher(cryptd_alg_name, type, mask);
> > > > + BUG_ON(crypto_ablkcipher_tfm(tfm)->__crt_alg->cra_module !=
> > > > + THIS_MODULE);
> > >
> > > You need to check whether tfm is an error before dereferencing it.
> > > Also it's probably better to free the tfm and return an error rather
> > > than invoking BUG.
> >
> > Why do we need this check? Someone else may register cryptd template?
> > Which error number should be return? -EINVAL?
>
> -ENOMEM for example.
You mean something as follow:
if (crypto_ablkcipher_tfm(tfm)->__crt_alg->cra_module != THIS_MODULE)
return ERR_PTR(-ENOMEM);
I think -ENOMEM is not appropriate for this check.
Sorry for ask you same question twice. Why do we need this check? Some
other module may register cryptd template?
Best Regards,
Huang Ying
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 197 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2009-01-15 9:49 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-01-15 8:28 [PATCH crypto -v4 1/2] AES-NI: Add support to access underlying blkcipher under cryptd ablkcipher Huang Ying
2009-01-15 8:47 ` Herbert Xu
2009-01-15 9:21 ` Huang Ying
2009-01-15 9:23 ` Herbert Xu
2009-01-15 9:30 ` Huang Ying
2009-01-15 9:49 ` Herbert Xu
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox