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.
This commit is contained in:
Feng Wu 2026-06-27 08:22:19 +08:00
parent 42f8df65b6
commit ffd5b0dbe4
2 changed files with 8 additions and 4 deletions

View file

@ -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';
}
}

View file

@ -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';
}