Re: [PATCH] ip_options_compile: properly handle unaligned pointer
From: David Miller <davem@davemloft.net>
Date: 2011-05-31 22:14:34
Also in:
lkml
From: David Miller <davem@davemloft.net>
Date: 2011-05-31 22:14:34
Also in:
lkml
From: Chris Metcalf <redacted> Date: Sun, 29 May 2011 16:55:44 -0400
The current code takes an unaligned pointer and does htonl() on it to make it big-endian, then does a memcpy(). The problem is that the compiler decides that since the pointer is to a __be32, it is legal to optimize the copy into a processor word store. However, on an architecture that does not handled unaligned writes in kernel space, this produces an unaligned exception fault. The solution is to track the pointer as a "char *" (which removes a bunch of unpleasant casts in any case), and then just use put_unaligned_be32() to write the value to memory. Signed-off-by: Chris Metcalf <redacted>
Applied, thanks Chris.