Revert "[compiler-rt]: fix CodeQL format-string warnings via explicit casts (#153843)"
It broke the build: compiler-rt/lib/hwasan/hwasan_thread.cpp:177:11: error: unknown type name 'ssize_t'; did you mean 'size_t'? 177 | (ssize_t)unique_id_, (void *)this, (void *)stack_bottom(), | ^~~~~~~ | size_t > This change addresses CodeQL format-string warnings across multiple > sanitizer libraries by adding explicit casts to ensure that printf-style > format specifiers match the actual argument types. > > Key updates: > - Cast pointer arguments to (void*) when used with %p. > - Use appropriate integer types and specifiers (e.g., size_t -> %zu, > ssize_t -> %zd) to avoid mismatches. > - Fix format specifier mismatches across xray, memprof, lsan, hwasan, > dfsan. > > These changes are no-ops at runtime but improve type safety, silence > static analysis warnings, and reduce the risk of UB in variadic calls. This reverts commit d3d5751a39452327690b4e011a23de8327f02e86.
This commit is contained in:
parent
d5af08a221
commit
ee5367bedb
@ -792,7 +792,7 @@ static void PrintNoOriginTrackingWarning() {
|
|||||||
|
|
||||||
static void PrintNoTaintWarning(const void *address) {
|
static void PrintNoTaintWarning(const void *address) {
|
||||||
Decorator d;
|
Decorator d;
|
||||||
Printf(" %sDFSan: no tainted value at %zx%s\n", d.Warning(), (uptr)address,
|
Printf(" %sDFSan: no tainted value at %x%s\n", d.Warning(), address,
|
||||||
d.Default());
|
d.Default());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -176,7 +176,7 @@ static void HwasanFormatMemoryUsage(InternalScopedString &s) {
|
|||||||
"HWASAN pid: %d rss: %zd threads: %zd stacks: %zd"
|
"HWASAN pid: %d rss: %zd threads: %zd stacks: %zd"
|
||||||
" thr_aux: %zd stack_depot: %zd uniq_stacks: %zd"
|
" thr_aux: %zd stack_depot: %zd uniq_stacks: %zd"
|
||||||
" heap: %zd",
|
" heap: %zd",
|
||||||
(int)internal_getpid(), GetRSS(), thread_stats.n_live_threads,
|
internal_getpid(), GetRSS(), thread_stats.n_live_threads,
|
||||||
thread_stats.total_stack_size,
|
thread_stats.total_stack_size,
|
||||||
thread_stats.n_live_threads * thread_list.MemoryUsedPerThread(),
|
thread_stats.n_live_threads * thread_list.MemoryUsedPerThread(),
|
||||||
sds.allocated, sds.n_uniq_ids, asc[AllocatorStatMapped]);
|
sds.allocated, sds.n_uniq_ids, asc[AllocatorStatMapped]);
|
||||||
@ -692,7 +692,7 @@ void __hwasan_handle_longjmp(const void *sp_dst) {
|
|||||||
"WARNING: HWASan is ignoring requested __hwasan_handle_longjmp: "
|
"WARNING: HWASan is ignoring requested __hwasan_handle_longjmp: "
|
||||||
"stack top: %p; target %p; distance: %p (%zd)\n"
|
"stack top: %p; target %p; distance: %p (%zd)\n"
|
||||||
"False positive error reports may follow\n",
|
"False positive error reports may follow\n",
|
||||||
(void *)sp, (void *)dst, (void *)(dst - sp), dst - sp);
|
(void *)sp, (void *)dst, dst - sp, dst - sp);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
TagMemory(sp, dst - sp, 0);
|
TagMemory(sp, dst - sp, 0);
|
||||||
|
@ -41,7 +41,7 @@ static inline bool malloc_bisect(StackTrace *stack, uptr orig_size) {
|
|||||||
if (h < left || h > right)
|
if (h < left || h > right)
|
||||||
return false;
|
return false;
|
||||||
if (flags()->malloc_bisect_dump) {
|
if (flags()->malloc_bisect_dump) {
|
||||||
Printf("[alloc] %u %zu\n", (u32)h, orig_size);
|
Printf("[alloc] %u %zu\n", h, orig_size);
|
||||||
stack->Print();
|
stack->Print();
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -306,9 +306,8 @@ static void PrintStackAllocations(const StackAllocationsRingBuffer *sa,
|
|||||||
"%p is located %zd bytes %s a %zd-byte local variable %s "
|
"%p is located %zd bytes %s a %zd-byte local variable %s "
|
||||||
"[%p,%p) "
|
"[%p,%p) "
|
||||||
"in %s %s\n",
|
"in %s %s\n",
|
||||||
(void *)untagged_addr, offset, whence, local.size, local.name,
|
untagged_addr, offset, whence, local.size, local.name, best_beg,
|
||||||
(void *)best_beg, (void *)(best_beg + local.size),
|
best_beg + local.size, local.function_name, location.data());
|
||||||
local.function_name, location.data());
|
|
||||||
location.clear();
|
location.clear();
|
||||||
Printf("%s\n", d.Default());
|
Printf("%s\n", d.Default());
|
||||||
}
|
}
|
||||||
@ -739,8 +738,8 @@ void BaseReport::PrintHeapOrGlobalCandidate() const {
|
|||||||
Printf("%s", d.Location());
|
Printf("%s", d.Location());
|
||||||
Printf("%p is located %zd bytes %s a %zd-byte region [%p,%p)\n",
|
Printf("%p is located %zd bytes %s a %zd-byte region [%p,%p)\n",
|
||||||
untagged_addr, offset, whence,
|
untagged_addr, offset, whence,
|
||||||
candidate.heap.end - candidate.heap.begin,
|
candidate.heap.end - candidate.heap.begin, candidate.heap.begin,
|
||||||
(void *)candidate.heap.begin, (void *)candidate.heap.end);
|
candidate.heap.end);
|
||||||
Printf("%s", d.Allocation());
|
Printf("%s", d.Allocation());
|
||||||
Printf("allocated by thread T%u here:\n", candidate.heap.thread_id);
|
Printf("allocated by thread T%u here:\n", candidate.heap.thread_id);
|
||||||
Printf("%s", d.Default());
|
Printf("%s", d.Default());
|
||||||
@ -763,11 +762,11 @@ void BaseReport::PrintHeapOrGlobalCandidate() const {
|
|||||||
Printf(
|
Printf(
|
||||||
"%p is located %zd bytes %s a %zd-byte global variable "
|
"%p is located %zd bytes %s a %zd-byte global variable "
|
||||||
"%s [%p,%p) in %s\n",
|
"%s [%p,%p) in %s\n",
|
||||||
(void *)untagged_addr,
|
untagged_addr,
|
||||||
candidate.after ? untagged_addr - (info.start + info.size)
|
candidate.after ? untagged_addr - (info.start + info.size)
|
||||||
: info.start - untagged_addr,
|
: info.start - untagged_addr,
|
||||||
candidate.after ? "after" : "before", info.size, info.name,
|
candidate.after ? "after" : "before", info.size, info.name,
|
||||||
(void *)info.start, (void *)(info.start + info.size), module_name);
|
info.start, info.start + info.size, module_name);
|
||||||
} else {
|
} else {
|
||||||
uptr size = GetGlobalSizeFromDescriptor(candidate.untagged_addr);
|
uptr size = GetGlobalSizeFromDescriptor(candidate.untagged_addr);
|
||||||
if (size == 0)
|
if (size == 0)
|
||||||
@ -775,14 +774,14 @@ void BaseReport::PrintHeapOrGlobalCandidate() const {
|
|||||||
Printf(
|
Printf(
|
||||||
"%p is located %s a global variable in "
|
"%p is located %s a global variable in "
|
||||||
"\n #0 0x%x (%s+0x%x)\n",
|
"\n #0 0x%x (%s+0x%x)\n",
|
||||||
(void *)untagged_addr, candidate.after ? "after" : "before",
|
untagged_addr, candidate.after ? "after" : "before",
|
||||||
(void *)candidate.untagged_addr, module_name, (u32)module_address);
|
candidate.untagged_addr, module_name, module_address);
|
||||||
else
|
else
|
||||||
Printf(
|
Printf(
|
||||||
"%p is located %s a %zd-byte global variable in "
|
"%p is located %s a %zd-byte global variable in "
|
||||||
"\n #0 0x%x (%s+0x%x)\n",
|
"\n #0 0x%x (%s+0x%x)\n",
|
||||||
(void *)untagged_addr, candidate.after ? "after" : "before", size,
|
untagged_addr, candidate.after ? "after" : "before", size,
|
||||||
(void *)candidate.untagged_addr, module_name, (u32)module_address);
|
candidate.untagged_addr, module_name, module_address);
|
||||||
}
|
}
|
||||||
Printf("%s", d.Default());
|
Printf("%s", d.Default());
|
||||||
}
|
}
|
||||||
@ -793,8 +792,8 @@ void BaseReport::PrintAddressDescription() const {
|
|||||||
int num_descriptions_printed = 0;
|
int num_descriptions_printed = 0;
|
||||||
|
|
||||||
if (MemIsShadow(untagged_addr)) {
|
if (MemIsShadow(untagged_addr)) {
|
||||||
Printf("%s%p is HWAsan shadow memory.\n%s", d.Location(),
|
Printf("%s%p is HWAsan shadow memory.\n%s", d.Location(), untagged_addr,
|
||||||
(void *)untagged_addr, d.Default());
|
d.Default());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -803,7 +802,7 @@ void BaseReport::PrintAddressDescription() const {
|
|||||||
Printf(
|
Printf(
|
||||||
"%s[%p,%p) is a %s %s heap chunk; "
|
"%s[%p,%p) is a %s %s heap chunk; "
|
||||||
"size: %zd offset: %zd\n%s",
|
"size: %zd offset: %zd\n%s",
|
||||||
d.Location(), (void *)heap.begin, (void *)(heap.begin + heap.size),
|
d.Location(), heap.begin, heap.begin + heap.size,
|
||||||
heap.from_small_heap ? "small" : "large",
|
heap.from_small_heap ? "small" : "large",
|
||||||
heap.is_allocated ? "allocated" : "unallocated", heap.size,
|
heap.is_allocated ? "allocated" : "unallocated", heap.size,
|
||||||
untagged_addr - heap.begin, d.Default());
|
untagged_addr - heap.begin, d.Default());
|
||||||
@ -822,8 +821,8 @@ void BaseReport::PrintAddressDescription() const {
|
|||||||
Printf("%s", d.Error());
|
Printf("%s", d.Error());
|
||||||
Printf("\nCause: stack tag-mismatch\n");
|
Printf("\nCause: stack tag-mismatch\n");
|
||||||
Printf("%s", d.Location());
|
Printf("%s", d.Location());
|
||||||
Printf("Address %p is located in stack of thread T%zd\n",
|
Printf("Address %p is located in stack of thread T%zd\n", untagged_addr,
|
||||||
(void *)untagged_addr, (ssize)sa.thread_id());
|
sa.thread_id());
|
||||||
Printf("%s", d.Default());
|
Printf("%s", d.Default());
|
||||||
announce_by_id(sa.thread_id());
|
announce_by_id(sa.thread_id());
|
||||||
PrintStackAllocations(sa.get(), ptr_tag, untagged_addr);
|
PrintStackAllocations(sa.get(), ptr_tag, untagged_addr);
|
||||||
@ -843,9 +842,9 @@ void BaseReport::PrintAddressDescription() const {
|
|||||||
Printf("\nCause: use-after-free\n");
|
Printf("\nCause: use-after-free\n");
|
||||||
Printf("%s", d.Location());
|
Printf("%s", d.Location());
|
||||||
Printf("%p is located %zd bytes inside a %zd-byte region [%p,%p)\n",
|
Printf("%p is located %zd bytes inside a %zd-byte region [%p,%p)\n",
|
||||||
(void *)untagged_addr, untagged_addr - UntagAddr(har.tagged_addr),
|
untagged_addr, untagged_addr - UntagAddr(har.tagged_addr),
|
||||||
(ssize)har.requested_size, UntagAddr(har.tagged_addr),
|
har.requested_size, UntagAddr(har.tagged_addr),
|
||||||
(void *)(UntagAddr(har.tagged_addr) + har.requested_size));
|
UntagAddr(har.tagged_addr) + har.requested_size);
|
||||||
Printf("%s", d.Allocation());
|
Printf("%s", d.Allocation());
|
||||||
Printf("freed by thread T%u here:\n", ha.free_thread_id);
|
Printf("freed by thread T%u here:\n", ha.free_thread_id);
|
||||||
Printf("%s", d.Default());
|
Printf("%s", d.Default());
|
||||||
@ -859,7 +858,7 @@ void BaseReport::PrintAddressDescription() const {
|
|||||||
// Print a developer note: the index of this heap object
|
// Print a developer note: the index of this heap object
|
||||||
// in the thread's deallocation ring buffer.
|
// in the thread's deallocation ring buffer.
|
||||||
Printf("hwasan_dev_note_heap_rb_distance: %zd %zd\n", ha.ring_index + 1,
|
Printf("hwasan_dev_note_heap_rb_distance: %zd %zd\n", ha.ring_index + 1,
|
||||||
(ssize)flags()->heap_history_size);
|
flags()->heap_history_size);
|
||||||
Printf("hwasan_dev_note_num_matching_addrs: %zd\n", ha.num_matching_addrs);
|
Printf("hwasan_dev_note_num_matching_addrs: %zd\n", ha.num_matching_addrs);
|
||||||
Printf("hwasan_dev_note_num_matching_addrs_4b: %zd\n",
|
Printf("hwasan_dev_note_num_matching_addrs_4b: %zd\n",
|
||||||
ha.num_matching_addrs_4b);
|
ha.num_matching_addrs_4b);
|
||||||
@ -916,11 +915,10 @@ InvalidFreeReport::~InvalidFreeReport() {
|
|||||||
const Thread *thread = GetCurrentThread();
|
const Thread *thread = GetCurrentThread();
|
||||||
if (thread) {
|
if (thread) {
|
||||||
Report("ERROR: %s: %s on address %p at pc %p on thread T%zd\n",
|
Report("ERROR: %s: %s on address %p at pc %p on thread T%zd\n",
|
||||||
SanitizerToolName, bug_type, (void *)untagged_addr, (void *)pc,
|
SanitizerToolName, bug_type, untagged_addr, pc, thread->unique_id());
|
||||||
(ssize)thread->unique_id());
|
|
||||||
} else {
|
} else {
|
||||||
Report("ERROR: %s: %s on address %p at pc %p on unknown thread\n",
|
Report("ERROR: %s: %s on address %p at pc %p on unknown thread\n",
|
||||||
SanitizerToolName, bug_type, (void *)untagged_addr, (void *)pc);
|
SanitizerToolName, bug_type, untagged_addr, pc);
|
||||||
}
|
}
|
||||||
Printf("%s", d.Access());
|
Printf("%s", d.Access());
|
||||||
if (shadow.addr) {
|
if (shadow.addr) {
|
||||||
@ -969,8 +967,7 @@ TailOverwrittenReport::~TailOverwrittenReport() {
|
|||||||
Printf("%s", d.Error());
|
Printf("%s", d.Error());
|
||||||
const char *bug_type = "allocation-tail-overwritten";
|
const char *bug_type = "allocation-tail-overwritten";
|
||||||
Report("ERROR: %s: %s; heap object [%p,%p) of size %zd\n", SanitizerToolName,
|
Report("ERROR: %s: %s; heap object [%p,%p) of size %zd\n", SanitizerToolName,
|
||||||
bug_type, (void *)untagged_addr, (void *)(untagged_addr + orig_size),
|
bug_type, untagged_addr, untagged_addr + orig_size, orig_size);
|
||||||
orig_size);
|
|
||||||
Printf("\n%s", d.Default());
|
Printf("\n%s", d.Default());
|
||||||
Printf(
|
Printf(
|
||||||
"Stack of invalid access unknown. Issue detected at deallocation "
|
"Stack of invalid access unknown. Issue detected at deallocation "
|
||||||
@ -1040,7 +1037,7 @@ TagMismatchReport::~TagMismatchReport() {
|
|||||||
uptr pc = GetTopPc(stack);
|
uptr pc = GetTopPc(stack);
|
||||||
Printf("%s", d.Error());
|
Printf("%s", d.Error());
|
||||||
Report("ERROR: %s: %s on address %p at pc %p\n", SanitizerToolName, bug_type,
|
Report("ERROR: %s: %s on address %p at pc %p\n", SanitizerToolName, bug_type,
|
||||||
(void *)untagged_addr, (void *)pc);
|
untagged_addr, pc);
|
||||||
|
|
||||||
Thread *t = GetCurrentThread();
|
Thread *t = GetCurrentThread();
|
||||||
|
|
||||||
@ -1052,12 +1049,12 @@ TagMismatchReport::~TagMismatchReport() {
|
|||||||
GetShortTagCopy(MemToShadow(untagged_addr + mismatch_offset));
|
GetShortTagCopy(MemToShadow(untagged_addr + mismatch_offset));
|
||||||
Printf(
|
Printf(
|
||||||
"%s of size %zu at %p tags: %02x/%02x(%02x) (ptr/mem) in thread T%zd\n",
|
"%s of size %zu at %p tags: %02x/%02x(%02x) (ptr/mem) in thread T%zd\n",
|
||||||
is_store ? "WRITE" : "READ", access_size, (void *)untagged_addr,
|
is_store ? "WRITE" : "READ", access_size, untagged_addr, ptr_tag,
|
||||||
ptr_tag, mem_tag, short_tag, (ssize)t->unique_id());
|
mem_tag, short_tag, t->unique_id());
|
||||||
} else {
|
} else {
|
||||||
Printf("%s of size %zu at %p tags: %02x/%02x (ptr/mem) in thread T%zd\n",
|
Printf("%s of size %zu at %p tags: %02x/%02x (ptr/mem) in thread T%zd\n",
|
||||||
is_store ? "WRITE" : "READ", access_size, (void *)untagged_addr,
|
is_store ? "WRITE" : "READ", access_size, untagged_addr, ptr_tag,
|
||||||
ptr_tag, mem_tag, (ssize)t->unique_id());
|
mem_tag, t->unique_id());
|
||||||
}
|
}
|
||||||
if (mismatch_offset)
|
if (mismatch_offset)
|
||||||
Printf("Invalid access starting at offset %zu\n", mismatch_offset);
|
Printf("Invalid access starting at offset %zu\n", mismatch_offset);
|
||||||
@ -1096,7 +1093,7 @@ void ReportTagMismatch(StackTrace *stack, uptr tagged_addr, uptr access_size,
|
|||||||
// See the frame breakdown defined in __hwasan_tag_mismatch (from
|
// See the frame breakdown defined in __hwasan_tag_mismatch (from
|
||||||
// hwasan_tag_mismatch_{aarch64,riscv64}.S).
|
// hwasan_tag_mismatch_{aarch64,riscv64}.S).
|
||||||
void ReportRegisters(const uptr *frame, uptr pc) {
|
void ReportRegisters(const uptr *frame, uptr pc) {
|
||||||
Printf("\nRegisters where the failure occurred (pc %p):\n", (void *)pc);
|
Printf("\nRegisters where the failure occurred (pc %p):\n", pc);
|
||||||
|
|
||||||
// We explicitly print a single line (4 registers/line) each iteration to
|
// We explicitly print a single line (4 registers/line) each iteration to
|
||||||
// reduce the amount of logcat error messages printed. Each Printf() will
|
// reduce the amount of logcat error messages printed. Each Printf() will
|
||||||
|
@ -173,10 +173,9 @@ uptr Thread::stack_size() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Thread::Print(const char *Prefix) {
|
void Thread::Print(const char *Prefix) {
|
||||||
Printf("%sT%zd %p stack: [%p,%p) sz: %zd tls: [%p,%p)\n", Prefix,
|
Printf("%sT%zd %p stack: [%p,%p) sz: %zd tls: [%p,%p)\n", Prefix, unique_id_,
|
||||||
(ssize_t)unique_id_, (void *)this, (void *)stack_bottom(),
|
(void *)this, stack_bottom(), stack_top(),
|
||||||
(void *)stack_top(), stack_top() - stack_bottom(), (void *)tls_begin(),
|
stack_top() - stack_bottom(), tls_begin(), tls_end());
|
||||||
(void *)tls_end());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static u32 xorshift(u32 state) {
|
static u32 xorshift(u32 state) {
|
||||||
|
@ -806,7 +806,7 @@ static bool ReportUnsuspendedThreads(
|
|||||||
succeded = false;
|
succeded = false;
|
||||||
Report(
|
Report(
|
||||||
"Running thread %zu was not suspended. False leaks are possible.\n",
|
"Running thread %zu was not suspended. False leaks are possible.\n",
|
||||||
(usize)os_id);
|
os_id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return succeded;
|
return succeded;
|
||||||
|
@ -29,7 +29,7 @@ static void ProtectGap(uptr addr, uptr size) {
|
|||||||
Printf("protect_shadow_gap=0:"
|
Printf("protect_shadow_gap=0:"
|
||||||
" not protecting shadow gap, allocating gap's shadow\n"
|
" not protecting shadow gap, allocating gap's shadow\n"
|
||||||
"|| `[%p, %p]` || ShadowGap's shadow ||\n",
|
"|| `[%p, %p]` || ShadowGap's shadow ||\n",
|
||||||
(void *)GapShadowBeg, (void *)GapShadowEnd);
|
GapShadowBeg, GapShadowEnd);
|
||||||
ReserveShadowMemoryRange(GapShadowBeg, GapShadowEnd,
|
ReserveShadowMemoryRange(GapShadowBeg, GapShadowEnd,
|
||||||
"unprotected gap shadow");
|
"unprotected gap shadow");
|
||||||
return;
|
return;
|
||||||
|
@ -105,7 +105,7 @@ __xray_register_sleds(const XRaySledEntry *SledsBegin,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (Verbosity())
|
if (Verbosity())
|
||||||
Report("Registering %d new functions!\n", (int)SledMap.Functions);
|
Report("Registering %d new functions!\n", SledMap.Functions);
|
||||||
|
|
||||||
{
|
{
|
||||||
SpinMutexLock Guard(&XRayInstrMapMutex);
|
SpinMutexLock Guard(&XRayInstrMapMutex);
|
||||||
|
@ -308,8 +308,7 @@ XRayPatchingStatus controlPatchingObjectUnchecked(bool Enable, int32_t ObjId) {
|
|||||||
return XRayPatchingStatus::NOT_INITIALIZED;
|
return XRayPatchingStatus::NOT_INITIALIZED;
|
||||||
|
|
||||||
if (Verbosity())
|
if (Verbosity())
|
||||||
Report("Patching object %d with %d functions.\n", ObjId,
|
Report("Patching object %d with %d functions.\n", ObjId, InstrMap.Entries);
|
||||||
(int)InstrMap.Entries);
|
|
||||||
|
|
||||||
// Check if the corresponding DSO has been unloaded.
|
// Check if the corresponding DSO has been unloaded.
|
||||||
if (!InstrMap.Loaded) {
|
if (!InstrMap.Loaded) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user