1. 01 10月, 2008 25 次提交
    • W
      sctp: Fix to start T5-shutdown-guard timer while enter SHUTDOWN-SENT state · 536428a9
      Wei Yongjun 提交于
      RFC 4960: Section 9.2
      The sender of the SHUTDOWN MAY also start an overall guard timer
      'T5-shutdown-guard' to bound the overall time for the shutdown
      sequence.  At the expiration of this timer, the sender SHOULD abort
      the association by sending an ABORT chunk.  If the 'T5-shutdown-
      guard' timer is used, it SHOULD be set to the recommended value of 5
      times 'RTO.Max'.
      
      The timer 'T5-shutdown-guard' is used to counter the overall time
      for shutdown sequence, and it's start by the sender of the SHUTDOWN.
      So timer 'T5-shutdown-guard' should be start when we send the first
      SHUTDOWN chunk and enter the SHUTDOWN-SENT state, not start when we
      receipt of the SHUTDOWN primitive and enter SHUTDOWN-PENDING state.
      
      If 'T5-shutdown-guard' timer is start at SHUTDOWN-PENDING state, the
      association may be ABORT while data is still transmitting.
      Signed-off-by: NWei Yongjun <yjwei@cn.fujitsu.com>
      Signed-off-by: NVlad Yasevich <vladislav.yasevich@hp.com>
      536428a9
    • V
      sctp: try harder to figure out address family when checking wildcards · 52cae8f0
      Vlad Yasevich 提交于
      sctp_is_any() function that is used to check for wildcard addresses
      only looks at the address itself to determine the address family.
      This function is used in the API to check the address passed in from
      the user.  If the user simply zerroes out the sockaddr_storage and
      pass that in, we'll end up failing.  So, let's try harder to determine
      the address family by also checking the socket if it's possible.
      Signed-off-by: NVlad Yasevich <vladislav.yasevich@hp.com>
      52cae8f0
    • N
      sctp: reduce memory footprint of sctp_chunk structure · c226ef9b
      Neil Horman 提交于
      sctp_chunks should be put on a diet.  This is some of the low hanging
      fruit that we can strip out.  Changes all the __s8/__u8 flags to
      bitfields.  Saves 12 bytes per chunk.
      Signed-off-by: NNeil Horman <nhorman@tuxdriver.com>
      Signed-off-by: NVlad Yasevich <vladislav.yasevich@hp.com>
      c226ef9b
    • V
      sctp: Retransmit list is ineligable for missing indications · 845b8eda
      Vlad Yasevich 提交于
      Chunks placed on the retransmit list are marked as inelegible
      for fast retrasnmission.   Since missing indications determine
      when fast reransmission is done, there is not point in calling
      sctp_mark_missing() on the retransmit list since those chunks
      will not be marked.
      Signed-off-by: NVlad Yasevich <vladislav.yasevich@hp.com>
      845b8eda
    • V
      sctp: Optimize SFR-CACC transport list walking during SACK processing · ab5216a5
      Vlad Yasevich 提交于
      There is a possibility of walking the transport list twice during
      SACK processing when doing SFR-CACC algorithm.  We can restructure
      the code to only do this once.
      Signed-off-by: NVlad Yasevich <vladislav.yasevich@hp.com>
      ab5216a5
    • V
      sctp: Only mark chunks as missing when there are gaps · 2cd9b822
      Vlad Yasevich 提交于
      Frist small step in optimizing SACK processing.   Do not call
      sctp_mark_missing() when there are no gaps reported and thus
      not missing chunks.
      Signed-off-by: NVlad Yasevich <vladislav.yasevich@hp.com>
      2cd9b822
    • K
      udp: Export UDP socket lookup function · bcd41303
      KOVACS Krisztian 提交于
      The iptables tproxy code has to be able to do UDP socket hash lookups,
      so we have to provide an exported lookup function for this purpose.
      Signed-off-by: NKOVACS Krisztian <hidden@sch.bme.hu>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      bcd41303
    • K
      tcp: Port redirection support for TCP · a3116ac5
      KOVACS Krisztian 提交于
      Current TCP code relies on the local port of the listening socket
      being the same as the destination address of the incoming
      connection. Port redirection used by many transparent proxying
      techniques obviously breaks this, so we have to store the original
      destination port address.
      
      This patch extends struct inet_request_sock and stores the incoming
      destination port value there. It also modifies the handshake code to
      use that value as the source port when sending reply packets.
      Signed-off-by: NKOVACS Krisztian <hidden@sch.bme.hu>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      a3116ac5
    • K
      ipv4: Make Netfilter's ip_route_me_harder() non-local address compatible · 86b08d86
      KOVACS Krisztian 提交于
      Netfilter's ip_route_me_harder() tries to re-route packets either
      generated or re-routed by Netfilter. This patch changes
      ip_route_me_harder() to handle packets from non-locally-bound sockets
      with IP_TRANSPARENT set as local and to set the appropriate flowi
      flags when re-doing the routing lookup.
      Signed-off-by: NKOVACS Krisztian <hidden@sch.bme.hu>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      86b08d86
    • K
      tcp: Handle TCP SYN+ACK/ACK/RST transparency · 88ef4a5a
      KOVACS Krisztian 提交于
      The TCP stack sends out SYN+ACK/ACK/RST reply packets in response to
      incoming packets. The non-local source address check on output bites
      us again, as replies for transparently redirected traffic won't have a
      chance to leave the node.
      
      This patch selectively sets the FLOWI_FLAG_ANYSRC flag when doing the
      route lookup for those replies. Transparent replies are enabled if the
      listening socket has the transparent socket flag set.
      Signed-off-by: NKOVACS Krisztian <hidden@sch.bme.hu>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      88ef4a5a
    • K
      ipv4: Make inet_sock.h independent of route.h · 1668e010
      KOVACS Krisztian 提交于
      inet_iif() in inet_sock.h requires route.h. Since users of inet_iif()
      usually require other route.h functionality anyway this patch moves
      inet_iif() to route.h.
      Signed-off-by: NKOVACS Krisztian <hidden@sch.bme.hu>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      1668e010
    • T
      ipv4: Allow binding to non-local addresses if IP_TRANSPARENT is set · b9fb1506
      Tóth László Attila 提交于
      Setting IP_TRANSPARENT is not really useful without allowing non-local
      binds for the socket. To make user-space code simpler we allow these
      binds even if IP_TRANSPARENT is set but IP_FREEBIND is not.
      Signed-off-by: NTóth László Attila <panther@balabit.hu>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      b9fb1506
    • K
      ipv4: Implement IP_TRANSPARENT socket option · f5715aea
      KOVACS Krisztian 提交于
      This patch introduces the IP_TRANSPARENT socket option: enabling that
      will make the IPv4 routing omit the non-local source address check on
      output. Setting IP_TRANSPARENT requires NET_ADMIN capability.
      Signed-off-by: NKOVACS Krisztian <hidden@sch.bme.hu>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      f5715aea
    • J
      ipv4: Loosen source address check on IPv4 output · a210d01a
      Julian Anastasov 提交于
      ip_route_output() contains a check to make sure that no flows with
      non-local source IP addresses are routed. This obviously makes using
      such addresses impossible.
      
      This patch introduces a flowi flag which makes omitting this check
      possible. The new flag provides a way of handling transparent and
      non-transparent connections differently.
      Signed-off-by: NJulian Anastasov <ja@ssi.bg>
      Signed-off-by: NKOVACS Krisztian <hidden@sch.bme.hu>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      a210d01a
    • H
      net: BUG instead of corrupting memory in pskb_expand_head · 4edd87ad
      Herbert Xu 提交于
      If the caller of pskb_expand_head specifies a negative nhead
      we'll silently overwrite other people's memory.  This patch
      makes it BUG instead.
      Signed-off-by: NHerbert Xu <herbert@gondor.apana.org.au>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      4edd87ad
    • H
      ipsec: Put dumpers on the dump list · 12a169e7
      Herbert Xu 提交于
      Herbert Xu came up with the idea and the original patch to make
      xfrm_state dump list contain also dumpers:
      
      As it is we go to extraordinary lengths to ensure that states
      don't go away while dumpers go to sleep.  It's much easier if
      we just put the dumpers themselves on the list since they can't
      go away while they're going.
      
      I've also changed the order of addition on new states to prevent
      a never-ending dump.
      
      Timo Teräs improved the patch to apply cleanly to latest tree,
      modified iteration code to be more readable by using a common
      struct for entries in the list, implemented the same idea for
      xfrm_policy dumping and moved the af_key specific "last" entry
      caching to af_key.
      Signed-off-by: NHerbert Xu <herbert@gondor.apana.org.au>
      Signed-off-by: NTimo Teras <timo.teras@iki.fi>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      12a169e7
    • T
      af_key: Free dumping state on socket close · 05238204
      Timo Teras 提交于
      Fix a xfrm_{state,policy}_walk leak if pfkey socket is closed while
      dumping is on-going.
      Signed-off-by: NTimo Teras <timo.teras@iki.fi>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      05238204
    • I
      ipv6: almost identical frag hashing funcs combined · 93c8b90f
      Ilpo Järvinen 提交于
      $ diff-funcs ip6qhashfn reassembly.c netfilter/nf_conntrack_reasm.c
       --- reassembly.c:ip6qhashfn()
       +++ netfilter/nf_conntrack_reasm.c:ip6qhashfn()
      @@ -1,5 +1,5 @@
      -static unsigned int ip6qhashfn(__be32 id, struct in6_addr *saddr,
      -			       struct in6_addr *daddr)
      +static unsigned int ip6qhashfn(__be32 id, const struct in6_addr *saddr,
      +			       const struct in6_addr *daddr)
       {
       	u32 a, b, c;
      
      @@ -9,7 +9,7 @@
      
       	a += JHASH_GOLDEN_RATIO;
       	b += JHASH_GOLDEN_RATIO;
      -	c += ip6_frags.rnd;
      +	c += nf_frags.rnd;
       	__jhash_mix(a, b, c);
      
       	a += (__force u32)saddr->s6_addr32[3];
      
      And codiff xx.o.old xx.o.new:
      
      net/ipv6/netfilter/nf_conntrack_reasm.c:
        ip6qhashfn         | -512
        nf_hashfn          |   +6
        nf_ct_frag6_gather |  +36
       3 functions changed, 42 bytes added, 512 bytes removed, diff: -470
      net/ipv6/reassembly.c:
        ip6qhashfn    | -512
        ip6_hashfn    |   +7
        ipv6_frag_rcv |  +89
       3 functions changed, 96 bytes added, 512 bytes removed, diff: -416
      
      net/ipv6/reassembly.c:
        inet6_hash_frag | +510
       1 function changed, 510 bytes added, diff: +510
      
      Total: -376
      
      Compile tested.
      Signed-off-by: NIlpo Järvinen <ilpo.jarvinen@helsinki.fi>
      Acked-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      93c8b90f
    • A
      XFRM,IPv6: initialize ip6_dst_blackhole_ops.kmem_cachep · 5dc121e9
      Arnaud Ebalard 提交于
      ip6_dst_blackhole_ops.kmem_cachep is not expected to be NULL (i.e. to
      be initialized) when dst_alloc() is called from ip6_dst_blackhole().
      Otherwise, it results in the following (xfrm_larval_drop is now set to
      1 by default):
      
      [   78.697642] Unable to handle kernel paging request for data at address 0x0000004c
      [   78.703449] Faulting instruction address: 0xc0097f54
      [   78.786896] Oops: Kernel access of bad area, sig: 11 [#1]
      [   78.792791] PowerMac
      [   78.798383] Modules linked in: btusb usbhid bluetooth b43 mac80211 cfg80211 ehci_hcd ohci_hcd sungem sungem_phy usbcore ssb
      [   78.804263] NIP: c0097f54 LR: c0334a28 CTR: c002d430
      [   78.809997] REGS: eef19ad0 TRAP: 0300   Not tainted  (2.6.27-rc5)
      [   78.815743] MSR: 00001032 <ME,IR,DR>  CR: 22242482  XER: 20000000
      [   78.821550] DAR: 0000004c, DSISR: 40000000
      [   78.827278] TASK = eef0df40[3035] 'mip6d' THREAD: eef18000
      [   78.827408] GPR00: 00001032 eef19b80 eef0df40 00000000 00008020 eef19c30 00000001 00000000
      [   78.833249] GPR08: eee5101c c05a5c10 ef9ad500 00000000 24242422 1005787c 00000000 1004f960
      [   78.839151] GPR16: 00000000 10024e90 10050040 48030018 0fe44150 00000000 00000000 eef19c30
      [   78.845046] GPR24: eef19e44 00000000 eef19bf8 efb37c14 eef19bf8 00008020 00009032 c0596064
      [   78.856671] NIP [c0097f54] kmem_cache_alloc+0x20/0x94
      [   78.862581] LR [c0334a28] dst_alloc+0x40/0xc4
      [   78.868451] Call Trace:
      [   78.874252] [eef19b80] [c03c1810] ip6_dst_lookup_tail+0x1c8/0x1dc (unreliable)
      [   78.880222] [eef19ba0] [c0334a28] dst_alloc+0x40/0xc4
      [   78.886164] [eef19bb0] [c03cd698] ip6_dst_blackhole+0x28/0x1cc
      [   78.892090] [eef19be0] [c03d9be8] rawv6_sendmsg+0x75c/0xc88
      [   78.897999] [eef19cb0] [c038bca4] inet_sendmsg+0x4c/0x78
      [   78.903907] [eef19cd0] [c03207c8] sock_sendmsg+0xac/0xe4
      [   78.909734] [eef19db0] [c03209e4] sys_sendmsg+0x1e4/0x2a0
      [   78.915540] [eef19f00] [c03220a8] sys_socketcall+0xfc/0x210
      [   78.921406] [eef19f40] [c0014b3c] ret_from_syscall+0x0/0x38
      [   78.927295] --- Exception: c01 at 0xfe2d730
      [   78.927297]     LR = 0xfe2d71c
      [   78.939019] Instruction dump:
      [   78.944835] 91640018 9144001c 900a0000 4bffff44 9421ffe0 7c0802a6 bf810010 7c9d2378
      [   78.950694] 90010024 7fc000a6 57c0045e 7c000124 <83e3004c> 8383005c 2f9f0000 419e0050
      [   78.956464] ---[ end trace 05fa1ed7972487a1 ]---
      
      As commented by Benjamin Thery, the bug was introduced by
      f2fc6a54, while adding network
      namespaces support to ipv6 routes.
      Signed-off-by: NArnaud Ebalard <arno@natisbad.org>
      Acked-by: NBenjamin Thery <benjamin.thery@bull.net>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      5dc121e9
    • L
      net: add skb_recycle_check() to enable netdriver skb recycling · 04a4bb55
      Lennert Buytenhek 提交于
      This patch adds skb_recycle_check(), which can be used by a network
      driver after transmitting an skb to check whether this skb can be
      recycled as a receive buffer.
      
      skb_recycle_check() checks that the skb is not shared or cloned, and
      that it is linear and its head portion large enough (as determined by
      the driver) to be recycled as a receive buffer.  If these conditions
      are met, it does any necessary reference count dropping and cleans
      up the skbuff as if it just came from __alloc_skb().
      Signed-off-by: NLennert Buytenhek <buytenh@marvell.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      04a4bb55
    • D
      ipv6: NULL pointer dereferrence in tcp_v6_send_ack · 2a5b8275
      Denis V. Lunev 提交于
      The following actions are possible:
      tcp_v6_rcv
        skb->dev = NULL;
        tcp_v6_do_rcv
          tcp_v6_hnd_req
            tcp_check_req
              req->rsk_ops->send_ack == tcp_v6_send_ack
      
      So, skb->dev can be NULL in tcp_v6_send_ack. We must obtain namespace
      from dst entry.
      
      Thanks to Vitaliy Gusev <vgusev@openvz.org> for initial problem finding
      in IPv4 code.
      Signed-off-by: NDenis V. Lunev <den@openvz.org>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      2a5b8275
    • V
      tcp: Fix NULL dereference in tcp_4_send_ack() · 4dd7972d
      Vitaliy Gusev 提交于
      Fix NULL dereference in tcp_4_send_ack().
      
      As skb->dev is reset to NULL in tcp_v4_rcv() thus OOPS occurs:
      
      BUG: unable to handle kernel NULL pointer dereference at 00000000000004d0
      IP: [<ffffffff80498503>] tcp_v4_send_ack+0x203/0x250
      
      Stack:  ffff810005dbb000 ffff810015c8acc0 e77b2c6e5f861600 a01610802e90cb6d
       0a08010100000000 88afffff88afffff 0000000080762be8 0000000115c872e8
       0004122000000000 0000000000000001 ffffffff80762b88 0000000000000020
      Call Trace:
       <IRQ>  [<ffffffff80499c33>] tcp_v4_reqsk_send_ack+0x20/0x22
       [<ffffffff8049bce5>] tcp_check_req+0x108/0x14c
       [<ffffffff8047aaf7>] ? rt_intern_hash+0x322/0x33c
       [<ffffffff80499846>] tcp_v4_do_rcv+0x399/0x4ec
       [<ffffffff8045ce4b>] ? skb_checksum+0x4f/0x272
       [<ffffffff80485b74>] ? __inet_lookup_listener+0x14a/0x15c
       [<ffffffff8049babc>] tcp_v4_rcv+0x6a1/0x701
       [<ffffffff8047e739>] ip_local_deliver_finish+0x157/0x24a
       [<ffffffff8047ec9a>] ip_local_deliver+0x72/0x7c
       [<ffffffff8047e5bd>] ip_rcv_finish+0x38d/0x3b2
       [<ffffffff803d3548>] ? scsi_io_completion+0x19d/0x39e
       [<ffffffff8047ebe5>] ip_rcv+0x2a2/0x2e5
       [<ffffffff80462faa>] netif_receive_skb+0x293/0x303
       [<ffffffff80465a9b>] process_backlog+0x80/0xd0
       [<ffffffff802630b4>] ? __rcu_process_callbacks+0x125/0x1b4
       [<ffffffff8046560e>] net_rx_action+0xb9/0x17f
       [<ffffffff80234cc5>] __do_softirq+0xa3/0x164
       [<ffffffff8020c52c>] call_softirq+0x1c/0x28
       <EOI>  [<ffffffff8020de1c>] do_softirq+0x34/0x72
       [<ffffffff80234b8e>] local_bh_enable_ip+0x3f/0x50
       [<ffffffff804d43ca>] _spin_unlock_bh+0x12/0x14
       [<ffffffff804599cd>] release_sock+0xb8/0xc1
       [<ffffffff804a6f9a>] inet_stream_connect+0x146/0x25c
       [<ffffffff80243078>] ? autoremove_wake_function+0x0/0x38
       [<ffffffff8045751f>] sys_connect+0x68/0x8e
       [<ffffffff80291818>] ? fd_install+0x5f/0x68
       [<ffffffff80457784>] ? sock_map_fd+0x55/0x62
       [<ffffffff8020b39b>] system_call_after_swapgs+0x7b/0x80
      
      Code: 41 10 11 d0 83 d0 00 4d 85 ed 89 45 c0 c7 45 c4 08 00 00 00 74 07 41 8b 45 04 89 45 c8 48 8b 43 20 8b 4d b8 48 8d 55 b0 48 89 de <48> 8b 80 d0 04 00 00 48 8b b8 60 01 00 00 e8 20 ae fe ff 65 48
      RIP  [<ffffffff80498503>] tcp_v4_send_ack+0x203/0x250
       RSP <ffffffff80762b78>
      CR2: 00000000000004d0
      Signed-off-by: NVitaliy Gusev <vgusev@openvz.org>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      4dd7972d
    • D
      Fix modpost failure when rx handlers are not inlined. · b0dee578
      Davide Pesavento 提交于
      When CONFIG_MAC80211_MESH=n and CONFIG_MAC80211_NOINLINE=y,
      gcc doesn't optimize out a call to ieee80211_rx_h_mesh_fwding,
      even if the previous comparison is always false in this case.
      This leads to the following errors during modpost:
      
      ERROR: "mpp_path_lookup" [net/mac80211/mac80211.ko] undefined!
      ERROR: "mpp_path_add" [net/mac80211/mac80211.ko] undefined!
      
      Fix by removing the possibility of uninlining
      ieee80211_rx_h_mesh_fwding rx handler.
      Signed-off-by: NDavide Pesavento <davidepesa@gmail.com>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      b0dee578
    • R
      mac80211: remove wme_tx_queue and wme_rx_queue from net/mac80211/sta_info.h · d88410a0
      Rami Rosen 提交于
      This patch removes wme_tx_queue and wme_rx_queue from struct sta_info
      and from the debugfs sub-structure of struct sta_info
      in net/mac80211/sta_info.h, as they are useless and not used.
      Signed-off-by: NRami Rosen <ramirose@gmail.com>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      d88410a0
    • J
      mac80211: fixups for "make master iface not wireless" · b4a4bf5d
      Johannes Berg 提交于
      In "mac80211: make master iface not wireless" I accidentally
      forgot to include these changes ... leading to the expected
      BUG_ON errors.
      Signed-off-by: NJohannes Berg <johannes@sipsolutions.net>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      b4a4bf5d
  2. 30 9月, 2008 6 次提交
  3. 25 9月, 2008 9 次提交