Re: [PATCH v2 2/2] kobject: Fix -Wstringop-truncation warning
From: Christophe LEROY <hidden>
Date: 2018-06-25 13:32:53
Also in:
lkml
Le 25/06/2018 à 15:24, Stafford Horne a écrit :
On Mon, Jun 25, 2018 at 02:57:13PM +0200, Christophe LEROY wrote:quoted
Le 25/06/2018 à 14:45, Stafford Horne a écrit :quoted
When compiling with GCC 9.0.0 I am seeing the following warning: In function ‘fill_kobj_path’, inlined from ‘kobject_get_path’ at lib/kobject.c:155:2: lib/kobject.c:128:3: warning: ‘strncpy’ output truncated before terminating nul copying as many bytes from a string as its length [-Wstringop-truncation] strncpy(path + length, kobject_name(parent), cur); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ lib/kobject.c: In function ‘kobject_get_path’: lib/kobject.c:125:13: note: length computed here int cur = strlen(kobject_name(parent)); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ This is not really an issue since the buffer we are writing to is pre-zero'd and we have already allocated the buffer based on the calculated strlen size and accounted for the terminating '\0'. Just use memcpy() instead.If we are already sure the destination is big enough, why not just do a strcpy() and drop the 'cur = strlen()' ?Hi Christophe, Here were are writing multiple strings into a buffer from back to front. We are copying exactly strlen() bytes at a time to avoid the nul terminator being copied into the buffer. I don't doubt we could use strcpy() but I was trying to keep the change small.
Ok, fair enough. Reviewed-by: Christophe Leroy <redacted>
-Staffordquoted
quoted
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Cc: Arnd Bergmann <arnd@arndb.de> Cc: Eric Biggers <redacted> Signed-off-by: Stafford Horne <shorne@gmail.com> --- lib/kobject.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)diff --git a/lib/kobject.c b/lib/kobject.c index 18989b5b3b56..e876957743c8 100644 --- a/lib/kobject.c +++ b/lib/kobject.c@@ -125,7 +125,7 @@ static void fill_kobj_path(struct kobject *kobj, char *path, int length) int cur = strlen(kobject_name(parent)); /* back up enough to print this name with '/' */ length -= cur; - strncpy(path + length, kobject_name(parent), cur); + memcpy(path + length, kobject_name(parent), cur); *(path + --length) = '/'; }