[lkml]   [2004]   [Feb]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Subjectcryptoapi highmem bug

    someone noticed strange corruptions with dm-crypt and highmem. After I
    found out that I could force my machine to use highmem even though it
    only has 256MB, I finally found the problem after some debugging:

    The problem is in cbc_process (well, partly):

    > const int need_stack = (src == dst);
    > u8 stack[need_stack ? crypto_tfm_alg_blocksize(tfm) : 0];
    > u8 *buf = need_stack ? stack : dst;

    src == dst fails if the page was in highmem because crypto_kmap will
    assign two different virtual addresses for the same page.

    The result is data corruption.

    How could this be fixed?

    scapperwalk_map could check if this page was already mapped (walk_in)
    and reuse the virtual address if so. So a single page is only mapped
    once and the check in cbc_process will work.

    I can really use the src == dst case because I would need to allocate
    unnecessary buffers (at least 512 bytes at a time and per cpu).

    (I just hacked dm-crypt to allocate 512 bytes on the stack and use it
    temporarily and kmap around myself to copy it back and the problem is
    gone. Ugly.)

    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to
    More majordomo info at
    Please read the FAQ at

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