Skip to contentSkip to conversation

ARM: fix memset size error

PATCH In review Li Zefan 2 participants 3 messages Nov 5, 2007 Arm (32-bit)

lore
Share & tools
lore

Li Zefan

author
#0 lore raw

PATCH 1/6 ARM: fix memset size error

The size passing to memset is wrong. And here we can replace kmalloc with kzalloc.

Signed-off-by Li Zefan <[email protected]>

---
 arch/arm/common/uengine.c |    6 ++----
 1 files changed, 2 insertions(+), 4 deletions(-)
arch/arm/common/uengine.c +2 -4
index 95c8508..117cab3 100644
@@ -374,8 +374,8 @@ static int set_initial_registers(int uengine, struct ixp2000_uengine_code *c)
 	u8 *ucode;
 	int i;
 
-	gpr_a = kmalloc(128 * sizeof(u32), GFP_KERNEL);
-	gpr_b = kmalloc(128 * sizeof(u32), GFP_KERNEL);
+	gpr_a = kzalloc(128 * sizeof(u32), GFP_KERNEL);
+	gpr_b = kzalloc(128 * sizeof(u32), GFP_KERNEL);
 	ucode = kmalloc(513 * 5, GFP_KERNEL);
 	if (gpr_a == NULL || gpr_b == NULL || ucode == NULL) {
 		kfree(ucode);
@@ -388,8 +388,6 @@ static int set_initial_registers(int uengine, struct ixp2000_uengine_code *c)
 	if (c->uengine_parameters & IXP2000_UENGINE_4_CONTEXTS)
 		per_ctx_regs = 32;
 
-	memset(gpr_a, 0, sizeof(gpr_a));
-	memset(gpr_b, 0, sizeof(gpr_b));
 	for (i = 0; i < 256; i++) {
 		struct ixp2000_reg_value *r = c->initial_reg_values + i;
 		u32 *bank;
Signature · 1 line
1.5.3.rc7
#1 lore raw
Quoted 26 lines · Li Zefan

The size passing to memset is wrong. And here we can replace kmalloc with kzalloc.

Signed-off-by Li Zefan <[email protected]>

---
 arch/arm/common/uengine.c |    6 ++----
 1 files changed, 2 insertions(+), 4 deletions(-)
arch/arm/common/uengine.c +2 -2
index 95c8508..117cab3 100644
@@ -374,8 +374,8 @@ static int set_initial_registers(int uengine, struct ixp2000_uengine_code *c)
 	u8 *ucode;
 	int i;
 
-	gpr_a = kmalloc(128 * sizeof(u32), GFP_KERNEL);
-	gpr_b = kmalloc(128 * sizeof(u32), GFP_KERNEL);
+	gpr_a = kzalloc(128 * sizeof(u32), GFP_KERNEL);
+	gpr_b = kzalloc(128 * sizeof(u32), GFP_KERNEL);
 	ucode = kmalloc(513 * 5, GFP_KERNEL);
 	if (gpr_a == NULL || gpr_b == NULL || ucode == NULL) {
 		kfree(ucode);

arch/arm/common/uengine.c static int set_initial_registers(int uengine, struct ixp2000_uengine_code *c) · line 393

Quoted 8 lines
arch/arm/common/uengine.c +0 -2
@@ -388,8 +388,6 @@ static int set_initial_registers(int uengine, struct ixp2000_uengine_code *c)
 	if (c->uengine_parameters & IXP2000_UENGINE_4_CONTEXTS)
 		per_ctx_regs = 32;
 
-	memset(gpr_a, 0, sizeof(gpr_a));
-	memset(gpr_b, 0, sizeof(gpr_b));
 	for (i = 0; i < 256; i++) {
 		struct ixp2000_reg_value *r = c->initial_reg_values + i;
 		u32 *bank;

it's unlikely that patch will cause any trouble whatsoever, but
notice that it *is* changing the underlying logic. those original memsets should probably have been written initially as "sizeof(*gpr_a)" so they would previously have zeroed only memory the

        ^

size of a pointer, no?

now, i'm guessing the logic is correct but i figured it's worth
noting what the code *used* to do. unless i'm misreading something horribly.

rday

Signature · 7 lines
========================================================================
Robert P. J. Day
Linux Consulting, Training and Annoying Kernel Pedantry
Waterloo, Ontario, CANADA

http://crashcourse.ca
========================================================================
author
#2 lore raw
Quoted 40 lines · Robert P. J. Day
Quoted 26 lines · Li Zefan

The size passing to memset is wrong. And here we can replace kmalloc with kzalloc.

Signed-off-by Li Zefan <[email protected]>

---
 arch/arm/common/uengine.c |    6 ++----
 1 files changed, 2 insertions(+), 4 deletions(-)
arch/arm/common/uengine.c +2 -2
index 95c8508..117cab3 100644
@@ -374,8 +374,8 @@ static int set_initial_registers(int uengine, struct ixp2000_uengine_code *c)
 	u8 *ucode;
 	int i;
 
-	gpr_a = kmalloc(128 * sizeof(u32), GFP_KERNEL);
-	gpr_b = kmalloc(128 * sizeof(u32), GFP_KERNEL);
+	gpr_a = kzalloc(128 * sizeof(u32), GFP_KERNEL);
+	gpr_b = kzalloc(128 * sizeof(u32), GFP_KERNEL);
 	ucode = kmalloc(513 * 5, GFP_KERNEL);
 	if (gpr_a == NULL || gpr_b == NULL || ucode == NULL) {
 		kfree(ucode);

arch/arm/common/uengine.c static int set_initial_registers(int uengine, struct ixp2000_uengine_code *c) · line 393

Quoted 8 lines
arch/arm/common/uengine.c +0 -2
@@ -388,8 +388,6 @@ static int set_initial_registers(int uengine, struct ixp2000_uengine_code *c)
 	if (c->uengine_parameters & IXP2000_UENGINE_4_CONTEXTS)
 		per_ctx_regs = 32;
 
-	memset(gpr_a, 0, sizeof(gpr_a));
-	memset(gpr_b, 0, sizeof(gpr_b));
 	for (i = 0; i < 256; i++) {
 		struct ixp2000_reg_value *r = c->initial_reg_values + i;
 		u32 *bank;

it's unlikely that patch will cause any trouble whatsoever, but
notice that it *is* changing the underlying logic. those original memsets should probably have been written initially as "sizeof(*gpr_a)" so they would previously have zeroed only memory the

Quoted 7 lines
        ^

size of a pointer, no?

now, i'm guessing the logic is correct but i figured it's worth
noting what the code *used* to do. unless i'm misreading something horribly.

In the for loop, some elems of gpr_a and gpr_b will be assigned with a value, but not all elems. So those unassigned elems should be filled with 0.

I think it happens now and then to mistake to regard a pointer as a static array, and I guess this is what sizeof(gpr_a) means.

Li Zefan