Problem is that on systems with a 64-bit kernel and 32 bit userspace,
read_user_data function reads 32-bit value into 64-bit uninitialized
variable, so high half of the variable might be dirty.
Use 32-bit temporary variable in such cases.
Bug
1846986
Change-Id: I2b024a00da536ad95e12e354597bde9811ca7998
Signed-off-by: Igor Nabirushkin <inabirushkin@nvidia.com>
Reviewed-on: http://git-master/r/
1262234
Reviewed-by: Automatic_Commit_Validation_User
GVS: Gerrit_Virtual_Submit
Reviewed-by: Alexey Kravets <akravets@nvidia.com>
Reviewed-by: Dmitry Antipov <dantipov@nvidia.com>
Reviewed-by: Bharat Nihalani <bnihalani@nvidia.com>
if (!validate_stack_addr(addr, vma_sp, user_reg_size))
return -QUADD_URC_SP_INCORRECT;
- if (mode == DW_MODE_ARM32)
- err = read_user_data(&val, (void __user *)addr,
+ if (mode == DW_MODE_ARM32) {
+ u32 val32;
+
+ err = read_user_data(&val32,
+ (void __user *)addr,
sizeof(u32));
- else
+ val = val32;
+ } else {
err = read_user_data(&val, (void __user *)addr,
sizeof(unsigned long));
+ }
if (err < 0)
return err;