Code Review
/
vpp.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
Improve strncpy_s src/dst overlap check
[vpp.git]
/
src
/
vppinfra
/
string.h
diff --git
a/src/vppinfra/string.h
b/src/vppinfra/string.h
index
a25d461
..
d568670
100644
(file)
--- a/
src/vppinfra/string.h
+++ b/
src/vppinfra/string.h
@@
-1031,10
+1031,20
@@
strncpy_s_inline (char *__restrict__ dest, rsize_t dmax,
low = (uword) (src < dest ? src : dest);
hi = (uword) (src < dest ? dest : src);
low = (uword) (src < dest ? src : dest);
hi = (uword) (src < dest ? dest : src);
+ /*
+ * This check may fail innocently if src + dmax >= dst, but
+ * src + strlen(src) < dst. If it fails, check more carefully before
+ * blowing the whistle.
+ */
if (PREDICT_FALSE (low + (m - 1) >= hi))
{
if (PREDICT_FALSE (low + (m - 1) >= hi))
{
- clib_c11_violation ("src/dest overlap");
- return EINVAL;
+ m = clib_strnlen (src, m);
+
+ if (low + (m - 1) >= hi)
+ {
+ clib_c11_violation ("src/dest overlap");
+ return EINVAL;
+ }
}
clib_memcpy_fast (dest, src, m);
}
clib_memcpy_fast (dest, src, m);