Commit 106bf59c authored by Michel Dänzer's avatar Michel Dänzer Committed by Michel Dänzer
Browse files

llvmpipe: Use uintptr_t for pointer values

Instead of uint64_t. Fixes potentially writing beyond the end of the
handles pointer array on 32-bit architectures (and copying all 0s
instead of the computed pointer values to the array on big endian
ones).

Corresponding compiler warning:

../src/gallium/drivers/llvmpipe/lp_state_cs.c: In function ‘llvmpipe_set_global_binding’:
../src/gallium/drivers/llvmpipe/lp_state_cs.c:1312:12: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
 1312 |       va = (uint64_t)((char *)lp_res->data + offset);
      |            ^

Fixes: 264663d5

 "gallivm/llvmpipe: add support for global
                     operations."
Reviewed-by: default avatarRoland Scheidegger <sroland@vmware.com>
Part-of: <mesa/mesa!4166>
parent c56f0912
......@@ -1304,12 +1304,12 @@ llvmpipe_set_global_binding(struct pipe_context *pipe,
}
for (i = 0; i < count; i++) {
uint64_t va;
uintptr_t va;
uint32_t offset;
pipe_resource_reference(&cs->global_buffers[first + i], resources[i]);
struct llvmpipe_resource *lp_res = llvmpipe_resource(resources[i]);
offset = *handles[i];
va = (uint64_t)((char *)lp_res->data + offset);
va = (uintptr_t)((char *)lp_res->data + offset);
memcpy(handles[i], &va, sizeof(va));
}
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment