Skip to content

Commit

Permalink
stackprotector: move CANARY_MASK and get_random_canary() into stackpr…
Browse files Browse the repository at this point in the history
…otector.h

This has nothing to do with random.c and everything to do with stack
protectors. Yes, it uses randomness. But many things use randomness.
random.h and random.c are concerned with the generation of randomness,
not with each and every use. So move this function into the more
specific stackprotector.h file where it belongs.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
  • Loading branch information
zx2c4 committed Oct 23, 2022
1 parent 14fbd1e commit fcc6279
Show file tree
Hide file tree
Showing 7 changed files with 24 additions and 24 deletions.
2 changes: 1 addition & 1 deletion arch/x86/kernel/cpu/common.c
Expand Up @@ -22,9 +22,9 @@
#include <linux/io.h>
#include <linux/syscore_ops.h>
#include <linux/pgtable.h>
#include <linux/stackprotector.h>

#include <asm/cmdline.h>
#include <asm/stackprotector.h>
#include <asm/perf_event.h>
#include <asm/mmu_context.h>
#include <asm/doublefault.h>
Expand Down
2 changes: 1 addition & 1 deletion arch/x86/kernel/setup_percpu.c
Expand Up @@ -11,6 +11,7 @@
#include <linux/smp.h>
#include <linux/topology.h>
#include <linux/pfn.h>
#include <linux/stackprotector.h>
#include <asm/sections.h>
#include <asm/processor.h>
#include <asm/desc.h>
Expand All @@ -21,7 +22,6 @@
#include <asm/proto.h>
#include <asm/cpumask.h>
#include <asm/cpu.h>
#include <asm/stackprotector.h>

DEFINE_PER_CPU_READ_MOSTLY(int, cpu_number);
EXPORT_PER_CPU_SYMBOL(cpu_number);
Expand Down
2 changes: 1 addition & 1 deletion arch/x86/kernel/smpboot.c
Expand Up @@ -56,6 +56,7 @@
#include <linux/numa.h>
#include <linux/pgtable.h>
#include <linux/overflow.h>
#include <linux/stackprotector.h>

#include <asm/acpi.h>
#include <asm/desc.h>
Expand All @@ -80,7 +81,6 @@
#include <asm/cpu_device_id.h>
#include <asm/spec-ctrl.h>
#include <asm/hw_irq.h>
#include <asm/stackprotector.h>
#include <asm/sev.h>

/* representing HT siblings of each logical CPU */
Expand Down
2 changes: 1 addition & 1 deletion arch/x86/xen/enlighten_pv.c
Expand Up @@ -32,6 +32,7 @@
#include <linux/edd.h>
#include <linux/reboot.h>
#include <linux/virtio_anchor.h>
#include <linux/stackprotector.h>

#include <xen/xen.h>
#include <xen/events.h>
Expand Down Expand Up @@ -64,7 +65,6 @@
#include <asm/pgalloc.h>
#include <asm/tlbflush.h>
#include <asm/reboot.h>
#include <asm/stackprotector.h>
#include <asm/hypervisor.h>
#include <asm/mach_traps.h>
#include <asm/mwait.h>
Expand Down
19 changes: 0 additions & 19 deletions include/linux/random.h
Expand Up @@ -115,25 +115,6 @@ static inline u32 get_random_u32_between(u32 floor, u32 ceil)
return floor + get_random_u32_below(ceil - floor);
}

/*
* On 64-bit architectures, protect against non-terminated C string overflows
* by zeroing out the first byte of the canary; this leaves 56 bits of entropy.
*/
#ifdef CONFIG_64BIT
# ifdef __LITTLE_ENDIAN
# define CANARY_MASK 0xffffffffffffff00UL
# else /* big endian, 64 bits: */
# define CANARY_MASK 0x00ffffffffffffffUL
# endif
#else /* 32 bits: */
# define CANARY_MASK 0xffffffffUL
#endif

static inline unsigned long get_random_canary(void)
{
return get_random_long() & CANARY_MASK;
}

void __init random_init_early(const char *command_line);
void __init random_init(void);
bool rng_is_initialized(void);
Expand Down
19 changes: 19 additions & 0 deletions include/linux/stackprotector.h
Expand Up @@ -6,6 +6,25 @@
#include <linux/sched.h>
#include <linux/random.h>

/*
* On 64-bit architectures, protect against non-terminated C string overflows
* by zeroing out the first byte of the canary; this leaves 56 bits of entropy.
*/
#ifdef CONFIG_64BIT
# ifdef __LITTLE_ENDIAN
# define CANARY_MASK 0xffffffffffffff00UL
# else /* big endian, 64 bits: */
# define CANARY_MASK 0x00ffffffffffffffUL
# endif
#else /* 32 bits: */
# define CANARY_MASK 0xffffffffUL
#endif

static inline unsigned long get_random_canary(void)
{
return get_random_long() & CANARY_MASK;
}

#if defined(CONFIG_STACKPROTECTOR) || defined(CONFIG_ARM64_PTR_AUTH)
# include <asm/stackprotector.h>
#else
Expand Down
2 changes: 1 addition & 1 deletion kernel/fork.c
Expand Up @@ -75,7 +75,6 @@
#include <linux/freezer.h>
#include <linux/delayacct.h>
#include <linux/taskstats_kern.h>
#include <linux/random.h>
#include <linux/tty.h>
#include <linux/fs_struct.h>
#include <linux/magic.h>
Expand All @@ -97,6 +96,7 @@
#include <linux/scs.h>
#include <linux/io_uring.h>
#include <linux/bpf.h>
#include <linux/stackprotector.h>

#include <asm/pgalloc.h>
#include <linux/uaccess.h>
Expand Down

0 comments on commit fcc6279

Please sign in to comment.