Messages in this thread | | | Date | Thu, 5 Dec 2002 16:36:09 -0500 (EST) | From | Ronghua Zhang <> | Subject | synchronization between net_bh and user-context |
| |
I am reading the TCP/IP code of kernel 2.2.15 and doing some development based on it(yes, I know it's an old version, but I have to). I got a little confused about the synchronization between net_bh and user-context, and hope someone can help me out.
Specifically, why the following is impossible? destroy_sock is called on CPU1, and a little bit later net_bh() is executed on CPU2, which will grab the pointer to the socket just before it's destroyed, and its later access becomes invalid.
CPU 1 CPU2 destroy_sock() lock_sock() sk->sock_readers++ synchronize_bh(), no bh is running
now net_bh() get called =>tcp_v4_rcv() sk = __tcp_v4_lookup(...) sk has not been destroyed
tcp_v4_destroy_sock() kill_sk_now() free sk now sk has been destroyed if (!atomic_read(&sk->sock_readers)) <-- sk become invalid
ronghua
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |