[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


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