netfilter: possible unaligned packet header in ip_route_me_harder
authorPaul Guo <ggang@tilera.com>
Mon, 14 Nov 2011 11:00:54 +0000 (19:00 +0800)
committerPablo Neira Ayuso <pablo@netfilter.org>
Mon, 21 Nov 2011 17:46:18 +0000 (18:46 +0100)
commit5e2afba4ecd7931ea06e6fa116ab28e6943dbd42
treea497953b9aca136e0276b3315630eaf16831d8fd
parent648ae8e53d58ed1b667db173a2d4ff2132a3b529
netfilter: possible unaligned packet header in ip_route_me_harder

This patch tries to fix the following issue in netfilter:
In ip_route_me_harder(), we invoke pskb_expand_head() that
rellocates new header with additional head room which can break
the alignment of the original packet header.

In one of my NAT test case, the NIC port for internal hosts is
configured with vlan and the port for external hosts is with
general configuration. If we ping an external "unknown" hosts from an
internal host, an icmp packet will be sent. We find that in
icmp_send()->...->ip_route_me_harder()->pskb_expand_head(), hh_len=18
and current headroom (skb_headroom(skb)) of the packet is 16. After
calling pskb_expand_head() the packet header becomes to be unaligned
and then our system (arch/tile) panics immediately.

Signed-off-by: Paul Guo <ggang@tilera.com>
Acked-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
net/ipv4/netfilter.c