From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756211AbYEYPDb (ORCPT ); Sun, 25 May 2008 11:03:31 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1754991AbYEYPDS (ORCPT ); Sun, 25 May 2008 11:03:18 -0400 Received: from bombadil.infradead.org ([18.85.46.34]:48799 "EHLO bombadil.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754401AbYEYPCq (ORCPT ); Sun, 25 May 2008 11:02:46 -0400 Subject: Re: [PATCHv2 22/28] cxusb: treat firmware data as const From: David Woodhouse To: Michael Krufky Cc: linux-kernel@vger.kernel.org, sam@ravnborg.org, alan@lxorguk.ukuu.org.uk, akpm@linux-foundation.org, Patrick Boettcher , Chris Pascoe In-Reply-To: <48397436.8040102@linuxtv.org> References: <1211708969@pmac.infradead.org> <48397436.8040102@linuxtv.org> Content-Type: text/plain Date: Sun, 25 May 2008 16:02:41 +0100 Message-Id: <1211727761.31212.120.camel@shinybook.infradead.org> Mime-Version: 1.0 X-Mailer: Evolution 2.22.1 (2.22.1-2.fc9) Content-Transfer-Encoding: 7bit X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sun, 2008-05-25 at 10:14 -0400, Michael Krufky wrote: > It's broken... Please see fix, below: commit e6983a70abb3e6d7a0d711176c89113c81f2ead6 Author: David Woodhouse Date: Sat May 24 00:12:42 2008 +0100 cxusb: treat firmware data as const ...which means allocating our own copy when we want to modify it. (stupid thinko fixed by mkrufky) Signed-off-by: David Woodhouse Signed-off-by: Michael Krufky diff --git a/drivers/media/dvb/dvb-usb/cxusb.c b/drivers/media/dvb/dvb-usb/cxusb.c index 720fcd1..0286156 100644 --- a/drivers/media/dvb/dvb-usb/cxusb.c +++ b/drivers/media/dvb/dvb-usb/cxusb.c @@ -24,6 +24,7 @@ * see Documentation/dvb/README.dvb-usb for more information */ #include +#include #include "cxusb.h" @@ -700,12 +701,26 @@ static int bluebird_patch_dvico_firmware_download(struct usb_device *udev, if (fw->data[idoff] == (USB_VID_DVICO & 0xff) && fw->data[idoff + 1] == USB_VID_DVICO >> 8) { - fw->data[idoff + 2] = + struct firmware new_fw; + u8 *new_fw_data = vmalloc(fw->size); + int ret; + + if (!new_fw_data) + return -ENOMEM; + + memcpy(new_fw_data, fw->data, fw->size); + new_fw.size = fw->size; + new_fw.data = new_fw_data; + + new_fw_data[idoff + 2] = le16_to_cpu(udev->descriptor.idProduct) + 1; - fw->data[idoff + 3] = + new_fw_data[idoff + 3] = le16_to_cpu(udev->descriptor.idProduct) >> 8; - return usb_cypress_load_firmware(udev, fw, CYPRESS_FX2); + ret = usb_cypress_load_firmware(udev, &new_fw, + CYPRESS_FX2); + vfree(new_fw_data); + return ret; } } -- dwmw2