From ffd5b0dbe4351b6fdd89206289e62a057dccddf9 Mon Sep 17 00:00:00 2001 From: Feng Wu Date: Sat, 27 Jun 2026 08:22:19 +0800 Subject: [PATCH] Darwin, FreeBSD: fixed sysctlbyname() ENOMEM handling. On ENOMEM, sysctlbyname() may update oldlenp, so the value no longer reliably represents the destination buffer size. The ENOMEM fallback used size to terminate kern.ostype and kern.osrelease. Use the static buffer sizes instead. --- src/os/unix/ngx_darwin_init.c | 6 ++++-- src/os/unix/ngx_freebsd_init.c | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/os/unix/ngx_darwin_init.c b/src/os/unix/ngx_darwin_init.c index 70748ee57..0f5a8bb06 100644 --- a/src/os/unix/ngx_darwin_init.c +++ b/src/os/unix/ngx_darwin_init.c @@ -115,7 +115,8 @@ ngx_os_specific_init(ngx_log_t *log) return NGX_ERROR; } - ngx_darwin_kern_ostype[size - 1] = '\0'; + ngx_darwin_kern_ostype[sizeof(ngx_darwin_kern_ostype) - 1] + = '\0'; } } @@ -135,7 +136,8 @@ ngx_os_specific_init(ngx_log_t *log) return NGX_ERROR; } - ngx_darwin_kern_osrelease[size - 1] = '\0'; + ngx_darwin_kern_osrelease[sizeof(ngx_darwin_kern_osrelease) - 1] + = '\0'; } } diff --git a/src/os/unix/ngx_freebsd_init.c b/src/os/unix/ngx_freebsd_init.c index f732637d1..598181691 100644 --- a/src/os/unix/ngx_freebsd_init.c +++ b/src/os/unix/ngx_freebsd_init.c @@ -116,7 +116,8 @@ ngx_os_specific_init(ngx_log_t *log) return NGX_ERROR; } - ngx_freebsd_kern_ostype[size - 1] = '\0'; + ngx_freebsd_kern_ostype[sizeof(ngx_freebsd_kern_ostype) - 1] + = '\0'; } size = sizeof(ngx_freebsd_kern_osrelease); @@ -129,7 +130,8 @@ ngx_os_specific_init(ngx_log_t *log) return NGX_ERROR; } - ngx_freebsd_kern_osrelease[size - 1] = '\0'; + ngx_freebsd_kern_osrelease[sizeof(ngx_freebsd_kern_osrelease) - 1] + = '\0'; }