Files
linux/net
Jon Paul Maloy b170997ace tipc: eliminate risk of finding to-be-deleted node instance
Although we have never seen it happen, we have identified the
following problematic scenario when nodes are stopped and deleted:

CPU0:                            CPU1:

tipc_node_xxx()                                   //ref == 1
   tipc_node_put()                                //ref -> 0
                                 tipc_node_find() // node still in table
       tipc_node_delete()
         list_del_rcu(n. list)
                                 tipc_node_get()  //ref -> 1, bad
         kfree_rcu()

                                 tipc_node_put() //ref to 0 again.
                                 kfree_rcu()     // BOOM!

We fix this by introducing use of the conditional kref_get_if_not_zero()
instead of kref_get() in the function tipc_node_find(). This eliminates
any risk of post-mortem access.

Reported-by: Zhijiang Hu <huzhijiang@gmail.com>
Acked-by: Ying Xue <ying.xue@windriver.com>
Signed-off-by: Jon Maloy <jon.maloy@ericsson.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-02-25 17:04:48 -05:00
..
2015-11-30 14:47:33 -05:00
2015-10-13 17:42:34 +02:00
2016-02-04 18:26:08 +01:00
2016-02-25 15:20:21 -05:00
2015-11-23 14:56:15 -05:00
2015-10-23 03:05:19 -07:00
2015-10-07 04:27:43 -07:00
2016-02-21 22:00:28 -05:00
2016-02-11 09:45:24 -05:00
2016-02-16 20:21:48 -05:00