Re: [BNX2 3/4]: Fix bug in bnx2_nvram_write().

2007-01-08 Thread David Miller
From: "Michael Chan" <[EMAIL PROTECTED]>
Date: Mon, 08 Jan 2007 15:56:48 -0800

> [BNX2]: Fix bug in bnx2_nvram_write().
> 
> The bug was a bogus pointer being passed to kfree().  The pointer was
> incremented in the write loop and then passed to kfree().
> 
> The fix is to use align_buf to save the original address.
> 
> Signed-off-by: Michael Chan <[EMAIL PROTECTED]>

Applied.
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[BNX2 3/4]: Fix bug in bnx2_nvram_write().

2007-01-08 Thread Michael Chan
[BNX2]: Fix bug in bnx2_nvram_write().

The bug was a bogus pointer being passed to kfree().  The pointer was
incremented in the write loop and then passed to kfree().

The fix is to use align_buf to save the original address.

Signed-off-by: Michael Chan <[EMAIL PROTECTED]>

diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c
index e325f93..08a77a3 100644
--- a/drivers/net/bnx2.c
+++ b/drivers/net/bnx2.c
@@ -3083,7 +3083,7 @@ bnx2_nvram_write(struct bnx2 *bp, u32 of
int buf_size)
 {
u32 written, offset32, len32;
-   u8 *buf, start[4], end[4], *flash_buffer = NULL;
+   u8 *buf, start[4], end[4], *align_buf = NULL, *flash_buffer = NULL;
int rc = 0;
int align_start, align_end;
 
@@ -3111,16 +3111,17 @@ bnx2_nvram_write(struct bnx2 *bp, u32 of
}
 
if (align_start || align_end) {
-   buf = kmalloc(len32, GFP_KERNEL);
-   if (buf == NULL)
+   align_buf = kmalloc(len32, GFP_KERNEL);
+   if (align_buf == NULL)
return -ENOMEM;
if (align_start) {
-   memcpy(buf, start, 4);
+   memcpy(align_buf, start, 4);
}
if (align_end) {
-   memcpy(buf + len32 - 4, end, 4);
+   memcpy(align_buf + len32 - 4, end, 4);
}
-   memcpy(buf + align_start, data_buf, buf_size);
+   memcpy(align_buf + align_start, data_buf, buf_size);
+   buf = align_buf;
}
 
if (bp->flash_info->buffered == 0) {
@@ -3254,11 +3255,8 @@ bnx2_nvram_write(struct bnx2 *bp, u32 of
}
 
 nvram_write_end:
-   if (bp->flash_info->buffered == 0)
-   kfree(flash_buffer);
-
-   if (align_start || align_end)
-   kfree(buf);
+   kfree(flash_buffer);
+   kfree(align_buf);
return rc;
 }
 


-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html