diff mbox

[U-Boot,RESEND] Fix misuse of calloc() in linux/compat.h header

Message ID 1339176514-13137-1-git-send-email-marex@denx.de
State Rejected
Delegated to: Tom Rini
Headers show

Commit Message

Marek Vasut June 8, 2012, 5:28 p.m. UTC
Quote from the manpage:

[...]
       void *calloc(size_t nmemb, size_t size);
[...]
DESCRIPTION
[...]

       The  calloc() function allocates memory for an array of nmemb elements
       of size bytes each and returns a pointer to the allocated memory.  The
       memory is set to zero.  If nmemb or size is 0, then calloc() returns
       either NULL, or a unique pointer value that can later be successfully
       passed to free().

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Wolfgang Denk <wd@denx.de>
---
 include/linux/compat.h |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Wolfgang Denk June 8, 2012, 11:43 p.m. UTC | #1
Dear Marek Vasut,

In message <1339176514-13137-1-git-send-email-marex@denx.de> you wrote:
> 
> -#define kzalloc(size, flags)	calloc(size, 1)
> +#define kzalloc(size, flags)	calloc(1, size)

Does this make any practical difference?

I mean, are you aware of any problem that gets fixed by this patch, or
even any kind of performance degradation?

"common/dlmalloc.src" says:

	calloc(size_t unit, size_t quantity);
	   Returns a pointer to quantity * unit bytes, with all locations
	   set to zero.

Multiplication being commutative, I see zero effect in this patch?

Best regards,

Wolfgang Denk
Marek Vasut June 8, 2012, 11:48 p.m. UTC | #2
Dear Wolfgang Denk,

> Dear Marek Vasut,
> 
> In message <1339176514-13137-1-git-send-email-marex@denx.de> you wrote:
> > -#define kzalloc(size, flags)	calloc(size, 1)
> > +#define kzalloc(size, flags)	calloc(1, size)
> 
> Does this make any practical difference?
> 
> I mean, are you aware of any problem that gets fixed by this patch, or
> even any kind of performance degradation?

No, I just blindly found it out when I was enraged and was hacking on filesystem 
code.

> "common/dlmalloc.src" says:
> 
> 	calloc(size_t unit, size_t quantity);
> 	   Returns a pointer to quantity * unit bytes, with all locations
> 	   set to zero.
> 
> Multiplication being commutative, I see zero effect in this patch?

Weeeeell, not in every algebraic system. It has zero effect, it's only about 
correctness [1]. Will applying this break anything?

[1] http://pubs.opengroup.org/onlinepubs/009695399/functions/calloc.html
> Best regards,
> 
> Wolfgang Denk

Best regards,
Marek Vasut
Wolfgang Denk June 8, 2012, 11:58 p.m. UTC | #3
Dear Marek Vasut,

In message <201206090148.40933.marex@denx.de> you wrote:
>
> > Multiplication being commutative, I see zero effect in this patch?
> 
> Weeeeell, not in every algebraic system. It has zero effect, it's only about 
> correctness [1]. Will applying this break anything?

In which way is "a * b" more (or less?) correct than "b * a" ?

What is the difference between allocating a contiguous sequence of
4096 single bytes, or allocating a single block of size 4096?

Best regards,

Wolfgang Denk
Marek Vasut June 9, 2012, 12:04 a.m. UTC | #4
Dear Wolfgang Denk,

> Dear Marek Vasut,
> 
> In message <201206090148.40933.marex@denx.de> you wrote:
> > > Multiplication being commutative, I see zero effect in this patch?
> > 
> > Weeeeell, not in every algebraic system. It has zero effect, it's only
> > about correctness [1]. Will applying this break anything?
> 
> In which way is "a * b" more (or less?) correct than "b * a" ?

In our natural integer system, it's all perfectly OK.

> What is the difference between allocating a contiguous sequence of
> 4096 single bytes, or allocating a single block of size 4096?

None.

> Best regards,
> 
> Wolfgang Denk

Best regards,
Marek Vasut
diff mbox

Patch

diff --git a/include/linux/compat.h b/include/linux/compat.h
index 593b07f..9a9d7b0 100644
--- a/include/linux/compat.h
+++ b/include/linux/compat.h
@@ -18,7 +18,7 @@ 
 #define KERN_DEBUG
 
 #define kmalloc(size, flags)	malloc(size)
-#define kzalloc(size, flags)	calloc(size, 1)
+#define kzalloc(size, flags)	calloc(1, size)
 #define vmalloc(size)		malloc(size)
 #define kfree(ptr)		free(ptr)
 #define vfree(ptr)		free(ptr)