diff options
| author | Patrick McHardy <kaber@trash.net> | 2010-05-14 15:18:17 -0400 |
|---|---|---|
| committer | Patrick McHardy <kaber@trash.net> | 2010-05-14 15:18:17 -0400 |
| commit | a1d7c1b4b8dfbc5ecadcff9284d64bb6ad4c0196 (patch) | |
| tree | ef5564d5f91d99f8af1bfa16118191b7020c8c84 | |
| parent | 736d58e3a2245ac2779fe0f278f8735bcf33ca8d (diff) | |
netfilter: nf_ct_sip: handle non-linear skbs
Handle non-linear skbs by linearizing them instead of silently failing.
Long term the helper should be fixed to either work with non-linear skbs
directly by using the string search API or work on a copy of the data.
Based on patch by Jason Gunthorpe <jgunthorpe@obsidianresearch.com>
Signed-off-by: Patrick McHardy <kaber@trash.net>
| -rw-r--r-- | net/netfilter/nf_conntrack_sip.c | 12 |
1 files changed, 4 insertions, 8 deletions
diff --git a/net/netfilter/nf_conntrack_sip.c b/net/netfilter/nf_conntrack_sip.c index b20f4275893c..53d892210a04 100644 --- a/net/netfilter/nf_conntrack_sip.c +++ b/net/netfilter/nf_conntrack_sip.c | |||
| @@ -1393,10 +1393,8 @@ static int sip_help_tcp(struct sk_buff *skb, unsigned int protoff, | |||
| 1393 | 1393 | ||
| 1394 | nf_ct_refresh(ct, skb, sip_timeout * HZ); | 1394 | nf_ct_refresh(ct, skb, sip_timeout * HZ); |
| 1395 | 1395 | ||
| 1396 | if (skb_is_nonlinear(skb)) { | 1396 | if (unlikely(skb_linearize(skb))) |
| 1397 | pr_debug("Copy of skbuff not supported yet.\n"); | 1397 | return NF_DROP; |
| 1398 | return NF_ACCEPT; | ||
| 1399 | } | ||
| 1400 | 1398 | ||
| 1401 | dptr = skb->data + dataoff; | 1399 | dptr = skb->data + dataoff; |
| 1402 | datalen = skb->len - dataoff; | 1400 | datalen = skb->len - dataoff; |
| @@ -1455,10 +1453,8 @@ static int sip_help_udp(struct sk_buff *skb, unsigned int protoff, | |||
| 1455 | 1453 | ||
| 1456 | nf_ct_refresh(ct, skb, sip_timeout * HZ); | 1454 | nf_ct_refresh(ct, skb, sip_timeout * HZ); |
| 1457 | 1455 | ||
| 1458 | if (skb_is_nonlinear(skb)) { | 1456 | if (unlikely(skb_linearize(skb))) |
| 1459 | pr_debug("Copy of skbuff not supported yet.\n"); | 1457 | return NF_DROP; |
| 1460 | return NF_ACCEPT; | ||
| 1461 | } | ||
| 1462 | 1458 | ||
| 1463 | dptr = skb->data + dataoff; | 1459 | dptr = skb->data + dataoff; |
| 1464 | datalen = skb->len - dataoff; | 1460 | datalen = skb->len - dataoff; |
