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 <michael.j.ruhl@intel.com> Fixes: bccd06223f21 ("IB/uverbs: Add UVERBS_ATTR_FLAGS_IN to the specs language") Signed-off-by: Jason Gunthorpe <jgg@mellanox.com> Signed-off-by: Leon Romanovsky <leonro@mellanox.com> Reviewed-by: Michael J. Ruhl <michael.j.ruhl@intel.com>
This commit is contained in:
parent
61b717d041
commit
922983c2a1
@ -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;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user