]> xenbits.xensource.com Git - people/tklengyel/xen.git/commitdiff
xen/decompress: CFI hardening
authorAndrew Cooper <andrew.cooper3@citrix.com>
Fri, 29 Oct 2021 19:57:23 +0000 (20:57 +0100)
committerAndrew Cooper <andrew.cooper3@citrix.com>
Wed, 23 Feb 2022 15:33:43 +0000 (15:33 +0000)
Control Flow Integrity schemes use toolchain and optionally hardware support
to help protect against call/jump/return oriented programming attacks.

Use cf_check to annotate function pointer targets for the toolchain.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Acked-by: Jan Beulich <jbeulich@suse.com>
xen/common/bunzip2.c
xen/common/decompress.c
xen/common/unlzma.c
xen/common/zstd/zstd_common.c
xen/common/zstd/zstd_internal.h

index 2087cfbbedc850da646659195cb4678fa68cb1a1..782b589a8b01fec9bdf38aedb4177b63e3938b5a 100644 (file)
@@ -607,7 +607,7 @@ decode_next_byte:
        goto decode_next_byte;
 }
 
-static int __init nofill(void *buf, unsigned int len)
+static int __init cf_check nofill(void *buf, unsigned int len)
 {
        return -1;
 }
index 79e60f4802d56e05f7e6fc4e83a0b9e3441b4bd8..989336983f61345fd52ee731f4c587d09c87d665 100644 (file)
@@ -3,7 +3,7 @@
 #include <xen/string.h>
 #include <xen/decompress.h>
 
-static void __init error(const char *msg)
+static void __init cf_check error(const char *msg)
 {
     printk("%s\n", msg);
 }
index d0ef78eef0d1516aa174e00b6e5c9335e8e481a2..6cd99023adf6a4e92244891297f5b0ed68653309 100644 (file)
@@ -76,7 +76,7 @@ struct rc {
 #define RC_MODEL_TOTAL_BITS 11
 
 
-static int __init nofill(void *buffer, unsigned int len)
+static int __init cf_check nofill(void *buffer, unsigned int len)
 {
        return -1;
 }
index 9a85e938cdd663f7add5356e5b47bbec9a6c08ca..5c44e5db767168855f038e38201b1bb7cd6d4060 100644 (file)
@@ -54,12 +54,12 @@ void *__init ZSTD_stackAllocAll(void *opaque, size_t *size)
        return stack_push(stack, *size);
 }
 
-void *__init ZSTD_stackAlloc(void *opaque, size_t size)
+void *__init cf_check ZSTD_stackAlloc(void *opaque, size_t size)
 {
        ZSTD_stack *stack = (ZSTD_stack *)opaque;
        return stack_push(stack, size);
 }
-void __init ZSTD_stackFree(void *opaque, void *address)
+void __init cf_check ZSTD_stackFree(void *opaque, void *address)
 {
        (void)opaque;
        (void)address;
index b7dd14f6ce7917529892dd22414e9c6f02415183..94f8c586220ed2afe146e7a161c91ac6e9fa6d91 100644 (file)
@@ -351,8 +351,8 @@ typedef struct {
 ZSTD_customMem ZSTD_initStack(void *workspace, size_t workspaceSize);
 
 void *ZSTD_stackAllocAll(void *opaque, size_t *size);
-void *ZSTD_stackAlloc(void *opaque, size_t size);
-void ZSTD_stackFree(void *opaque, void *address);
+void *cf_check ZSTD_stackAlloc(void *opaque, size_t size);
+void cf_check ZSTD_stackFree(void *opaque, void *address);
 
 /*======  common function  ======*/