Merge "Improve diagnostics from the assembler __strcat_chk routines."
This commit is contained in:
commit
a3c2df9378
5 changed files with 17 additions and 65 deletions
|
@ -176,7 +176,9 @@ ENTRY(__strcat_chk)
|
|||
.L_strlen_done:
|
||||
add r2, r3, r4
|
||||
cmp r2, lr
|
||||
bhi .L_strcat_chk_failed
|
||||
itt hi
|
||||
movhi r0, lr
|
||||
bhi __strcat_chk_fail
|
||||
|
||||
// Set up the registers for the memcpy code.
|
||||
mov r1, r5
|
||||
|
@ -194,15 +196,4 @@ ENTRY(__strcat_chk)
|
|||
.cfi_adjust_cfa_offset 8
|
||||
.cfi_rel_offset r4, 0
|
||||
.cfi_rel_offset r5, 4
|
||||
.L_strcat_chk_failed:
|
||||
ldr r0, error_message
|
||||
1:
|
||||
add r0, pc
|
||||
bl __fortify_fatal
|
||||
error_message:
|
||||
.word error_string-(1b+4)
|
||||
END(__strcat_chk)
|
||||
|
||||
.data
|
||||
error_string:
|
||||
.string "strcat: prevented write past end of buffer"
|
||||
|
|
|
@ -179,6 +179,8 @@ ENTRY(__strcat_chk)
|
|||
.L_strlen_done:
|
||||
add r2, r3, r4
|
||||
cmp r2, lr
|
||||
itt hi
|
||||
movhi r0, lr
|
||||
bhi __strcat_chk_fail
|
||||
|
||||
// Set up the registers for the memcpy code.
|
||||
|
@ -194,23 +196,3 @@ END(__strcat_chk)
|
|||
#define MEMCPY_BASE __strcat_chk_memcpy_base
|
||||
#define MEMCPY_BASE_ALIGNED __strcat_chk_memcpy_base_aligned
|
||||
#include "memcpy_base.S"
|
||||
|
||||
ENTRY_PRIVATE(__strcat_chk_fail)
|
||||
.cfi_def_cfa_offset 8
|
||||
.cfi_rel_offset r0, 0
|
||||
.cfi_rel_offset lr, 4
|
||||
.cfi_adjust_cfa_offset 8
|
||||
.cfi_rel_offset r4, 0
|
||||
.cfi_rel_offset r5, 4
|
||||
|
||||
ldr r0, error_message
|
||||
1:
|
||||
add r0, pc
|
||||
bl __fortify_fatal
|
||||
error_message:
|
||||
.word error_string-(1b+4)
|
||||
END(__strcat_chk_fail)
|
||||
|
||||
.data
|
||||
error_string:
|
||||
.string "strcat: prevented write past end of buffer"
|
||||
|
|
|
@ -176,7 +176,9 @@ ENTRY(__strcat_chk)
|
|||
.L_strlen_done:
|
||||
add r2, r3, r4
|
||||
cmp r2, lr
|
||||
bhi __strcat_chk_failed
|
||||
itt hi
|
||||
movhi r0, lr
|
||||
bhi __strcat_chk_fail
|
||||
|
||||
// Set up the registers for the memcpy code.
|
||||
mov r1, r5
|
||||
|
@ -190,23 +192,3 @@ END(__strcat_chk)
|
|||
#define MEMCPY_BASE_ALIGNED __strcat_chk_memcpy_base_aligned
|
||||
|
||||
#include "memcpy_base.S"
|
||||
|
||||
ENTRY_PRIVATE(__strcat_chk_failed)
|
||||
.cfi_def_cfa_offset 8
|
||||
.cfi_rel_offset r0, 0
|
||||
.cfi_rel_offset lr, 4
|
||||
.cfi_adjust_cfa_offset 8
|
||||
.cfi_rel_offset r4, 0
|
||||
.cfi_rel_offset r5, 4
|
||||
|
||||
ldr r0, error_message
|
||||
1:
|
||||
add r0, pc
|
||||
bl __fortify_fatal
|
||||
error_message:
|
||||
.word error_string-(1b+4)
|
||||
END(__strcat_chk_failed)
|
||||
|
||||
.data
|
||||
error_string:
|
||||
.string "strcat: prevented write past end of buffer"
|
||||
|
|
|
@ -176,7 +176,9 @@ ENTRY(__strcat_chk)
|
|||
.L_strlen_done:
|
||||
add r2, r3, r4
|
||||
cmp r2, lr
|
||||
bhi .L_strcat_chk_failed
|
||||
itt hi
|
||||
movhi r0, lr
|
||||
bhi __strcat_chk_fail
|
||||
|
||||
// Set up the registers for the memcpy code.
|
||||
mov r1, r5
|
||||
|
@ -194,15 +196,4 @@ ENTRY(__strcat_chk)
|
|||
.cfi_adjust_cfa_offset 8
|
||||
.cfi_rel_offset r4, 0
|
||||
.cfi_rel_offset r5, 4
|
||||
.L_strcat_chk_failed:
|
||||
ldr r0, error_message
|
||||
1:
|
||||
add r0, pc
|
||||
bl __fortify_fatal
|
||||
error_message:
|
||||
.word error_string-(1b+4)
|
||||
END(__strcat_chk)
|
||||
|
||||
.data
|
||||
error_string:
|
||||
.string "strcat: prevented write past end of buffer"
|
||||
|
|
|
@ -268,6 +268,12 @@ char* __stpncpy_chk2(char* __restrict dst, const char* __restrict src,
|
|||
return dst;
|
||||
}
|
||||
|
||||
// strcat is performance-critical enough that we have assembler __strcat_chk implementations.
|
||||
// This function is used to give better diagnostics than we can easily do from assembler.
|
||||
extern "C" void __strcat_chk_fail(size_t dst_buf_size) {
|
||||
__fortify_fatal("strcat: prevented write past end of %zu-byte buffer", dst_buf_size);
|
||||
}
|
||||
|
||||
char* __strchr_chk(const char* p, int ch, size_t s_len) {
|
||||
for (;; ++p, s_len--) {
|
||||
if (__predict_false(s_len == 0)) {
|
||||
|
|
Loading…
Reference in a new issue