aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Gunthorpe <[email protected]>2018-08-09 19:19:35 +0300
committerJason Gunthorpe <[email protected]>2018-08-09 15:46:07 -0600
commit922983c2a1a2f679cd576eb7162f413c15a4e979 (patch)
tree48f8565eff0da8c49584a3bffc575b0cde447879
parent61b717d041b1976530f68f8b539b2e3a7dd8e39c (diff)
IB/uverbs: Fix reading of 32 bit flags
This is missing a zeroing of the high bits of flags, and is also not correct for big endian machines. Properly zero extend the 32 bit flags into the 64 bit stack variable. Reported-by: Michael J. Ruhl <[email protected]> Fixes: bccd06223f21 ("IB/uverbs: Add UVERBS_ATTR_FLAGS_IN to the specs language") Signed-off-by: Jason Gunthorpe <[email protected]> Signed-off-by: Leon Romanovsky <[email protected]> Reviewed-by: Michael J. Ruhl <[email protected]>
-rw-r--r--drivers/infiniband/core/uverbs_ioctl.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/infiniband/core/uverbs_ioctl.c b/drivers/infiniband/core/uverbs_ioctl.c
index f0655a84f9d9..23ff698ab08e 100644
--- a/drivers/infiniband/core/uverbs_ioctl.c
+++ b/drivers/infiniband/core/uverbs_ioctl.c
@@ -535,7 +535,7 @@ int uverbs_get_flags64(u64 *to, const struct uverbs_attr_bundle *attrs_bundle,
if (attr->ptr_attr.len == 8)
flags = attr->ptr_attr.data;
else if (attr->ptr_attr.len == 4)
- memcpy(&flags, &attr->ptr_attr.data, 4);
+ flags = *(u32 *)&attr->ptr_attr.data;
else
return -EINVAL;