]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
MFC r318822: MFC r316913: 7869 panic in bpobj_space(): null pointer dereference
authormav <mav@FreeBSD.org>
Wed, 26 Jul 2017 16:42:32 +0000 (16:42 +0000)
committermav <mav@FreeBSD.org>
Wed, 26 Jul 2017 16:42:32 +0000 (16:42 +0000)
commit9c75450760a377b29154d0f67247e876a25beaf4
tree1e16bdd3ecdcc1925e8bfd39eda9ad1b60a14d0b
parente33801ac9371d01631aa9d42e9de6f88a6cec060
MFC r318822: MFC r316913: 7869 panic in bpobj_space(): null pointer dereference

illumos/illumos-gate@a3905a45920de250d181b66ac0b6b71bd200d9ef
https://github.com/illumos/illumos-gate/commit/a3905a45920de250d181b66ac0b6b71bd200d9ef

https://www.illumos.org/issues/7869
  The issue fixed by this patch 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. In addition,
  threads should also hold the bpobj lock whenever they are allocating the
  subobj list of a bpobj, and not just when they actually insert the subobj
  to the list. This way we can avoid potential memory leaks.

Reviewed by: Matt Ahrens <mahrens@delphix.com>
Reviewed by: Dan Kimmel <dan.kimmel@delphix.com>
Reviewed by: Steve Gonczi <steve.gonczi@delphix.com>
Reviewed by: John Kennedy <john.kennedy@delphix.com>
Reviewed by: George Melikov <mail@gmelikov.ru>
Reviewed by: Brian Behlendorf <behlendorf1@llnl.gov>
Approved by: Dan McDonald <danmcd@omniti.com>
Author: Serapheim Dimitropoulos <serapheim@delphix.com>
sys/cddl/contrib/opensolaris/uts/common/fs/zfs/bpobj.c
sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_deadlist.c