lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Thu, 19 Apr 2012 23:26:47 -0700 From: Stephen Boyd <sboyd@...eaurora.org> To: Yong Zhang <yong.zhang0@...il.com> CC: linux-kernel@...r.kernel.org, Tejun Heo <tj@...nel.org>, netdev@...r.kernel.org, Ben Dooks <ben-linux@...ff.org> Subject: Re: [PATCH 1/2] workqueue: Catch more locking problems with flush_work() On 4/19/2012 11:01 PM, Yong Zhang wrote: > On Fri, Apr 20, 2012 at 01:26:33PM +0800, Yong Zhang wrote: >> On Thu, Apr 19, 2012 at 11:36:32AM -0700, Stephen Boyd wrote: >>> Does looking at the second patch help? Basically schedule_work() can run >>> the callback right between the time the mutex is acquired and >>> flush_work() is called: >>> >>> CPU0 CPU1 >>> >>> <irq> >>> schedule_work() mutex_lock(&mutex) >>> <irq return> >>> my_work() flush_work() >>> mutex_lock(&mutex) >>> <deadlock> >> Get you point. It is a problem. But your patch could introduece false >> positive since when flush_work() is called that very work may finish >> running already. >> >> So I think we need the lock_map_acquire()/lock_map_release() only when >> the work is under processing, no? > But start_flush_work() has tried take care of this issue except it > doesn't add work->lockdep_map into the chain. > > So does below patch help? > [snip] > @@ -2461,6 +2461,8 @@ static bool start_flush_work(struct work_struct *work, struct wq_barrier *barr, > lock_map_acquire(&cwq->wq->lockdep_map); > else > lock_map_acquire_read(&cwq->wq->lockdep_map); > + lock_map_acquire(&work->lockdep_map); > + lock_map_release(&work->lockdep_map); > lock_map_release(&cwq->wq->lockdep_map); > > return true; No this doesn't help. The whole point of the patch is to get lockdep to complain in the case where the work is not queued. That case is not a false positive. We will get a lockdep warning if the work is running (when start_flush_work() returns true) solely with the lock_map_acquire() on cwq->wq->lockdep_map. -- Sent by an employee of the Qualcomm Innovation Center, Inc. The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists