I'll note again that __strlcpy_chk does if (__glibc_unlikely (s1len < n)) __chk_fail (); return __strlcpy (s1, s2, n); so it doesn't check whether 's2' might be shorter than s1len and thus the call is actually safe (it might be safe to call strnlen (s2, n)).