Messages in this thread | | | From | David Laight <> | Subject | RE: [PATCH] checkpatch: add a new check for strcpy/strlcpy uses | Date | Tue, 5 Jan 2021 10:20:07 +0000 |
| |
From: Joe Perches > Sent: 05 January 2021 08:44 > > On Tue, 2021-01-05 at 13:53 +0530, Dwaipayan Ray wrote: > > strcpy() performs no bounds checking on the destination buffer. > > This could result in linear overflows beyond the end of the buffer. > > > > strlcpy() reads the entire source buffer first. This read > > may exceed the destination size limit. This can be both inefficient > > and lead to linear read overflows. > > > > The safe replacement to both of these is to use strscpy() instead. > > Add a new checkpatch warning which alerts the user on finding usage of > > strcpy() or strlcpy(). > > I do not believe that strscpy is preferred over strcpy. > > When the size of the output buffer is known to be larger > than the input, strcpy is faster. > > There are about 2k uses of strcpy. > Is there a use where strcpy use actually matters? > I don't know offhand... > > But I believe compilers do not optimize away the uses of strscpy > to a simple memcpy like they do for strcpy with a const from > > strcpy(foo, "bar");
It ought to be possible to convert: strscpy(foo, "bar", constant_sz) to a memcpy() within the .h file.
Similarly it should be possible to error strcpy(foo, "bar") Unless foo is large enough and "bar" is constant.
After all with a length check strcpy(foo, "bar") is actually safer than strspy(foo, "bar", sizeof foo) because there is less room for error.
David
- Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK Registration No: 1397386 (Wales)
| |