aboutsummaryrefslogtreecommitdiffstats
path: root/module/nvpair/nvpair.c
diff options
context:
space:
mode:
authorGeLiXin <[email protected]>2016-10-01 06:47:57 +0800
committerBrian Behlendorf <[email protected]>2016-09-30 15:47:57 -0700
commit470f12d631764d3706e2702762e9f3ae924cab43 (patch)
tree894fe812a83384879dbd595744c35c275f482709 /module/nvpair/nvpair.c
parented3ea30fb9341c860c94bf71e771f115ee4801ea (diff)
Fix coverity defects: CID 147531 147532 147533 147535
coverity scan CID:147531,type: Argument cannot be negative - may copy data with negative size coverity scan CID:147532,type: resource leaks - may close a fd which is negative coverity scan CID:147533,type: resource leaks - may call pwrite64 with a negative size coverity scan CID:147535,type: resource leaks - may call fdopen with a negative fd Reviewed-by: Richard Laager <[email protected]> Reviewed-by: Brian Behlendorf <[email protected]> Signed-off-by: GeLiXin <[email protected]> Closes #5176
Diffstat (limited to 'module/nvpair/nvpair.c')
-rwxr-xr-x[-rw-r--r--]module/nvpair/nvpair.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/module/nvpair/nvpair.c b/module/nvpair/nvpair.c
index 071923ea7..14b196d96 100644..100755
--- a/module/nvpair/nvpair.c
+++ b/module/nvpair/nvpair.c
@@ -1260,6 +1260,8 @@ nvpair_type_is_array(nvpair_t *nvp)
static int
nvpair_value_common(nvpair_t *nvp, data_type_t type, uint_t *nelem, void *data)
{
+ int value_sz;
+
if (nvp == NULL || nvpair_type(nvp) != type)
return (EINVAL);
@@ -1289,8 +1291,9 @@ nvpair_value_common(nvpair_t *nvp, data_type_t type, uint_t *nelem, void *data)
#endif
if (data == NULL)
return (EINVAL);
- bcopy(NVP_VALUE(nvp), data,
- (size_t)i_get_value_size(type, NULL, 1));
+ if ((value_sz = i_get_value_size(type, NULL, 1)) < 0)
+ return (EINVAL);
+ bcopy(NVP_VALUE(nvp), data, (size_t)value_sz);
if (nelem != NULL)
*nelem = 1;
break;