When initializing 'maxp' in sh_eth_soft_swap(), the buffer length needs to be rounded up -- that's just asking for DIV_ROUND_UP()! Signed-off-by: Sergei Shtylyov <sergei.shtylyov@xxxxxxxxxxxxxxxxxx> --- drivers/net/ethernet/renesas/sh_eth.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) Index: net-next/drivers/net/ethernet/renesas/sh_eth.c =================================================================== --- net-next.orig/drivers/net/ethernet/renesas/sh_eth.c +++ net-next/drivers/net/ethernet/renesas/sh_eth.c @@ -464,7 +464,7 @@ static void sh_eth_soft_swap(char *src, { #ifdef __LITTLE_ENDIAN u32 *p = (u32 *)src; - u32 *maxp = p + ((len + sizeof(u32) - 1) / sizeof(u32)); + u32 *maxp = p + DIV_ROUND_UP(len, sizeof(u32)); for (; p < maxp; p++) *p = swab32(*p);