Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit facc015c authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "arm64: Add BTAC/LinkStack sanitizations for Kryo"

parents 5d361c4e ca86a1da
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -813,6 +813,23 @@ config UNMAP_KERNEL_AT_EL0

	  If unsure, say Y.

config HARDEN_BRANCH_PREDICTOR
	bool "Harden the branch predictor against aliasing attacks" if EXPERT
	default y
	help
	  Speculation attacks against some high-performance processors rely on
	  being able to manipulate the branch predictor for a victim context by
	  executing aliasing branches in the attacker context.  Such attacks
	  can be partially mitigated against by clearing internal branch
	  predictor state and limiting the prediction logic in some situations.

	  This config option will take CPU-specific actions to harden the
	  branch predictor against aliasing attacks and may rely on specific
	  instruction sequences or control bits being set by the system
	  firmware.

	  If unsure, say Y.

menuconfig ARMV8_DEPRECATED
	bool "Emulate deprecated/obsolete ARMv8 instructions"
	depends on COMPAT
+3 −0
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@
#define ARM64_HAS_PAN				4
#define ARM64_HAS_UAO				5
#define ARM64_ALT_PAN_NOT_UAO			6
#define ARM64_HARDEN_BRANCH_PREDICTOR		7
#define ARM64_UNMAP_KERNEL_AT_EL0		23

#define ARM64_NCAPS				24
@@ -162,7 +163,9 @@ void __init setup_cpu_features(void);

void update_cpu_capabilities(const struct arm64_cpu_capabilities *caps,
			    const char *info);
void enable_cpu_capabilities(const struct arm64_cpu_capabilities *caps);
void check_local_cpu_errata(void);
void __init enable_errata_workarounds(void);

#ifdef CONFIG_HOTPLUG_CPU
void verify_local_cpu_capabilities(void);
+1 −0
Original line number Diff line number Diff line
@@ -71,6 +71,7 @@
#define ARM_CPU_PART_CORTEX_A72		0xD08
#define ARM_CPU_PART_KRYO2XX_GOLD	0x800
#define ARM_CPU_PART_KRYO2XX_SILVER	0x801
#define QCOM_CPU_PART_KRYO		0x200

#define APM_CPU_PART_POTENZA	0x000

+40 −0
Original line number Diff line number Diff line
@@ -21,7 +21,10 @@

#ifndef __ASSEMBLY__

#include <linux/smp.h>

#include <asm/cpufeature.h>
#include <asm/percpu.h>

typedef struct {
	atomic64_t	id;
@@ -41,6 +44,43 @@ static inline bool arm64_kernel_unmapped_at_el0(void)
	       cpus_have_cap(ARM64_UNMAP_KERNEL_AT_EL0);
}

typedef void (*bp_hardening_cb_t)(void);

struct bp_hardening_data {
	int			hyp_vectors_slot;
	bp_hardening_cb_t	fn;
};

#ifdef CONFIG_HARDEN_BRANCH_PREDICTOR
extern char __bp_harden_hyp_vecs_start[], __bp_harden_hyp_vecs_end[];

DECLARE_PER_CPU_READ_MOSTLY(struct bp_hardening_data, bp_hardening_data);

static inline struct bp_hardening_data *arm64_get_bp_hardening_data(void)
{
	return this_cpu_ptr(&bp_hardening_data);
}

static inline void arm64_apply_bp_hardening(void)
{
	struct bp_hardening_data *d;

	if (!cpus_have_cap(ARM64_HARDEN_BRANCH_PREDICTOR))
		return;

	d = arm64_get_bp_hardening_data();
	if (d->fn)
		d->fn();
}
#else
static inline struct bp_hardening_data *arm64_get_bp_hardening_data(void)
{
	return NULL;
}

static inline void arm64_apply_bp_hardening(void)	{ }
#endif	/* CONFIG_HARDEN_BRANCH_PREDICTOR */

extern void paging_init(void);
extern void __iomem *early_io_map(phys_addr_t phys, unsigned long virt);
extern void init_mem_pgprot(void);
+20 −0
Original line number Diff line number Diff line
@@ -16,4 +16,24 @@

int psci_init(void);

struct psci_power_state {
	u16	id;
	u8	type;
	u8	affinity_level;
};

struct psci_operations {
	int (*get_version)(void);
	int (*cpu_suspend)(unsigned long state_id,
			   unsigned long entry_point);
	int (*cpu_off)(struct psci_power_state state);
	int (*cpu_on)(unsigned long cpuid, unsigned long entry_point);
	int (*migrate)(unsigned long cpuid);
	int (*affinity_info)(unsigned long target_affinity,
			unsigned long lowest_affinity_level);
	int (*migrate_info_type)(void);
};

extern struct psci_operations psci_ops;

#endif /* __ASM_PSCI_H */
Loading