NetBSD/sys/netatalk
ozaki-r 8f4376cb6f 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@
2016-10-03 11:06:06 +00:00
..
aarp.c Apply pserialize and psref to struct ifaddr and its variants 2016-08-01 03:15:30 +00:00
aarp.h
at_control.c Apply pserialize and psref to struct ifaddr and its variants 2016-08-01 03:15:30 +00:00
at_extern.h Give proper prototype to ddp_output. 2016-01-20 21:59:19 +00:00
at_print.c - s/u_intX/uintX/ 2014-12-02 19:33:44 +00:00
at_proto.c Revert previous: ran cvs commit when I meant cvs diff. Sorry! 2016-01-21 15:41:29 +00:00
at_rmx.c
at_var.h
at.h - s/u_intX/uintX/ 2014-12-02 19:33:44 +00:00
ddp_input.c Fix race condition on ifqueue used by traditional netisr 2016-10-03 11:06:06 +00:00
ddp_output.c apply if_output_lock() to L3 callers which call ifp->if_output() of L2(or L3 tunneling). 2016-06-20 06:46:37 +00:00
ddp_private.h
ddp_usrreq.c Fix race condition on ifqueue used by traditional netisr 2016-10-03 11:06:06 +00:00
ddp_var.h
ddp.h
files.netatalk Define netatalk module. 2014-12-08 07:18:45 +00:00
Makefile
phase2.h More on PR 41200: headers that declare ioctls should include sys/ioccom.h. 2015-09-06 06:00:59 +00:00