git: network - MP socket free & abort interactions, so_state

Matthew Dillon dillon at crater.dragonflybsd.org
Fri Sep 10 09:10:30 PDT 2010


commit 6cef7136f04e2b24a6db289e78720d6d8c60274e
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date:   Thu Sep 9 21:01:20 2010 -0700

    network - MP socket free & abort interactions, so_state
    
    * Add so_refs and ref-count the socket structure to deal with
      MP races on sofree().
    
    * Ref the socket structure for all soabort() operations (they are usually
      asynchronous).  The netmsg_pru_abort() handler will sofree() the ref
      after calling the protocol stack's abort function.
    
    * Use atomic ops to set and clear bits in so_state, because it is modified
      by both the fronttend and the backend.
    
    * Remove numerous critical sections that are no longer effective.
    
    * Protect the accept queues with so_rcv.ssb_token.
    
    * Protect after-the-fact calls to soisdisconnected() with a soreference()
      to avoid use-after-free cases.
    
    * Wrap unix domain, mroute, div, raw, and key sockets/protocols with their
      own private tokens.

Summary of changes:
 sys/ddb/db_output.c                                |    2 +
 sys/kern/sys_generic.c                             |    5 +
 sys/kern/sys_socket.c                              |    5 +-
 sys/kern/uipc_mbuf.c                               |    2 +-
 sys/kern/uipc_msg.c                                |   16 +-
 sys/kern/uipc_socket.c                             |  133 +++----
 sys/kern/uipc_socket2.c                            |   73 +++--
 sys/kern/uipc_syscalls.c                           |   11 +-
 sys/kern/uipc_usrreq.c                             |  406 +++++++++++++++-----
 sys/net/ip_mroute/ip_mroute.c                      |  153 ++++----
 sys/net/raw_cb.c                                   |    5 +-
 sys/net/raw_usrreq.c                               |   10 +-
 sys/net/rtsock.c                                   |    3 +
 sys/netbt/hci_socket.c                             |   15 +-
 sys/netbt/l2cap_socket.c                           |    8 +-
 sys/netbt/rfcomm_socket.c                          |    8 +-
 sys/netbt/sco_socket.c                             |    8 +-
 sys/netgraph/ksocket/ng_ksocket.c                  |   22 +-
 sys/netgraph/socket/ng_socket.c                    |    7 +-
 .../bluetooth/socket/ng_btsocket_rfcomm.c          |   10 +-
 sys/netgraph7/ng_ksocket.c                         |    8 +-
 sys/netgraph7/ng_socket.c                          |    8 +-
 sys/netinet/in_pcb.c                               |    5 +-
 sys/netinet/ip_divert.c                            |   38 ++-
 sys/netinet/raw_ip.c                               |   60 +++-
 sys/netinet/sctp_indata.c                          |   12 +
 sys/netinet/sctp_input.c                           |    2 +-
 sys/netinet/sctp_pcb.c                             |   31 +--
 sys/netinet/sctp_peeloff.c                         |    4 +-
 sys/netinet/sctp_usrreq.c                          |   21 +-
 sys/netinet/sctputil.c                             |   27 ++
 sys/netinet/tcp_input.c                            |   25 +-
 sys/netinet/tcp_subr.c                             |    1 +
 sys/netinet/tcp_usrreq.c                           |   60 ++--
 sys/netinet/udp_usrreq.c                           |   40 +-
 sys/netinet6/in6_pcb.c                             |    2 +-
 sys/netinet6/ipsec.c                               |   12 +
 sys/netinet6/raw_ip6.c                             |   19 +-
 sys/netinet6/sctp6_usrreq.c                        |   22 +-
 sys/netinet6/udp6_usrreq.c                         |   25 +-
 sys/netproto/atalk/ddp_usrreq.c                    |   45 +--
 sys/netproto/atm/atm_aal5.c                        |    3 +-
 sys/netproto/atm/atm_socket.c                      |    2 +-
 sys/netproto/ipsec/keysock.c                       |    4 +-
 sys/netproto/ipx/ipx_pcb.c                         |    3 +-
 sys/netproto/ipx/ipx_usrreq.c                      |   27 +-
 sys/netproto/ipx/spx_usrreq.c                      |   11 +-
 sys/netproto/key/key.c                             |  144 ++++---
 sys/netproto/key/key.h                             |    1 +
 sys/netproto/key/keydb.c                           |    9 +-
 sys/netproto/key/keysock.c                         |   61 ++--
 sys/netproto/natm/natm.c                           |   18 +-
 sys/netproto/ncp/ncp_sock.c                        |    2 +-
 sys/netproto/ns/idp_usrreq.c                       |   13 +-
 sys/netproto/ns/ns_pcb.c                           |    2 +-
 sys/netproto/ns/spp_usrreq.c                       |   11 +-
 sys/netproto/smb/smb_trantcp.c                     |    2 +-
 sys/sys/socketvar.h                                |   13 +-
 sys/sys/socketvar2.h                               |   26 ++-
 sys/vfs/fifofs/fifo_vnops.c                        |    3 +-
 sys/vfs/nfs/nfs_socket.c                           |    3 +-
 61 files changed, 1107 insertions(+), 620 deletions(-)

http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/6cef7136f04e2b24a6db289e78720d6d8c60274e


-- 
DragonFly BSD source repository





More information about the Commits mailing list