diff --git a/src/lisp/Linux-os.c b/src/lisp/Linux-os.c index 296ff2a1762b3a0f2729984d2693be4c28a366eb..cbd25fd1a48e3d53843b36c44c43505f2404d1f2 100644 --- a/src/lisp/Linux-os.c +++ b/src/lisp/Linux-os.c @@ -76,12 +76,26 @@ check_personality(struct utsname *name, char *const *argv, char *const *envp) #if defined(__i386) || defined(__x86_64) int major_version, minor_version, patch_version; char *p; + p = name->release; major_version = atoi(p); - p = strchr(p,'.')+1; - minor_version = atoi(p); - p = strchr(p,'.')+1; - patch_version = atoi(p); + + /* + * Try to extract the minor and patch version, but if we can't + * just set it to zero. In particular, some Debian systems have a + * release like "3.7-trunk-686-pae" which is missing the patch + * version. + */ + + p = strchr(p,'.'); + if (p) { + minor_version = atoi(p + 1); + p = strchr(p + 1,'.'); + patch_version = p ? atoi(p + 1) : 0; + } else { + minor_version = 0; + patch_version = 0; + } if ((major_version == 2 /* Some old kernels will apparently lose unsupported personality flags