1. 15 4月, 2013 1 次提交
    • C
      ipv6: statically link register_inet6addr_notifier() · f88c91dd
      Cong Wang 提交于
      Tomas reported the following build error:
      
      net/built-in.o: In function `ieee80211_unregister_hw':
      (.text+0x10f0e1): undefined reference to `unregister_inet6addr_notifier'
      net/built-in.o: In function `ieee80211_register_hw':
      (.text+0x10f610): undefined reference to `register_inet6addr_notifier'
      make: *** [vmlinux] Error 1
      
      when built IPv6 as a module.
      
      So we have to statically link these symbols.
      Reported-by: NTomas Melin <tomas.melin@iki.fi>
      Cc: Tomas Melin <tomas.melin@iki.fi>
      Cc: "David S. Miller" <davem@davemloft.net>
      Cc: YOSHIFUJI Hidaki <yoshfuji@linux-ipv6.org>
      Signed-off-by: NCong Wang <amwang@redhat.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      f88c91dd
  2. 13 4月, 2013 1 次提交
  3. 12 4月, 2013 3 次提交
    • F
      netfilter: nf_nat: fix race when unloading protocol modules · c2d421e1
      Florian Westphal 提交于
      following oops was reported:
      RIP: 0010:[<ffffffffa03227f2>]  [<ffffffffa03227f2>] nf_nat_cleanup_conntrack+0x42/0x70 [nf_nat]
      RSP: 0018:ffff880202c63d40  EFLAGS: 00010246
      RAX: 0000000000000000 RBX: ffff8801ac7bec28 RCX: ffff8801d0eedbe0
      RDX: dead000000200200 RSI: 0000000000000011 RDI: ffffffffa03265b8
      [..]
      Call Trace:
       [..]
       [<ffffffffa02febed>] destroy_conntrack+0xbd/0x110 [nf_conntrack]
      
      Happens when a conntrack timeout expires right after first part
      of the nat cleanup has completed (bysrc hash removal), but before
      part 2 has completed (re-initialization of nat area).
      
      [ destroy callback tries to delete bysrc again ]
      
      Patrick suggested to just remove the affected conntracks -- the
      connections won't work properly anyway without nat transformation.
      
      So, lets do that.
      Reported-by: NCAI Qian <caiqian@redhat.com>
      Cc: Patrick McHardy <kaber@trash.net>
      Signed-off-by: NFlorian Westphal <fw@strlen.de>
      Acked-by: NPatrick McHardy <kaber@trash.net>
      Signed-off-by: NPablo Neira Ayuso <pablo@netfilter.org>
      c2d421e1
    • T
      tcp: Reallocate headroom if it would overflow csum_start · 50bceae9
      Thomas Graf 提交于
      If a TCP retransmission gets partially ACKed and collapsed multiple
      times it is possible for the headroom to grow beyond 64K which will
      overflow the 16bit skb->csum_start which is based on the start of
      the headroom. It has been observed rarely in the wild with IPoIB due
      to the 64K MTU.
      
      Verify if the acking and collapsing resulted in a headroom exceeding
      what csum_start can cover and reallocate the headroom if so.
      
      A big thank you to Jim Foraker <foraker1@llnl.gov> and the team at
      LLNL for helping out with the investigation and testing.
      Reported-by: NJim Foraker <foraker1@llnl.gov>
      Signed-off-by: NThomas Graf <tgraf@suug.ch>
      Acked-by: NEric Dumazet <edumazet@google.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      50bceae9
    • D
      tcp: incoming connections might use wrong route under synflood · d66954a0
      Dmitry Popov 提交于
      There is a bug in cookie_v4_check (net/ipv4/syncookies.c):
      	flowi4_init_output(&fl4, 0, sk->sk_mark, RT_CONN_FLAGS(sk),
      			   RT_SCOPE_UNIVERSE, IPPROTO_TCP,
      			   inet_sk_flowi_flags(sk),
      			   (opt && opt->srr) ? opt->faddr : ireq->rmt_addr,
      			   ireq->loc_addr, th->source, th->dest);
      
      Here we do not respect sk->sk_bound_dev_if, therefore wrong dst_entry may be
      taken. This dst_entry is used by new socket (get_cookie_sock ->
      tcp_v4_syn_recv_sock), so its packets may take the wrong path.
      Signed-off-by: NDmitry Popov <dp@highloadlab.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      d66954a0
  4. 10 4月, 2013 3 次提交
  5. 09 4月, 2013 6 次提交
  6. 08 4月, 2013 17 次提交
    • M
      VSOCK: Fix missing msg_namelen update in vsock_stream_recvmsg() · d5e0d0f6
      Mathias Krause 提交于
      The code misses to update the msg_namelen member to 0 and therefore
      makes net/socket.c leak the local, uninitialized sockaddr_storage
      variable to userland -- 128 bytes of kernel stack memory.
      
      Cc: Andy King <acking@vmware.com>
      Cc: Dmitry Torokhov <dtor@vmware.com>
      Cc: George Zhang <georgezhang@vmware.com>
      Signed-off-by: NMathias Krause <minipli@googlemail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      d5e0d0f6
    • M
      VSOCK: vmci - fix possible info leak in vmci_transport_dgram_dequeue() · 680d04e0
      Mathias Krause 提交于
      In case we received no data on the call to skb_recv_datagram(), i.e.
      skb->data is NULL, vmci_transport_dgram_dequeue() will return with 0
      without updating msg_namelen leading to net/socket.c leaking the local,
      uninitialized sockaddr_storage variable to userland -- 128 bytes of
      kernel stack memory.
      
      Fix this by moving the already existing msg_namelen assignment a few
      lines above.
      
      Cc: Andy King <acking@vmware.com>
      Cc: Dmitry Torokhov <dtor@vmware.com>
      Cc: George Zhang <georgezhang@vmware.com>
      Signed-off-by: NMathias Krause <minipli@googlemail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      680d04e0
    • M
      tipc: fix info leaks via msg_name in recv_msg/recv_stream · 60085c3d
      Mathias Krause 提交于
      The code in set_orig_addr() does not initialize all of the members of
      struct sockaddr_tipc when filling the sockaddr info -- namely the union
      is only partly filled. This will make recv_msg() and recv_stream() --
      the only users of this function -- leak kernel stack memory as the
      msg_name member is a local variable in net/socket.c.
      
      Additionally to that both recv_msg() and recv_stream() fail to update
      the msg_namelen member to 0 while otherwise returning with 0, i.e.
      "success". This is the case for, e.g., non-blocking sockets. This will
      lead to a 128 byte kernel stack leak in net/socket.c.
      
      Fix the first issue by initializing the memory of the union with
      memset(0). Fix the second one by setting msg_namelen to 0 early as it
      will be updated later if we're going to fill the msg_name member.
      
      Cc: Jon Maloy <jon.maloy@ericsson.com>
      Cc: Allan Stephens <allan.stephens@windriver.com>
      Signed-off-by: NMathias Krause <minipli@googlemail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      60085c3d
    • M
      rose: fix info leak via msg_name in rose_recvmsg() · 4a184233
      Mathias Krause 提交于
      The code in rose_recvmsg() does not initialize all of the members of
      struct sockaddr_rose/full_sockaddr_rose when filling the sockaddr info.
      Nor does it initialize the padding bytes of the structure inserted by
      the compiler for alignment. This will lead to leaking uninitialized
      kernel stack bytes in net/socket.c.
      
      Fix the issue by initializing the memory used for sockaddr info with
      memset(0).
      
      Cc: Ralf Baechle <ralf@linux-mips.org>
      Signed-off-by: NMathias Krause <minipli@googlemail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      4a184233
    • M
      NFC: llcp: fix info leaks via msg_name in llcp_sock_recvmsg() · d26d6504
      Mathias Krause 提交于
      The code in llcp_sock_recvmsg() does not initialize all the members of
      struct sockaddr_nfc_llcp when filling the sockaddr info. Nor does it
      initialize the padding bytes of the structure inserted by the compiler
      for alignment.
      
      Also, if the socket is in state LLCP_CLOSED or is shutting down during
      receive the msg_namelen member is not updated to 0 while otherwise
      returning with 0, i.e. "success". The msg_namelen update is also
      missing for stream and seqpacket sockets which don't fill the sockaddr
      info.
      
      Both issues lead to the fact that the code will leak uninitialized
      kernel stack bytes in net/socket.c.
      
      Fix the first issue by initializing the memory used for sockaddr info
      with memset(0). Fix the second one by setting msg_namelen to 0 early.
      It will be updated later if we're going to fill the msg_name member.
      
      Cc: Lauro Ramos Venancio <lauro.venancio@openbossa.org>
      Cc: Aloisio Almeida Jr <aloisio.almeida@openbossa.org>
      Cc: Samuel Ortiz <sameo@linux.intel.com>
      Signed-off-by: NMathias Krause <minipli@googlemail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      d26d6504
    • M
      netrom: fix info leak via msg_name in nr_recvmsg() · 3ce5efad
      Mathias Krause 提交于
      In case msg_name is set the sockaddr info gets filled out, as
      requested, but the code fails to initialize the padding bytes of
      struct sockaddr_ax25 inserted by the compiler for alignment. Also
      the sax25_ndigis member does not get assigned, leaking four more
      bytes.
      
      Both issues lead to the fact that the code will leak uninitialized
      kernel stack bytes in net/socket.c.
      
      Fix both issues by initializing the memory with memset(0).
      
      Cc: Ralf Baechle <ralf@linux-mips.org>
      Signed-off-by: NMathias Krause <minipli@googlemail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      3ce5efad
    • M
      llc: Fix missing msg_namelen update in llc_ui_recvmsg() · c77a4b9c
      Mathias Krause 提交于
      For stream sockets the code misses to update the msg_namelen member
      to 0 and therefore makes net/socket.c leak the local, uninitialized
      sockaddr_storage variable to userland -- 128 bytes of kernel stack
      memory. The msg_namelen update is also missing for datagram sockets
      in case the socket is shutting down during receive.
      
      Fix both issues by setting msg_namelen to 0 early. It will be
      updated later if we're going to fill the msg_name member.
      
      Cc: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
      Signed-off-by: NMathias Krause <minipli@googlemail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      c77a4b9c
    • M
      l2tp: fix info leak in l2tp_ip6_recvmsg() · b860d3cc
      Mathias Krause 提交于
      The L2TP code for IPv6 fails to initialize the l2tp_conn_id member of
      struct sockaddr_l2tpip6 and therefore leaks four bytes kernel stack
      in l2tp_ip6_recvmsg() in case msg_name is set.
      
      Initialize l2tp_conn_id with 0 to avoid the info leak.
      Signed-off-by: NMathias Krause <minipli@googlemail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      b860d3cc
    • M
      iucv: Fix missing msg_namelen update in iucv_sock_recvmsg() · a5598bd9
      Mathias Krause 提交于
      The current code does not fill the msg_name member in case it is set.
      It also does not set the msg_namelen member to 0 and therefore makes
      net/socket.c leak the local, uninitialized sockaddr_storage variable
      to userland -- 128 bytes of kernel stack memory.
      
      Fix that by simply setting msg_namelen to 0 as obviously nobody cared
      about iucv_sock_recvmsg() not filling the msg_name in case it was set.
      
      Cc: Ursula Braun <ursula.braun@de.ibm.com>
      Signed-off-by: NMathias Krause <minipli@googlemail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      a5598bd9
    • M
      irda: Fix missing msg_namelen update in irda_recvmsg_dgram() · 5ae94c0d
      Mathias Krause 提交于
      The current code does not fill the msg_name member in case it is set.
      It also does not set the msg_namelen member to 0 and therefore makes
      net/socket.c leak the local, uninitialized sockaddr_storage variable
      to userland -- 128 bytes of kernel stack memory.
      
      Fix that by simply setting msg_namelen to 0 as obviously nobody cared
      about irda_recvmsg_dgram() not filling the msg_name in case it was
      set.
      
      Cc: Samuel Ortiz <samuel@sortiz.org>
      Signed-off-by: NMathias Krause <minipli@googlemail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      5ae94c0d
    • M
      caif: Fix missing msg_namelen update in caif_seqpkt_recvmsg() · 2d6fbfe7
      Mathias Krause 提交于
      The current code does not fill the msg_name member in case it is set.
      It also does not set the msg_namelen member to 0 and therefore makes
      net/socket.c leak the local, uninitialized sockaddr_storage variable
      to userland -- 128 bytes of kernel stack memory.
      
      Fix that by simply setting msg_namelen to 0 as obviously nobody cared
      about caif_seqpkt_recvmsg() not filling the msg_name in case it was
      set.
      
      Cc: Sjur Braendeland <sjur.brandeland@stericsson.com>
      Signed-off-by: NMathias Krause <minipli@googlemail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      2d6fbfe7
    • M
      Bluetooth: SCO - Fix missing msg_namelen update in sco_sock_recvmsg() · c8c49917
      Mathias Krause 提交于
      If the socket is in state BT_CONNECT2 and BT_SK_DEFER_SETUP is set in
      the flags, sco_sock_recvmsg() returns early with 0 without updating the
      possibly set msg_namelen member. This, in turn, leads to a 128 byte
      kernel stack leak in net/socket.c.
      
      Fix this by updating msg_namelen in this case. For all other cases it
      will be handled in bt_sock_recvmsg().
      
      Cc: Marcel Holtmann <marcel@holtmann.org>
      Cc: Gustavo Padovan <gustavo@padovan.org>
      Cc: Johan Hedberg <johan.hedberg@gmail.com>
      Signed-off-by: NMathias Krause <minipli@googlemail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      c8c49917
    • M
      Bluetooth: RFCOMM - Fix missing msg_namelen update in rfcomm_sock_recvmsg() · e11e0455
      Mathias Krause 提交于
      If RFCOMM_DEFER_SETUP is set in the flags, rfcomm_sock_recvmsg() returns
      early with 0 without updating the possibly set msg_namelen member. This,
      in turn, leads to a 128 byte kernel stack leak in net/socket.c.
      
      Fix this by updating msg_namelen in this case. For all other cases it
      will be handled in bt_sock_stream_recvmsg().
      
      Cc: Marcel Holtmann <marcel@holtmann.org>
      Cc: Gustavo Padovan <gustavo@padovan.org>
      Cc: Johan Hedberg <johan.hedberg@gmail.com>
      Signed-off-by: NMathias Krause <minipli@googlemail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      e11e0455
    • M
      Bluetooth: fix possible info leak in bt_sock_recvmsg() · 4683f42f
      Mathias Krause 提交于
      In case the socket is already shutting down, bt_sock_recvmsg() returns
      with 0 without updating msg_namelen leading to net/socket.c leaking the
      local, uninitialized sockaddr_storage variable to userland -- 128 bytes
      of kernel stack memory.
      
      Fix this by moving the msg_namelen assignment in front of the shutdown
      test.
      
      Cc: Marcel Holtmann <marcel@holtmann.org>
      Cc: Gustavo Padovan <gustavo@padovan.org>
      Cc: Johan Hedberg <johan.hedberg@gmail.com>
      Signed-off-by: NMathias Krause <minipli@googlemail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      4683f42f
    • M
      ax25: fix info leak via msg_name in ax25_recvmsg() · ef3313e8
      Mathias Krause 提交于
      When msg_namelen is non-zero the sockaddr info gets filled out, as
      requested, but the code fails to initialize the padding bytes of struct
      sockaddr_ax25 inserted by the compiler for alignment. Additionally the
      msg_namelen value is updated to sizeof(struct full_sockaddr_ax25) but is
      not always filled up to this size.
      
      Both issues lead to the fact that the code will leak uninitialized
      kernel stack bytes in net/socket.c.
      
      Fix both issues by initializing the memory with memset(0).
      
      Cc: Ralf Baechle <ralf@linux-mips.org>
      Signed-off-by: NMathias Krause <minipli@googlemail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      ef3313e8
    • M
      atm: update msg_namelen in vcc_recvmsg() · 9b3e617f
      Mathias Krause 提交于
      The current code does not fill the msg_name member in case it is set.
      It also does not set the msg_namelen member to 0 and therefore makes
      net/socket.c leak the local, uninitialized sockaddr_storage variable
      to userland -- 128 bytes of kernel stack memory.
      
      Fix that by simply setting msg_namelen to 0 as obviously nobody cared
      about vcc_recvmsg() not filling the msg_name in case it was set.
      Signed-off-by: NMathias Krause <minipli@googlemail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      9b3e617f
    • C
      ipv6/tcp: Stop processing ICMPv6 redirect messages · 50a75a89
      Christoph Paasch 提交于
      Tetja Rediske found that if the host receives an ICMPv6 redirect message
      after sending a SYN+ACK, the connection will be reset.
      
      He bisected it down to 093d04d4 (ipv6: Change skb->data before using
      icmpv6_notify() to propagate redirect), but the origin of the bug comes
      from ec18d9a2 (ipv6: Add redirect support to all protocol icmp error
      handlers.). The bug simply did not trigger prior to 093d04d4, because
      skb->data did not point to the inner IP header and thus icmpv6_notify
      did not call the correct err_handler.
      
      This patch adds the missing "goto out;" in tcp_v6_err. After receiving
      an ICMPv6 Redirect, we should not continue processing the ICMP in
      tcp_v6_err, as this may trigger the removal of request-socks or setting
      sk_err(_soft).
      Reported-by: NTetja Rediske <tetja@tetja.de>
      Signed-off-by: NChristoph Paasch <christoph.paasch@uclouvain.be>
      Acked-by: NEric Dumazet <edumazet@google.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      50a75a89
  7. 06 4月, 2013 4 次提交
    • P
      netfilter: nf_ct_sip: don't drop packets with offsets pointing outside the packet · 3a7b21ea
      Patrick McHardy 提交于
      Some Cisco phones create huge messages that are spread over multiple packets.
      After calculating the offset of the SIP body, it is validated to be within
      the packet and the packet is dropped otherwise. This breaks operation of
      these phones. Since connection tracking is supposed to be passive, just let
      those packets pass unmodified and untracked.
      Signed-off-by: NPatrick McHardy <kaber@trash.net>
      Signed-off-by: NPablo Neira Ayuso <pablo@netfilter.org>
      3a7b21ea
    • T
      SUNRPC: Fix a potential memory leak in rpc_new_client · f05c124a
      Trond Myklebust 提交于
      If the call to rpciod_up() fails, we currently leak a reference to the
      struct rpc_xprt.
      As part of the fix, we also remove the redundant check for xprt!=NULL.
      This is already taken care of by the callers.
      Signed-off-by: NTrond Myklebust <Trond.Myklebust@netapp.com>
      f05c124a
    • C
      SUNRPC: Remove extra xprt_put() · a58e0be6
      Chuck Lever 提交于
      While testing error cases where rpc_new_client() fails, I saw
      some oopses.
      
      If rpc_new_client() fails, it already invokes xprt_put().  Thus
      __rpc_clone_client() does not need to invoke it again.
      
      Introduced by commit 1b63a751 "SUNRPC: Refactor rpc_clone_client()"
      Fri Sep 14, 2012.
      Signed-off-by: NChuck Lever <chuck.lever@oracle.com>
      Cc: stable@vger.kernel.org [>=3.7]
      Signed-off-by: NTrond Myklebust <Trond.Myklebust@netapp.com>
      a58e0be6
    • P
      netfilter: don't reset nf_trace in nf_reset() · 124dff01
      Patrick McHardy 提交于
      Commit 130549fe ("netfilter: reset nf_trace in nf_reset") added code
      to reset nf_trace in nf_reset(). This is wrong and unnecessary.
      
      nf_reset() is used in the following cases:
      
      - when passing packets up the the socket layer, at which point we want to
        release all netfilter references that might keep modules pinned while
        the packet is queued. nf_trace doesn't matter anymore at this point.
      
      - when encapsulating or decapsulating IPsec packets. We want to continue
        tracing these packets after IPsec processing.
      
      - when passing packets through virtual network devices. Only devices on
        that encapsulate in IPv4/v6 matter since otherwise nf_trace is not
        used anymore. Its not entirely clear whether those packets should
        be traced after that, however we've always done that.
      
      - when passing packets through virtual network devices that make the
        packet cross network namespace boundaries. This is the only cases
        where we clearly want to reset nf_trace and is also what the
        original patch intended to fix.
      
      Add a new function nf_reset_trace() and use it in dev_forward_skb() to
      fix this properly.
      Signed-off-by: NPatrick McHardy <kaber@trash.net>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      124dff01
  8. 05 4月, 2013 4 次提交
  9. 03 4月, 2013 1 次提交