Re: [PATCH] selftests/landlock: Fix snprintf truncation checks in test files

Günther Noack <[email protected]>
Newsgroups gmane.linux.kernel,gmane.linux.kernel.lsm
Message-ID <[email protected]>
On Fri, Jun 26, 2026 at 03:00:16PM +0800, Wang Yan wrote:
> Commit b566f7a4f0e4 ("selftests/landlock: Fix snprintf truncation checks
> in audit helpers") fixed the truncation detection in audit.h by changing
> the comparison from ">" to ">=" to correctly handle the edge case where
> snprintf returns a value equal to the buffer size.
> 
> However, the same pattern exists in ptrace_test.c, audit_test.c, and
> net_test.c and was not fixed.  snprintf() returns the number of characters
> that would have been written, excluding the terminating NUL byte.  When
> the output is truncated, this return value equals or exceeds the buffer
> size. The existing ">" check therefore fails to detect truncation when
> the return value equals the buffer size.
> 
> Fix these remaining instances to use ">=" for truncation detection,
> matching the fix in audit.h.
> 
> Fixes: 6a500b22971c ("selftests/landlock: Add tests for audit flags and domain IDs")
> Signed-off-by: Haofeng Li <[email protected]>
> Signed-off-by: Wang Yan <[email protected]>
> ---
>  tools/testing/selftests/landlock/audit_test.c  | 2 +-
>  tools/testing/selftests/landlock/net_test.c    | 4 ++--
>  tools/testing/selftests/landlock/ptrace_test.c | 2 +-
>  3 files changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/tools/testing/selftests/landlock/audit_test.c b/tools/testing/selftests/landlock/audit_test.c
> index 72b5612375dd..4bea8c880a4d 100644
> --- a/tools/testing/selftests/landlock/audit_test.c
> +++ b/tools/testing/selftests/landlock/audit_test.c
> @@ -31,7 +31,7 @@ static int matches_log_signal(struct __test_metadata *const _metadata,
>  
>  	log_match_len =
>  		snprintf(log_match, sizeof(log_match), log_template, opid);
> -	if (log_match_len > sizeof(log_match))
> +	if (log_match_len >= sizeof(log_match))
>  		return -E2BIG;
>  
>  	return audit_match_record(audit_fd, AUDIT_LANDLOCK_ACCESS, log_match,
> diff --git a/tools/testing/selftests/landlock/net_test.c b/tools/testing/selftests/landlock/net_test.c
> index 2ed1f76b7a8b..aebeafd80466 100644
> --- a/tools/testing/selftests/landlock/net_test.c
> +++ b/tools/testing/selftests/landlock/net_test.c
> @@ -2777,7 +2777,7 @@ static int matches_auditlog(const int audit_fd, const char *const blockers,
>  		log_match_len = snprintf(log_match, sizeof(log_match),
>  					 log_with_addrport_tmpl, blockers,
>  					 dir_addr, addr, dir_port, port);
> -	if (log_match_len > sizeof(log_match))
> +	if (log_match_len >= sizeof(log_match))
>  		return -E2BIG;
>  
>  	return audit_match_record(audit_fd, AUDIT_LANDLOCK_ACCESS, log_match,
> @@ -3072,7 +3072,7 @@ static int matches_log_connect_bound(int audit_fd, const char *const blockers,
>  
>  	log_match_len = snprintf(log_match, sizeof(log_match), log_template,
>  				 blockers, addr, lport, addr, dport);
> -	if (log_match_len > sizeof(log_match))
> +	if (log_match_len >= sizeof(log_match))
>  		return -E2BIG;
>  
>  	return audit_match_record(audit_fd, AUDIT_LANDLOCK_ACCESS, log_match,
> diff --git a/tools/testing/selftests/landlock/ptrace_test.c b/tools/testing/selftests/landlock/ptrace_test.c
> index 4f64c90583cd..65cf2d82f721 100644
> --- a/tools/testing/selftests/landlock/ptrace_test.c
> +++ b/tools/testing/selftests/landlock/ptrace_test.c
> @@ -302,7 +302,7 @@ static int matches_log_ptrace(struct __test_metadata *const _metadata,
>  
>  	log_match_len =
>  		snprintf(log_match, sizeof(log_match), log_template, opid);
> -	if (log_match_len > sizeof(log_match))
> +	if (log_match_len >= sizeof(log_match))
>  		return -E2BIG;
>  
>  	return audit_match_record(audit_fd, AUDIT_LANDLOCK_ACCESS, log_match,
> -- 
> 2.25.1
> 

Thanks for the fix and the reminder!  The fix is correct, because snprintf()
returns the number of bytes that would have been written *excluding* the
trailing NUL byte, whereas the buffer size passed to it *includes* the
space for the trailing NUL byte.

Reviewed-by: Günther Noack <[email protected]>

—Günther
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.