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
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <200805251251.32373.hverkuil@xs4all.nl>
Date:	Sun, 25 May 2008 12:51:32 +0200
From:	Hans Verkuil <hverkuil@...all.nl>
To:	David Woodhouse <dwmw2@...radead.org>
Cc:	linux-kernel@...r.kernel.org, sam@...nborg.org,
	alan@...rguk.ukuu.org.uk, akpm@...ux-foundation.org,
	Tyler Trafford <ttrafford@...il.com>,
	Mike Isely <isely@...ly.net>
Subject: Re: [PATCHv2 04/28] cx25840: treat firmware data as const

Hi David,

There is no need to do the first two bytes first. As far as I can tell 
it was done to avoid having to allocate a local buffer. The initial 
version of this code was writing much larger blocks at a time to the 
i2c bus, so having to setup a large buffer on the stack was 
undesirable. The pvrusb driver requires a much smaller buffer (FWSEND), 
but the code was never changed. Now, however, the initial four-byte 
write is just in the way and can be removed in favor of always writing 
FWSEND-sized blocks of data.

I've CC-ed Mike Isely, the pvrusb2 maintainer, just in case there is an 
outlandish restriction I'm not aware of on that USB device requiring 
the firmware load to be done this way.

Regards,

	Hans

On Sunday 25 May 2008 12:23:33 David Woodhouse wrote:
> Signed-off-by: David Woodhouse <dwmw2@...radead.org>
> ---
>  drivers/media/video/cx25840/cx25840-firmware.c |   21
> +++++++++++++-------- 1 files changed, 13 insertions(+), 8
> deletions(-)
>
> diff --git a/drivers/media/video/cx25840/cx25840-firmware.c
> b/drivers/media/video/cx25840/cx25840-firmware.c index
> 620d295..5c08ede 100644
> --- a/drivers/media/video/cx25840/cx25840-firmware.c
> +++ b/drivers/media/video/cx25840/cx25840-firmware.c
> @@ -79,7 +79,7 @@ static int check_fw_load(struct i2c_client *client,
> int size) return 0;
>  }
>
> -static int fw_write(struct i2c_client *client, u8 *data, int size)
> +static int fw_write(struct i2c_client *client, const u8 *data, int
> size) {
>  	if (i2c_master_send(client, data, size) < size) {
>  		v4l_err(client, "firmware load i2c failure\n");
> @@ -93,7 +93,8 @@ int cx25840_loadfw(struct i2c_client *client)
>  {
>  	struct cx25840_state *state = i2c_get_clientdata(client);
>  	const struct firmware *fw = NULL;
> -	u8 buffer[4], *ptr;
> +	u8 buffer[FWSEND];
> +	const u8 *ptr;
>  	int size, retval;
>
>  	if (state->is_cx23885)
> @@ -108,6 +109,8 @@ int cx25840_loadfw(struct i2c_client *client)
>
>  	buffer[0] = 0x08;
>  	buffer[1] = 0x02;
> +
> +	/* Do we really need to do the first two bytes first? */
>  	buffer[2] = fw->data[0];
>  	buffer[3] = fw->data[1];
>  	retval = fw_write(client, buffer, 4);
> @@ -118,19 +121,21 @@ int cx25840_loadfw(struct i2c_client *client)
>  	}
>
>  	size = fw->size - 2;
> -	ptr = fw->data;
> +	ptr = fw->data + 2;
>  	while (size > 0) {
> -		ptr[0] = 0x08;
> -		ptr[1] = 0x02;
> -		retval = fw_write(client, ptr, min(FWSEND, size + 2));
> +		int len = min(FWSEND - 2, size);
> +
> +		memcpy(buffer + 2, ptr, len);
> +
> +		retval = fw_write(client, ptr, len + 2);
>
>  		if (retval < 0) {
>  			release_firmware(fw);
>  			return retval;
>  		}
>
> -		size -= FWSEND - 2;
> -		ptr += FWSEND - 2;
> +		size -= len;
> +		ptr += len;
>  	}
>
>  	end_fw_load(client);


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ