lkml.org 
[lkml]   [2004]   [Feb]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [PATCH/proposal] dm-crypt: add digest-based iv generation mode
    On Tue, Feb 24, 2004 at 08:43:59PM +0100, Christophe Saout wrote:
    >
    > BTW: I think there's a bug in the ipv6 code, it uses spin_lock to
    > protect itself, this will cause a sleep-inside-spinlock warning. (found
    > while grepping through the source for other cryptoapi users)

    Yep, I sent this to James several months ago but it appears we've both
    forgotten about it:

    diff -urN -X dontdiff orig/crypto/api.c work/crypto/api.c
    --- orig/crypto/api.c 2003-07-13 22:38:38.000000000 -0500
    +++ work/crypto/api.c 2003-08-14 01:53:07.000000000 -0500
    @@ -53,7 +53,8 @@

    static int crypto_init_flags(struct crypto_tfm *tfm, u32 flags)
    {
    - tfm->crt_flags = 0;
    + tfm->crt_flags = flags & CRYPTO_TFM_API_MASK;
    + flags &= ~CRYPTO_TFM_API_MASK;

    switch (crypto_tfm_alg_type(tfm)) {
    case CRYPTO_ALG_TYPE_CIPHER:
    diff -urN -X dontdiff orig/crypto/internal.h work/crypto/internal.h
    --- orig/crypto/internal.h 2003-07-13 22:29:11.000000000 -0500
    +++ work/crypto/internal.h 2003-08-14 01:53:28.000000000 -0500
    @@ -37,7 +37,7 @@

    static inline void crypto_yield(struct crypto_tfm *tfm)
    {
    - if (!in_softirq())
    + if (tfm->crt_flags & CRYPTO_TFM_API_YIELD)
    cond_resched();
    }

    diff -urN -X dontdiff orig/include/linux/crypto.h work/include/linux/crypto.h
    --- orig/include/linux/crypto.h 2003-07-13 22:32:32.000000000 -0500
    +++ work/include/linux/crypto.h 2003-08-14 01:53:07.000000000 -0500
    @@ -36,7 +36,8 @@
    */
    #define CRYPTO_TFM_MODE_MASK 0x000000ff
    #define CRYPTO_TFM_REQ_MASK 0x000fff00
    -#define CRYPTO_TFM_RES_MASK 0xfff00000
    +#define CRYPTO_TFM_RES_MASK 0x7ff00000
    +#define CRYPTO_TFM_API_MASK 0x80000000

    #define CRYPTO_TFM_MODE_ECB 0x00000001
    #define CRYPTO_TFM_MODE_CBC 0x00000002
    @@ -50,6 +51,9 @@
    #define CRYPTO_TFM_RES_BAD_BLOCK_LEN 0x00800000
    #define CRYPTO_TFM_RES_BAD_FLAGS 0x01000000

    +/* Allow for rescheduling after processing each sg element */
    +#define CRYPTO_TFM_API_YIELD 0x80000000
    +
    /*
    * Miscellaneous stuff.
    */
    diff -urN -X dontdiff orig/include/linux/sched.h work/include/linux/sched.h
    --- orig/include/linux/sched.h 2003-08-14 01:53:04.000000000 -0500
    +++ work/include/linux/sched.h 2003-08-14 01:53:07.000000000 -0500
    @@ -824,6 +824,7 @@
    extern void __cond_resched(void);
    static inline void cond_resched(void)
    {
    + might_sleep();
    if (need_resched())
    __cond_resched();
    }
    > > Something like:
    > >
    > > /* calculate the size of a tfm so that users can manage their own
    > > copies */
    > >
    > > int crypto_alg_size(const char *name);
    >
    > crypto_tfm_size?

    Sure.

    > > /* copy a TFM to a user-managed buffer, possibly on stack, with proper
    > > internal reference counting and any other necessary magic, size checks
    > > against boneheaded buffer sizing */
    > >
    > > crypto_copy_tfm(char *dst, const struct crypto_tfm *src, int size);
    > >
    > > /* do all the necessary bookkeeping to release a user-managed TFM, use
    > > char pointer to avoid alloc/free mismatch */
    > >
    > > crypto_copy_cleanup_tfm(char *usertfm);
    >
    > Yes, I thought of something like this.

    Ok, I might get to this by this afternoon.

    --
    Matt Mackall : http://www.selenic.com : Linux development and consulting
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2005-03-22 14:01    [W:0.029 / U:59.352 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site