Message ID | 1453426118-11198-1-git-send-email-quwenruo@cn.fujitsu.com (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
On Fri, Jan 22, 2016 at 09:28:38AM +0800, Qu Wenruo wrote: > Parameter of trace_btrfs_work_queued() can be freed in its workqueue. > So no one use use that pointer after queue_work(). > > Fix the user-after-free bug by move the trace line before queue_work(). > > Reported-by: Dave Jones <davej@codemonkey.org.uk> > Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com> > --- > fs/btrfs/async-thread.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/fs/btrfs/async-thread.c b/fs/btrfs/async-thread.c > index 88d9af3..5fb60ea 100644 > --- a/fs/btrfs/async-thread.c > +++ b/fs/btrfs/async-thread.c > @@ -328,8 +328,8 @@ static inline void __btrfs_queue_work(struct __btrfs_workqueue *wq, > list_add_tail(&work->ordered_list, &wq->ordered_list); > spin_unlock_irqrestore(&wq->list_lock, flags); > } > - queue_work(wq->normal_wq, &work->normal_work); > trace_btrfs_work_queued(work); > + queue_work(wq->normal_wq, &work->normal_work); > } Thanks -chris -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Fri, Jan 22, 2016 at 09:28:38AM +0800, Qu Wenruo wrote: > Parameter of trace_btrfs_work_queued() can be freed in its workqueue. > So no one use use that pointer after queue_work(). > > Fix the user-after-free bug by move the trace line before queue_work(). > > Reported-by: Dave Jones <davej@codemonkey.org.uk> > Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com> Reviewed-by: David Sterba <dsterba@suse.com> -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/fs/btrfs/async-thread.c b/fs/btrfs/async-thread.c index 88d9af3..5fb60ea 100644 --- a/fs/btrfs/async-thread.c +++ b/fs/btrfs/async-thread.c @@ -328,8 +328,8 @@ static inline void __btrfs_queue_work(struct __btrfs_workqueue *wq, list_add_tail(&work->ordered_list, &wq->ordered_list); spin_unlock_irqrestore(&wq->list_lock, flags); } - queue_work(wq->normal_wq, &work->normal_work); trace_btrfs_work_queued(work); + queue_work(wq->normal_wq, &work->normal_work); } void btrfs_queue_work(struct btrfs_workqueue *wq,
Parameter of trace_btrfs_work_queued() can be freed in its workqueue. So no one use use that pointer after queue_work(). Fix the user-after-free bug by move the trace line before queue_work(). Reported-by: Dave Jones <davej@codemonkey.org.uk> Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com> --- fs/btrfs/async-thread.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)