ACK: [PATCH] [Quantal][SRU] (upstream) NFSv4: Fix the string length returned by the idmapper

Luis Henriques luis.henriques at canonical.com
Thu Apr 4 08:45:50 UTC 2013


On Wed, Apr 03, 2013 at 04:57:27PM -0500, Dave Chiluk wrote:
> BugLink: http://bugs.launchpad.net/bugs/1101292
> 
> Functions like nfs_map_uid_to_name() and nfs_map_gid_to_group() are
> expected to return a string without any terminating NUL character.
> Regression introduced by commit 57e62324e469e092ecc6c94a7a86fe4bd6ac5172
> (NFS: Store the legacy idmapper result in the keyring).
> 
> This fixes inability to chown or chgrp files on AIX nfs shares.
> 
> Reported-by: Dave Chiluk <chiluk at canonical.com>
> Signed-off-by: Trond Myklebust <Trond.Myklebust at netapp.com>
> Cc: Bryan Schumaker <bjschuma at netapp.com>
> Cc: stable at vger.kernel.org [>=3.4]
> (backported from commit 3070d4a2f8aa4ac06f424eb497637d41d049bb3a linux)

This commit has been queued for 3.5 stable kernel (should be in
3.5.7.10) and the backport seems to be correct (or at least its not
different from my own backport...)

Also, there's positive tests results.

Cheers,
--
Luis

> 
> Signed-off-by: Dave Chiluk <chiluk at canonical.com>
> ---
>  fs/nfs/idmap.c | 13 ++++++++-----
>  1 file changed, 8 insertions(+), 5 deletions(-)
> ---
>  fs/nfs/idmap.c |   13 ++++++++-----
>  1 file changed, 8 insertions(+), 5 deletions(-)
> 
> diff --git a/fs/nfs/idmap.c b/fs/nfs/idmap.c
> index a0972e9..e4476dc 100644
> --- a/fs/nfs/idmap.c
> +++ b/fs/nfs/idmap.c
> @@ -710,9 +710,9 @@ out1:
>  	return ret;
>  }
>  
> -static int nfs_idmap_instantiate(struct key *key, struct key *authkey, char *data)
> +static int nfs_idmap_instantiate(struct key *key, struct key *authkey, char *data, size_t datalen)
>  {
> -	return key_instantiate_and_link(key, data, strlen(data) + 1,
> +	return key_instantiate_and_link(key, data, datalen,
>  					id_resolver_cache->thread_keyring,
>  					authkey);
>  }
> @@ -720,15 +720,18 @@ static int nfs_idmap_instantiate(struct key *key, struct key *authkey, char *dat
>  static int nfs_idmap_read_message(struct idmap_msg *im, struct key *key, struct key *authkey)
>  {
>  	char id_str[NFS_UINT_MAXLEN];
> +	size_t len;
>  	int ret = -EINVAL;
>  
>  	switch (im->im_conv) {
>  	case IDMAP_CONV_NAMETOID:
> -		sprintf(id_str, "%d", im->im_id);
> -		ret = nfs_idmap_instantiate(key, authkey, id_str);
> +		/* Note: here we store the NUL terminator too */
> +		len = sprintf(id_str, "%d", im->im_id) + 1;
> +		ret = nfs_idmap_instantiate(key, authkey, id_str, len);
>  		break;
>  	case IDMAP_CONV_IDTONAME:
> -		ret = nfs_idmap_instantiate(key, authkey, im->im_name);
> +		len = strlen(im->im_name);
> +		ret = nfs_idmap_instantiate(key, authkey, im->im_name, len);
>  		break;
>  	}
>  
> -- 
> 1.7.9.5
> 
> 
> -- 
> kernel-team mailing list
> kernel-team at lists.ubuntu.com
> https://lists.ubuntu.com/mailman/listinfo/kernel-team




More information about the kernel-team mailing list