Matthew Ahrens
df7eeccc75
panic in bpobj_space(): null pointer dereference
...
This is a race condition in the deadlist code.
A thread executing an administrative command that uses
dsl_deadlist_space_range() holds the lock of the whole deadlist_t to
protect the access of all its entries that the deadlist contains in an
avl tree.
Sync threads trying to insert a new entry in the deadlist (through
dsl_deadlist_insert() -> dle_enqueue()) do not hold the deadlist lock at
that moment. If the dle_bpobj is the empty bpobj (our sentinel value),
we close and reopen it. Between these two operations, it is possible
for the dsl_deadlist_space_range() thread to dereference that bpobj
which is NULL during that window.
Threads should hold the a deadlist's dl_lock when they manipulate its
internal data so scenarios like the one above are avoided.
Reviewed-by: Matthew Ahrens <mahrens@delphix.com>
Reviewed-by: Dan Kimmel <dan.kimmel@delphix.com>
Reviewed-by: George Melikov <mail@gmelikov.ru>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Matthew Ahrens <mahrens@delphix.com>
Closes #5762
2017-02-09 10:19:12 -08:00
..
2017-01-22 13:25:40 -08:00
2017-02-04 09:21:25 -08:00
2016-11-29 14:34:27 -08:00
2015-01-16 14:41:26 -08:00
2017-02-09 10:19:12 -08:00
2017-01-17 14:49:24 -08:00
2016-10-07 13:19:43 -07:00
2016-09-13 09:58:33 -07:00
2017-02-01 16:47:04 -08:00
2015-01-16 14:41:26 -08:00
2016-12-02 16:59:35 -07:00
2016-09-13 09:58:33 -07:00
2017-01-13 15:47:34 -08:00
2017-02-02 14:13:41 -08:00
2017-02-04 09:10:24 -08:00
2016-11-02 12:14:45 -07:00
2017-01-23 09:36:24 -08:00
2016-12-12 10:46:26 -08:00
2017-02-07 09:44:03 -08:00
2017-01-28 12:11:09 -08:00
2017-01-26 15:15:48 -08:00
2017-02-02 14:13:41 -08:00
2017-02-08 09:27:48 -08:00
2017-02-09 10:19:12 -08:00
2016-08-31 14:35:34 -07:00
2017-01-27 11:43:42 -08:00
2017-01-26 14:43:28 -08:00
2017-01-31 14:44:03 -08:00
2016-12-20 18:46:59 -08:00
2017-01-27 11:43:42 -08:00
2015-05-04 09:41:10 -07:00
2016-06-28 13:47:03 -07:00
2016-11-29 14:34:27 -08:00
2016-12-12 10:46:26 -08:00
2016-12-12 10:46:26 -08:00
2017-01-03 11:31:18 -06:00
2015-01-16 14:41:26 -08:00
2016-11-29 14:34:27 -08:00
2017-02-01 13:14:02 -08:00
2015-12-22 10:21:33 -08:00
2016-04-21 09:49:25 -07:00
2017-01-22 13:25:40 -08:00
2016-08-31 14:35:34 -07:00
2017-01-31 14:36:35 -08:00
2017-01-03 11:31:18 -06:00
2017-01-26 14:43:28 -08:00
2016-11-29 14:34:27 -08:00
2016-11-29 14:34:27 -08:00
2010-08-31 13:41:58 -07:00
2017-01-03 11:31:18 -06:00
2014-08-06 14:48:41 -07:00
2016-08-11 11:23:49 -07:00
2017-01-31 14:19:08 -08:00
2017-01-03 11:31:18 -06:00
2017-01-31 10:19:36 -08:00
2017-01-12 11:52:56 -08:00
2017-01-12 09:42:11 -08:00
2016-05-26 10:11:51 -07:00
2016-12-02 16:57:49 -07:00
2015-07-14 10:35:21 -07:00
2016-08-31 14:35:34 -07:00
2016-11-29 14:34:27 -08:00
2017-02-04 09:23:50 -08:00
2016-12-21 10:47:15 -08:00
2017-01-12 09:42:11 -08:00
2017-01-22 13:25:40 -08:00
2015-04-30 15:07:47 -07:00
2016-12-12 10:46:26 -08:00
2016-11-29 14:34:33 -08:00
2017-01-22 13:25:40 -08:00
2016-11-29 14:34:33 -08:00
2016-11-29 14:34:33 -08:00
2016-12-15 17:31:33 -08:00
2016-12-12 10:46:26 -08:00
2017-01-22 13:25:40 -08:00
2016-11-29 14:34:33 -08:00
2016-11-29 14:34:33 -08:00
2017-01-22 13:25:40 -08:00
2017-01-22 13:25:40 -08:00
2016-11-29 14:34:33 -08:00
2013-10-31 14:58:04 -07:00
2017-02-01 13:14:02 -08:00
2017-02-02 14:13:41 -08:00
2017-02-02 14:13:41 -08:00
2017-01-26 14:43:28 -08:00
2017-01-17 14:46:28 -08:00
2017-01-12 09:42:11 -08:00
2016-11-04 10:46:40 -07:00
2010-08-31 13:41:58 -07:00
2017-01-22 13:25:40 -08:00
2017-01-28 12:16:43 -08:00
2017-02-02 14:13:41 -08:00
2016-11-08 14:28:17 -08:00
2016-09-21 18:09:00 -07:00
2017-01-31 10:24:23 -08:00
2017-01-12 09:42:11 -08:00
2015-06-22 17:02:13 -07:00
2017-01-12 09:42:11 -08:00
2017-01-03 11:31:18 -06:00
2016-11-30 16:18:20 -07:00
2017-01-27 11:46:39 -08:00
2017-02-08 17:28:22 -08:00
2016-12-16 13:54:51 -08:00
2017-01-03 11:31:18 -06:00
2017-02-01 09:34:22 -08:00
2016-11-29 14:34:27 -08:00
2016-12-01 16:36:25 -07:00
2017-02-04 09:23:50 -08:00
2010-05-28 13:45:14 -07:00
2016-10-20 09:39:09 -07:00
2016-12-12 10:46:26 -08:00
2017-02-02 09:43:42 -08:00
2016-12-30 16:03:59 -06:00
2016-05-31 16:04:26 -07:00
2017-01-03 11:31:18 -06:00
2017-01-23 10:35:58 -08:00
2017-02-08 09:27:48 -08:00