aboutsummaryrefslogtreecommitdiff
path: root/docs/devel/migration.txt
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2017-09-21 14:32:47 +0200
committerPaolo Bonzini <pbonzini@redhat.com>2017-09-21 23:19:37 +0200
commit447b0d0b9ee8a0ac216c3186e0f3c427a1001f0c (patch)
treea12f837b91bfb553f70beef57e6170b0ba386aa3 /docs/devel/migration.txt
parentdb81b9953761cac71906728fb3dfefce661ab903 (diff)
memory: avoid "resurrection" of dead FlatViews
It's possible for address_space_get_flatview() as it currently stands to cause a use-after-free for the returned FlatView, if the reference count is incremented after the FlatView has been replaced by a writer: thread 1 thread 2 RCU thread ------------------------------------------------------------- rcu_read_lock read as->current_map set as->current_map flatview_unref '--> call_rcu flatview_ref [ref=1] rcu_read_unlock flatview_destroy <badness> Since FlatViews are not updated very often, we can just detect the situation using a new atomic op atomic_fetch_inc_nonzero, similar to Linux's atomic_inc_not_zero, which performs the refcount increment only if it hasn't already hit zero. This is similar to Linux commit de09a9771a53 ("CRED: Fix get_task_cred() and task_state() to not resurrect dead credentials", 2010-07-29). Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'docs/devel/migration.txt')
0 files changed, 0 insertions, 0 deletions