mirror of
https://gitlab.freedesktop.org/xorg/xserver.git
synced 2025-12-29 19:40:08 +01:00
On traditional 32-bit and 64-bit architectures, uint64_t can be abused to hold a uintptr_t and be cast back to a valid pointer. However, on CHERI, and thus Arm's Morello prototype, pointers are capabilities, which contain a traditional address alongside additional metadata, including a tag bit that ensures it cannot be forged (the only way to get a capability with the tag bit set is by using instructions that take in another valid capability with sufficient bounds/permissions/etc for the request, and any other operation, like overwriting individual bytes in memory, will give a capability whose tag is clear). Casting a pointer to a uintptr_t is fine as uintptr_t is represented as a capability, but casting to a uint64_t yields just the address, losing the metadata and tag. Thus, when cast back to a uintptr_t, the capability remains invalid and faults on any attempt to dereference. As with various other places in the tree, address this by searching for the pointer in a list so that we no longer rely on this undefined behaviour. Signed-off-by: Jessica Clarke <jrtc27@jrtc27.com> |
||
|---|---|---|
| .. | ||
| desktop | ||
| man | ||
| .gitignore | ||
| drm.xml | ||
| meson.build | ||
| xwayland-cursor.c | ||
| xwayland-cursor.h | ||
| xwayland-cvt.c | ||
| xwayland-cvt.h | ||
| xwayland-drm-lease.c | ||
| xwayland-drm-lease.h | ||
| xwayland-glamor-eglstream.c | ||
| xwayland-glamor-gbm.c | ||
| xwayland-glamor-xv.c | ||
| xwayland-glamor.c | ||
| xwayland-glamor.h | ||
| xwayland-glx.c | ||
| xwayland-glx.h | ||
| xwayland-input.c | ||
| xwayland-input.h | ||
| xwayland-output.c | ||
| xwayland-output.h | ||
| xwayland-pixmap.c | ||
| xwayland-pixmap.h | ||
| xwayland-present.c | ||
| xwayland-present.h | ||
| xwayland-screen.c | ||
| xwayland-screen.h | ||
| xwayland-shm.c | ||
| xwayland-shm.h | ||
| xwayland-types.h | ||
| xwayland-vidmode.c | ||
| xwayland-vidmode.h | ||
| xwayland-window-buffers.c | ||
| xwayland-window-buffers.h | ||
| xwayland-window.c | ||
| xwayland-window.h | ||
| xwayland.c | ||