diff options
author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-06-24 12:42:15 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-06-24 12:42:15 -0400 |
commit | b2510b1696730307e7a388ea04132236ab45ac20 (patch) | |
tree | bfdf9d950f52f1fba9316452b9576e561dca42d3 /net | |
parent | c8cbee61c9d53ee28473ad33bbb54f6a88f5e3af (diff) | |
parent | 5b5a60da281c767196427ce8144deae6ec46b389 (diff) |
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
* 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6:
[NET]: Make skb_seq_read unmap the last fragment
[NET]: Re-enable irqs before pushing pending DMA requests
[TCP] tcp_read_sock: Allow recv_actor() return return negative error value.
[PPP]: Fix osize too small errors when decoding mppe.
[PPP]: Revert 606f585e363527da9feaed79465132c0c661fd9e
[TIPC]: Fix infinite loop in netlink handler
[SKBUFF]: Fix incorrect config #ifdef around skb_copy_secmark
[IPV4]: include sysctl.h from inetdevice.h
[IPV6] NDISC: Fix thinko to control Router Preference support.
[NETFILTER]: nfctnetlink: Don't allow to change helper
[NETFILTER]: nf_conntrack_sip: add missing message types containing RTP info
Diffstat (limited to 'net')
-rw-r--r-- | net/core/dev.c | 2 | ||||
-rw-r--r-- | net/core/skbuff.c | 7 | ||||
-rw-r--r-- | net/ipv4/tcp.c | 8 | ||||
-rw-r--r-- | net/ipv6/ndisc.c | 2 | ||||
-rw-r--r-- | net/netfilter/nf_conntrack_netlink.c | 3 | ||||
-rw-r--r-- | net/netfilter/nf_conntrack_sip.c | 3 | ||||
-rw-r--r-- | net/tipc/netlink.c | 2 |
7 files changed, 19 insertions, 8 deletions
diff --git a/net/core/dev.c b/net/core/dev.c index 26090621ea..ee051bb398 100644 --- a/net/core/dev.c +++ b/net/core/dev.c | |||
@@ -2009,6 +2009,7 @@ static void net_rx_action(struct softirq_action *h) | |||
2009 | } | 2009 | } |
2010 | } | 2010 | } |
2011 | out: | 2011 | out: |
2012 | local_irq_enable(); | ||
2012 | #ifdef CONFIG_NET_DMA | 2013 | #ifdef CONFIG_NET_DMA |
2013 | /* | 2014 | /* |
2014 | * There may not be any more sk_buffs coming right now, so push | 2015 | * There may not be any more sk_buffs coming right now, so push |
@@ -2022,7 +2023,6 @@ out: | |||
2022 | rcu_read_unlock(); | 2023 | rcu_read_unlock(); |
2023 | } | 2024 | } |
2024 | #endif | 2025 | #endif |
2025 | local_irq_enable(); | ||
2026 | return; | 2026 | return; |
2027 | 2027 | ||
2028 | softnet_break: | 2028 | softnet_break: |
diff --git a/net/core/skbuff.c b/net/core/skbuff.c index 7c6a34e21e..27cfe5fe4b 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c | |||
@@ -434,8 +434,8 @@ struct sk_buff *skb_clone(struct sk_buff *skb, gfp_t gfp_mask) | |||
434 | n->tc_verd = CLR_TC_MUNGED(n->tc_verd); | 434 | n->tc_verd = CLR_TC_MUNGED(n->tc_verd); |
435 | C(iif); | 435 | C(iif); |
436 | #endif | 436 | #endif |
437 | skb_copy_secmark(n, skb); | ||
438 | #endif | 437 | #endif |
438 | skb_copy_secmark(n, skb); | ||
439 | C(truesize); | 439 | C(truesize); |
440 | atomic_set(&n->users, 1); | 440 | atomic_set(&n->users, 1); |
441 | C(head); | 441 | C(head); |
@@ -1706,6 +1706,11 @@ next_skb: | |||
1706 | st->stepped_offset += frag->size; | 1706 | st->stepped_offset += frag->size; |
1707 | } | 1707 | } |
1708 | 1708 | ||
1709 | if (st->frag_data) { | ||
1710 | kunmap_skb_frag(st->frag_data); | ||
1711 | st->frag_data = NULL; | ||
1712 | } | ||
1713 | |||
1709 | if (st->cur_skb->next) { | 1714 | if (st->cur_skb->next) { |
1710 | st->cur_skb = st->cur_skb->next; | 1715 | st->cur_skb = st->cur_skb->next; |
1711 | st->frag_idx = 0; | 1716 | st->frag_idx = 0; |
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index cd3c7e95de..450f44bb2c 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c | |||
@@ -1064,7 +1064,11 @@ int tcp_read_sock(struct sock *sk, read_descriptor_t *desc, | |||
1064 | break; | 1064 | break; |
1065 | } | 1065 | } |
1066 | used = recv_actor(desc, skb, offset, len); | 1066 | used = recv_actor(desc, skb, offset, len); |
1067 | if (used <= len) { | 1067 | if (used < 0) { |
1068 | if (!copied) | ||
1069 | copied = used; | ||
1070 | break; | ||
1071 | } else if (used <= len) { | ||
1068 | seq += used; | 1072 | seq += used; |
1069 | copied += used; | 1073 | copied += used; |
1070 | offset += used; | 1074 | offset += used; |
@@ -1086,7 +1090,7 @@ int tcp_read_sock(struct sock *sk, read_descriptor_t *desc, | |||
1086 | tcp_rcv_space_adjust(sk); | 1090 | tcp_rcv_space_adjust(sk); |
1087 | 1091 | ||
1088 | /* Clean up data we have read: This will do ACK frames. */ | 1092 | /* Clean up data we have read: This will do ACK frames. */ |
1089 | if (copied) | 1093 | if (copied > 0) |
1090 | tcp_cleanup_rbuf(sk, copied); | 1094 | tcp_cleanup_rbuf(sk, copied); |
1091 | return copied; | 1095 | return copied; |
1092 | } | 1096 | } |
diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c index d8b36451ba..0358e6066a 100644 --- a/net/ipv6/ndisc.c +++ b/net/ipv6/ndisc.c | |||
@@ -1062,7 +1062,7 @@ static void ndisc_router_discovery(struct sk_buff *skb) | |||
1062 | pref = ra_msg->icmph.icmp6_router_pref; | 1062 | pref = ra_msg->icmph.icmp6_router_pref; |
1063 | /* 10b is handled as if it were 00b (medium) */ | 1063 | /* 10b is handled as if it were 00b (medium) */ |
1064 | if (pref == ICMPV6_ROUTER_PREF_INVALID || | 1064 | if (pref == ICMPV6_ROUTER_PREF_INVALID || |
1065 | in6_dev->cnf.accept_ra_rtr_pref) | 1065 | !in6_dev->cnf.accept_ra_rtr_pref) |
1066 | pref = ICMPV6_ROUTER_PREF_MEDIUM; | 1066 | pref = ICMPV6_ROUTER_PREF_MEDIUM; |
1067 | #endif | 1067 | #endif |
1068 | 1068 | ||
diff --git a/net/netfilter/nf_conntrack_netlink.c b/net/netfilter/nf_conntrack_netlink.c index 3f73327794..d0fe3d7698 100644 --- a/net/netfilter/nf_conntrack_netlink.c +++ b/net/netfilter/nf_conntrack_netlink.c | |||
@@ -869,8 +869,7 @@ ctnetlink_change_helper(struct nf_conn *ct, struct nfattr *cda[]) | |||
869 | return 0; | 869 | return 0; |
870 | 870 | ||
871 | if (help->helper) | 871 | if (help->helper) |
872 | /* we had a helper before ... */ | 872 | return -EBUSY; |
873 | nf_ct_remove_expectations(ct); | ||
874 | 873 | ||
875 | /* need to zero data of old helper */ | 874 | /* need to zero data of old helper */ |
876 | memset(&help->help, 0, sizeof(help->help)); | 875 | memset(&help->help, 0, sizeof(help->help)); |
diff --git a/net/netfilter/nf_conntrack_sip.c b/net/netfilter/nf_conntrack_sip.c index 7aaa8c91b2..1b5c6c1055 100644 --- a/net/netfilter/nf_conntrack_sip.c +++ b/net/netfilter/nf_conntrack_sip.c | |||
@@ -442,6 +442,9 @@ static int sip_help(struct sk_buff **pskb, | |||
442 | 442 | ||
443 | /* RTP info only in some SDP pkts */ | 443 | /* RTP info only in some SDP pkts */ |
444 | if (memcmp(dptr, "INVITE", sizeof("INVITE") - 1) != 0 && | 444 | if (memcmp(dptr, "INVITE", sizeof("INVITE") - 1) != 0 && |
445 | memcmp(dptr, "UPDATE", sizeof("UPDATE") - 1) != 0 && | ||
446 | memcmp(dptr, "SIP/2.0 180", sizeof("SIP/2.0 180") - 1) != 0 && | ||
447 | memcmp(dptr, "SIP/2.0 183", sizeof("SIP/2.0 183") - 1) != 0 && | ||
445 | memcmp(dptr, "SIP/2.0 200", sizeof("SIP/2.0 200") - 1) != 0) { | 448 | memcmp(dptr, "SIP/2.0 200", sizeof("SIP/2.0 200") - 1) != 0) { |
446 | goto out; | 449 | goto out; |
447 | } | 450 | } |
diff --git a/net/tipc/netlink.c b/net/tipc/netlink.c index 4cdafa2d1d..6a7f7b4c25 100644 --- a/net/tipc/netlink.c +++ b/net/tipc/netlink.c | |||
@@ -60,7 +60,7 @@ static int handle_cmd(struct sk_buff *skb, struct genl_info *info) | |||
60 | rep_nlh = nlmsg_hdr(rep_buf); | 60 | rep_nlh = nlmsg_hdr(rep_buf); |
61 | memcpy(rep_nlh, req_nlh, hdr_space); | 61 | memcpy(rep_nlh, req_nlh, hdr_space); |
62 | rep_nlh->nlmsg_len = rep_buf->len; | 62 | rep_nlh->nlmsg_len = rep_buf->len; |
63 | genlmsg_unicast(rep_buf, req_nlh->nlmsg_pid); | 63 | genlmsg_unicast(rep_buf, NETLINK_CB(skb).pid); |
64 | } | 64 | } |
65 | 65 | ||
66 | return 0; | 66 | return 0; |