Skip to content

Commit

Permalink
mte: add untag_pointer() variant for const pointers
Browse files Browse the repository at this point in the history
  • Loading branch information
muhomorr committed Oct 30, 2023
1 parent 99ab173 commit 452ff8a
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 1 deletion.
2 changes: 1 addition & 1 deletion h_malloc.c
Original file line number Diff line number Diff line change
Expand Up @@ -1762,7 +1762,7 @@ EXPORT size_t h_malloc_usable_size(H_MALLOC_USABLE_SIZE_CONST void *arg) {
return 0;
}

void *p = untag_pointer((void *) (uintptr_t) arg);
const void *p = untag_const_pointer(arg);

if (p < get_slab_region_end() && p >= ro.slab_region_start) {
thread_unseal_metadata();
Expand Down
9 changes: 9 additions & 0 deletions memtag.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,15 @@ static inline void *untag_pointer(void *ptr) {
#endif
}

static inline const void *untag_const_pointer(const void *ptr) {
#ifdef HAS_ARM_MTE
const uintptr_t mask = UINTPTR_MAX >> 8;
return (const void *) ((uintptr_t) ptr & mask);
#else
return ptr;
#endif
}

static inline void *set_pointer_tag(void *ptr, u8 tag) {
#ifdef HAS_ARM_MTE
return (void *) (((uintptr_t) tag << 56) | (uintptr_t) untag_pointer(ptr));
Expand Down

0 comments on commit 452ff8a

Please sign in to comment.