sparc32: Fixed unaligned memory copying in function __csum_partial_copy_sparc_generic
authorTkhai Kirill <tkhai@yandex.ru>
Tue, 10 May 2011 02:31:41 +0000 (02:31 +0000)
committerDavid S. Miller <davem@davemloft.net>
Thu, 12 May 2011 04:35:04 +0000 (21:35 -0700)
commitb1054282d752c5a026e2c0450616ebf37fc0413e
treed88dcef782fc8e33674109c5c82fb37f2829abdc
parentf486b3dc2d048e7309a733f97eb9f9f83d586df2
sparc32: Fixed unaligned memory copying in function __csum_partial_copy_sparc_generic

When we are in the label cc_dword_align, registers %o0 and %o1 have the same last 2 bits,
but it's not guaranteed one of them is zero. So we can get unaligned memory access
in label ccte. Example of parameters which lead to this:
%o0=0x7ff183e9, %o1=0x8e709e7d, %g1=3

With the parameters I had a memory corruption, when the additional 5 bytes were rewritten.
This patch corrects the error.

One comment to the patch. We don't care about the third bit in %o1, because cc_end_cruft
stores word or less.

Signed-off-by: Tkhai Kirill <tkhai@yandex.ru>
Signed-off-by: David S. Miller <davem@davemloft.net>
arch/sparc/lib/checksum_32.S