2006-05-16 02:59:16

by Florin Malita

[permalink] [raw]
Subject: [PATCH] nfsd: sign conversion obscuring errors in nfsd_set_posix_acl()

Assigning the result of posix_acl_to_xattr() to an unsigned data type
(size/size_t) obscures possible errors.

Coverity CID: 1206.

Signed-off-by: Florin Malita <[email protected]>
---

diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c
index 6aa92d0..1d65f13 100644
--- a/fs/nfsd/vfs.c
+++ b/fs/nfsd/vfs.c
@@ -1922,11 +1922,10 @@ nfsd_set_posix_acl(struct svc_fh *fhp, i
value = kmalloc(size, GFP_KERNEL);
if (!value)
return -ENOMEM;
- size = posix_acl_to_xattr(acl, value, size);
- if (size < 0) {
- error = size;
+ error = posix_acl_to_xattr(acl, value, size);
+ if (error < 0)
goto getout;
- }
+ size = error;
} else
size = 0;




2006-05-16 03:07:36

by NeilBrown

[permalink] [raw]
Subject: Re: [PATCH] nfsd: sign conversion obscuring errors in nfsd_set_posix_acl()

On Monday May 15, [email protected] wrote:
> Assigning the result of posix_acl_to_xattr() to an unsigned data type
> (size/size_t) obscures possible errors.
>
> Coverity CID: 1206.

Acked-by: NeilBrown <[email protected]>

Thanks.
This is non-critical as posix_acl_to_xattr won't actually return an
error here (with current code anyway), but it is certainly worth
fixing.

The fact that posix_acl_to_xattr takes a 'size_t' for size and returns a
int is a bit bothersome... oh well.

NeilBrown

>
> Signed-off-by: Florin Malita <[email protected]>
> ---
>
> diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c
> index 6aa92d0..1d65f13 100644
> --- a/fs/nfsd/vfs.c
> +++ b/fs/nfsd/vfs.c
> @@ -1922,11 +1922,10 @@ nfsd_set_posix_acl(struct svc_fh *fhp, i
> value = kmalloc(size, GFP_KERNEL);
> if (!value)
> return -ENOMEM;
> - size = posix_acl_to_xattr(acl, value, size);
> - if (size < 0) {
> - error = size;
> + error = posix_acl_to_xattr(acl, value, size);
> + if (error < 0)
> goto getout;
> - }
> + size = error;
> } else
> size = 0;
>
>