[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen staging] xen: CFI hardening for open_softirq()
commit 078dfe2fe0084e9a656928a186213821c5c5bad4 Author: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> AuthorDate: Fri Oct 29 10:58:21 2021 +0100 Commit: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> CommitDate: Wed Feb 23 15:33:43 2022 +0000 xen: CFI hardening for open_softirq() 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/arch/x86/cpu/mcheck/mce.c | 2 +- xen/arch/x86/domain.c | 2 +- xen/arch/x86/include/asm/flushtlb.h | 2 +- xen/arch/x86/pv/traps.c | 2 +- xen/arch/x86/smp.c | 2 +- xen/arch/x86/time.c | 2 +- xen/common/rcupdate.c | 2 +- xen/common/sched/core.c | 6 +++--- xen/common/tasklet.c | 2 +- xen/common/timer.c | 2 +- xen/drivers/passthrough/x86/hvm.c | 2 +- 11 files changed, 13 insertions(+), 13 deletions(-) diff --git a/xen/arch/x86/cpu/mcheck/mce.c b/xen/arch/x86/cpu/mcheck/mce.c index 43f6c8471a..3467e0f1a3 100644 --- a/xen/arch/x86/cpu/mcheck/mce.c +++ b/xen/arch/x86/cpu/mcheck/mce.c @@ -1837,7 +1837,7 @@ static int mce_delayed_action(mctelem_cookie_t mctc) } /* Softirq Handler for this MCE# processing */ -static void mce_softirq(void) +static void cf_check mce_softirq(void) { static DEFINE_MCE_BARRIER(mce_inside_bar); static DEFINE_MCE_BARRIER(mce_severity_bar); diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c index 36748f67da..ec0b631f7c 100644 --- a/xen/arch/x86/domain.c +++ b/xen/arch/x86/domain.c @@ -2524,7 +2524,7 @@ void vcpu_mark_events_pending(struct vcpu *v) vcpu_kick(v); } -static void vcpu_kick_softirq(void) +static void cf_check vcpu_kick_softirq(void) { /* * Nothing to do here: we merely prevent notifiers from racing with checks diff --git a/xen/arch/x86/include/asm/flushtlb.h b/xen/arch/x86/include/asm/flushtlb.h index 0be2273387..18777f1d4c 100644 --- a/xen/arch/x86/include/asm/flushtlb.h +++ b/xen/arch/x86/include/asm/flushtlb.h @@ -87,7 +87,7 @@ static inline void tlbflush_filter(cpumask_t *mask, uint32_t page_timestamp) __cpumask_clear_cpu(cpu, mask); } -void new_tlbflush_clock_period(void); +void cf_check new_tlbflush_clock_period(void); /* Read pagetable base. */ static inline unsigned long read_cr3(void) diff --git a/xen/arch/x86/pv/traps.c b/xen/arch/x86/pv/traps.c index 170e103098..97fe54b5ee 100644 --- a/xen/arch/x86/pv/traps.c +++ b/xen/arch/x86/pv/traps.c @@ -130,7 +130,7 @@ bool set_guest_nmi_trapbounce(void) static DEFINE_PER_CPU(struct vcpu *, softirq_nmi_vcpu); -static void nmi_softirq(void) +static void cf_check nmi_softirq(void) { struct vcpu **v_ptr = &this_cpu(softirq_nmi_vcpu); diff --git a/xen/arch/x86/smp.c b/xen/arch/x86/smp.c index f6fd7f95df..b9a696f619 100644 --- a/xen/arch/x86/smp.c +++ b/xen/arch/x86/smp.c @@ -290,7 +290,7 @@ void flush_area_mask(const cpumask_t *mask, const void *va, unsigned int flags) } /* Call with no locks held and interrupts enabled (e.g., softirq context). */ -void new_tlbflush_clock_period(void) +void cf_check new_tlbflush_clock_period(void) { cpumask_t allbutself; diff --git a/xen/arch/x86/time.c b/xen/arch/x86/time.c index a78f350b23..32111358a7 100644 --- a/xen/arch/x86/time.c +++ b/xen/arch/x86/time.c @@ -1454,7 +1454,7 @@ int cpu_frequency_change(u64 freq) static DEFINE_PER_CPU(struct cpu_time_stamp, cpu_calibration); /* Softirq handler for per-CPU time calibration. */ -static void local_time_calibration(void) +static void cf_check local_time_calibration(void) { struct cpu_time *t = &this_cpu(cpu_time); const struct cpu_time_stamp *c = &this_cpu(cpu_calibration); diff --git a/xen/common/rcupdate.c b/xen/common/rcupdate.c index 423d6b1d6d..212a99acd8 100644 --- a/xen/common/rcupdate.c +++ b/xen/common/rcupdate.c @@ -466,7 +466,7 @@ static void __rcu_process_callbacks(struct rcu_ctrlblk *rcp, rcu_do_batch(rdp); } -static void rcu_process_callbacks(void) +static void cf_check rcu_process_callbacks(void) { struct rcu_data *rdp = &this_cpu(rcu_data); diff --git a/xen/common/sched/core.c b/xen/common/sched/core.c index aaa7ef2a6f..4e60500c7c 100644 --- a/xen/common/sched/core.c +++ b/xen/common/sched/core.c @@ -2568,7 +2568,7 @@ static struct sched_unit *sched_wait_rendezvous_in(struct sched_unit *prev, return prev->next_task; } -static void sched_slave(void) +static void cf_check sched_slave(void) { struct vcpu *v, *vprev = current; struct sched_unit *prev = vprev->sched_unit, *next; @@ -2632,7 +2632,7 @@ static void sched_slave(void) * - deschedule the current domain (scheduler independent). * - pick a new domain (scheduler dependent). */ -static void schedule(void) +static void cf_check schedule(void) { struct vcpu *vnext, *vprev = current; struct sched_unit *prev = vprev->sched_unit, *next = NULL; @@ -2928,7 +2928,7 @@ const cpumask_t *sched_get_opt_cpumask(enum sched_gran opt, unsigned int cpu) return mask; } -static void schedule_dummy(void) +static void cf_check schedule_dummy(void) { sched_tasklet_check_cpu(smp_processor_id()); } diff --git a/xen/common/tasklet.c b/xen/common/tasklet.c index 1b16bbcdeb..3ad67b5c24 100644 --- a/xen/common/tasklet.c +++ b/xen/common/tasklet.c @@ -135,7 +135,7 @@ void do_tasklet(void) } /* Softirq context work */ -static void tasklet_softirq_action(void) +static void cf_check tasklet_softirq_action(void) { unsigned int cpu = smp_processor_id(); struct list_head *list = &per_cpu(softirq_tasklet_list, cpu); diff --git a/xen/common/timer.c b/xen/common/timer.c index b788050ea1..700f191a70 100644 --- a/xen/common/timer.c +++ b/xen/common/timer.c @@ -450,7 +450,7 @@ static void execute_timer(struct timers *ts, struct timer *t) } -static void timer_softirq_action(void) +static void cf_check timer_softirq_action(void) { struct timer *t, **heap, *next; struct timers *ts; diff --git a/xen/drivers/passthrough/x86/hvm.c b/xen/drivers/passthrough/x86/hvm.c index 527bd6a56d..0e3c0f6aee 100644 --- a/xen/drivers/passthrough/x86/hvm.c +++ b/xen/drivers/passthrough/x86/hvm.c @@ -1003,7 +1003,7 @@ int arch_pci_clean_pirqs(struct domain *d) * Note: 'pt_pirq_softirq_reset' can clear the STATE_SCHED before we get to * doing it. If that is the case we let 'pt_pirq_softirq_reset' do ref-counting. */ -static void dpci_softirq(void) +static void cf_check dpci_softirq(void) { unsigned int cpu = smp_processor_id(); LIST_HEAD(our_list); -- generated by git-patchbot for /home/xen/git/xen.git#staging
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |