Merge "Improve diagnostics from the assembler __strcat_chk routines."

This commit is contained in:
Treehugger Robot 2016-05-26 23:01:25 +00:00 committed by Gerrit Code Review
commit a3c2df9378
5 changed files with 17 additions and 65 deletions

View file

@ -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"

View file

@ -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"

View file

@ -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"

View file

@ -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"

View file

@ -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)) {