• Chris Metcalf's avatar
    ip_options_compile: properly handle unaligned pointer · 48bdf072
    Chris Metcalf authored
    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: default avatarChris Metcalf <cmetcalf@tilera.com>
    Signed-off-by: default avatarDavid S. Miller <davem@zippy.davemloft.net>
    48bdf072
ip_options.c 14.9 KB