From 0d78f3c758fdc41019093353a7ff4fed83005ac9 Mon Sep 17 00:00:00 2001 From: Ben Noordhuis Date: Thu, 31 Aug 2023 11:45:27 +0200 Subject: [PATCH] unix: get mainline kernel version in Debian (#4131) In Debian, the mainline kernel version is reported via the `uname()` `version` field. --- src/unix/linux.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/unix/linux.c b/src/unix/linux.c index bf102fe9..ee3b3fbc 100644 --- a/src/unix/linux.c +++ b/src/unix/linux.c @@ -324,6 +324,7 @@ unsigned uv__kernel_version(void) { unsigned minor; unsigned patch; char v_sig[256]; + char* needle; version = atomic_load_explicit(&cached_version, memory_order_relaxed); if (version != 0) @@ -342,6 +343,15 @@ unsigned uv__kernel_version(void) { if (-1 == uname(&u)) return 0; + /* In Debian we need to check `version` instead of `release` to extract the + * mainline kernel version. This is an example of how it looks like: + * #1 SMP Debian 5.10.46-4 (2021-08-03) + */ + needle = strstr(u.version, "Debian "); + if (needle != NULL) + if (3 == sscanf(needle, "Debian %u.%u.%u", &major, &minor, &patch)) + goto calculate_version; + if (3 != sscanf(u.release, "%u.%u.%u", &major, &minor, &patch)) return 0;