[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen master] xen/console: CFI hardening
commit 780c89eefa22514b1a91b959bf7828504c6aed31 Author: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> AuthorDate: Thu Oct 28 14:06:28 2021 +0100 Commit: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> CommitDate: Wed Feb 23 15:33:43 2022 +0000 xen/console: CFI hardening 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@xxxxxxxxxx> Acked-by: Jan Beulich <jbeulich@xxxxxxxx> --- xen/drivers/char/console.c | 4 ++-- xen/drivers/char/ehci-dbgp.c | 24 +++++++++++++----------- xen/drivers/char/ns16550.c | 26 +++++++++++++------------- 3 files changed, 28 insertions(+), 26 deletions(-) diff --git a/xen/drivers/char/console.c b/xen/drivers/char/console.c index 380765ab02..d9d6556c22 100644 --- a/xen/drivers/char/console.c +++ b/xen/drivers/char/console.c @@ -552,7 +552,7 @@ static void __serial_rx(char c, struct cpu_user_regs *regs) #endif } -static void serial_rx(char c, struct cpu_user_regs *regs) +static void cf_check serial_rx(char c, struct cpu_user_regs *regs) { static int switch_code_count = 0; @@ -1286,7 +1286,7 @@ void panic(const char *fmt, ...) * ************************************************************** */ -static void suspend_steal_fn(const char *str, size_t nr) { } +static void cf_check suspend_steal_fn(const char *str, size_t nr) { } static int suspend_steal_id; int console_suspend(void) diff --git a/xen/drivers/char/ehci-dbgp.c b/xen/drivers/char/ehci-dbgp.c index a6b57fdf2d..e205c0da6a 100644 --- a/xen/drivers/char/ehci-dbgp.c +++ b/xen/drivers/char/ehci-dbgp.c @@ -1000,13 +1000,15 @@ err: typedef void (*set_debug_port_t)(struct ehci_dbgp *, unsigned int); -static void default_set_debug_port(struct ehci_dbgp *dbgp, unsigned int port) +static void cf_check default_set_debug_port( + struct ehci_dbgp *dbgp, unsigned int port) { } static set_debug_port_t __read_mostly set_debug_port = default_set_debug_port; -static void nvidia_set_debug_port(struct ehci_dbgp *dbgp, unsigned int port) +static void cf_check nvidia_set_debug_port( + struct ehci_dbgp *dbgp, unsigned int port) { uint32_t dword = pci_conf_read32(PCI_SBDF(0, dbgp->bus, dbgp->slot, dbgp->func), 0x74); @@ -1167,7 +1169,7 @@ static inline void _ehci_dbgp_flush(struct ehci_dbgp *dbgp) dbgp->out.chunk = 0; } -static void ehci_dbgp_flush(struct serial_port *port) +static void cf_check ehci_dbgp_flush(struct serial_port *port) { struct ehci_dbgp *dbgp = port->uart; s_time_t goal; @@ -1196,7 +1198,7 @@ static void ehci_dbgp_flush(struct serial_port *port) set_timer(&dbgp->timer, goal); } -static void ehci_dbgp_putc(struct serial_port *port, char c) +static void cf_check ehci_dbgp_putc(struct serial_port *port, char c) { struct ehci_dbgp *dbgp = port->uart; @@ -1209,7 +1211,7 @@ static void ehci_dbgp_putc(struct serial_port *port, char c) ehci_dbgp_flush(port); } -static int ehci_dbgp_tx_ready(struct serial_port *port) +static int cf_check ehci_dbgp_tx_ready(struct serial_port *port) { struct ehci_dbgp *dbgp = port->uart; @@ -1228,7 +1230,7 @@ static int ehci_dbgp_tx_ready(struct serial_port *port) (dbgp->state == dbgp_idle) * DBGP_MAX_PACKET; } -static int ehci_dbgp_getc(struct serial_port *port, char *pc) +static int cf_check ehci_dbgp_getc(struct serial_port *port, char *pc) { struct ehci_dbgp *dbgp = port->uart; @@ -1309,7 +1311,7 @@ static bool_t ehci_dbgp_setup_preirq(struct ehci_dbgp *dbgp) return 0; } -static void __init ehci_dbgp_init_preirq(struct serial_port *port) +static void __init cf_check ehci_dbgp_init_preirq(struct serial_port *port) { struct ehci_dbgp *dbgp = port->uart; u32 debug_port, offset; @@ -1358,7 +1360,7 @@ static void ehci_dbgp_setup_postirq(struct ehci_dbgp *dbgp) set_timer(&dbgp->timer, NOW() + MILLISECS(1)); } -static void __init ehci_dbgp_init_postirq(struct serial_port *port) +static void __init cf_check ehci_dbgp_init_postirq(struct serial_port *port) { struct ehci_dbgp *dbgp = port->uart; @@ -1409,12 +1411,12 @@ static int ehci_dbgp_check_release(struct ehci_dbgp *dbgp) return 0; } -static void __init ehci_dbgp_endboot(struct serial_port *port) +static void __init cf_check ehci_dbgp_endboot(struct serial_port *port) { ehci_dbgp_check_release(port->uart); } -static void ehci_dbgp_suspend(struct serial_port *port) +static void cf_check ehci_dbgp_suspend(struct serial_port *port) { struct ehci_dbgp *dbgp = port->uart; @@ -1431,7 +1433,7 @@ static void ehci_dbgp_suspend(struct serial_port *port) dbgp->state = dbgp_unsafe; } -static void ehci_dbgp_resume(struct serial_port *port) +static void cf_check ehci_dbgp_resume(struct serial_port *port) { struct ehci_dbgp *dbgp = port->uart; diff --git a/xen/drivers/char/ns16550.c b/xen/drivers/char/ns16550.c index 990cad39fe..8df1ee4d5c 100644 --- a/xen/drivers/char/ns16550.c +++ b/xen/drivers/char/ns16550.c @@ -174,7 +174,7 @@ static void handle_dw_usr_busy_quirk(struct ns16550 *uart) } } -static void ns16550_interrupt( +static void cf_check ns16550_interrupt( int irq, void *dev_id, struct cpu_user_regs *regs) { struct serial_port *port = dev_id; @@ -239,7 +239,7 @@ static void cf_check ns16550_poll(void *data) #endif } -static int ns16550_tx_ready(struct serial_port *port) +static int cf_check ns16550_tx_ready(struct serial_port *port) { struct ns16550 *uart = port->uart; @@ -250,13 +250,13 @@ static int ns16550_tx_ready(struct serial_port *port) uart->lsr_mask ) == uart->lsr_mask ) ? uart->fifo_size : 0; } -static void ns16550_putc(struct serial_port *port, char c) +static void cf_check ns16550_putc(struct serial_port *port, char c) { struct ns16550 *uart = port->uart; ns_write_reg(uart, UART_THR, c); } -static int ns16550_getc(struct serial_port *port, char *pc) +static int cf_check ns16550_getc(struct serial_port *port, char *pc) { struct ns16550 *uart = port->uart; @@ -344,7 +344,7 @@ static void ns16550_setup_preirq(struct ns16550 *uart) UART_FCR_ENABLE | UART_FCR_CLRX | UART_FCR_CLTX | UART_FCR_TRG14); } -static void __init ns16550_init_preirq(struct serial_port *port) +static void __init cf_check ns16550_init_preirq(struct serial_port *port) { struct ns16550 *uart = port->uart; @@ -373,7 +373,7 @@ static void __init ns16550_init_preirq(struct serial_port *port) uart->fifo_size = 16; } -static void __init ns16550_init_irq(struct serial_port *port) +static void __init cf_check ns16550_init_irq(struct serial_port *port) { #ifdef NS16550_PCI struct ns16550 *uart = port->uart; @@ -399,7 +399,7 @@ static void ns16550_setup_postirq(struct ns16550 *uart) set_timer(&uart->timer, NOW() + MILLISECS(uart->timeout_ms)); } -static void __init ns16550_init_postirq(struct serial_port *port) +static void __init cf_check ns16550_init_postirq(struct serial_port *port) { struct ns16550 *uart = port->uart; int rc, bits; @@ -491,7 +491,7 @@ static void __init ns16550_init_postirq(struct serial_port *port) ns16550_setup_postirq(uart); } -static void ns16550_suspend(struct serial_port *port) +static void cf_check ns16550_suspend(struct serial_port *port) { struct ns16550 *uart = port->uart; @@ -543,7 +543,7 @@ static void cf_check ns16550_delayed_resume(void *data) _ns16550_resume(port); } -static void ns16550_resume(struct serial_port *port) +static void cf_check ns16550_resume(struct serial_port *port) { struct ns16550 *uart = port->uart; @@ -569,7 +569,7 @@ static void ns16550_resume(struct serial_port *port) _ns16550_resume(port); } -static void __init ns16550_endboot(struct serial_port *port) +static void __init cf_check ns16550_endboot(struct serial_port *port) { #ifdef CONFIG_HAS_IOPORTS struct ns16550 *uart = port->uart; @@ -583,13 +583,13 @@ static void __init ns16550_endboot(struct serial_port *port) #endif } -static int __init ns16550_irq(struct serial_port *port) +static int __init cf_check ns16550_irq(struct serial_port *port) { struct ns16550 *uart = port->uart; return ((uart->irq > 0) ? uart->irq : -1); } -static void ns16550_start_tx(struct serial_port *port) +static void cf_check ns16550_start_tx(struct serial_port *port) { struct ns16550 *uart = port->uart; u8 ier = ns_read_reg(uart, UART_IER); @@ -599,7 +599,7 @@ static void ns16550_start_tx(struct serial_port *port) ns_write_reg(uart, UART_IER, ier | UART_IER_ETHREI); } -static void ns16550_stop_tx(struct serial_port *port) +static void cf_check ns16550_stop_tx(struct serial_port *port) { struct ns16550 *uart = port->uart; u8 ier = ns_read_reg(uart, UART_IER); -- generated by git-patchbot for /home/xen/git/xen.git#master
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |