Module Name:    src
Committed By:   riastradh
Date:           Sun Aug 13 11:27:22 UTC 2023

Modified Files:
        src/lib/libc/string: strncpy.3

Log Message:
strncpy(3): More on how strlcpy is not a safe strncpy replacement.


To generate a diff of this commit:
cvs rdiff -u -r1.15 -r1.16 src/lib/libc/string/strncpy.3

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/lib/libc/string/strncpy.3
diff -u src/lib/libc/string/strncpy.3:1.15 src/lib/libc/string/strncpy.3:1.16
--- src/lib/libc/string/strncpy.3:1.15	Fri Aug 11 21:32:26 2023
+++ src/lib/libc/string/strncpy.3	Sun Aug 13 11:27:22 2023
@@ -31,7 +31,7 @@
 .\"
 .\"     from: @(#)strcpy.3	8.1 (Berkeley) 6/4/93
 .\"     from: NetBSD: strcpy.3,v 1.23 2015/04/01 20:18:17 riastradh Exp
-.\"	$NetBSD: strncpy.3,v 1.15 2023/08/11 21:32:26 riastradh Exp $
+.\"	$NetBSD: strncpy.3,v 1.16 2023/08/13 11:27:22 riastradh Exp $
 .\"
 .Dd August 11, 2023
 .Dt STRNCPY 3
@@ -212,6 +212,10 @@ buf[sizeof(buf) - 1] = '\e0';
 .Ed
 .Pp
 If
+.Va input
+is guaranteed to be
+.Tn NUL Ns -terminated ,
+and if
 .Va buf
 need only be
 .Tn NUL Ns -terminated ,
@@ -225,6 +229,16 @@ as follows:
 strlcpy(buf, input, sizeof(buf));
 .Ed
 .Pp
+It is not enough for
+.Va input
+to have
+.Li sizeof(buf)
+bytes allocated; it MUST be
+.Tn NUL Ns -terminated
+for
+.Xr strlcpy 3
+to be used.
+.Pp
 Note that because
 .Xr strlcpy 3
 is not defined in any standards, it should
@@ -235,18 +249,26 @@ Because
 .Xr strlcpy 3
 does not fully initialize
 .Fa dst ,
-it is
+but does read all the way to a
+.Tn NUL
+terminator in
+.Fa src
+even past
+.Fa len
+bytes,
+.Xr strlcpy 3
+is
 .Em not
 a safe
 .Tn NUL Ns -terminating
 replacement for
-.Fn strncpy
-if the buffer is not separately zero-initialized.
+.Fn strncpy .
 Naively replacing
 .Fn strncpy
 by
 .Xr strlcpy 3
-can lead to disclosure of secrets from uninitialized memory.
+can lead to crashes, undefined behaviour, and disclosure of secrets
+from uninitialized memory.
 .Sh SEE ALSO
 .Xr bcopy 3 ,
 .Xr memccpy 3 ,

Reply via email to