From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1765656AbYHDVhj (ORCPT ); Mon, 4 Aug 2008 17:37:39 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1765439AbYHDVf6 (ORCPT ); Mon, 4 Aug 2008 17:35:58 -0400 Received: from mx2.suse.de ([195.135.220.15]:49935 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1762434AbYHDVf4 (ORCPT ); Mon, 4 Aug 2008 17:35:56 -0400 Date: Mon, 4 Aug 2008 14:29:49 -0700 From: Greg KH To: linux-kernel@vger.kernel.org, stable@kernel.org, Neil Brown Cc: Justin Forbes , Zwane Mwaikambo , "Theodore Ts'o" , Randy Dunlap , Dave Jones , Chuck Wolber , Chris Wedgwood , Michael Krufky , Chuck Ebbert , Domenico Andreoli , Willy Tarreau , Rodrigo Rubira Branco , Jake Edge , Eugene Teo , torvalds@linux-foundation.org, akpm@linux-foundation.org, alan@lxorguk.ukuu.org.uk, Oliver Pinter Subject: [patch 07/25] Close race in md_probe Message-ID: <20080804212949.GG8014@suse.de> References: <20080804203506.816201392@mini.kroah.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline; filename="close-race-in-md_probe.patch" In-Reply-To: <20080804212725.GA7944@suse.de> User-Agent: Mutt/1.5.16 (2007-06-09) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 2.6.26-stable review patch. If anyone has any objections, please let us know. ------------------ From: Neil Brown [ Upstream commit f48ed538386cb41559282d989354e8f5d442d71c ] There is a possible race in md_probe. If two threads call md_probe for the same device, then one could exit (having checked that ->gendisk exists) before the other has called kobject_init_and_add, thus returning an incomplete kobj which will cause problems when we try to add children to it. So extend the range of protection of disks_mutex slightly to avoid this possibility. Signed-off-by: Neil Brown CC: Oliver Pinter Signed-off-by: Greg Kroah-Hartman --- drivers/md/md.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --- a/drivers/md/md.c +++ b/drivers/md/md.c @@ -3326,9 +3326,9 @@ static struct kobject *md_probe(dev_t de disk->queue = mddev->queue; add_disk(disk); mddev->gendisk = disk; - mutex_unlock(&disks_mutex); error = kobject_init_and_add(&mddev->kobj, &md_ktype, &disk->dev.kobj, "%s", "md"); + mutex_unlock(&disks_mutex); if (error) printk(KERN_WARNING "md: cannot register %s/md - name in use\n", disk->disk_name); --