Date: Wed, 24 Jul 2019 14:05:48 +0200 From: Yann Droneaud <ydroneaud@...eya.com> To: David Laight <David.Laight@...LAB.COM>, 'Rasmus Villemoes' <linux@...musvillemoes.dk>, Joe Perches <joe@...ches.com>, Linus Torvalds <torvalds@...ux-foundation.org>, "linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org> Cc: Jonathan Corbet <corbet@....net>, Stephen Kitt <steve@....org>, Kees Cook <keescook@...omium.org>, Nitin Gote <nitin.r.gote@...el.com>, "jannh@...gle.com" <jannh@...gle.com>, "kernel-hardening@...ts.openwall.com" <kernel-hardening@...ts.openwall.com>, Andrew Morton <akpm@...ux-foundation.org> Subject: Re: [PATCH 1/2] string: Add stracpy and stracpy_pad mechanisms Hi, Le mardi 23 juillet 2019 à 15:41 +0000, David Laight a écrit : > From: Rasmus Villemoes > > Sent: 23 July 2019 07:56 > ... > > > +/** > > > + * stracpy - Copy a C-string into an array of char > > > + * @to: Where to copy the string, must be an array of char and > > > not a pointer > > > + * @from: String to copy, may be a pointer or const char array > > > + * > > > + * Helper for strscpy. > > > + * Copies a maximum of sizeof(@to) bytes of @from with %NUL > > > termination. > > > + * > > > + * Returns: > > > + * * The number of characters copied (not including the trailing > > > %NUL) > > > + * * -E2BIG if @to is a zero size array. > > > > Well, yes, but more importantly and generally: -E2BIG if the copy > > including %NUL didn't fit. [The zero size array thing could be made > > into > > a build bug for these stra* variants if one thinks that might > > actually > > occur in real code.] > > Probably better is to return the size of the destination if the copy > didn't fit > (zero if the buffer is zero length). > This allows code to do repeated: > offset += str*cpy(buf + offset, src, sizeof buf - offset); > and do a final check for overflow after all the copies. > > The same is true for a snprintf()like function > Beware that snprintf(), per C standard, is supposed to return the length of the formatted string, regarless of the size of the destination buffer. So encouraging developper to write something like code below because snprintf() in kernel behave in a non-standard way, will likely create some issues in the near future. for(;...;) offset += snprintf(buf + offset, size - offset, "......", ....); (Reminder: the code below is not safe and shouldn't be used) Regards. -- Yann Droneaud OPTEYA
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.