Skip to content

Commit

Permalink
crypto: lrw - Fix big endian support
Browse files Browse the repository at this point in the history
It turns out that LRW has never worked properly on big endian.
This was never discussed because nobody actually used it that
way.  In fact, it was only discovered when Geert Uytterhoeven
loaded it through tcrypt which failed the test on it.

The fix is straightforward, on big endian the to find the nth
bit we should be grouping them by words instead of bytes.  So
setbit128_bbe should xor with 128 - BITS_PER_LONG instead of
128 - BITS_PER_BYTE == 0x78.

Tested-by: Geert Uytterhoeven <[email protected]>
Signed-off-by: Herbert Xu <[email protected]>
  • Loading branch information
herbertx committed Feb 17, 2009
1 parent d2f8d7e commit 8eb2dfa
Showing 1 changed file with 7 additions and 1 deletion.
8 changes: 7 additions & 1 deletion crypto/lrw.c
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,13 @@ struct priv {

static inline void setbit128_bbe(void *b, int bit)
{
__set_bit(bit ^ 0x78, b);
__set_bit(bit ^ (0x80 -
#ifdef __BIG_ENDIAN
BITS_PER_LONG
#else
BITS_PER_BYTE
#endif
), b);
}

static int setkey(struct crypto_tfm *parent, const u8 *key,
Expand Down

0 comments on commit 8eb2dfa

Please sign in to comment.