All of lore.kernel.org
 help / color / mirror / Atom feed
From: Steve Dickson <SteveD@redhat.com>
To: Luk Claes <luk@debian.org>
Cc: linux-nfs@vger.kernel.org
Subject: Re: [PATCH] Do not segfault because of kernel version
Date: Tue, 12 Jul 2011 10:42:09 -0400	[thread overview]
Message-ID: <4E1C5D41.6020403@RedHat.com> (raw)
In-Reply-To: <1309844538-16008-2-git-send-email-luk@debian.org>



On 07/05/2011 01:42 AM, Luk Claes wrote:
> 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 <luk@debian.org>
Committed....

steved.

> ---
>  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 <stdlib.h>
> -#include <string.h>
> +#include <stdio.h>
> +#include <limits.h>
>  
>  #include <sys/utsname.h>
>  
> @@ -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);
>  }
>  

      reply	other threads:[~2011-07-12 14:42 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-07-02 14:32 [PATCH] Do not segfault because of kernel version Luk Claes
2011-07-03  5:04 ` NeilBrown
2011-07-03  6:37   ` Luk Claes
2011-07-03 13:02     ` Jim Rees
2011-07-03 13:10       ` Luk Claes
2011-07-03 13:26         ` Jim Rees
2011-07-03 13:28           ` Luk Claes
2011-07-03 14:11             ` Jim Rees
2011-07-04 16:28               ` Luk Claes
2011-07-04 19:00                 ` Jim Rees
2011-07-05  5:42                   ` Luk Claes
2011-07-05  5:42                     ` Luk Claes
2011-07-12 14:42                       ` Steve Dickson [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4E1C5D41.6020403@RedHat.com \
    --to=steved@redhat.com \
    --cc=linux-nfs@vger.kernel.org \
    --cc=luk@debian.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.