Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932470AbZLDU5q (ORCPT ); Fri, 4 Dec 2009 15:57:46 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S932441AbZLDU5p (ORCPT ); Fri, 4 Dec 2009 15:57:45 -0500 Received: from iolanthe.rowland.org ([192.131.102.54]:41642 "HELO iolanthe.rowland.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with SMTP id S932440AbZLDU5o (ORCPT ); Fri, 4 Dec 2009 15:57:44 -0500 Date: Fri, 4 Dec 2009 15:57:50 -0500 (EST) From: Alan Stern X-X-Sender: stern@iolanthe.rowland.org To: Oliver Neukum cc: Greg KH , , Rickard Bellini , "linux-usb@vger.kernel.org" , Torgny Johansson , Kernel development list Subject: Re: [PATCH] Driver core: fix race in dev_driver_string In-Reply-To: <200912042055.55565.oliver@neukum.org> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1355 Lines: 51 On Fri, 4 Dec 2009, Oliver Neukum wrote: > > > 1. am I supposed to get a reference just so that I can use dev_err? > > > > No, you should already have a reference on the device when doing the > > call, right? > > No, why? Consider this: > > int write(...) > { > ... > mutex_lock(&instance->lock); > if (instance->disconnected) { > dev_dbg(instance->dev,"writing to disconnected device"); > rv = -ENODEV; > } else { > res = usb_submit_urb(...); > rv = res < 0 ? -EIO : count; > } > mutex_unlock(&instance->lock); > return rv; > } > > void disconnect(...) > { > ... > mutex_lock(&instance->lock); > instance->disconnected = 1; > usb_kill_urb(...); > usb_kill_urb(...); > mutex_unlock(&instance->lock); > } > > This would be perfectly valid code without any references taken save > for the pesky dev_dbg() Whoever calls write() must possess a valid reference. Otherwise instance might already be deallocated when write() starts, causing an oops well before the call to dev_dbg(). Typically the driver would take a reference during open() and drop it during close(). Alan Stern -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/