Thread (15 messages) 15 messages, 4 authors, 2013-03-08

Re: [PATCH] net/rds: using strlcpy instead of strncpy

From: Ben Hutchings <hidden>
Date: 2013-03-05 03:38:09

On Tue, 2013-03-05 at 11:32 +0800, Chen Gang wrote:
于 2013年03月05日 11:16, Ben Hutchings 写道:
quoted
I think it is wrong, and the code should be changed to do either:

1. Zero-initialise the whole of the name, then use strlcpy().
2. Keep using strncpy(), and also set the last byte of name to 0.
  I think what I have done is just like your choice "2."
  for me, I think they are equal:

-		strncpy(ctr.name, names[i], sizeof(ctr.name) - 1);
+		strlcpy(ctr.name, names[i], sizeof(ctr.name));


		strncpy(ctr.name, names[i], sizeof(ctr.name) - 1);
+ 		ctr.name[sizeof(ctr.name) - 1] = '\0';
They are not.  strncpy() pads with zeroes to the end of the given buffer
whereas strlcpy() adds only a single zero byte (and truncates if
necessary to fit the zero byte).

Ben.

-- 
Ben Hutchings, Staff Engineer, Solarflare
Not speaking for my employer; that's the marketing department's job.
They asked us to note that Solarflare product names are trademarked.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help