From bf35116f9d203dcafce808a6c7b3dd5a0db8afbc Mon Sep 17 00:00:00 2001 From: root Date: Tue, 2 Aug 2011 04:35:55 +0000 Subject: Tue Aug 2 04:35:55 UTC 2011 --- testing/nfs-utils/kernel-3.0-segfault.patch | 53 +++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 testing/nfs-utils/kernel-3.0-segfault.patch (limited to 'testing/nfs-utils/kernel-3.0-segfault.patch') diff --git a/testing/nfs-utils/kernel-3.0-segfault.patch b/testing/nfs-utils/kernel-3.0-segfault.patch new file mode 100644 index 000000000..3dba94a05 --- /dev/null +++ b/testing/nfs-utils/kernel-3.0-segfault.patch @@ -0,0 +1,53 @@ +mount.nfs segfaults if kernel version number does not contain +at least 3 components delimited with a dot. + +Avoid this by matching up to three unsigned integers inialised +to zero, separated by dots. + +A version that does not start with an integer is probably a future +version where the versioning evolved to another scheme. +Return UINT_MAX which is guaranteed to be higher than existing +versions. This would also make it possible to easily identify +versions that do not start with an integer. + +Signed-off-by: Luk Claes +--- + utils/mount/version.h | 16 +++++++++------- + 1 files changed, 9 insertions(+), 7 deletions(-) + +diff --git a/utils/mount/version.h b/utils/mount/version.h +index af61a6f..531cf68 100644 +--- a/utils/mount/version.h ++++ b/utils/mount/version.h +@@ -23,8 +23,8 @@ + #ifndef _NFS_UTILS_MOUNT_VERSION_H + #define _NFS_UTILS_MOUNT_VERSION_H + +-#include +-#include ++#include ++#include + + #include + +@@ -37,14 +37,16 @@ static inline unsigned int MAKE_VERSION(unsigned int p, unsigned int q, + static inline unsigned int linux_version_code(void) + { + struct utsname my_utsname; +- unsigned int p, q, r; ++ unsigned int p, q = 0, r = 0; + ++ /* UINT_MAX as backward compatibility code should not be run */ + if (uname(&my_utsname)) +- return 0; ++ return UINT_MAX; + +- p = (unsigned int)atoi(strtok(my_utsname.release, ".")); +- q = (unsigned int)atoi(strtok(NULL, ".")); +- r = (unsigned int)atoi(strtok(NULL, ".")); ++ /* UINT_MAX as future versions might not start with an integer */ ++ if (sscanf(my_utsname.release, "%u.%u.%u", &p, &q, &r) < 1) ++ return UINT_MAX; ++ + return MAKE_VERSION(p, q, r); + } -- cgit v1.2.3-54-g00ecf