libc: Move FORTIFY into one file; make style fixups
This addresses post-commit feedback from
I88c39ca166bacde0b692aa3063e743bb046a5d2f. With this, our FORTIFY impl
now sits in one file.
Bug: 12231437
Test: mma; no new CtsBionicTestCases failures on bullhead internal
master.
Change-Id: I6f9ff81c3e86cf9d6a0efa650eb5765f1e2fa09c
diff --git a/libc/Android.bp b/libc/Android.bp
index 02dc934..7d68903 100644
--- a/libc/Android.bp
+++ b/libc/Android.bp
@@ -780,12 +780,7 @@
// ========================================================
cc_library_static {
defaults: ["libc_defaults"],
- srcs: [
- "bionic/__memcpy_chk.cpp",
- "bionic/__strcat_chk.cpp",
- "bionic/__strcpy_chk.cpp",
- "bionic/fortify.cpp",
- ],
+ srcs: ["bionic/fortify.cpp"],
name: "libc_fortify",
@@ -795,120 +790,86 @@
arch: {
arm: {
+ cflags: ["-DNO___MEMCPY_CHK"],
srcs: [
"arch-arm/generic/bionic/__memcpy_chk.S",
],
- exclude_srcs: [
- "bionic/__memcpy_chk.cpp",
- ],
cortex_a7: {
+ cflags: ["-DNO___STRCAT_CHK", "-DNO___STRCPY_CHK"],
srcs: [
"arch-arm/cortex-a7/bionic/__strcat_chk.S",
"arch-arm/cortex-a7/bionic/__strcpy_chk.S",
],
- exclude_srcs: [
- "bionic/__strcat_chk.cpp",
- "bionic/__strcpy_chk.cpp",
- ],
},
cortex_a53: {
+ cflags: ["-DNO___STRCAT_CHK", "-DNO___STRCPY_CHK"],
srcs: [
"arch-arm/cortex-a53/bionic/__strcat_chk.S",
"arch-arm/cortex-a53/bionic/__strcpy_chk.S",
],
- exclude_srcs: [
- "bionic/__strcat_chk.cpp",
- "bionic/__strcpy_chk.cpp",
- ],
},
cortex_a53_a57: {
+ cflags: ["-DNO___STRCAT_CHK", "-DNO___STRCPY_CHK"],
srcs: [
"arch-arm/cortex-a15/bionic/__strcat_chk.S",
"arch-arm/cortex-a15/bionic/__strcpy_chk.S",
],
- exclude_srcs: [
- "bionic/__strcat_chk.cpp",
- "bionic/__strcpy_chk.cpp",
- ],
},
cortex_a8: {
+ cflags: ["-DNO___STRCAT_CHK", "-DNO___STRCPY_CHK"],
srcs: [
"arch-arm/cortex-a15/bionic/__strcat_chk.S",
"arch-arm/cortex-a15/bionic/__strcpy_chk.S",
],
- exclude_srcs: [
- "bionic/__strcat_chk.cpp",
- "bionic/__strcpy_chk.cpp",
- ],
},
cortex_a9: {
+ cflags: ["-DNO___STRCAT_CHK", "-DNO___STRCPY_CHK"],
srcs: [
"arch-arm/cortex-a9/bionic/__strcat_chk.S",
"arch-arm/cortex-a9/bionic/__strcpy_chk.S",
],
- exclude_srcs: [
- "bionic/__strcat_chk.cpp",
- "bionic/__strcpy_chk.cpp",
- ],
},
cortex_a15: {
+ cflags: ["-DNO___STRCAT_CHK", "-DNO___STRCPY_CHK"],
srcs: [
"arch-arm/cortex-a15/bionic/__strcat_chk.S",
"arch-arm/cortex-a15/bionic/__strcpy_chk.S",
],
- exclude_srcs: [
- "bionic/__strcat_chk.cpp",
- "bionic/__strcpy_chk.cpp",
- ],
},
cortex_a73: {
+ cflags: ["-DNO___STRCAT_CHK", "-DNO___STRCPY_CHK"],
srcs: [
"arch-arm/denver/bionic/__strcat_chk.S",
"arch-arm/denver/bionic/__strcpy_chk.S",
],
- exclude_srcs: [
- "bionic/__strcat_chk.cpp",
- "bionic/__strcpy_chk.cpp",
- ],
},
denver: {
+ cflags: ["-DNO___STRCAT_CHK", "-DNO___STRCPY_CHK"],
srcs: [
"arch-arm/denver/bionic/__strcat_chk.S",
"arch-arm/denver/bionic/__strcpy_chk.S",
],
- exclude_srcs: [
- "bionic/__strcat_chk.cpp",
- "bionic/__strcpy_chk.cpp",
- ],
},
krait: {
+ cflags: ["-DNO___STRCAT_CHK", "-DNO___STRCPY_CHK"],
srcs: [
"arch-arm/krait/bionic/__strcat_chk.S",
"arch-arm/krait/bionic/__strcpy_chk.S",
],
- exclude_srcs: [
- "bionic/__strcat_chk.cpp",
- "bionic/__strcpy_chk.cpp",
- ],
},
kryo: {
+ cflags: ["-DNO___STRCAT_CHK", "-DNO___STRCPY_CHK"],
srcs: [
"arch-arm/krait/bionic/__strcat_chk.S",
"arch-arm/krait/bionic/__strcpy_chk.S",
],
- exclude_srcs: [
- "bionic/__strcat_chk.cpp",
- "bionic/__strcpy_chk.cpp",
- ],
},
},
arm64: {
+ cflags: ["-DNO___MEMCPY_CHK"],
srcs: [
"arch-arm64/generic/bionic/__memcpy_chk.S",
],
- exclude_srcs: [
- "bionic/__memcpy_chk.cpp",
- ],
},
},
}
diff --git a/libc/arch-arm/generic/bionic/__memcpy_chk.S b/libc/arch-arm/generic/bionic/__memcpy_chk.S
index 7044e5f..7ee2a8f 100644
--- a/libc/arch-arm/generic/bionic/__memcpy_chk.S
+++ b/libc/arch-arm/generic/bionic/__memcpy_chk.S
@@ -28,16 +28,16 @@
#include <private/bionic_asm.h>
- .syntax unified
+ .syntax unified
ENTRY(__memcpy_chk)
- cmp r2, r3
- bls memcpy
+ cmp r2, r3
+ bls memcpy
- // Preserve lr for backtrace.
- push {lr}
- .cfi_def_cfa_offset 4
- .cfi_rel_offset lr, 0
+ // Preserve lr for backtrace.
+ push {lr}
+ .cfi_def_cfa_offset 4
+ .cfi_rel_offset lr, 0
- bl __memcpy_chk_fail
+ bl __memcpy_chk_fail
END(__memcpy_chk)
diff --git a/libc/bionic/__memcpy_chk.cpp b/libc/bionic/__memcpy_chk.cpp
deleted file mode 100644
index 9463954..0000000
--- a/libc/bionic/__memcpy_chk.cpp
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <string.h>
-
-#include "private/bionic_fortify.h"
-
-// Runtime implementation of __memcpy_chk (used directly by compiler, not in headers).
-extern "C" void* __memcpy_chk(void* dst, const void* src, size_t count, size_t dst_len) {
- __check_count("memcpy", "count", count);
- __check_buffer_access("memcpy", "write into", count, dst_len);
- return memcpy(dst, src, count);
-}
diff --git a/libc/bionic/__strcat_chk.cpp b/libc/bionic/__strcat_chk.cpp
deleted file mode 100644
index 16b2327..0000000
--- a/libc/bionic/__strcat_chk.cpp
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <string.h>
-
-#include "private/bionic_fortify.h"
-
-// Runtime implementation of __builtin____strcat_chk (used directly by compiler, not in headers).
-extern "C" char* __strcat_chk(char* __restrict dst, const char* __restrict src,
- size_t dst_buf_size) {
- char* save = dst;
- size_t dst_len = __strlen_chk(dst, dst_buf_size);
-
- dst += dst_len;
- dst_buf_size -= dst_len;
-
- while ((*dst++ = *src++) != '\0') {
- dst_buf_size--;
- if (__predict_false(dst_buf_size == 0)) {
- __fortify_fatal("strcat: prevented write past end of %zu-byte buffer", dst_buf_size);
- }
- }
-
- return save;
-}
diff --git a/libc/bionic/__strcpy_chk.cpp b/libc/bionic/__strcpy_chk.cpp
deleted file mode 100644
index 6fbfb8b..0000000
--- a/libc/bionic/__strcpy_chk.cpp
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <string.h>
-
-#include "private/bionic_fortify.h"
-
-// Runtime implementation of __builtin____strcpy_chk (used directly by compiler, not in headers).
-extern "C" char* __strcpy_chk(char* dst, const char* src, size_t dst_len) {
- // TODO: optimize so we don't scan src twice.
- size_t src_len = strlen(src) + 1;
- __check_buffer_access("strcpy", "write into", src_len, dst_len);
- return strcpy(dst, src);
-}
diff --git a/libc/bionic/fortify.cpp b/libc/bionic/fortify.cpp
index b888f09..4a7ff13 100644
--- a/libc/bionic/fortify.cpp
+++ b/libc/bionic/fortify.cpp
@@ -456,3 +456,43 @@
__check_buffer_access("write", "read from", count, buf_size);
return write(fd, buf, count);
}
+
+#if !defined(NO___STRCAT_CHK)
+// Runtime implementation of __builtin____strcat_chk (used directly by compiler, not in headers).
+extern "C" char* __strcat_chk(char* __restrict dst, const char* __restrict src,
+ size_t dst_buf_size) {
+ char* save = dst;
+ size_t dst_len = __strlen_chk(dst, dst_buf_size);
+
+ dst += dst_len;
+ dst_buf_size -= dst_len;
+
+ while ((*dst++ = *src++) != '\0') {
+ dst_buf_size--;
+ if (__predict_false(dst_buf_size == 0)) {
+ __fortify_fatal("strcat: prevented write past end of %zu-byte buffer", dst_buf_size);
+ }
+ }
+
+ return save;
+}
+#endif // NO___STRCAT_CHK
+
+#if !defined(NO___STRCPY_CHK)
+// Runtime implementation of __builtin____strcpy_chk (used directly by compiler, not in headers).
+extern "C" char* __strcpy_chk(char* dst, const char* src, size_t dst_len) {
+ // TODO: optimize so we don't scan src twice.
+ size_t src_len = strlen(src) + 1;
+ __check_buffer_access("strcpy", "write into", src_len, dst_len);
+ return strcpy(dst, src);
+}
+#endif // NO___STRCPY_CHK
+
+#if !defined(NO___MEMCPY_CHK)
+// Runtime implementation of __memcpy_chk (used directly by compiler, not in headers).
+extern "C" void* __memcpy_chk(void* dst, const void* src, size_t count, size_t dst_len) {
+ __check_count("memcpy", "count", count);
+ __check_buffer_access("memcpy", "write into", count, dst_len);
+ return memcpy(dst, src, count);
+}
+#endif // NO___MEMCPY_CHK