Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754621Ab0BIPM5 (ORCPT ); Tue, 9 Feb 2010 10:12:57 -0500 Received: from iolanthe.rowland.org ([192.131.102.54]:52187 "HELO iolanthe.rowland.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with SMTP id S1754411Ab0BIPM4 (ORCPT ); Tue, 9 Feb 2010 10:12:56 -0500 Date: Tue, 9 Feb 2010 10:12:53 -0500 (EST) From: Alan Stern X-X-Sender: stern@iolanthe.rowland.org To: Roel Kluin cc: Greg Kroah-Hartman , , , Andrew Morton , LKML Subject: Re: [PATCH] USB: don't read past config->interface[] if usb_control_msg() fails in usb_reset_configuration() In-Reply-To: <4B715C55.5090102@gmail.com> 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: 928 Lines: 26 On Tue, 9 Feb 2010, Roel Kluin wrote: > After the loop `for (i = 0; i < config->desc.bNumInterfaces; i++)' if no > break occurred, i equals config->desc.bNumInterfaces. so if > usb_control_msg() failed then after goto reset_old_alts we read from > config->interface[config->desc.bNumInterfaces]. You correctly identified a problem, but your fix is wrong -- or at least, it is much too complicated. The proper fix goes like this: /* If not, reinstate the old alternate settings */ if (retval < 0) { reset_old_alts: - for (; i >= 0; i--) { + for (i--; i >= 0; i--) { struct usb_interface *intf = config->interface[i]; struct usb_host_interface *alt; 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/