[PATCH] get_linux_version_code: don't fail on 3.0-foo

Andreas Oberritter obi at opendreambox.org
Fri Apr 27 00:42:53 UTC 2012


Fixes segmentation fault in mount (nfs):

 #0 __GI_____strtol_l_internal (nptr=0x0, endptr=0x0, base=10, group=<optimized out>, loc=0x77f6f3c8) at strtol_l.c:298
 #1 __GI_strtol (nptr=<optimized out>, endptr=<optimized out>, base=<optimized out>) at strtol.c:110
 #2 get_linux_version_code () at libbb/kernel_version.c:34
 #3 find_kernel_nfs_mount_version () at util-linux/mount.c:979

Signed-off-by: Andreas Oberritter <obi at opendreambox.org>
---
 libbb/kernel_version.c |    5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/libbb/kernel_version.c b/libbb/kernel_version.c
index a168a1e..12f1146 100644
--- a/libbb/kernel_version.c
+++ b/libbb/kernel_version.c
@@ -20,7 +20,7 @@
 int FAST_FUNC get_linux_version_code(void)
 {
 	struct utsname name;
-	char *s;
+	char *s, *t;
 	int i, r;
 
 	if (uname(&name) == -1) {
@@ -31,7 +31,8 @@ int FAST_FUNC get_linux_version_code(void)
 	s = name.release;
 	r = 0;
 	for (i = 0; i < 3; i++) {
-		r = r * 256 + atoi(strtok(s, "."));
+		t = strtok(s, ".");
+		r = r * 256 + (t ? atoi(t) : 0);
 		s = NULL;
 	}
 	return r;
-- 
1.7.9.5



More information about the busybox mailing list