--- - branch: MAIN date: Mon Oct 3 11:06:06 UTC 2016 files: - new: '1.358' old: '1.357' path: src/sys/net/if.c pathrev: src/sys/net/if.c@1.358 type: modified - new: '1.227' old: '1.226' path: src/sys/net/if.h pathrev: src/sys/net/if.h@1.227 type: modified - new: '1.74' old: '1.73' path: src/sys/net/if_arcsubr.c pathrev: src/sys/net/if_arcsubr.c@1.74 type: modified - new: '1.60' old: '1.59' path: src/sys/net/if_atmsubr.c pathrev: src/sys/net/if_atmsubr.c@1.60 type: modified - new: '1.49' old: '1.48' path: src/sys/net/if_ecosubr.c pathrev: src/sys/net/if_ecosubr.c@1.49 type: modified - new: '1.228' old: '1.227' path: src/sys/net/if_ethersubr.c pathrev: src/sys/net/if_ethersubr.c@1.228 type: modified - new: '1.102' old: '1.101' path: src/sys/net/if_fddisubr.c pathrev: src/sys/net/if_fddisubr.c@1.102 type: modified - new: '1.58' old: '1.57' path: src/sys/net/if_ieee1394subr.c pathrev: src/sys/net/if_ieee1394subr.c@1.58 type: modified - new: '1.28' old: '1.27' path: src/sys/net/if_mpls.c pathrev: src/sys/net/if_mpls.c@1.28 type: modified - new: '1.118' old: '1.117' path: src/sys/net/if_pppoe.c pathrev: src/sys/net/if_pppoe.c@1.118 type: modified - new: '1.155' old: '1.154' path: src/sys/net/if_spppsubr.c pathrev: src/sys/net/if_spppsubr.c@1.155 type: modified - new: '1.78' old: '1.77' path: src/sys/net/if_tokensubr.c pathrev: src/sys/net/if_tokensubr.c@1.78 type: modified - new: '1.197' old: '1.196' path: src/sys/net/rtsock.c pathrev: src/sys/net/rtsock.c@1.197 type: modified - new: '1.28' old: '1.27' path: src/sys/netatalk/ddp_input.c pathrev: src/sys/netatalk/ddp_input.c@1.28 type: modified - new: '1.69' old: '1.68' path: src/sys/netatalk/ddp_usrreq.c pathrev: src/sys/netatalk/ddp_usrreq.c@1.69 type: modified - new: '1.228' old: '1.227' path: src/sys/netinet/if_arp.c pathrev: src/sys/netinet/if_arp.c@1.228 type: modified - new: '1.30' old: '1.29' path: src/sys/netmpls/mpls_proto.c pathrev: src/sys/netmpls/mpls_proto.c@1.30 type: modified - new: '1.53' old: '1.52' path: src/sys/netnatm/natm.c pathrev: src/sys/netnatm/natm.c@1.53 type: modified - new: '1.17' old: '1.16' path: src/sys/netnatm/natm_proto.c pathrev: src/sys/netnatm/natm_proto.c@1.17 type: modified id: 20161003T110606Z.58961ebfe787a04a20729581b292606259363769 log: | Fix race condition on ifqueue used by traditional netisr If a underlying network device driver supports MSI/MSI-X, RX interrupts can be delivered to arbitrary CPUs. This means that Layer 2 subroutines such as ether_input (softint) and subsequent Layer 3 subroutines (softint) which are called via traditional netisr can be dispatched on an arbitrary CPU. Layer 2 subroutines now run without any locks (expected) and so a Layer 2 subroutine and a Layer 3 subroutine can run in parallel. There is a shared data between a Layer 2 routine and a Layer 3 routine, that is ifqueue and IF_ENQUEUE (from L2) and IF_DEQUEUE (from L3) on it are racy now. To fix the race condition, use ifqueue#ifq_lock to protect ifqueue instead of splnet that is meaningless now. The same race condition exists in route_intr. Fix it as well. Reviewed by knakahara@ module: src subject: 'CVS commit: src/sys' unixtime: '1475492766' user: ozaki-r