A typical pattern in a Kbuild file looks like this:
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
-index 4d68ec8..9546b75 100644
+index 6726139..c825c0a 100644
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
-@@ -1203,6 +1203,13 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
+@@ -1223,6 +1223,13 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
Format: <unsigned int> such that (rxsize & ~0x1fffc0) == 0.
Default: 1024
hashdist= [KNL,NUMA] Large hashes allocated during boot
are distributed across NUMA nodes. Defaults on
for 64-bit NUMA, off otherwise.
-@@ -2300,6 +2307,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
+@@ -2333,6 +2340,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
noexec=on: enable non-executable mappings (default)
noexec=off: disable non-executable mappings
nosmap [X86]
Disable SMAP (Supervisor Mode Access Prevention)
even if it is supported by processor.
-@@ -2601,6 +2612,30 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
+@@ -2631,6 +2642,30 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
the specified number of seconds. This is to be used if
your oopses keep scrolling off the screen.
pcbit= [HW,ISDN]
pcd. [PARIDE]
+diff --git a/Documentation/sysctl/kernel.txt b/Documentation/sysctl/kernel.txt
+index c831001..1bfbbf6 100644
+--- a/Documentation/sysctl/kernel.txt
++++ b/Documentation/sysctl/kernel.txt
+@@ -41,6 +41,7 @@ show up in /proc/sys/kernel:
+ - kptr_restrict
+ - kstack_depth_to_print [ X86 only ]
+ - l2cr [ PPC only ]
++- modify_ldt [ X86 only ]
+ - modprobe ==> Documentation/debugging-modules.txt
+ - modules_disabled
+ - msg_next_id [ sysv ipc ]
+@@ -391,6 +392,20 @@ This flag controls the L2 cache of G3 processor boards. If
+
+ ==============================================================
+
++modify_ldt: (X86 only)
++
++Enables (1) or disables (0) the modify_ldt syscall. Modifying the LDT
++(Local Descriptor Table) may be needed to run a 16-bit or segmented code
++such as Dosemu or Wine. This is done via a system call which is not needed
++to run portable applications, and which can sometimes be abused to exploit
++some weaknesses of the architecture, opening new vulnerabilities.
++
++This sysctl allows one to increase the system's security by disabling the
++system call, or to restore compatibility with specific applications when it
++was already disabled.
++
++==============================================================
++
+ modules_disabled:
+
+ A toggle value indicating if modules are allowed to be loaded
diff --git a/Makefile b/Makefile
-index 3d16bcc..c31faf4 100644
+index e3cdec4..56ae73d 100644
--- a/Makefile
+++ b/Makefile
-@@ -298,7 +298,9 @@ CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
+@@ -299,7 +299,9 @@ CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
HOSTCC = gcc
HOSTCXX = g++
HOSTCFLAGS = -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu89
ifeq ($(shell $(HOSTCC) -v 2>&1 | grep -c "clang version"), 1)
HOSTCFLAGS += -Wno-unused-value -Wno-unused-parameter \
-@@ -446,8 +448,8 @@ export RCS_TAR_IGNORE := --exclude SCCS --exclude BitKeeper --exclude .svn \
+@@ -444,8 +446,8 @@ export RCS_TAR_IGNORE := --exclude SCCS --exclude BitKeeper --exclude .svn \
# Rules shared between *config targets and build targets
# Basic helpers built in scripts/
$(Q)$(MAKE) $(build)=scripts/basic
$(Q)rm -f .tmp_quiet_recordmcount
-@@ -622,6 +624,74 @@ endif
+@@ -620,6 +622,74 @@ endif
# Tell gcc to never replace conditional load with a non-conditional one
KBUILD_CFLAGS += $(call cc-option,--param=allow-store-data-races=0)
ifdef CONFIG_READABLE_ASM
# Disable optimizations that make assembler listings hard to read.
# reorder blocks reorders the control in the function
-@@ -714,7 +784,7 @@ KBUILD_CFLAGS += $(call cc-option, -gsplit-dwarf, -g)
+@@ -712,7 +782,7 @@ KBUILD_CFLAGS += $(call cc-option, -gsplit-dwarf, -g)
else
KBUILD_CFLAGS += -g
endif
endif
ifdef CONFIG_DEBUG_INFO_DWARF4
KBUILD_CFLAGS += $(call cc-option, -gdwarf-4,)
-@@ -884,7 +954,7 @@ export mod_sign_cmd
+@@ -883,7 +953,7 @@ export mod_sign_cmd
ifeq ($(KBUILD_EXTMOD),)
vmlinux-dirs := $(patsubst %/,%,$(filter %/, $(init-y) $(init-m) \
$(core-y) $(core-m) $(drivers-y) $(drivers-m) \
-@@ -934,6 +1004,8 @@ endif
+@@ -933,6 +1003,8 @@ endif
# The actual objects are generated when descending,
# make sure no implicit rule kicks in
$(sort $(vmlinux-deps)): $(vmlinux-dirs) ;
# Handle descending into subdirectories listed in $(vmlinux-dirs)
-@@ -943,7 +1015,7 @@ $(sort $(vmlinux-deps)): $(vmlinux-dirs) ;
+@@ -942,7 +1014,7 @@ $(sort $(vmlinux-deps)): $(vmlinux-dirs) ;
# Error messages still appears in the original language
PHONY += $(vmlinux-dirs)
$(Q)$(MAKE) $(build)=$@
define filechk_kernel.release
-@@ -986,10 +1058,13 @@ prepare1: prepare2 $(version_h) include/generated/utsrelease.h \
+@@ -985,10 +1057,13 @@ prepare1: prepare2 $(version_h) include/generated/utsrelease.h \
archprepare: archheaders archscripts prepare1 scripts_basic
prepare: prepare0
# Generate some files
-@@ -1103,6 +1178,8 @@ all: modules
+@@ -1096,6 +1171,8 @@ all: modules
# using awk while concatenating to the final file.
PHONY += modules
modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux) modules.builtin
$(Q)$(AWK) '!x[$$0]++' $(vmlinux-dirs:%=$(objtree)/%/modules.order) > $(objtree)/modules.order
@$(kecho) ' Building modules, stage 2.';
-@@ -1118,7 +1195,7 @@ modules.builtin: $(vmlinux-dirs:%=%/modules.builtin)
+@@ -1111,7 +1188,7 @@ modules.builtin: $(vmlinux-dirs:%=%/modules.builtin)
# Target to prepare building external modules
PHONY += modules_prepare
# Target to install modules
PHONY += modules_install
-@@ -1184,7 +1261,10 @@ MRPROPER_FILES += .config .config.old .version .old_version \
+@@ -1177,7 +1254,10 @@ MRPROPER_FILES += .config .config.old .version .old_version \
Module.symvers tags TAGS cscope* GPATH GTAGS GRTAGS GSYMS \
signing_key.priv signing_key.x509 x509.genkey \
extra_certificates signing_key.x509.keyid \
# clean - Delete most, but leave enough to build external modules
#
-@@ -1223,7 +1303,7 @@ distclean: mrproper
+@@ -1216,7 +1296,7 @@ distclean: mrproper
@find $(srctree) $(RCS_FIND_IGNORE) \
\( -name '*.orig' -o -name '*.rej' -o -name '*~' \
-o -name '*.bak' -o -name '#*#' -o -name '.*.orig' \
-type f -print | xargs rm -f
-@@ -1389,6 +1469,8 @@ PHONY += $(module-dirs) modules
+@@ -1382,6 +1462,8 @@ PHONY += $(module-dirs) modules
$(module-dirs): crmodverdir $(objtree)/Module.symvers
$(Q)$(MAKE) $(build)=$(patsubst _module_%,%,$@)
modules: $(module-dirs)
@$(kecho) ' Building modules, stage 2.';
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
-@@ -1529,17 +1611,21 @@ else
+@@ -1522,17 +1604,21 @@ else
target-dir = $(if $(KBUILD_EXTMOD),$(dir $<),$(dir $@))
endif
$(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
%.symtypes: %.c prepare scripts FORCE
$(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
-@@ -1551,11 +1637,15 @@ endif
+@@ -1544,11 +1630,15 @@ endif
$(build)=$(build-dir)
# Make sure the latest headers are built for Documentation
Documentation/: headers_install
for (i = 0; i < n; i++) {
diff --git a/arch/alpha/kernel/osf_sys.c b/arch/alpha/kernel/osf_sys.c
-index e51f578..16c64a3 100644
+index 36dc91a..6769cb0 100644
--- a/arch/alpha/kernel/osf_sys.c
+++ b/arch/alpha/kernel/osf_sys.c
-@@ -1296,10 +1296,11 @@ SYSCALL_DEFINE1(old_adjtimex, struct timex32 __user *, txc_p)
+@@ -1295,10 +1295,11 @@ SYSCALL_DEFINE1(old_adjtimex, struct timex32 __user *, txc_p)
generic version except that we know how to honor ADDR_LIMIT_32BIT. */
static unsigned long
info.flags = 0;
info.length = len;
-@@ -1307,6 +1308,7 @@ arch_get_unmapped_area_1(unsigned long addr, unsigned long len,
+@@ -1306,6 +1307,7 @@ arch_get_unmapped_area_1(unsigned long addr, unsigned long len,
info.high_limit = limit;
info.align_mask = 0;
info.align_offset = 0;
return vm_unmapped_area(&info);
}
-@@ -1339,20 +1341,24 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
+@@ -1338,20 +1340,24 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
merely specific addresses, but regions of memory -- perhaps
this feature should be incorporated into all ports? */
/* Allow reads even for write-only mappings */
if (!(vma->vm_flags & (VM_READ | VM_WRITE)))
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
-index cf4c0c9..a87ecf5 100644
+index 45df48b..952017a 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
-@@ -1735,7 +1735,7 @@ config ALIGNMENT_TRAP
+@@ -1716,7 +1716,7 @@ config ALIGNMENT_TRAP
config UACCESS_WITH_MEMCPY
bool "Use kernel mem{cpy,set}() for {copy_to,clear}_user()"
default y if CPU_FEROCEON
help
Implement faster copy_to_user and clear_user methods for CPU
-@@ -1999,6 +1999,7 @@ config XIP_PHYS_ADDR
+@@ -1951,6 +1951,7 @@ config XIP_PHYS_ADDR
config KEXEC
bool "Kexec system call (EXPERIMENTAL)"
depends on (!SMP || PM_SLEEP_SMP)
#include <asm-generic/cmpxchg-local.h>
+diff --git a/arch/arm/include/asm/cpuidle.h b/arch/arm/include/asm/cpuidle.h
+index 0f84249..8e83c55 100644
+--- a/arch/arm/include/asm/cpuidle.h
++++ b/arch/arm/include/asm/cpuidle.h
+@@ -32,7 +32,7 @@ struct device_node;
+ struct cpuidle_ops {
+ int (*suspend)(int cpu, unsigned long arg);
+ int (*init)(struct device_node *, int cpu);
+-};
++} __no_const;
+
+ struct of_cpuidle_method {
+ const char *method;
diff --git a/arch/arm/include/asm/domain.h b/arch/arm/include/asm/domain.h
index 6ddbe44..b5e38b1a 100644
--- a/arch/arm/include/asm/domain.h
static inline void set_domain(unsigned val) { }
static inline void modify_domain(unsigned dom, unsigned type) { }
diff --git a/arch/arm/include/asm/elf.h b/arch/arm/include/asm/elf.h
-index 674d03f..9a0bac0 100644
+index d2315ff..f60b47b 100644
--- a/arch/arm/include/asm/elf.h
+++ b/arch/arm/include/asm/elf.h
-@@ -115,7 +115,14 @@ int dump_task_regs(struct task_struct *t, elf_gregset_t *elfregs);
+@@ -117,7 +117,14 @@ int dump_task_regs(struct task_struct *t, elf_gregset_t *elfregs);
the loader. We need to make sure that it is out of the way of the program
that it will "exec", and that there is sufficient room for the brk. */
/* When the program starts, a1 contains a pointer to a function to be
registered with atexit, as per the SVR4 ABI. A value of 0 means we
-@@ -125,10 +132,6 @@ int dump_task_regs(struct task_struct *t, elf_gregset_t *elfregs);
- extern void elf_set_personality(const struct elf32_hdr *);
- #define SET_PERSONALITY(ex) elf_set_personality(&(ex))
-
--struct mm_struct;
--extern unsigned long arch_randomize_brk(struct mm_struct *mm);
--#define arch_randomize_brk arch_randomize_brk
--
- #ifdef CONFIG_MMU
- #define ARCH_HAS_SETUP_ADDITIONAL_PAGES 1
- struct linux_binprm;
diff --git a/arch/arm/include/asm/fncpy.h b/arch/arm/include/asm/fncpy.h
index de53547..52b9a28 100644
--- a/arch/arm/include/asm/fncpy.h
(unsigned long)(dest_buf) + (size)); \
\
diff --git a/arch/arm/include/asm/futex.h b/arch/arm/include/asm/futex.h
-index 53e69da..3fdc896 100644
+index 4e78065..f265b48 100644
--- a/arch/arm/include/asm/futex.h
+++ b/arch/arm/include/asm/futex.h
@@ -46,6 +46,8 @@ futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr,
struct of_cpu_method {
const char *method;
diff --git a/arch/arm/include/asm/thread_info.h b/arch/arm/include/asm/thread_info.h
-index 72812a1..335f4f3 100644
+index bd32ede..bd90a0b 100644
--- a/arch/arm/include/asm/thread_info.h
+++ b/arch/arm/include/asm/thread_info.h
-@@ -77,9 +77,9 @@ struct thread_info {
+@@ -74,9 +74,9 @@ struct thread_info {
.flags = 0, \
.preempt_count = INIT_PREEMPT_COUNT, \
.addr_limit = KERNEL_DS, \
}
#define init_thread_info (init_thread_union.thread_info)
-@@ -155,7 +155,11 @@ extern int vfp_restore_user_hwstate(struct user_vfp __user *,
+@@ -152,7 +152,11 @@ extern int vfp_restore_user_hwstate(struct user_vfp __user *,
#define TIF_SYSCALL_AUDIT 9
#define TIF_SYSCALL_TRACEPOINT 10
#define TIF_SECCOMP 11 /* seccomp syscall filtering active */
#define TIF_USING_IWMMXT 17
#define TIF_MEMDIE 18 /* is terminating due to OOM killer */
#define TIF_RESTORE_SIGMASK 20
-@@ -169,10 +173,11 @@ extern int vfp_restore_user_hwstate(struct user_vfp __user *,
+@@ -166,10 +170,11 @@ extern int vfp_restore_user_hwstate(struct user_vfp __user *,
#define _TIF_SYSCALL_TRACEPOINT (1 << TIF_SYSCALL_TRACEPOINT)
#define _TIF_SECCOMP (1 << TIF_SECCOMP)
#define _TIF_USING_IWMMXT (1 << TIF_USING_IWMMXT)
}
diff --git a/arch/arm/include/asm/uaccess.h b/arch/arm/include/asm/uaccess.h
-index ce0786e..a80c264 100644
+index 74b17d0..57a4bf4 100644
--- a/arch/arm/include/asm/uaccess.h
+++ b/arch/arm/include/asm/uaccess.h
@@ -18,6 +18,7 @@
EXPORT_SYMBOL(__get_user_1);
EXPORT_SYMBOL(__get_user_2);
+diff --git a/arch/arm/kernel/cpuidle.c b/arch/arm/kernel/cpuidle.c
+index 318da33..373689f 100644
+--- a/arch/arm/kernel/cpuidle.c
++++ b/arch/arm/kernel/cpuidle.c
+@@ -19,7 +19,7 @@ extern struct of_cpuidle_method __cpuidle_method_of_table[];
+ static const struct of_cpuidle_method __cpuidle_method_of_table_sentinel
+ __used __section(__cpuidle_method_of_table_end);
+
+-static struct cpuidle_ops cpuidle_ops[NR_CPUS];
++static struct cpuidle_ops cpuidle_ops[NR_CPUS] __read_only;
+
+ /**
+ * arm_cpuidle_simple_enter() - a wrapper to cpu_do_idle()
diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S
-index 672b219..4aa120a 100644
+index 570306c..c87f193 100644
--- a/arch/arm/kernel/entry-armv.S
+++ b/arch/arm/kernel/entry-armv.S
@@ -48,6 +48,87 @@
str r2, [sp, #S_PC] @ it's a 2x16bit instr, update
@@ -547,7 +650,8 @@ ENDPROC(__und_usr)
*/
- .pushsection .fixup, "ax"
+ .pushsection .text.fixup, "ax"
.align 2
-4: str r4, [sp, #S_PC] @ retry current instruction
+4: pax_close_userland
#endif
mov r5, r0
diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S
-index f8ccc21..83d192f 100644
+index 4e7f40c..0f9ee2c 100644
--- a/arch/arm/kernel/entry-common.S
+++ b/arch/arm/kernel/entry-common.S
@@ -11,18 +11,46 @@
.align 5
/*
* This is the fast syscall return path. We do as little as
-@@ -171,6 +199,12 @@ ENTRY(vector_swi)
+@@ -173,6 +201,12 @@ ENTRY(vector_swi)
USER( ldr scno, [lr, #-4] ) @ get SWI instruction
#endif
flush_icache_range((unsigned long)base + offset, offset +
length);
diff --git a/arch/arm/kernel/head.S b/arch/arm/kernel/head.S
-index 0196327..50ac8895 100644
+index 3637973..cb29657 100644
--- a/arch/arm/kernel/head.S
+++ b/arch/arm/kernel/head.S
@@ -444,7 +444,7 @@ __enable_mmu:
mcr p15, 0, r4, c2, c0, 0 @ load page table pointer
#endif
diff --git a/arch/arm/kernel/module.c b/arch/arm/kernel/module.c
-index 2e11961..07f0704 100644
+index af791f4..3ff9821 100644
--- a/arch/arm/kernel/module.c
+++ b/arch/arm/kernel/module.c
@@ -38,12 +38,39 @@
if (waddr != addr) {
flush_kernel_vmap_range(waddr, twopage ? size / 2 : size);
diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c
-index 2bf1a16..d959d40 100644
+index f192a2a..1a40523 100644
--- a/arch/arm/kernel/process.c
+++ b/arch/arm/kernel/process.c
-@@ -213,6 +213,7 @@ void machine_power_off(void)
-
- if (pm_power_off)
- pm_power_off();
-+ BUG();
- }
-
- /*
-@@ -226,7 +227,7 @@ void machine_power_off(void)
- * executing pre-reset code, and using RAM that the primary CPU's code wishes
- * to use. Implementing such co-ordination would be essentially impossible.
- */
--void machine_restart(char *cmd)
-+__noreturn void machine_restart(char *cmd)
- {
- local_irq_disable();
- smp_send_stop();
-@@ -252,8 +253,8 @@ void __show_regs(struct pt_regs *regs)
+@@ -105,8 +105,8 @@ void __show_regs(struct pt_regs *regs)
show_regs_print_info(KERN_DEFAULT);
printk("pc : [<%08lx>] lr : [<%08lx>] psr: %08lx\n"
"sp : %08lx ip : %08lx fp : %08lx\n",
regs->ARM_pc, regs->ARM_lr, regs->ARM_cpsr,
-@@ -430,12 +431,6 @@ unsigned long get_wchan(struct task_struct *p)
+@@ -283,12 +283,6 @@ unsigned long get_wchan(struct task_struct *p)
return 0;
}
#ifdef CONFIG_MMU
#ifdef CONFIG_KUSER_HELPERS
/*
-@@ -451,7 +446,7 @@ static struct vm_area_struct gate_vma = {
+@@ -304,7 +298,7 @@ static struct vm_area_struct gate_vma = {
static int __init gate_vma_init(void)
{
return 0;
}
arch_initcall(gate_vma_init);
-@@ -480,81 +475,13 @@ const char *arch_vma_name(struct vm_area_struct *vma)
+@@ -333,91 +327,13 @@ const char *arch_vma_name(struct vm_area_struct *vma)
return is_gate_vma(vma) ? "[vectors]" : NULL;
}
-/* If possible, provide a placement hint at a random offset from the
-- * stack for the signal page.
+- * stack for the sigpage and vdso pages.
- */
-static unsigned long sigpage_addr(const struct mm_struct *mm,
- unsigned int npages)
{
struct mm_struct *mm = current->mm;
- struct vm_area_struct *vma;
+- unsigned long npages;
- unsigned long addr;
- unsigned long hint;
- int ret = 0;
- signal_page = get_signal_page();
- if (!signal_page)
- return -ENOMEM;
+-
+- npages = 1; /* for sigpage */
+- npages += vdso_total_pages;
down_write(&mm->mmap_sem);
-- hint = sigpage_addr(mm, 1);
-- addr = get_unmapped_area(NULL, hint, PAGE_SIZE, 0, 0);
+- hint = sigpage_addr(mm, npages);
+- addr = get_unmapped_area(NULL, hint, npages << PAGE_SHIFT, 0, 0);
- if (IS_ERR_VALUE(addr)) {
- ret = addr;
- goto up_fail;
-
- mm->context.sigpage = addr;
-
+- /* Unlike the sigpage, failure to install the vdso is unlikely
+- * to be fatal to the process, so no error check needed
+- * here.
+- */
+- arm_install_vdso(mm, addr + PAGE_SIZE);
+-
- up_fail:
+ mm->context.sigpage = (PAGE_OFFSET + (get_random_int() % 0x3FFEFFE0)) & 0xFFFFFFFC;
up_write(&mm->mmap_sem);
/* Do the secure computing check first; failures should be fast. */
#ifdef CONFIG_HAVE_ARCH_SECCOMP_FILTER
if (secure_computing() == -1)
+diff --git a/arch/arm/kernel/reboot.c b/arch/arm/kernel/reboot.c
+index 1a4d232..2677169 100644
+--- a/arch/arm/kernel/reboot.c
++++ b/arch/arm/kernel/reboot.c
+@@ -122,6 +122,7 @@ void machine_power_off(void)
+
+ if (pm_power_off)
+ pm_power_off();
++ while (1);
+ }
+
+ /*
diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c
-index 1d60beb..4aa25d5 100644
+index 6c777e9..3d2d0ca 100644
--- a/arch/arm/kernel/setup.c
+++ b/arch/arm/kernel/setup.c
@@ -105,21 +105,23 @@ EXPORT_SYMBOL(elf_hwcap);
cpu_arch = CPU_ARCH_ARMv6;
else
diff --git a/arch/arm/kernel/signal.c b/arch/arm/kernel/signal.c
-index 023ac90..0a69950 100644
+index 423663e..bfeb0ff 100644
--- a/arch/arm/kernel/signal.c
+++ b/arch/arm/kernel/signal.c
@@ -24,8 +24,6 @@
#ifdef CONFIG_CRUNCH
static int preserve_crunch_context(struct crunch_sigframe __user *frame)
{
-@@ -396,8 +394,7 @@ setup_return(struct pt_regs *regs, struct ksignal *ksig,
+@@ -385,8 +383,7 @@ setup_return(struct pt_regs *regs, struct ksignal *ksig,
* except when the MPU has protected the vectors
* page from PL0
*/
} else
#endif
{
-@@ -603,33 +600,3 @@ do_work_pending(struct pt_regs *regs, unsigned int thread_flags, int syscall)
+@@ -592,33 +589,3 @@ do_work_pending(struct pt_regs *regs, unsigned int thread_flags, int syscall)
} while (thread_flags & _TIF_WORK_MASK);
return 0;
}
- return page;
-}
diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c
-index 86ef244..c518451 100644
+index cca5b87..68f0f73 100644
--- a/arch/arm/kernel/smp.c
+++ b/arch/arm/kernel/smp.c
@@ -76,7 +76,7 @@ enum ipi_msg_type {
start, end);
itcm_present = true;
diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c
-index 788e23f..6fa06a1 100644
+index 3dce1a3..60e857f 100644
--- a/arch/arm/kernel/traps.c
+++ b/arch/arm/kernel/traps.c
@@ -65,7 +65,7 @@ static void dump_mem(const char *, const char *, unsigned long, unsigned long);
if (signr)
do_exit(signr);
}
-@@ -880,7 +885,11 @@ void __init early_trap_init(void *vectors_base)
+@@ -878,7 +883,11 @@ void __init early_trap_init(void *vectors_base)
kuser_init(vectors_base);
flush_icache_range(vectors, vectors + PAGE_SIZE * 2);
/*
* on V7-M there is no need to copy the vector table to a dedicated
diff --git a/arch/arm/kernel/vmlinux.lds.S b/arch/arm/kernel/vmlinux.lds.S
-index b31aa73..cc4b7a1 100644
+index 8b60fde..8d986dd 100644
--- a/arch/arm/kernel/vmlinux.lds.S
+++ b/arch/arm/kernel/vmlinux.lds.S
@@ -37,7 +37,7 @@
#define ARM_EXIT_KEEP(x) x
#define ARM_EXIT_DISCARD(x)
#else
-@@ -123,6 +123,8 @@ SECTIONS
+@@ -120,6 +120,8 @@ SECTIONS
#ifdef CONFIG_DEBUG_RODATA
. = ALIGN(1<<SECTION_SHIFT);
#endif
RO_DATA(PAGE_SIZE)
. = ALIGN(4);
-@@ -153,8 +155,6 @@ SECTIONS
+@@ -150,8 +152,6 @@ SECTIONS
NOTES
# ifdef CONFIG_ARM_KERNMEM_PERMS
. = ALIGN(1<<SECTION_SHIFT);
diff --git a/arch/arm/kvm/arm.c b/arch/arm/kvm/arm.c
-index b652af5..60231ab 100644
+index d9631ec..b0c966c 100644
--- a/arch/arm/kvm/arm.c
+++ b/arch/arm/kvm/arm.c
@@ -57,7 +57,7 @@ static unsigned long hyp_default_vectors;
static u8 kvm_next_vmid;
static DEFINE_SPINLOCK(kvm_vmid_lock);
-@@ -358,7 +358,7 @@ void force_vm_exit(const cpumask_t *mask)
+@@ -373,7 +373,7 @@ void force_vm_exit(const cpumask_t *mask)
*/
static bool need_new_vmid_gen(struct kvm *kvm)
{
}
/**
-@@ -391,7 +391,7 @@ static void update_vttbr(struct kvm *kvm)
+@@ -406,7 +406,7 @@ static void update_vttbr(struct kvm *kvm)
/* First user of a new VMID generation? */
if (unlikely(kvm_next_vmid == 0)) {
kvm_next_vmid = 1;
/*
-@@ -408,7 +408,7 @@ static void update_vttbr(struct kvm *kvm)
+@@ -423,7 +423,7 @@ static void update_vttbr(struct kvm *kvm)
kvm_call_hyp(__kvm_flush_vm_context);
}
kvm->arch.vmid = kvm_next_vmid;
kvm_next_vmid++;
-@@ -1087,7 +1087,7 @@ struct kvm_vcpu *kvm_mpidr_to_vcpu(struct kvm *kvm, unsigned long mpidr)
+@@ -1098,7 +1098,7 @@ struct kvm_vcpu *kvm_mpidr_to_vcpu(struct kvm *kvm, unsigned long mpidr)
/**
* Initialize Hyp-mode and memory mappings on all CPUs.
*/
int err;
int ret, cpu;
diff --git a/arch/arm/lib/clear_user.S b/arch/arm/lib/clear_user.S
-index 14a0d98..7771a7d 100644
+index 1710fd7..ec3e014 100644
--- a/arch/arm/lib/clear_user.S
+++ b/arch/arm/lib/clear_user.S
@@ -12,14 +12,14 @@
+ENDPROC(___clear_user)
ENDPROC(__clear_user_std)
- .pushsection .fixup,"ax"
+ .pushsection .text.fixup,"ax"
diff --git a/arch/arm/lib/copy_from_user.S b/arch/arm/lib/copy_from_user.S
index 7a235b9..73a0556 100644
--- a/arch/arm/lib/copy_from_user.S
#include <asm/asm-offsets.h>
#include <asm/cache.h>
diff --git a/arch/arm/lib/copy_to_user.S b/arch/arm/lib/copy_to_user.S
-index a9d3db1..164b089 100644
+index 9648b06..19c333c 100644
--- a/arch/arm/lib/copy_to_user.S
+++ b/arch/arm/lib/copy_to_user.S
@@ -17,7 +17,7 @@
+ENDPROC(___copy_to_user)
ENDPROC(__copy_to_user_std)
- .pushsection .fixup,"ax"
+ .pushsection .text.fixup,"ax"
diff --git a/arch/arm/lib/csumpartialcopyuser.S b/arch/arm/lib/csumpartialcopyuser.S
-index 7d08b43..f7ca7ea 100644
+index 1d0957e..f708846 100644
--- a/arch/arm/lib/csumpartialcopyuser.S
+++ b/arch/arm/lib/csumpartialcopyuser.S
@@ -57,8 +57,8 @@
#include "csumpartialcopygeneric.S"
diff --git a/arch/arm/lib/delay.c b/arch/arm/lib/delay.c
-index 312d43e..21d2322 100644
+index 8044591..c9b2609 100644
--- a/arch/arm/lib/delay.c
+++ b/arch/arm/lib/delay.c
@@ -29,7 +29,7 @@
/* See rational for this in __copy_to_user() above. */
if (n < 64)
diff --git a/arch/arm/mach-exynos/suspend.c b/arch/arm/mach-exynos/suspend.c
-index 318d127..9aab0d1 100644
+index 7d23ce0..5ef383a 100644
--- a/arch/arm/mach-exynos/suspend.c
+++ b/arch/arm/mach-exynos/suspend.c
-@@ -18,6 +18,7 @@
- #include <linux/syscore_ops.h>
- #include <linux/cpu_pm.h>
- #include <linux/io.h>
-+#include <linux/irq.h>
- #include <linux/irqchip/arm-gic.h>
- #include <linux/err.h>
- #include <linux/regulator/machine.h>
-@@ -632,8 +633,10 @@ void __init exynos_pm_init(void)
+@@ -738,8 +738,10 @@ void __init exynos_pm_init(void)
tmp |= pm_data->wake_disable_mask;
pmu_raw_writel(tmp, S5P_WAKEUP_MASK);
#include <asm/smp_scu.h>
diff --git a/arch/arm/mach-omap2/omap-wakeupgen.c b/arch/arm/mach-omap2/omap-wakeupgen.c
-index f961c46..4a453dc 100644
+index 3b56722..33ac281 100644
--- a/arch/arm/mach-omap2/omap-wakeupgen.c
+++ b/arch/arm/mach-omap2/omap-wakeupgen.c
-@@ -344,7 +344,7 @@ static int irq_cpu_hotplug_notify(struct notifier_block *self,
+@@ -330,7 +330,7 @@ static int irq_cpu_hotplug_notify(struct notifier_block *self,
return NOTIFY_OK;
}
};
diff --git a/arch/arm/mach-omap2/omap_device.c b/arch/arm/mach-omap2/omap_device.c
-index be9541e..821805f 100644
+index 166b18f..f985f04 100644
--- a/arch/arm/mach-omap2/omap_device.c
+++ b/arch/arm/mach-omap2/omap_device.c
@@ -510,7 +510,7 @@ void omap_device_delete(struct omap_device *od)
struct omap_device *omap_device_alloc(struct platform_device *pdev,
struct omap_hwmod **ohs, int oh_cnt);
diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c
-index 355b089..2c9d7c3 100644
+index 752969f..a34b446 100644
--- a/arch/arm/mach-omap2/omap_hwmod.c
+++ b/arch/arm/mach-omap2/omap_hwmod.c
-@@ -193,10 +193,10 @@ struct omap_hwmod_soc_ops {
+@@ -199,10 +199,10 @@ struct omap_hwmod_soc_ops {
int (*init_clkdm)(struct omap_hwmod *oh);
void (*update_context_lost)(struct omap_hwmod *oh);
int (*get_context_lost)(struct omap_hwmod *oh);
sizeof(struct omap_wd_timer_platform_data));
WARN(IS_ERR(pdev), "Can't build omap_device for %s:%s.\n",
diff --git a/arch/arm/mach-tegra/cpuidle-tegra20.c b/arch/arm/mach-tegra/cpuidle-tegra20.c
-index 4f25a7c..a81be85 100644
+index 7469347..1ecc350 100644
--- a/arch/arm/mach-tegra/cpuidle-tegra20.c
+++ b/arch/arm/mach-tegra/cpuidle-tegra20.c
-@@ -179,7 +179,7 @@ static int tegra20_idle_lp2_coupled(struct cpuidle_device *dev,
+@@ -177,7 +177,7 @@ static int tegra20_idle_lp2_coupled(struct cpuidle_device *dev,
bool entered_lp2 = false;
if (tegra_pending_sgi())
cpuidle_coupled_parallel_barrier(dev, &abort_barrier);
diff --git a/arch/arm/mach-tegra/irq.c b/arch/arm/mach-tegra/irq.c
-index ab95f53..4b977a7 100644
+index 3b9098d..15b390f 100644
--- a/arch/arm/mach-tegra/irq.c
+++ b/arch/arm/mach-tegra/irq.c
@@ -20,6 +20,7 @@
#include "common.h"
diff --git a/arch/arm/mm/Kconfig b/arch/arm/mm/Kconfig
-index 9b4f29e..bbf3bfa 100644
+index b4f92b9..ffefea9 100644
--- a/arch/arm/mm/Kconfig
+++ b/arch/arm/mm/Kconfig
@@ -446,6 +446,7 @@ config CPU_32v5
If all of the binaries and libraries which run on your platform
diff --git a/arch/arm/mm/alignment.c b/arch/arm/mm/alignment.c
-index 2c0c541..4585df9 100644
+index 9769f1e..16aaa55 100644
--- a/arch/arm/mm/alignment.c
+++ b/arch/arm/mm/alignment.c
@@ -216,10 +216,12 @@ union offset_union {
goto fault; \
} while (0)
diff --git a/arch/arm/mm/cache-l2x0.c b/arch/arm/mm/cache-l2x0.c
-index 8f15f70..d599a2b 100644
+index e309c8f..f8965e8 100644
--- a/arch/arm/mm/cache-l2x0.c
+++ b/arch/arm/mm/cache-l2x0.c
@@ -43,7 +43,7 @@ struct l2c_init_data {
atomic64_set(&mm->context.id, asid);
}
diff --git a/arch/arm/mm/fault.c b/arch/arm/mm/fault.c
-index 6333d9c..fd09b46 100644
+index 6333d9c..3bb19f2 100644
--- a/arch/arm/mm/fault.c
+++ b/arch/arm/mm/fault.c
@@ -25,6 +25,7 @@
+#ifdef CONFIG_PAX_MEMORY_UDEREF
+ if (addr < TASK_SIZE) {
+ if (current->signal->curr_ip)
-+ printk(KERN_ERR "PAX: From %pI4: %s:%d, uid/euid: %u/%u, attempted to access userland memory at %08lx\n", ¤t->signal->curr_ip, current->comm, task_pid_nr(current),
++ printk(KERN_EMERG "PAX: From %pI4: %s:%d, uid/euid: %u/%u, attempted to access userland memory at %08lx\n", ¤t->signal->curr_ip, current->comm, task_pid_nr(current),
+ from_kuid_munged(&init_user_ns, current_uid()), from_kuid_munged(&init_user_ns, current_euid()), addr);
+ else
-+ printk(KERN_ERR "PAX: %s:%d, uid/euid: %u/%u, attempted to access userland memory at %08lx\n", current->comm, task_pid_nr(current),
++ printk(KERN_EMERG "PAX: %s:%d, uid/euid: %u/%u, attempted to access userland memory at %08lx\n", current->comm, task_pid_nr(current),
+ from_kuid_munged(&init_user_ns, current_uid()), from_kuid_munged(&init_user_ns, current_euid()), addr);
+ }
+#endif
+ (MODULES_VADDR <= addr && addr < MODULES_END)))
+ {
+ if (current->signal->curr_ip)
-+ printk(KERN_ERR "PAX: From %pI4: %s:%d, uid/euid: %u/%u, attempted to modify kernel code\n", ¤t->signal->curr_ip, current->comm, task_pid_nr(current),
++ printk(KERN_EMERG "PAX: From %pI4: %s:%d, uid/euid: %u/%u, attempted to modify kernel code\n", ¤t->signal->curr_ip, current->comm, task_pid_nr(current),
+ from_kuid_munged(&init_user_ns, current_uid()), from_kuid_munged(&init_user_ns, current_euid()));
+ else
-+ printk(KERN_ERR "PAX: %s:%d, uid/euid: %u/%u, attempted to modify kernel code\n", current->comm, task_pid_nr(current),
++ printk(KERN_EMERG "PAX: %s:%d, uid/euid: %u/%u, attempted to modify kernel code\n", current->comm, task_pid_nr(current),
+ from_kuid_munged(&init_user_ns, current_uid()), from_kuid_munged(&init_user_ns, current_euid()));
+ }
+#endif
+#ifdef CONFIG_PAX_MEMORY_UDEREF
+ if (addr < TASK_SIZE && is_domain_fault(fsr)) {
+ if (current->signal->curr_ip)
-+ printk(KERN_ERR "PAX: From %pI4: %s:%d, uid/euid: %u/%u, attempted to access userland memory at %08lx\n", ¤t->signal->curr_ip, current->comm, task_pid_nr(current),
++ printk(KERN_EMERG "PAX: From %pI4: %s:%d, uid/euid: %u/%u, attempted to access userland memory at %08lx\n", ¤t->signal->curr_ip, current->comm, task_pid_nr(current),
+ from_kuid_munged(&init_user_ns, current_uid()), from_kuid_munged(&init_user_ns, current_euid()), addr);
+ else
-+ printk(KERN_ERR "PAX: %s:%d, uid/euid: %u/%u, attempted to access userland memory at %08lx\n", current->comm, task_pid_nr(current),
++ printk(KERN_EMERG "PAX: %s:%d, uid/euid: %u/%u, attempted to access userland memory at %08lx\n", current->comm, task_pid_nr(current),
+ from_kuid_munged(&init_user_ns, current_uid()), from_kuid_munged(&init_user_ns, current_euid()), addr);
+ goto die;
+ }
+#if defined(CONFIG_PAX_KERNEXEC) || defined(CONFIG_PAX_MEMORY_UDEREF)
+ else if (is_domain_fault(ifsr) || is_xn_fault(ifsr)) {
+ if (current->signal->curr_ip)
-+ printk(KERN_ERR "PAX: From %pI4: %s:%d, uid/euid: %u/%u, attempted to execute %s memory at %08lx\n", ¤t->signal->curr_ip, current->comm, task_pid_nr(current),
++ printk(KERN_EMERG "PAX: From %pI4: %s:%d, uid/euid: %u/%u, attempted to execute %s memory at %08lx\n", ¤t->signal->curr_ip, current->comm, task_pid_nr(current),
+ from_kuid_munged(&init_user_ns, current_uid()), from_kuid_munged(&init_user_ns, current_euid()),
+ pc >= TASK_SIZE ? "non-executable kernel" : "userland", pc);
+ else
-+ printk(KERN_ERR "PAX: %s:%d, uid/euid: %u/%u, attempted to execute %s memory at %08lx\n", current->comm, task_pid_nr(current),
++ printk(KERN_EMERG "PAX: %s:%d, uid/euid: %u/%u, attempted to execute %s memory at %08lx\n", current->comm, task_pid_nr(current),
+ from_kuid_munged(&init_user_ns, current_uid()), from_kuid_munged(&init_user_ns, current_euid()),
+ pc >= TASK_SIZE ? "non-executable kernel" : "userland", pc);
+ goto die;
unsigned long search_exception_table(unsigned long addr);
diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c
-index 1609b02..def0785 100644
+index be92fa0..5252d7e 100644
--- a/arch/arm/mm/init.c
+++ b/arch/arm/mm/init.c
-@@ -755,7 +755,46 @@ void free_tcmmem(void)
+@@ -709,7 +709,46 @@ void free_tcmmem(void)
{
#ifdef CONFIG_HAVE_TCM
extern char __tcm_start, __tcm_end;
return __arm_ioremap_caller(phys_addr, size, mtype,
__builtin_return_address(0));
diff --git a/arch/arm/mm/mmap.c b/arch/arm/mm/mmap.c
-index 5e85ed3..b10a7ed 100644
+index 407dc78..047ce9d 100644
--- a/arch/arm/mm/mmap.c
+++ b/arch/arm/mm/mmap.c
@@ -59,6 +59,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
addr = vm_unmapped_area(&info);
/*
-@@ -173,6 +183,10 @@ void arch_pick_mmap_layout(struct mm_struct *mm)
+@@ -183,14 +193,30 @@ void arch_pick_mmap_layout(struct mm_struct *mm)
{
unsigned long random_factor = 0UL;
+ if (!(mm->pax_flags & MF_PAX_RANDMMAP))
+#endif
+
- /* 8 bits of randomness in 20 address space bits */
- if ((current->flags & PF_RANDOMIZE) &&
- !(current->personality & ADDR_NO_RANDOMIZE))
-@@ -180,9 +194,21 @@ void arch_pick_mmap_layout(struct mm_struct *mm)
+ if (current->flags & PF_RANDOMIZE)
+ random_factor = arch_mmap_rnd();
if (mmap_is_legacy()) {
mm->mmap_base = TASK_UNMAPPED_BASE + random_factor;
}
}
diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c
-index 4e6ef89..21c27f2 100644
+index 7186382..0c145cf 100644
--- a/arch/arm/mm/mmu.c
+++ b/arch/arm/mm/mmu.c
@@ -41,6 +41,22 @@
}
diff --git a/arch/arm/net/bpf_jit_32.c b/arch/arm/net/bpf_jit_32.c
-index f412b53..fc89433 100644
+index e0e2358..a4ee460 100644
--- a/arch/arm/net/bpf_jit_32.c
+++ b/arch/arm/net/bpf_jit_32.c
@@ -20,6 +20,7 @@
#include "bpf_jit_32.h"
-@@ -71,7 +72,11 @@ struct jit_ctx {
+@@ -72,34 +73,58 @@ struct jit_ctx {
#endif
};
int bpf_jit_enable __read_mostly;
+#endif
- static u64 jit_get_skb_b(struct sk_buff *skb, unsigned offset)
+-static u64 jit_get_skb_b(struct sk_buff *skb, unsigned offset)
++static inline int call_neg_helper(struct sk_buff *skb, int offset, void *ret,
++ unsigned int size)
++{
++ void *ptr = bpf_internal_load_pointer_neg_helper(skb, offset, size);
++
++ if (!ptr)
++ return -EFAULT;
++ memcpy(ret, ptr, size);
++ return 0;
++}
++
++static u64 jit_get_skb_b(struct sk_buff *skb, int offset)
+ {
+ u8 ret;
+ int err;
+
+- err = skb_copy_bits(skb, offset, &ret, 1);
++ if (offset < 0)
++ err = call_neg_helper(skb, offset, &ret, 1);
++ else
++ err = skb_copy_bits(skb, offset, &ret, 1);
+
+ return (u64)err << 32 | ret;
+ }
+
+-static u64 jit_get_skb_h(struct sk_buff *skb, unsigned offset)
++static u64 jit_get_skb_h(struct sk_buff *skb, int offset)
{
-@@ -178,8 +183,10 @@ static void jit_fill_hole(void *area, unsigned int size)
+ u16 ret;
+ int err;
+
+- err = skb_copy_bits(skb, offset, &ret, 2);
++ if (offset < 0)
++ err = call_neg_helper(skb, offset, &ret, 2);
++ else
++ err = skb_copy_bits(skb, offset, &ret, 2);
+
+ return (u64)err << 32 | ntohs(ret);
+ }
+
+-static u64 jit_get_skb_w(struct sk_buff *skb, unsigned offset)
++static u64 jit_get_skb_w(struct sk_buff *skb, int offset)
+ {
+ u32 ret;
+ int err;
+
+- err = skb_copy_bits(skb, offset, &ret, 4);
++ if (offset < 0)
++ err = call_neg_helper(skb, offset, &ret, 4);
++ else
++ err = skb_copy_bits(skb, offset, &ret, 4);
+
+ return (u64)err << 32 | ntohl(ret);
+ }
+@@ -179,8 +204,10 @@ static void jit_fill_hole(void *area, unsigned int size)
{
u32 *ptr;
/* We are guaranteed to have aligned memory. */
}
static void build_prologue(struct jit_ctx *ctx)
+@@ -536,9 +563,6 @@ static int build_body(struct jit_ctx *ctx)
+ case BPF_LD | BPF_B | BPF_ABS:
+ load_order = 0;
+ load:
+- /* the interpreter will deal with the negative K */
+- if ((int)k < 0)
+- return -ENOTSUPP;
+ emit_mov_i(r_off, k, ctx);
+ load_common:
+ ctx->seen |= SEEN_DATA | SEEN_CALL;
+@@ -547,12 +571,24 @@ load_common:
+ emit(ARM_SUB_I(r_scratch, r_skb_hl,
+ 1 << load_order), ctx);
+ emit(ARM_CMP_R(r_scratch, r_off), ctx);
+- condt = ARM_COND_HS;
++ condt = ARM_COND_GE;
+ } else {
+ emit(ARM_CMP_R(r_skb_hl, r_off), ctx);
+ condt = ARM_COND_HI;
+ }
+
++ /*
++ * test for negative offset, only if we are
++ * currently scheduled to take the fast
++ * path. this will update the flags so that
++ * the slowpath instruction are ignored if the
++ * offset is negative.
++ *
++ * for loard_order == 0 the HI condition will
++ * make loads at offset 0 take the slow path too.
++ */
++ _emit(condt, ARM_CMP_I(r_off, 0), ctx);
++
+ _emit(condt, ARM_ADD_R(r_scratch, r_off, r_skb_data),
+ ctx);
+
+@@ -860,9 +896,11 @@ b_epilogue:
+ off = offsetof(struct sk_buff, vlan_tci);
+ emit(ARM_LDRH_I(r_A, r_skb, off), ctx);
+ if (code == (BPF_ANC | SKF_AD_VLAN_TAG))
+- OP_IMM3(ARM_AND, r_A, r_A, VLAN_VID_MASK, ctx);
+- else
+- OP_IMM3(ARM_AND, r_A, r_A, VLAN_TAG_PRESENT, ctx);
++ OP_IMM3(ARM_AND, r_A, r_A, ~VLAN_TAG_PRESENT, ctx);
++ else {
++ OP_IMM3(ARM_LSR, r_A, r_A, 12, ctx);
++ OP_IMM3(ARM_AND, r_A, r_A, 0x1, ctx);
++ }
+ break;
+ case BPF_ANC | SKF_AD_QUEUE:
+ ctx->seen |= SEEN_SKB;
diff --git a/arch/arm/plat-iop/setup.c b/arch/arm/plat-iop/setup.c
index 5b217f4..c23f40e 100644
--- a/arch/arm/plat-iop/setup.c
#endif
#endif
diff --git a/arch/arm64/include/asm/barrier.h b/arch/arm64/include/asm/barrier.h
-index a5abb00..9cbca9a 100644
+index 71f19c4..2b13cfe 100644
--- a/arch/arm64/include/asm/barrier.h
+++ b/arch/arm64/include/asm/barrier.h
@@ -44,7 +44,7 @@
default:
BUILD_BUG();
diff --git a/arch/arm64/include/asm/pgalloc.h b/arch/arm64/include/asm/pgalloc.h
-index e20df38..027ede3 100644
+index 7642056..bffc904 100644
--- a/arch/arm64/include/asm/pgalloc.h
+++ b/arch/arm64/include/asm/pgalloc.h
@@ -46,6 +46,11 @@ static inline void pud_populate(struct mm_struct *mm, pud_t *pud, pmd_t *pmd)
+ pud_populate(mm, pud, pmd);
+}
+
- #endif /* CONFIG_ARM64_PGTABLE_LEVELS > 2 */
+ #endif /* CONFIG_PGTABLE_LEVELS > 2 */
- #if CONFIG_ARM64_PGTABLE_LEVELS > 3
+ #if CONFIG_PGTABLE_LEVELS > 3
diff --git a/arch/arm64/include/asm/uaccess.h b/arch/arm64/include/asm/uaccess.h
index 07e1ba44..ec8cbbb 100644
--- a/arch/arm64/include/asm/uaccess.h
/*
* Memory returned by kmalloc() may be used for DMA, so we must make
diff --git a/arch/avr32/include/asm/elf.h b/arch/avr32/include/asm/elf.h
-index d232888..87c8df1 100644
+index 0388ece..87c8df1 100644
--- a/arch/avr32/include/asm/elf.h
+++ b/arch/avr32/include/asm/elf.h
@@ -84,8 +84,14 @@ typedef struct user_fpu_struct elf_fpregset_t;
the loader. We need to make sure that it is out of the way of the program
that it will "exec", and that there is sufficient room for the brk. */
--#define ELF_ET_DYN_BASE (2 * TASK_SIZE / 3)
+-#define ELF_ET_DYN_BASE (TASK_SIZE / 3 * 2)
+#define ELF_ET_DYN_BASE (TASK_SIZE / 3 * 2)
+#ifdef CONFIG_PAX_ASLR
#define ARCH_DMA_MINALIGN L1_CACHE_BYTES
diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig
-index 074e52b..76afdac 100644
+index 76d25b2..d3793a0f 100644
--- a/arch/ia64/Kconfig
+++ b/arch/ia64/Kconfig
-@@ -548,6 +548,7 @@ source "drivers/sn/Kconfig"
+@@ -541,6 +541,7 @@ source "drivers/sn/Kconfig"
config KEXEC
bool "kexec system call"
depends on !IA64_HP_SIM && (!SMP || HOTPLUG_CPU)
/* IA-64 relocations: */
diff --git a/arch/ia64/include/asm/pgalloc.h b/arch/ia64/include/asm/pgalloc.h
-index 5767cdf..7462574 100644
+index f5e70e9..624fad5 100644
--- a/arch/ia64/include/asm/pgalloc.h
+++ b/arch/ia64/include/asm/pgalloc.h
@@ -39,6 +39,12 @@ pgd_populate(struct mm_struct *mm, pgd_t * pgd_entry, pud_t * pud)
{
return quicklist_alloc(0, GFP_KERNEL, NULL);
diff --git a/arch/ia64/include/asm/pgtable.h b/arch/ia64/include/asm/pgtable.h
-index 7b6f880..ac8e008 100644
+index 9f3ed9e..c99b418 100644
--- a/arch/ia64/include/asm/pgtable.h
+++ b/arch/ia64/include/asm/pgtable.h
@@ -12,7 +12,7 @@
}
diff --git a/arch/ia64/mm/init.c b/arch/ia64/mm/init.c
-index 6b33457..88b5124 100644
+index a9b65cf..49ae1cf 100644
--- a/arch/ia64/mm/init.c
+++ b/arch/ia64/mm/init.c
@@ -120,6 +120,19 @@ ia64_init_addr_space (void)
#define SMP_CACHE_BYTES L1_CACHE_BYTES
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
-index 1a313c4..f27b613 100644
+index f501665..b107753 100644
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
-@@ -2504,6 +2504,7 @@ source "kernel/Kconfig.preempt"
+@@ -2585,6 +2585,7 @@ source "kernel/Kconfig.preempt"
config KEXEC
bool "Kexec system call"
#define SMP_CACHE_SHIFT L1_CACHE_SHIFT
#define SMP_CACHE_BYTES L1_CACHE_BYTES
diff --git a/arch/mips/include/asm/elf.h b/arch/mips/include/asm/elf.h
-index 694925a..990fa62 100644
+index f19e890..a4f8177 100644
--- a/arch/mips/include/asm/elf.h
+++ b/arch/mips/include/asm/elf.h
-@@ -410,15 +410,18 @@ extern const char *__elf_platform;
+@@ -417,6 +417,13 @@ extern const char *__elf_platform;
#define ELF_ET_DYN_BASE (TASK_SIZE / 3 * 2)
#endif
#define ARCH_HAS_SETUP_ADDITIONAL_PAGES 1
struct linux_binprm;
extern int arch_setup_additional_pages(struct linux_binprm *bprm,
- int uses_interp);
-
--struct mm_struct;
--extern unsigned long arch_randomize_brk(struct mm_struct *mm);
--#define arch_randomize_brk arch_randomize_brk
--
- struct arch_elf_state {
- int fp_abi;
- int interp_fp_abi;
diff --git a/arch/mips/include/asm/exec.h b/arch/mips/include/asm/exec.h
index c1f6afa..38cc6e9 100644
--- a/arch/mips/include/asm/exec.h
/**
diff --git a/arch/mips/include/asm/page.h b/arch/mips/include/asm/page.h
-index 154b70a..426ae3d 100644
+index 89dd7fe..a123c97 100644
--- a/arch/mips/include/asm/page.h
+++ b/arch/mips/include/asm/page.h
-@@ -120,7 +120,7 @@ extern void copy_user_highpage(struct page *to, struct page *from,
+@@ -118,7 +118,7 @@ extern void copy_user_highpage(struct page *to, struct page *from,
#ifdef CONFIG_CPU_MIPS32
typedef struct { unsigned long pte_low, pte_high; } pte_t;
#define pte_val(x) ((x).pte_low | ((unsigned long long)(x).pte_high << 32))
/*
diff --git a/arch/mips/include/asm/pgtable.h b/arch/mips/include/asm/pgtable.h
-index f8f809f..b5f3fa4 100644
+index 819af9d..439839d 100644
--- a/arch/mips/include/asm/pgtable.h
+++ b/arch/mips/include/asm/pgtable.h
@@ -20,6 +20,9 @@
struct vm_area_struct;
diff --git a/arch/mips/include/asm/thread_info.h b/arch/mips/include/asm/thread_info.h
-index 55ed660..3dc9422 100644
+index 9c0014e..5101ef5 100644
--- a/arch/mips/include/asm/thread_info.h
+++ b/arch/mips/include/asm/thread_info.h
-@@ -102,6 +102,9 @@ static inline struct thread_info *current_thread_info(void)
+@@ -100,6 +100,9 @@ static inline struct thread_info *current_thread_info(void)
#define TIF_SECCOMP 4 /* secure computing */
#define TIF_NOTIFY_RESUME 5 /* callback before returning to user */
#define TIF_RESTORE_SIGMASK 9 /* restore signal mask in do_signal() */
#define TIF_USEDFPU 16 /* FPU was used by this task this quantum (SMP) */
#define TIF_MEMDIE 18 /* is terminating due to OOM killer */
#define TIF_NOHZ 19 /* in adaptive nohz mode */
-@@ -137,14 +140,16 @@ static inline struct thread_info *current_thread_info(void)
+@@ -135,14 +138,16 @@ static inline struct thread_info *current_thread_info(void)
#define _TIF_USEDMSA (1<<TIF_USEDMSA)
#define _TIF_MSA_CTX_LIVE (1<<TIF_MSA_CTX_LIVE)
#define _TIF_SYSCALL_TRACEPOINT (1<<TIF_SYSCALL_TRACEPOINT)
/* work to do on interrupt/exception return */
#define _TIF_WORK_MASK \
-@@ -152,7 +157,7 @@ static inline struct thread_info *current_thread_info(void)
+@@ -150,7 +155,7 @@ static inline struct thread_info *current_thread_info(void)
/* work to do on any return to u-space */
#define _TIF_ALLWORK_MASK (_TIF_NOHZ | _TIF_WORK_MASK | \
_TIF_WORK_SYSCALL_EXIT | \
void __init gt641xx_irq_init(void)
diff --git a/arch/mips/kernel/irq.c b/arch/mips/kernel/irq.c
-index d2bfbc2..a8eacd2 100644
+index 3c8a18a..b4929b6 100644
--- a/arch/mips/kernel/irq.c
+++ b/arch/mips/kernel/irq.c
@@ -76,17 +76,17 @@ void ack_bad_irq(unsigned int irq)
}
void __init init_IRQ(void)
-@@ -109,7 +109,10 @@ void __init init_IRQ(void)
- #endif
+@@ -110,6 +110,8 @@ void __init init_IRQ(void)
}
+ #ifdef CONFIG_DEBUG_STACKOVERFLOW
+
- #ifdef DEBUG_STACKOVERFLOW
+extern void gr_handle_kernel_exploit(void);
-+
static inline void check_stack_overflow(void)
{
unsigned long sp;
-@@ -125,6 +128,7 @@ static inline void check_stack_overflow(void)
+@@ -125,6 +127,7 @@ static inline void check_stack_overflow(void)
printk("do_IRQ: stack overflow: %ld\n",
sp - sizeof(struct thread_info));
dump_stack();
/* Run the generated entry code */
diff --git a/arch/mips/kernel/process.c b/arch/mips/kernel/process.c
-index bf85cc1..b365c61 100644
+index f2975d4..f61d355 100644
--- a/arch/mips/kernel/process.c
+++ b/arch/mips/kernel/process.c
-@@ -535,18 +535,6 @@ out:
+@@ -541,18 +541,6 @@ out:
return pc;
}
{
struct pt_regs *regs;
diff --git a/arch/mips/kernel/ptrace.c b/arch/mips/kernel/ptrace.c
-index 5104528..950bbdc 100644
+index e933a30..0d02625 100644
--- a/arch/mips/kernel/ptrace.c
+++ b/arch/mips/kernel/ptrace.c
-@@ -761,6 +761,10 @@ long arch_ptrace(struct task_struct *child, long request,
+@@ -785,6 +785,10 @@ long arch_ptrace(struct task_struct *child, long request,
return ret;
}
/*
* Notification of system call entry/exit
* - triggered by current->work.syscall_trace
-@@ -779,6 +783,11 @@ asmlinkage long syscall_trace_enter(struct pt_regs *regs, long syscall)
+@@ -803,6 +807,11 @@ asmlinkage long syscall_trace_enter(struct pt_regs *regs, long syscall)
tracehook_report_syscall_entry(regs))
ret = -1;
if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT)))
trace_sys_enter(regs, regs->regs[2]);
-diff --git a/arch/mips/kernel/reset.c b/arch/mips/kernel/reset.c
-index 07fc524..b9d7f28 100644
---- a/arch/mips/kernel/reset.c
-+++ b/arch/mips/kernel/reset.c
-@@ -13,6 +13,7 @@
- #include <linux/reboot.h>
-
- #include <asm/reboot.h>
-+#include <asm/bug.h>
-
- /*
- * Urgs ... Too many MIPS machines to handle this in a generic way.
-@@ -29,16 +30,19 @@ void machine_restart(char *command)
- {
- if (_machine_restart)
- _machine_restart(command);
-+ BUG();
- }
-
- void machine_halt(void)
- {
- if (_machine_halt)
- _machine_halt();
-+ BUG();
- }
-
- void machine_power_off(void)
- {
- if (pm_power_off)
- pm_power_off();
-+ BUG();
- }
diff --git a/arch/mips/kernel/sync-r4k.c b/arch/mips/kernel/sync-r4k.c
index 2242bdd..b284048 100644
--- a/arch/mips/kernel/sync-r4k.c
}
/* Arrange for an interrupt in a short while */
diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c
-index 33984c0..666a96d 100644
+index d2d1c19..3e21d8d 100644
--- a/arch/mips/kernel/traps.c
+++ b/arch/mips/kernel/traps.c
@@ -689,7 +689,18 @@ asmlinkage void do_ov(struct pt_regs *regs)
info.si_code = FPE_INTOVF;
info.si_signo = SIGFPE;
diff --git a/arch/mips/kvm/mips.c b/arch/mips/kvm/mips.c
-index f5e7dda..47198ec 100644
+index 52f205a..335927c 100644
--- a/arch/mips/kvm/mips.c
+++ b/arch/mips/kvm/mips.c
-@@ -816,7 +816,7 @@ long kvm_arch_vm_ioctl(struct file *filp, unsigned int ioctl, unsigned long arg)
+@@ -1013,7 +1013,7 @@ long kvm_arch_vm_ioctl(struct file *filp, unsigned int ioctl, unsigned long arg)
return r;
}
tsk->thread.error_code = write;
if (show_unhandled_signals &&
diff --git a/arch/mips/mm/mmap.c b/arch/mips/mm/mmap.c
-index f1baadd..5472dca 100644
+index 5c81fdd..db158d3 100644
--- a/arch/mips/mm/mmap.c
+++ b/arch/mips/mm/mmap.c
@@ -59,6 +59,7 @@ static unsigned long arch_get_unmapped_area_common(struct file *filp,
if (dir == DOWN) {
info.flags = VM_UNMAPPED_AREA_TOPDOWN;
-@@ -146,6 +152,10 @@ void arch_pick_mmap_layout(struct mm_struct *mm)
+@@ -160,45 +166,34 @@ void arch_pick_mmap_layout(struct mm_struct *mm)
{
unsigned long random_factor = 0UL;
+ if (!(mm->pax_flags & MF_PAX_RANDMMAP))
+#endif
+
- if (current->flags & PF_RANDOMIZE) {
- random_factor = get_random_int();
- random_factor = random_factor << PAGE_SHIFT;
-@@ -157,40 +167,25 @@ void arch_pick_mmap_layout(struct mm_struct *mm)
+ if (current->flags & PF_RANDOMIZE)
+ random_factor = arch_mmap_rnd();
if (mmap_is_legacy()) {
mm->mmap_base = TASK_UNMAPPED_BASE + random_factor;
#endif /* __ASM_OPENRISC_CACHE_H */
diff --git a/arch/parisc/include/asm/atomic.h b/arch/parisc/include/asm/atomic.h
-index 226f8ca..9d9b87d 100644
+index 226f8ca9..9d9b87d 100644
--- a/arch/parisc/include/asm/atomic.h
+++ b/arch/parisc/include/asm/atomic.h
@@ -273,6 +273,16 @@ static inline long atomic64_dec_if_positive(atomic64_t *v)
#define SMP_CACHE_BYTES L1_CACHE_BYTES
diff --git a/arch/parisc/include/asm/elf.h b/arch/parisc/include/asm/elf.h
-index 3391d06..c23a2cc 100644
+index 78c9fd3..42fa66a 100644
--- a/arch/parisc/include/asm/elf.h
+++ b/arch/parisc/include/asm/elf.h
@@ -342,6 +342,13 @@ struct pt_regs; /* forward declaration... */
instruction set this CPU supports. This could be done in user space,
but it's not easy, and we've already done it here. */
diff --git a/arch/parisc/include/asm/pgalloc.h b/arch/parisc/include/asm/pgalloc.h
-index d174372..f27fe5c 100644
+index 3a08eae..08fef28 100644
--- a/arch/parisc/include/asm/pgalloc.h
+++ b/arch/parisc/include/asm/pgalloc.h
@@ -61,6 +61,11 @@ static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgd, pmd_t *pmd)
static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address)
{
pmd_t *pmd = (pmd_t *)__get_free_pages(GFP_KERNEL|__GFP_REPEAT,
-@@ -96,6 +101,7 @@ static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd)
+@@ -72,7 +77,7 @@ static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address)
+
+ static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd)
+ {
+- if(pmd_flag(*pmd) & PxD_FLAG_ATTACHED)
++ if (pmd_flag(*pmd) & PxD_FLAG_ATTACHED) {
+ /*
+ * This is the permanent pmd attached to the pgd;
+ * cannot free it.
+@@ -81,6 +86,7 @@ static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd)
+ */
+ mm_inc_nr_pmds(mm);
+ return;
++ }
+ free_pages((unsigned long)pmd, PMD_ORDER);
+ }
+
+@@ -96,6 +102,7 @@ static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd)
#define pmd_alloc_one(mm, addr) ({ BUG(); ((pmd_t *)2); })
#define pmd_free(mm, x) do { } while (0)
#define pgd_populate(mm, pmd, pte) BUG()
#endif
diff --git a/arch/parisc/include/asm/pgtable.h b/arch/parisc/include/asm/pgtable.h
-index 15207b9..3209e65 100644
+index 0a18375..d613939 100644
--- a/arch/parisc/include/asm/pgtable.h
+++ b/arch/parisc/include/asm/pgtable.h
-@@ -215,6 +215,17 @@ extern void purge_tlb_entries(struct mm_struct *, unsigned long);
+@@ -213,6 +213,17 @@ extern void purge_tlb_entries(struct mm_struct *, unsigned long);
#define PAGE_EXECREAD __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_READ | _PAGE_EXEC |_PAGE_ACCESSED)
#define PAGE_COPY PAGE_EXECREAD
#define PAGE_RWX __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_READ | _PAGE_WRITE | _PAGE_EXEC |_PAGE_ACCESSED)
DEBUGP("register_unwind_table(), sect = %d at 0x%p - 0x%p (gp=0x%lx)\n",
me->arch.unwind_section, table, end, gp);
diff --git a/arch/parisc/kernel/sys_parisc.c b/arch/parisc/kernel/sys_parisc.c
-index e1ffea2..46ed66e 100644
+index 5aba01a..47cdd5a 100644
--- a/arch/parisc/kernel/sys_parisc.c
+++ b/arch/parisc/kernel/sys_parisc.c
-@@ -89,6 +89,7 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr,
+@@ -92,6 +92,7 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr,
unsigned long task_size = TASK_SIZE;
int do_color_align, last_mmap;
struct vm_unmapped_area_info info;
if (len > task_size)
return -ENOMEM;
-@@ -106,6 +107,10 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr,
+@@ -109,6 +110,10 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr,
goto found_addr;
}
if (addr) {
if (do_color_align && last_mmap)
addr = COLOR_ALIGN(addr, last_mmap, pgoff);
-@@ -124,6 +129,7 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr,
+@@ -127,6 +132,7 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr,
info.high_limit = mmap_upper_limit();
info.align_mask = last_mmap ? (PAGE_MASK & (SHM_COLOUR - 1)) : 0;
info.align_offset = shared_align_offset(last_mmap, pgoff);
addr = vm_unmapped_area(&info);
found_addr:
-@@ -143,6 +149,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
+@@ -146,6 +152,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
unsigned long addr = addr0;
int do_color_align, last_mmap;
struct vm_unmapped_area_info info;
#ifdef CONFIG_64BIT
/* This should only ever run for 32-bit processes. */
-@@ -167,6 +174,10 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
+@@ -170,6 +177,10 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
}
/* requesting a specific address */
if (addr) {
if (do_color_align && last_mmap)
addr = COLOR_ALIGN(addr, last_mmap, pgoff);
-@@ -184,6 +195,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
+@@ -187,6 +198,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
info.high_limit = mm->mmap_base;
info.align_mask = last_mmap ? (PAGE_MASK & (SHM_COLOUR - 1)) : 0;
info.align_offset = shared_align_offset(last_mmap, pgoff);
addr = vm_unmapped_area(&info);
if (!(addr & ~PAGE_MASK))
goto found_addr;
-@@ -249,6 +261,13 @@ void arch_pick_mmap_layout(struct mm_struct *mm)
+@@ -252,6 +264,13 @@ void arch_pick_mmap_layout(struct mm_struct *mm)
mm->mmap_legacy_base = mmap_legacy_base();
mm->mmap_base = mmap_upper_limit();
/*
* If for any reason at all we couldn't handle the fault, make
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
-index 22b0940..309f790 100644
+index 190cc48..48439ce 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
-@@ -409,6 +409,7 @@ config PPC64_SUPPORTS_MEMORY_FAILURE
+@@ -413,6 +413,7 @@ config PPC64_SUPPORTS_MEMORY_FAILURE
config KEXEC
bool "kexec system call"
depends on (PPC_BOOK3S || FSL_BOOKE || (44x && !SMP))
#define smp_load_acquire(p) \
diff --git a/arch/powerpc/include/asm/cache.h b/arch/powerpc/include/asm/cache.h
-index 34a05a1..a1f2c67 100644
+index 0dc42c5..b80a3a1 100644
--- a/arch/powerpc/include/asm/cache.h
+++ b/arch/powerpc/include/asm/cache.h
@@ -4,6 +4,7 @@
#define SMP_CACHE_BYTES L1_CACHE_BYTES
diff --git a/arch/powerpc/include/asm/elf.h b/arch/powerpc/include/asm/elf.h
-index 57d289a..b36c98c 100644
+index ee46ffe..b36c98c 100644
--- a/arch/powerpc/include/asm/elf.h
+++ b/arch/powerpc/include/asm/elf.h
@@ -30,6 +30,18 @@
#define ELF_CORE_EFLAGS (is_elf2_task() ? 2 : 0)
/*
-@@ -128,10 +140,6 @@ extern int arch_setup_additional_pages(struct linux_binprm *bprm,
- (0x7ff >> (PAGE_SHIFT - 12)) : \
- (0x3ffff >> (PAGE_SHIFT - 12)))
-
--extern unsigned long arch_randomize_brk(struct mm_struct *mm);
--#define arch_randomize_brk arch_randomize_brk
--
--
- #ifdef CONFIG_SPU_BASE
- /* Notes used in ET_CORE. Note name is "SPU/<fd>/<filename>". */
- #define NT_SPU 1
diff --git a/arch/powerpc/include/asm/exec.h b/arch/powerpc/include/asm/exec.h
index 8196e9c..d83a9f3 100644
--- a/arch/powerpc/include/asm/exec.h
static inline void pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmd,
pte_t *pte)
diff --git a/arch/powerpc/include/asm/pgtable.h b/arch/powerpc/include/asm/pgtable.h
-index 9835ac4..900430f 100644
+index 11a3863..108f194 100644
--- a/arch/powerpc/include/asm/pgtable.h
+++ b/arch/powerpc/include/asm/pgtable.h
@@ -2,6 +2,7 @@
#define DSISR_ISSTORE 0x02000000 /* access was a store */
#define DSISR_DABRMATCH 0x00400000 /* hit data breakpoint */
diff --git a/arch/powerpc/include/asm/smp.h b/arch/powerpc/include/asm/smp.h
-index d607df5..08dc9ae 100644
+index 825663c..f9e9134 100644
--- a/arch/powerpc/include/asm/smp.h
+++ b/arch/powerpc/include/asm/smp.h
@@ -51,7 +51,7 @@ struct smp_ops_t {
: "r"(&rw->lock)
: "cr0", "xer", "memory");
diff --git a/arch/powerpc/include/asm/thread_info.h b/arch/powerpc/include/asm/thread_info.h
-index 7248979..80b75de 100644
+index 7efee4a..48d47cc 100644
--- a/arch/powerpc/include/asm/thread_info.h
+++ b/arch/powerpc/include/asm/thread_info.h
-@@ -103,6 +103,8 @@ static inline struct thread_info *current_thread_info(void)
+@@ -101,6 +101,8 @@ static inline struct thread_info *current_thread_info(void)
#if defined(CONFIG_PPC64)
#define TIF_ELF2ABI 18 /* function descriptors must die! */
#endif
/* as above, but as bit values */
#define _TIF_SYSCALL_TRACE (1<<TIF_SYSCALL_TRACE)
-@@ -121,9 +123,10 @@ static inline struct thread_info *current_thread_info(void)
+@@ -119,9 +121,10 @@ static inline struct thread_info *current_thread_info(void)
#define _TIF_SYSCALL_TRACEPOINT (1<<TIF_SYSCALL_TRACEPOINT)
#define _TIF_EMULATE_STACK_STORE (1<<TIF_EMULATE_STACK_STORE)
#define _TIF_NOHZ (1<<TIF_NOHZ)
static inline unsigned long clear_user(void __user *addr, unsigned long size)
diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile
-index 502cf69..53936a1 100644
+index c1ebbda..fd8a98d 100644
--- a/arch/powerpc/kernel/Makefile
+++ b/arch/powerpc/kernel/Makefile
@@ -15,6 +15,11 @@ CFLAGS_prom_init.o += -fPIC
sechdrs, module);
#endif
diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
-index b4cc7be..1fe8bb3 100644
+index febb50d..bb10020 100644
--- a/arch/powerpc/kernel/process.c
+++ b/arch/powerpc/kernel/process.c
@@ -1036,8 +1036,8 @@ void show_regs(struct pt_regs * regs)
#endif
show_stack(current, (unsigned long *) regs->gpr[1]);
if (!user_mode(regs))
-@@ -1549,10 +1549,10 @@ void show_stack(struct task_struct *tsk, unsigned long *stack)
+@@ -1554,10 +1554,10 @@ void show_stack(struct task_struct *tsk, unsigned long *stack)
newsp = stack[0];
ip = stack[STACK_FRAME_LR_SAVE];
if (!firstframe || ip != lr) {
(void *)current->ret_stack[curr_frame].ret);
curr_frame--;
}
-@@ -1572,7 +1572,7 @@ void show_stack(struct task_struct *tsk, unsigned long *stack)
+@@ -1577,7 +1577,7 @@ void show_stack(struct task_struct *tsk, unsigned long *stack)
struct pt_regs *regs = (struct pt_regs *)
(sp + STACK_FRAME_OVERHEAD);
lr = regs->link;
regs->trap, (void *)regs->nip, (void *)lr);
firstframe = 1;
}
-@@ -1608,49 +1608,3 @@ void notrace __ppc64_runlatch_off(void)
+@@ -1613,49 +1613,3 @@ void notrace __ppc64_runlatch_off(void)
mtspr(SPRN_CTRLT, ctrl);
}
#endif /* CONFIG_PPC64 */
rc = vdso_base;
goto fail_mmapsem;
diff --git a/arch/powerpc/kvm/powerpc.c b/arch/powerpc/kvm/powerpc.c
-index 27c0fac..6ec4a32 100644
+index ac3ddf1..9a54c76 100644
--- a/arch/powerpc/kvm/powerpc.c
+++ b/arch/powerpc/kvm/powerpc.c
-@@ -1402,7 +1402,7 @@ void kvmppc_init_lpid(unsigned long nr_lpids_param)
+@@ -1403,7 +1403,7 @@ void kvmppc_init_lpid(unsigned long nr_lpids_param)
}
EXPORT_SYMBOL_GPL(kvmppc_init_lpid);
goto bail;
}
diff --git a/arch/powerpc/mm/mmap.c b/arch/powerpc/mm/mmap.c
-index cb8bdbe..cde4bc7 100644
+index 0f0502e..bc3e7a3 100644
--- a/arch/powerpc/mm/mmap.c
+++ b/arch/powerpc/mm/mmap.c
-@@ -53,10 +53,14 @@ static inline int mmap_is_legacy(void)
- return sysctl_legacy_va_layout;
- }
-
--static unsigned long mmap_rnd(void)
-+static unsigned long mmap_rnd(struct mm_struct *mm)
+@@ -86,6 +86,10 @@ void arch_pick_mmap_layout(struct mm_struct *mm)
{
- unsigned long rnd = 0;
+ unsigned long random_factor = 0UL;
+#ifdef CONFIG_PAX_RANDMMAP
+ if (!(mm->pax_flags & MF_PAX_RANDMMAP))
+#endif
+
- if (current->flags & PF_RANDOMIZE) {
- /* 8MB for 32bit, 1GB for 64bit */
- if (is_32bit_task())
-@@ -67,7 +71,7 @@ static unsigned long mmap_rnd(void)
- return rnd << PAGE_SHIFT;
- }
-
--static inline unsigned long mmap_base(void)
-+static inline unsigned long mmap_base(struct mm_struct *mm)
- {
- unsigned long gap = rlimit(RLIMIT_STACK);
-
-@@ -76,7 +80,7 @@ static inline unsigned long mmap_base(void)
- else if (gap > MAX_GAP)
- gap = MAX_GAP;
+ if (current->flags & PF_RANDOMIZE)
+ random_factor = arch_mmap_rnd();
-- return PAGE_ALIGN(TASK_SIZE - gap - mmap_rnd());
-+ return PAGE_ALIGN(TASK_SIZE - gap - mmap_rnd(mm));
- }
-
- /*
-@@ -91,9 +95,21 @@ void arch_pick_mmap_layout(struct mm_struct *mm)
+@@ -95,9 +99,21 @@ void arch_pick_mmap_layout(struct mm_struct *mm)
*/
if (mmap_is_legacy()) {
mm->mmap_base = TASK_UNMAPPED_BASE;
+
mm->get_unmapped_area = arch_get_unmapped_area;
} else {
-- mm->mmap_base = mmap_base();
-+ mm->mmap_base = mmap_base(mm);
+ mm->mmap_base = mmap_base(random_factor);
+
+#ifdef CONFIG_PAX_RANDMMAP
+ if (mm->pax_flags & MF_PAX_RANDMMAP)
struct spu_context *ctx = vma->vm_file->private_data;
unsigned long offset = address - vma->vm_start;
diff --git a/arch/s390/include/asm/atomic.h b/arch/s390/include/asm/atomic.h
-index fa934fe..c296056 100644
+index adbe380..adb7516 100644
--- a/arch/s390/include/asm/atomic.h
+++ b/arch/s390/include/asm/atomic.h
-@@ -412,4 +412,14 @@ static inline long long atomic64_dec_if_positive(atomic64_t *v)
+@@ -317,4 +317,14 @@ static inline long long atomic64_dec_if_positive(atomic64_t *v)
#define atomic64_dec_and_test(_v) (atomic64_sub_return(1, _v) == 0)
#define atomic64_inc_not_zero(v) atomic64_add_unless((v), 1, 0)
#define __read_mostly __attribute__((__section__(".data..read_mostly")))
diff --git a/arch/s390/include/asm/elf.h b/arch/s390/include/asm/elf.h
-index c9c875d..b4b0e4c 100644
+index 3ad48f2..64cc6f3 100644
--- a/arch/s390/include/asm/elf.h
+++ b/arch/s390/include/asm/elf.h
-@@ -163,8 +163,14 @@ extern unsigned int vdso_enabled;
- the loader. We need to make sure that it is out of the way of the program
- that it will "exec", and that there is sufficient room for the brk. */
+@@ -163,6 +163,13 @@ extern unsigned int vdso_enabled;
+ (STACK_TOP / 3 * 2) : \
+ (STACK_TOP / 3 * 2) & ~((1UL << 32) - 1))
--extern unsigned long randomize_et_dyn(void);
--#define ELF_ET_DYN_BASE randomize_et_dyn()
-+#define ELF_ET_DYN_BASE (STACK_TOP / 3 * 2)
-+
+#ifdef CONFIG_PAX_ASLR
+#define PAX_ELF_ET_DYN_BASE (test_thread_flag(TIF_31BIT) ? 0x10000UL : 0x80000000UL)
+
+#define PAX_DELTA_MMAP_LEN (test_thread_flag(TIF_31BIT) ? 15 : 26)
+#define PAX_DELTA_STACK_LEN (test_thread_flag(TIF_31BIT) ? 15 : 26)
+#endif
-
++
/* This yields a mask that user programs can use to figure out what
instruction set this CPU supports. */
-@@ -225,9 +231,6 @@ struct linux_binprm;
- #define ARCH_HAS_SETUP_ADDITIONAL_PAGES 1
- int arch_setup_additional_pages(struct linux_binprm *, int);
-
--extern unsigned long arch_randomize_brk(struct mm_struct *mm);
--#define arch_randomize_brk arch_randomize_brk
--
- void *fill_cpu_elf_notes(void *ptr, struct save_area *sa, __vector128 *vxrs);
- #endif
diff --git a/arch/s390/include/asm/exec.h b/arch/s390/include/asm/exec.h
index c4a93d6..4d2a9b4 100644
--- a/arch/s390/include/asm/exec.h
#endif /* __ASM_EXEC_H */
diff --git a/arch/s390/include/asm/uaccess.h b/arch/s390/include/asm/uaccess.h
-index cd4c68e..6764641 100644
+index d64a7a6..0830329 100644
--- a/arch/s390/include/asm/uaccess.h
+++ b/arch/s390/include/asm/uaccess.h
@@ -59,6 +59,7 @@ static inline int __range_ok(unsigned long addr, unsigned long size)
return n;
}
diff --git a/arch/s390/kernel/module.c b/arch/s390/kernel/module.c
-index 2ca9586..55682a9 100644
+index 0c1a679..e1df357 100644
--- a/arch/s390/kernel/module.c
+++ b/arch/s390/kernel/module.c
-@@ -165,11 +165,11 @@ int module_frob_arch_sections(Elf_Ehdr *hdr, Elf_Shdr *sechdrs,
+@@ -159,11 +159,11 @@ int module_frob_arch_sections(Elf_Ehdr *hdr, Elf_Shdr *sechdrs,
/* Increase core size by size of got & plt and set start
offsets for got and plt. */
return 0;
}
-@@ -285,7 +285,7 @@ static int apply_rela(Elf_Rela *rela, Elf_Addr base, Elf_Sym *symtab,
+@@ -279,7 +279,7 @@ static int apply_rela(Elf_Rela *rela, Elf_Addr base, Elf_Sym *symtab,
if (info->got_initialized == 0) {
Elf_Addr *gotent;
info->got_offset;
*gotent = val;
info->got_initialized = 1;
-@@ -308,7 +308,7 @@ static int apply_rela(Elf_Rela *rela, Elf_Addr base, Elf_Sym *symtab,
+@@ -302,7 +302,7 @@ static int apply_rela(Elf_Rela *rela, Elf_Addr base, Elf_Sym *symtab,
rc = apply_rela_bits(loc, val, 0, 64, 0);
else if (r_type == R_390_GOTENT ||
r_type == R_390_GOTPLTENT) {
rc = apply_rela_bits(loc, val, 1, 32, 1);
}
break;
-@@ -321,7 +321,7 @@ static int apply_rela(Elf_Rela *rela, Elf_Addr base, Elf_Sym *symtab,
+@@ -315,7 +315,7 @@ static int apply_rela(Elf_Rela *rela, Elf_Addr base, Elf_Sym *symtab,
case R_390_PLTOFF64: /* 16 bit offset from GOT to PLT. */
if (info->plt_initialized == 0) {
unsigned int *ip;
- ip = me->module_core + me->arch.plt_offset +
+ ip = me->module_core_rx + me->arch.plt_offset +
info->plt_offset;
- #ifndef CONFIG_64BIT
- ip[0] = 0x0d105810; /* basr 1,0; l 1,6(1); br 1 */
-@@ -346,7 +346,7 @@ static int apply_rela(Elf_Rela *rela, Elf_Addr base, Elf_Sym *symtab,
+ ip[0] = 0x0d10e310; /* basr 1,0; lg 1,10(1); br 1 */
+ ip[1] = 0x100a0004;
+@@ -334,7 +334,7 @@ static int apply_rela(Elf_Rela *rela, Elf_Addr base, Elf_Sym *symtab,
val - loc + 0xffffUL < 0x1ffffeUL) ||
(r_type == R_390_PLT32DBL &&
val - loc + 0xffffffffULL < 0x1fffffffeULL)))
me->arch.plt_offset +
info->plt_offset;
val += rela->r_addend - loc;
-@@ -368,7 +368,7 @@ static int apply_rela(Elf_Rela *rela, Elf_Addr base, Elf_Sym *symtab,
+@@ -356,7 +356,7 @@ static int apply_rela(Elf_Rela *rela, Elf_Addr base, Elf_Sym *symtab,
case R_390_GOTOFF32: /* 32 bit offset to GOT. */
case R_390_GOTOFF64: /* 64 bit offset to GOT. */
val = val + rela->r_addend -
if (r_type == R_390_GOTOFF16)
rc = apply_rela_bits(loc, val, 0, 16, 0);
else if (r_type == R_390_GOTOFF32)
-@@ -378,7 +378,7 @@ static int apply_rela(Elf_Rela *rela, Elf_Addr base, Elf_Sym *symtab,
+@@ -366,7 +366,7 @@ static int apply_rela(Elf_Rela *rela, Elf_Addr base, Elf_Sym *symtab,
break;
case R_390_GOTPC: /* 32 bit PC relative offset to GOT. */
case R_390_GOTPCDBL: /* 32 bit PC rel. off. to GOT shifted by 1. */
if (r_type == R_390_GOTPC)
rc = apply_rela_bits(loc, val, 1, 32, 0);
diff --git a/arch/s390/kernel/process.c b/arch/s390/kernel/process.c
-index 13fc097..84d375f 100644
+index dc5edc2..7d34ae3 100644
--- a/arch/s390/kernel/process.c
+++ b/arch/s390/kernel/process.c
-@@ -227,27 +227,3 @@ unsigned long get_wchan(struct task_struct *p)
+@@ -200,27 +200,3 @@ unsigned long get_wchan(struct task_struct *p)
}
return 0;
}
- return (ret > mm->brk) ? ret : mm->brk;
-}
diff --git a/arch/s390/mm/mmap.c b/arch/s390/mm/mmap.c
-index 179a2c2..371e85c 100644
+index 6e552af..3e608a1 100644
--- a/arch/s390/mm/mmap.c
+++ b/arch/s390/mm/mmap.c
-@@ -204,9 +204,21 @@ void arch_pick_mmap_layout(struct mm_struct *mm)
- */
- if (mmap_is_legacy()) {
- mm->mmap_base = mmap_base_legacy();
-+
-+#ifdef CONFIG_PAX_RANDMMAP
-+ if (mm->pax_flags & MF_PAX_RANDMMAP)
-+ mm->mmap_base += mm->delta_mmap;
-+#endif
-+
- mm->get_unmapped_area = arch_get_unmapped_area;
- } else {
- mm->mmap_base = mmap_base();
-+
+@@ -239,6 +239,10 @@ void arch_pick_mmap_layout(struct mm_struct *mm)
+ {
+ unsigned long random_factor = 0UL;
+
+#ifdef CONFIG_PAX_RANDMMAP
-+ if (mm->pax_flags & MF_PAX_RANDMMAP)
-+ mm->mmap_base -= mm->delta_mmap + mm->delta_stack;
++ if (!(mm->pax_flags & MF_PAX_RANDMMAP))
+#endif
+
- mm->get_unmapped_area = arch_get_unmapped_area_topdown;
- }
- }
-@@ -279,9 +291,21 @@ void arch_pick_mmap_layout(struct mm_struct *mm)
+ if (current->flags & PF_RANDOMIZE)
+ random_factor = arch_mmap_rnd();
+
+@@ -248,9 +252,21 @@ void arch_pick_mmap_layout(struct mm_struct *mm)
*/
if (mmap_is_legacy()) {
- mm->mmap_base = mmap_base_legacy();
+ mm->mmap_base = mmap_base_legacy(random_factor);
+
+#ifdef CONFIG_PAX_RANDMMAP
+ if (mm->pax_flags & MF_PAX_RANDMMAP)
+
mm->get_unmapped_area = s390_get_unmapped_area;
} else {
- mm->mmap_base = mmap_base();
+ mm->mmap_base = mmap_base(random_factor);
+
+#ifdef CONFIG_PAX_RANDMMAP
+ if (mm->pax_flags & MF_PAX_RANDMMAP)
unsigned long mask, tmp1, tmp2, result;
diff --git a/arch/sparc/include/asm/thread_info_32.h b/arch/sparc/include/asm/thread_info_32.h
-index fd7bd0a..2e2fa7a 100644
+index 229475f..2fca9163 100644
--- a/arch/sparc/include/asm/thread_info_32.h
+++ b/arch/sparc/include/asm/thread_info_32.h
-@@ -47,6 +47,7 @@ struct thread_info {
+@@ -48,6 +48,7 @@ struct thread_info {
struct reg_window32 reg_window[NSWINS]; /* align for ldd! */
unsigned long rwbuf_stkptrs[NSWINS];
unsigned long w_saved;
/*
diff --git a/arch/sparc/include/asm/thread_info_64.h b/arch/sparc/include/asm/thread_info_64.h
-index ff45516..73001ab 100644
+index bde5982..9cbb56d 100644
--- a/arch/sparc/include/asm/thread_info_64.h
+++ b/arch/sparc/include/asm/thread_info_64.h
-@@ -61,6 +61,8 @@ struct thread_info {
+@@ -59,6 +59,8 @@ struct thread_info {
struct pt_regs *kern_una_regs;
unsigned int kern_una_insn;
unsigned long fpregs[(7 * 256) / sizeof(unsigned long)]
__attribute__ ((aligned(64)));
};
-@@ -184,12 +186,13 @@ register struct thread_info *current_thread_info_reg asm("g6");
+@@ -180,12 +182,13 @@ register struct thread_info *current_thread_info_reg asm("g6");
#define TIF_NEED_RESCHED 3 /* rescheduling necessary */
/* flag bit 4 is available */
#define TIF_UNALIGNED 5 /* allowed to do unaligned accesses */
/* NOTE: Thread flags >= 12 should be ones we have no interest
* in using in assembly, else we can't use the mask as
* an immediate value in instructions such as andcc.
-@@ -209,12 +212,17 @@ register struct thread_info *current_thread_info_reg asm("g6");
+@@ -205,12 +208,17 @@ register struct thread_info *current_thread_info_reg asm("g6");
#define _TIF_SYSCALL_AUDIT (1<<TIF_SYSCALL_AUDIT)
#define _TIF_SYSCALL_TRACEPOINT (1<<TIF_SYSCALL_TRACEPOINT)
#define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG)
if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT)))
diff --git a/arch/sparc/kernel/smp_64.c b/arch/sparc/kernel/smp_64.c
-index 61139d9..c1a5f28 100644
+index 19cd08d..ff21e99 100644
--- a/arch/sparc/kernel/smp_64.c
+++ b/arch/sparc/kernel/smp_64.c
-@@ -887,7 +887,7 @@ void smp_flush_dcache_page_impl(struct page *page, int cpu)
+@@ -891,7 +891,7 @@ void smp_flush_dcache_page_impl(struct page *page, int cpu)
return;
#ifdef CONFIG_DEBUG_DCFLUSH
#endif
this_cpu = get_cpu();
-@@ -911,7 +911,7 @@ void smp_flush_dcache_page_impl(struct page *page, int cpu)
+@@ -915,7 +915,7 @@ void smp_flush_dcache_page_impl(struct page *page, int cpu)
xcall_deliver(data0, __pa(pg_addr),
(u64) pg_addr, cpumask_of(cpu));
#ifdef CONFIG_DEBUG_DCFLUSH
#endif
}
}
-@@ -930,7 +930,7 @@ void flush_dcache_page_all(struct mm_struct *mm, struct page *page)
+@@ -934,7 +934,7 @@ void flush_dcache_page_all(struct mm_struct *mm, struct page *page)
preempt_disable();
#ifdef CONFIG_DEBUG_DCFLUSH
#endif
data0 = 0;
pg_addr = page_address(page);
-@@ -947,7 +947,7 @@ void flush_dcache_page_all(struct mm_struct *mm, struct page *page)
+@@ -951,7 +951,7 @@ void flush_dcache_page_all(struct mm_struct *mm, struct page *page)
xcall_deliver(data0, __pa(pg_addr),
(u64) pg_addr, cpu_online_mask);
#ifdef CONFIG_DEBUG_DCFLUSH
2:
diff --git a/arch/sparc/kernel/traps_32.c b/arch/sparc/kernel/traps_32.c
-index 6fd386c5..6907d81 100644
+index 4f21df7..0a374da 100644
--- a/arch/sparc/kernel/traps_32.c
+++ b/arch/sparc/kernel/traps_32.c
@@ -44,6 +44,8 @@ static void instruction_dump(unsigned long *pc)
}
diff --git a/arch/sparc/kernel/traps_64.c b/arch/sparc/kernel/traps_64.c
-index 0e69974..0c15a6e 100644
+index d21cd62..00a4a17 100644
--- a/arch/sparc/kernel/traps_64.c
+++ b/arch/sparc/kernel/traps_64.c
@@ -79,7 +79,7 @@ static void dump_tl1_traplog(struct tl1_traplog *p)
pte_t *huge_pte_alloc(struct mm_struct *mm,
diff --git a/arch/sparc/mm/init_64.c b/arch/sparc/mm/init_64.c
-index 4ca0d6b..e89bca1 100644
+index 559cb74..9e5f097 100644
--- a/arch/sparc/mm/init_64.c
+++ b/arch/sparc/mm/init_64.c
-@@ -186,9 +186,9 @@ unsigned long sparc64_kern_sec_context __read_mostly;
+@@ -187,9 +187,9 @@ unsigned long sparc64_kern_sec_context __read_mostly;
int num_kernel_image_mappings;
#ifdef CONFIG_DEBUG_DCFLUSH
#endif
#endif
-@@ -196,7 +196,7 @@ inline void flush_dcache_page_impl(struct page *page)
+@@ -197,7 +197,7 @@ inline void flush_dcache_page_impl(struct page *page)
{
BUG_ON(tlb_type == hypervisor);
#ifdef CONFIG_DEBUG_DCFLUSH
#endif
#ifdef DCACHE_ALIASING_POSSIBLE
-@@ -468,10 +468,10 @@ void mmu_info(struct seq_file *m)
+@@ -469,10 +469,10 @@ void mmu_info(struct seq_file *m)
#ifdef CONFIG_DEBUG_DCFLUSH
seq_printf(m, "DCPageFlushes\t: %d\n",
#endif /* CONFIG_DEBUG_DCFLUSH */
}
diff --git a/arch/tile/Kconfig b/arch/tile/Kconfig
-index 7cca418..53fc030 100644
+index a07e31b..85c9003 100644
--- a/arch/tile/Kconfig
+++ b/arch/tile/Kconfig
-@@ -192,6 +192,7 @@ source "kernel/Kconfig.hz"
+@@ -198,6 +198,7 @@ source "kernel/Kconfig.hz"
config KEXEC
bool "kexec system call"
/*
diff --git a/arch/um/Makefile b/arch/um/Makefile
-index e4b1a96..16162f8 100644
+index 17d4460..9d74338e3de4 100644
--- a/arch/um/Makefile
+++ b/arch/um/Makefile
@@ -72,6 +72,10 @@ USER_CFLAGS = $(patsubst $(KERNEL_DEFINES),,$(patsubst -D__KERNEL__,,\
+endif
+
#This will adjust *FLAGS accordingly to the platform.
- include $(srctree)/$(ARCH_DIR)/Makefile-os-$(OS)
+ include $(ARCH_DIR)/Makefile-os-$(OS)
diff --git a/arch/um/include/asm/cache.h b/arch/um/include/asm/cache.h
index 19e1bdd..3665b77 100644
#ifdef CONFIG_64BIT
#define set_pud(pudptr, pudval) set_64bit((u64 *) (pudptr), pud_val(pudval))
diff --git a/arch/um/kernel/process.c b/arch/um/kernel/process.c
-index f17bca8..48adb87 100644
+index 68b9119..f72353c 100644
--- a/arch/um/kernel/process.c
+++ b/arch/um/kernel/process.c
-@@ -356,22 +356,6 @@ int singlestepping(void * t)
+@@ -345,22 +345,6 @@ int singlestepping(void * t)
return 2;
}
/*
* Memory returned by kmalloc() may be used for DMA, so we must make
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
-index b7d31ca..9481ec5 100644
+index 226d569..d420edc 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
-@@ -132,7 +132,7 @@ config X86
+@@ -32,7 +32,7 @@ config X86
+ select HAVE_AOUT if X86_32
+ select HAVE_UNSTABLE_SCHED_CLOCK
+ select ARCH_SUPPORTS_NUMA_BALANCING if X86_64
+- select ARCH_SUPPORTS_INT128 if X86_64
++ select ARCH_SUPPORTS_INT128 if X86_64 && !PAX_SIZE_OVERFLOW
+ select HAVE_IDE
+ select HAVE_OPROFILE
+ select HAVE_PCSPKR_PLATFORM
+@@ -134,7 +134,7 @@ config X86
select RTC_LIB
select HAVE_DEBUG_STACKOVERFLOW
select HAVE_IRQ_EXIT_ON_IRQ_STACK if X86_64
config ARCH_HWEIGHT_CFLAGS
string
-@@ -632,6 +632,7 @@ config SCHED_OMIT_FRAME_POINTER
+@@ -638,6 +638,7 @@ config SCHED_OMIT_FRAME_POINTER
menuconfig HYPERVISOR_GUEST
bool "Linux guest support"
---help---
Say Y here to enable options for running Linux under various hyper-
visors. This option enables basic hypervisor detection and platform
-@@ -1013,6 +1014,7 @@ config VM86
+@@ -1005,6 +1006,7 @@ config VM86
config X86_16BIT
bool "Enable support for 16-bit segments" if EXPERT
default y
---help---
This option is required by programs like Wine to run 16-bit
-@@ -1186,6 +1188,7 @@ choice
+@@ -1178,6 +1180,7 @@ choice
config NOHIGHMEM
bool "off"
---help---
Linux can use up to 64 Gigabytes of physical memory on x86 systems.
However, the address space of 32-bit x86 processors is only 4
-@@ -1222,6 +1225,7 @@ config NOHIGHMEM
+@@ -1214,6 +1217,7 @@ config NOHIGHMEM
config HIGHMEM4G
bool "4GB"
---help---
Select this if you have a 32-bit processor and between 1 and 4
gigabytes of physical RAM.
-@@ -1274,7 +1278,7 @@ config PAGE_OFFSET
+@@ -1266,7 +1270,7 @@ config PAGE_OFFSET
hex
default 0xB0000000 if VMSPLIT_3G_OPT
default 0x80000000 if VMSPLIT_2G
default 0x40000000 if VMSPLIT_1G
default 0xC0000000
depends on X86_32
-@@ -1715,6 +1719,7 @@ source kernel/Kconfig.hz
+@@ -1717,6 +1721,7 @@ source kernel/Kconfig.hz
config KEXEC
bool "kexec system call"
---help---
kexec is a system call that implements the ability to shutdown your
current kernel, and to start another kernel. It is like a reboot
-@@ -1900,7 +1905,9 @@ config X86_NEED_RELOCS
+@@ -1899,7 +1904,9 @@ config X86_NEED_RELOCS
config PHYSICAL_ALIGN
hex "Alignment value to which kernel should be aligned"
range 0x2000 0x1000000 if X86_32
range 0x200000 0x1000000 if X86_64
---help---
-@@ -1983,6 +1990,7 @@ config COMPAT_VDSO
+@@ -1982,6 +1989,7 @@ config COMPAT_VDSO
def_bool n
prompt "Disable the 32-bit vDSO (needed for glibc 2.3.3)"
depends on X86_32 || IA32_EMULATION
---help---
Certain buggy versions of glibc will crash if they are
presented with a 32-bit vDSO that is not mapped at the address
+@@ -2046,6 +2054,22 @@ config CMDLINE_OVERRIDE
+ This is used to work around broken boot loaders. This should
+ be set to 'N' under normal conditions.
+
++config DEFAULT_MODIFY_LDT_SYSCALL
++ bool "Allow userspace to modify the LDT by default"
++ default y
++
++ ---help---
++ Modifying the LDT (Local Descriptor Table) may be needed to run a
++ 16-bit or segmented code such as Dosemu or Wine. This is done via
++ a system call which is not needed to run portable applications,
++ and which can sometimes be abused to exploit some weaknesses of
++ the architecture, opening new vulnerabilities.
++
++ For this reason this option allows one to enable or disable the
++ feature at runtime. It is recommended to say 'N' here to leave
++ the system protected, and to enable it at runtime only if needed
++ by setting the sys.kernel.modify_ldt sysctl.
++
+ source "kernel/livepatch/Kconfig"
+
+ endmenu
diff --git a/arch/x86/Kconfig.cpu b/arch/x86/Kconfig.cpu
index 6983314..54ad7e8 100644
--- a/arch/x86/Kconfig.cpu
config X86_MINIMUM_CPU_FAMILY
int
diff --git a/arch/x86/Kconfig.debug b/arch/x86/Kconfig.debug
-index 20028da..88d5946 100644
+index 72484a6..83a4411 100644
--- a/arch/x86/Kconfig.debug
+++ b/arch/x86/Kconfig.debug
-@@ -93,7 +93,7 @@ config EFI_PGT_DUMP
+@@ -89,7 +89,7 @@ config EFI_PGT_DUMP
config DEBUG_RODATA
bool "Write protect kernel read-only data structures"
default y
---help---
Mark the kernel read-only data as write-protected in the pagetables,
in order to catch accidental (and incorrect) writes to such const
-@@ -111,7 +111,7 @@ config DEBUG_RODATA_TEST
+@@ -107,7 +107,7 @@ config DEBUG_RODATA_TEST
config DEBUG_SET_MODULE_RONX
bool "Set loadable kernel module data as NX and text as RO"
This option helps catch unintended modifications to loadable
kernel module's text and read-only data. It also prevents execution
diff --git a/arch/x86/Makefile b/arch/x86/Makefile
-index 5ba2d9c..41e5bb6 100644
+index 2fda005..2c72d40 100644
--- a/arch/x86/Makefile
+++ b/arch/x86/Makefile
@@ -65,9 +65,6 @@ ifeq ($(CONFIG_X86_32),y)
# CPU-specific tuning. Anything which can be shared with UML should go here.
- include $(srctree)/arch/x86/Makefile_32.cpu
+ include arch/x86/Makefile_32.cpu
KBUILD_CFLAGS += $(cflags-y)
-
- # temporary until string.h is fixed
.quad 0x0000000000000000 /* TS continued */
efi_gdt64_end:
diff --git a/arch/x86/boot/compressed/head_32.S b/arch/x86/boot/compressed/head_32.S
-index 1d7fbbc..36ecd58 100644
+index 8ef964d..fcfb8aa 100644
--- a/arch/x86/boot/compressed/head_32.S
+++ b/arch/x86/boot/compressed/head_32.S
-@@ -140,10 +140,10 @@ preferred_addr:
+@@ -141,10 +141,10 @@ preferred_addr:
addl %eax, %ebx
notl %eax
andl %eax, %ebx
/* Target address to relocate to for decompression */
diff --git a/arch/x86/boot/compressed/head_64.S b/arch/x86/boot/compressed/head_64.S
-index 6b1766c..ad465c9 100644
+index b0c0d16..3b44ff8 100644
--- a/arch/x86/boot/compressed/head_64.S
+++ b/arch/x86/boot/compressed/head_64.S
-@@ -94,10 +94,10 @@ ENTRY(startup_32)
+@@ -95,10 +95,10 @@ ENTRY(startup_32)
addl %eax, %ebx
notl %eax
andl %eax, %ebx
1:
/* Target address to relocate to for decompression */
-@@ -322,10 +322,10 @@ preferred_addr:
+@@ -323,10 +323,10 @@ preferred_addr:
addq %rax, %rbp
notq %rax
andq %rax, %rbp
1:
/* Target address to relocate to for decompression */
-@@ -434,8 +434,8 @@ gdt:
+@@ -435,8 +435,8 @@ gdt:
.long gdt
.word 0
.quad 0x0000000000000000 /* NULL descriptor */
.quad 0x0000000000000000 /* TS continued */
gdt_end:
diff --git a/arch/x86/boot/compressed/misc.c b/arch/x86/boot/compressed/misc.c
-index a950864..c710239 100644
+index a107b93..55602de 100644
--- a/arch/x86/boot/compressed/misc.c
+++ b/arch/x86/boot/compressed/misc.c
@@ -242,7 +242,7 @@ static void handle_relocations(void *output, unsigned long output_len)
break;
default: /* Ignore other PT_* */ break;
}
-@@ -416,7 +419,7 @@ asmlinkage __visible void *decompress_kernel(void *rmode, memptr heap,
+@@ -419,7 +422,7 @@ asmlinkage __visible void *decompress_kernel(void *rmode, memptr heap,
error("Destination address too large");
#endif
#ifndef CONFIG_RELOCATABLE
/*
diff --git a/arch/x86/boot/video.c b/arch/x86/boot/video.c
-index 43eda28..5ab5fdb 100644
+index 05111bb..a1ae1f0 100644
--- a/arch/x86/boot/video.c
+++ b/arch/x86/boot/video.c
-@@ -96,7 +96,7 @@ static void store_mode_params(void)
+@@ -98,7 +98,7 @@ static void store_mode_params(void)
static unsigned int get_entry(void)
{
char entry_buf[4];
ret;
ENDPROC(cast6_xts_dec_8way)
diff --git a/arch/x86/crypto/crc32c-pcl-intel-asm_64.S b/arch/x86/crypto/crc32c-pcl-intel-asm_64.S
-index 26d49eb..8bf39c8 100644
+index 225be06..2885e731 100644
--- a/arch/x86/crypto/crc32c-pcl-intel-asm_64.S
+++ b/arch/x86/crypto/crc32c-pcl-intel-asm_64.S
@@ -45,6 +45,7 @@
ENDPROC(\name)
diff --git a/arch/x86/crypto/sha256-avx-asm.S b/arch/x86/crypto/sha256-avx-asm.S
-index 642f156..51a513c 100644
+index 92b3b5d..0dc1dcb 100644
--- a/arch/x86/crypto/sha256-avx-asm.S
+++ b/arch/x86/crypto/sha256-avx-asm.S
@@ -49,6 +49,7 @@
ENDPROC(sha256_transform_avx)
diff --git a/arch/x86/crypto/sha256-avx2-asm.S b/arch/x86/crypto/sha256-avx2-asm.S
-index 9e86944..3795e6a 100644
+index 570ec5e..cf2b625 100644
--- a/arch/x86/crypto/sha256-avx2-asm.S
+++ b/arch/x86/crypto/sha256-avx2-asm.S
@@ -50,6 +50,7 @@
ENDPROC(sha256_transform_rorx)
diff --git a/arch/x86/crypto/sha256-ssse3-asm.S b/arch/x86/crypto/sha256-ssse3-asm.S
-index f833b74..8c62a9e 100644
+index 2cedc44..5144899 100644
--- a/arch/x86/crypto/sha256-ssse3-asm.S
+++ b/arch/x86/crypto/sha256-ssse3-asm.S
@@ -47,6 +47,7 @@
ENDPROC(sha256_transform_ssse3)
diff --git a/arch/x86/crypto/sha512-avx-asm.S b/arch/x86/crypto/sha512-avx-asm.S
-index 974dde9..a823ff9 100644
+index 565274d..af6bc08 100644
--- a/arch/x86/crypto/sha512-avx-asm.S
+++ b/arch/x86/crypto/sha512-avx-asm.S
@@ -49,6 +49,7 @@
ENDPROC(sha512_transform_avx)
diff --git a/arch/x86/crypto/sha512-avx2-asm.S b/arch/x86/crypto/sha512-avx2-asm.S
-index 568b961..ed20c37 100644
+index 1f20b35..f25c8c1 100644
--- a/arch/x86/crypto/sha512-avx2-asm.S
+++ b/arch/x86/crypto/sha512-avx2-asm.S
@@ -51,6 +51,7 @@
ENDPROC(sha512_transform_rorx)
diff --git a/arch/x86/crypto/sha512-ssse3-asm.S b/arch/x86/crypto/sha512-ssse3-asm.S
-index fb56855..6edd768 100644
+index e610e29..ffcb5ed 100644
--- a/arch/x86/crypto/sha512-ssse3-asm.S
+++ b/arch/x86/crypto/sha512-ssse3-asm.S
@@ -48,6 +48,7 @@
ret;
ENDPROC(twofish_dec_blk_3way)
diff --git a/arch/x86/crypto/twofish-x86_64-asm_64.S b/arch/x86/crypto/twofish-x86_64-asm_64.S
-index a039d21..524b8b2 100644
+index a350c99..c1bac24 100644
--- a/arch/x86/crypto/twofish-x86_64-asm_64.S
+++ b/arch/x86/crypto/twofish-x86_64-asm_64.S
@@ -22,6 +22,7 @@
@@ -265,6 +266,7 @@ ENTRY(twofish_enc_blk)
popq R1
- movq $1,%rax
+ movl $1,%eax
+ pax_force_retaddr
ret
ENDPROC(twofish_enc_blk)
@@ -317,5 +319,6 @@ ENTRY(twofish_dec_blk)
popq R1
- movq $1,%rax
+ movl $1,%eax
+ pax_force_retaddr
ret
ENDPROC(twofish_dec_blk)
set_fs(KERNEL_DS);
has_dumped = 1;
diff --git a/arch/x86/ia32/ia32_signal.c b/arch/x86/ia32/ia32_signal.c
-index d0165c9..0d5639b 100644
+index c81d35e6..3500144 100644
--- a/arch/x86/ia32/ia32_signal.c
+++ b/arch/x86/ia32/ia32_signal.c
-@@ -218,7 +218,7 @@ asmlinkage long sys32_sigreturn(void)
+@@ -216,7 +216,7 @@ asmlinkage long sys32_sigreturn(void)
if (__get_user(set.sig[0], &frame->sc.oldmask)
|| (_COMPAT_NSIG_WORDS > 1
&& __copy_from_user((((char *) &set.sig) + 4),
sizeof(frame->extramask))))
goto badframe;
-@@ -338,7 +338,7 @@ static void __user *get_sigframe(struct ksignal *ksig, struct pt_regs *regs,
+@@ -335,7 +335,7 @@ static void __user *get_sigframe(struct ksignal *ksig, struct pt_regs *regs,
sp -= frame_size;
/* Align the stack pointer according to the i386 ABI,
* i.e. so that on function entry ((sp + 4) & 15) == 0. */
return (void __user *) sp;
}
-@@ -383,10 +383,10 @@ int ia32_setup_frame(int sig, struct ksignal *ksig,
+@@ -380,10 +380,10 @@ int ia32_setup_frame(int sig, struct ksignal *ksig,
} else {
/* Return stub is in 32bit vsyscall page */
if (current->mm->context.vdso)
}
put_user_try {
-@@ -396,7 +396,7 @@ int ia32_setup_frame(int sig, struct ksignal *ksig,
+@@ -393,7 +393,7 @@ int ia32_setup_frame(int sig, struct ksignal *ksig,
* These are actually not used anymore, but left because some
* gdb versions depend on them as a marker.
*/
} put_user_catch(err);
if (err)
-@@ -438,7 +438,7 @@ int ia32_setup_rt_frame(int sig, struct ksignal *ksig,
+@@ -435,7 +435,7 @@ int ia32_setup_rt_frame(int sig, struct ksignal *ksig,
0xb8,
__NR_ia32_rt_sigreturn,
0x80cd,
};
frame = get_sigframe(ksig, regs, sizeof(*frame), &fpstate);
-@@ -461,16 +461,19 @@ int ia32_setup_rt_frame(int sig, struct ksignal *ksig,
+@@ -458,16 +458,19 @@ int ia32_setup_rt_frame(int sig, struct ksignal *ksig,
if (ksig->ka.sa.sa_flags & SA_RESTORER)
restorer = ksig->ka.sa.sa_restorer;
err |= copy_siginfo_to_user32(&frame->info, &ksig->info);
diff --git a/arch/x86/ia32/ia32entry.S b/arch/x86/ia32/ia32entry.S
-index 156ebca..9591cf0 100644
+index 72bf268..127572a 100644
--- a/arch/x86/ia32/ia32entry.S
+++ b/arch/x86/ia32/ia32entry.S
@@ -15,8 +15,10 @@
/* Avoid __ASSEMBLER__'ifying <linux/audit.h> just for this. */
#include <linux/elf-em.h>
-@@ -62,12 +64,12 @@
- */
- .macro LOAD_ARGS32 offset, _r9=0
- .if \_r9
-- movl \offset+16(%rsp),%r9d
-+ movl \offset+R9(%rsp),%r9d
- .endif
-- movl \offset+40(%rsp),%ecx
-- movl \offset+48(%rsp),%edx
-- movl \offset+56(%rsp),%esi
-- movl \offset+64(%rsp),%edi
-+ movl \offset+RCX(%rsp),%ecx
-+ movl \offset+RDX(%rsp),%edx
-+ movl \offset+RSI(%rsp),%esi
-+ movl \offset+RDI(%rsp),%edi
- movl %eax,%eax /* zero extension */
- .endm
-
-@@ -96,6 +98,32 @@ ENTRY(native_irq_enable_sysexit)
+@@ -85,6 +87,32 @@ ENTRY(native_irq_enable_sysexit)
ENDPROC(native_irq_enable_sysexit)
#endif
/*
* 32bit SYSENTER instruction entry.
*
-@@ -122,12 +150,6 @@ ENTRY(ia32_sysenter_target)
- CFI_REGISTER rsp,rbp
+@@ -119,23 +147,24 @@ ENTRY(ia32_sysenter_target)
+ * it is too small to ever cause noticeable irq latency.
+ */
SWAPGS_UNSAFE_STACK
- movq PER_CPU_VAR(kernel_stack), %rsp
-- addq $(KERNEL_STACK_OFFSET),%rsp
-- /*
-- * No need to follow this irqs on/off section: the syscall
-- * disabled irqs, here we enable it straight after entry:
-- */
+- movq PER_CPU_VAR(cpu_tss + TSS_sp0), %rsp
- ENABLE_INTERRUPTS(CLBR_NONE)
- movl %ebp,%ebp /* zero extension */
- pushq_cfi $__USER32_DS
- /*CFI_REL_OFFSET ss,0*/
-@@ -135,23 +157,46 @@ ENTRY(ia32_sysenter_target)
- CFI_REL_OFFSET rsp,0
- pushfq_cfi
- /*CFI_REL_OFFSET rflags,0*/
-- movl TI_sysenter_return+THREAD_INFO(%rsp,3*8-KERNEL_STACK_OFFSET),%r10d
++ movq PER_CPU_VAR(kernel_stack), %rsp
+
+ /* Zero-extending 32-bit regs, do not remove */
+ movl %ebp, %ebp
+ movl %eax, %eax
+
+- movl ASM_THREAD_INFO(TI_sysenter_return, %rsp, 0), %r10d
- CFI_REGISTER rip,r10
-+ orl $X86_EFLAGS_IF,(%rsp)
+ GET_THREAD_INFO(%r11)
+ movl TI_sysenter_return(%r11), %r11d
+ CFI_REGISTER rip,r11
- pushq_cfi $__USER32_CS
- /*CFI_REL_OFFSET cs,0*/
- movl %eax, %eax
-- pushq_cfi %r10
-+ pushq_cfi %r11
- CFI_REL_OFFSET rip,0
- pushq_cfi %rax
- cld
- SAVE_ARGS 0,1,0
+
+ /* Construct struct pt_regs on stack */
+ pushq_cfi $__USER32_DS /* pt_regs->ss */
+ pushq_cfi %rbp /* pt_regs->sp */
+ CFI_REL_OFFSET rsp,0
+ pushfq_cfi /* pt_regs->flags */
++ orl $X86_EFLAGS_IF,(%rsp)
+ pushq_cfi $__USER32_CS /* pt_regs->cs */
+- pushq_cfi %r10 /* pt_regs->ip = thread_info->sysenter_return */
++ pushq_cfi %r11 /* pt_regs->ip = thread_info->sysenter_return */
+ CFI_REL_OFFSET rip,0
+ pushq_cfi_reg rax /* pt_regs->orig_ax */
+ pushq_cfi_reg rdi /* pt_regs->di */
+@@ -147,15 +176,37 @@ ENTRY(ia32_sysenter_target)
+ sub $(10*8),%rsp /* pt_regs->r8-11,bp,bx,r12-15 not saved */
+ CFI_ADJUST_CFA_OFFSET 10*8
+
++#ifdef CONFIG_PAX_KERNEXEC_PLUGIN_METHOD_OR
++ movq_cfi r12, R12
++#endif
++
+ pax_enter_kernel_user
+
+#ifdef CONFIG_PAX_RANDKSTACK
+ pax_erase_kstack
+#endif
+
-+ /*
-+ * No need to follow this irqs on/off section: the syscall
-+ * disabled irqs, here we enable it straight after entry:
-+ */
+ ENABLE_INTERRUPTS(CLBR_NONE)
- /* no need to do an access_ok check here because rbp has been
- 32bit zero extended */
++
+ /*
+ * no need to do an access_ok check here because rbp has been
+ * 32bit zero extended
+ */
+
+#ifdef CONFIG_PAX_MEMORY_UDEREF
+ addq pax_user_shadow_base,%rbp
/*
* Sysenter doesn't filter flags, so we need to clear NT
* ourselves. To save a few cycles, we can check whether
-@@ -161,8 +206,9 @@ ENTRY(ia32_sysenter_target)
+@@ -165,8 +216,9 @@ ENTRY(ia32_sysenter_target)
jnz sysenter_fix_flags
sysenter_flags_fixed:
-- orl $TS_COMPAT,TI_status+THREAD_INFO(%rsp,RIP-ARGOFFSET)
-- testl $_TIF_WORK_SYSCALL_ENTRY,TI_flags+THREAD_INFO(%rsp,RIP-ARGOFFSET)
+- orl $TS_COMPAT, ASM_THREAD_INFO(TI_status, %rsp, SIZEOF_PTREGS)
+- testl $_TIF_WORK_SYSCALL_ENTRY, ASM_THREAD_INFO(TI_flags, %rsp, SIZEOF_PTREGS)
+ GET_THREAD_INFO(%r11)
+ orl $TS_COMPAT,TI_status(%r11)
+ testl $_TIF_WORK_SYSCALL_ENTRY,TI_flags(%r11)
CFI_REMEMBER_STATE
jnz sysenter_tracesys
cmpq $(IA32_NR_syscalls-1),%rax
-@@ -172,14 +218,17 @@ sysenter_do_call:
+@@ -181,9 +233,10 @@ sysenter_do_call:
sysenter_dispatch:
call *ia32_sys_call_table(,%rax,8)
- movq %rax,RAX-ARGOFFSET(%rsp)
+ movq %rax,RAX(%rsp)
+ GET_THREAD_INFO(%r11)
DISABLE_INTERRUPTS(CLBR_NONE)
TRACE_IRQS_OFF
-- testl $_TIF_ALLWORK_MASK,TI_flags+THREAD_INFO(%rsp,RIP-ARGOFFSET)
+- testl $_TIF_ALLWORK_MASK, ASM_THREAD_INFO(TI_flags, %rsp, SIZEOF_PTREGS)
+ testl $_TIF_ALLWORK_MASK,TI_flags(%r11)
jnz sysexit_audit
sysexit_from_sys_call:
-- andl $~TS_COMPAT,TI_status+THREAD_INFO(%rsp,RIP-ARGOFFSET)
+ /*
+@@ -196,7 +249,9 @@ sysexit_from_sys_call:
+ * This code path is still called 'sysexit' because it pairs
+ * with 'sysenter' and it uses the SYSENTER calling convention.
+ */
+- andl $~TS_COMPAT,ASM_THREAD_INFO(TI_status, %rsp, SIZEOF_PTREGS)
+ pax_exit_kernel_user
+ pax_erase_kstack
+ andl $~TS_COMPAT,TI_status(%r11)
- /* clear IF, that popfq doesn't enable interrupts early */
-- andl $~0x200,EFLAGS-ARGOFFSET(%rsp)
-+ andl $~X86_EFLAGS_IF,EFLAGS-ARGOFFSET(%rsp)
- movl RIP-ARGOFFSET(%rsp),%edx /* User %eip */
- CFI_REGISTER rip,rdx
- RESTORE_ARGS 0,24,0,0,0,0
-@@ -205,6 +254,9 @@ sysexit_from_sys_call:
+ movl RIP(%rsp),%ecx /* User %eip */
+ CFI_REGISTER rip,rcx
+ RESTORE_RSI_RDI
+@@ -247,6 +302,9 @@ sysexit_from_sys_call:
movl %ebx,%esi /* 2nd arg: 1st syscall arg */
movl %eax,%edi /* 1st arg: syscall number */
call __audit_syscall_entry
+
+ pax_erase_kstack
+
- movl RAX-ARGOFFSET(%rsp),%eax /* reload syscall number */
+ movl RAX(%rsp),%eax /* reload syscall number */
cmpq $(IA32_NR_syscalls-1),%rax
ja ia32_badsys
-@@ -216,7 +268,7 @@ sysexit_from_sys_call:
+@@ -258,7 +316,7 @@ sysexit_from_sys_call:
.endm
.macro auditsys_exit exit
-- testl $(_TIF_ALLWORK_MASK & ~_TIF_SYSCALL_AUDIT),TI_flags+THREAD_INFO(%rsp,RIP-ARGOFFSET)
+- testl $(_TIF_ALLWORK_MASK & ~_TIF_SYSCALL_AUDIT), ASM_THREAD_INFO(TI_flags, %rsp, SIZEOF_PTREGS)
+ testl $(_TIF_ALLWORK_MASK & ~_TIF_SYSCALL_AUDIT),TI_flags(%r11)
jnz ia32_ret_from_sys_call
TRACE_IRQS_ON
ENABLE_INTERRUPTS(CLBR_NONE)
-@@ -227,11 +279,12 @@ sysexit_from_sys_call:
+@@ -269,11 +327,12 @@ sysexit_from_sys_call:
1: setbe %al /* 1 if error, 0 if not */
movzbl %al,%edi /* zero-extend that into %edi */
call __audit_syscall_exit
+ GET_THREAD_INFO(%r11)
- movq RAX-ARGOFFSET(%rsp),%rax /* reload syscall return value */
+ movq RAX(%rsp),%rax /* reload syscall return value */
movl $(_TIF_ALLWORK_MASK & ~_TIF_SYSCALL_AUDIT),%edi
DISABLE_INTERRUPTS(CLBR_NONE)
TRACE_IRQS_OFF
-- testl %edi,TI_flags+THREAD_INFO(%rsp,RIP-ARGOFFSET)
+- testl %edi, ASM_THREAD_INFO(TI_flags, %rsp, SIZEOF_PTREGS)
+ testl %edi,TI_flags(%r11)
jz \exit
- CLEAR_RREGS -ARGOFFSET
+ CLEAR_RREGS
jmp int_with_check
-@@ -253,7 +306,7 @@ sysenter_fix_flags:
+@@ -295,7 +354,7 @@ sysenter_fix_flags:
sysenter_tracesys:
#ifdef CONFIG_AUDITSYSCALL
-- testl $(_TIF_WORK_SYSCALL_ENTRY & ~_TIF_SYSCALL_AUDIT),TI_flags+THREAD_INFO(%rsp,RIP-ARGOFFSET)
+- testl $(_TIF_WORK_SYSCALL_ENTRY & ~_TIF_SYSCALL_AUDIT), ASM_THREAD_INFO(TI_flags, %rsp, SIZEOF_PTREGS)
+ testl $(_TIF_WORK_SYSCALL_ENTRY & ~_TIF_SYSCALL_AUDIT),TI_flags(%r11)
jz sysenter_auditsys
#endif
- SAVE_REST
-@@ -265,6 +318,9 @@ sysenter_tracesys:
- RESTORE_REST
+ SAVE_EXTRA_REGS
+@@ -307,6 +366,9 @@ sysenter_tracesys:
+ RESTORE_EXTRA_REGS
cmpq $(IA32_NR_syscalls-1),%rax
ja int_ret_from_sys_call /* sysenter_tracesys has set RAX(%rsp) */
+
jmp sysenter_do_call
CFI_ENDPROC
ENDPROC(ia32_sysenter_target)
-@@ -292,19 +348,25 @@ ENDPROC(ia32_sysenter_target)
- ENTRY(ia32_cstar_target)
- CFI_STARTPROC32 simple
- CFI_SIGNAL_FRAME
-- CFI_DEF_CFA rsp,KERNEL_STACK_OFFSET
-+ CFI_DEF_CFA rsp,0
- CFI_REGISTER rip,rcx
- /*CFI_REGISTER rflags,r11*/
- SWAPGS_UNSAFE_STACK
+@@ -357,7 +419,6 @@ ENTRY(ia32_cstar_target)
movl %esp,%r8d
CFI_REGISTER rsp,r8
movq PER_CPU_VAR(kernel_stack),%rsp
-+ SAVE_ARGS 8*6,0,0
+- ENABLE_INTERRUPTS(CLBR_NONE)
+
+ /* Zero-extending 32-bit regs, do not remove */
+ movl %eax,%eax
+@@ -380,16 +441,41 @@ ENTRY(ia32_cstar_target)
+ sub $(10*8),%rsp /* pt_regs->r8-11,bp,bx,r12-15 not saved */
+ CFI_ADJUST_CFA_OFFSET 10*8
+
++#ifdef CONFIG_PAX_KERNEXEC_PLUGIN_METHOD_OR
++ movq_cfi r12, R12
++#endif
++
+ pax_enter_kernel_user
+
+#ifdef CONFIG_PAX_RANDKSTACK
+ pax_erase_kstack
+#endif
++
++ ENABLE_INTERRUPTS(CLBR_NONE)
+
/*
- * No need to follow this irqs on/off section: the syscall
- * disabled irqs and here we enable it straight after entry:
+ * no need to do an access_ok check here because r8 has been
+ * 32bit zero extended
*/
- ENABLE_INTERRUPTS(CLBR_NONE)
-- SAVE_ARGS 8,0,0
- movl %eax,%eax /* zero extension */
- movq %rax,ORIG_RAX-ARGOFFSET(%rsp)
- movq %rcx,RIP-ARGOFFSET(%rsp)
-@@ -320,12 +382,25 @@ ENTRY(ia32_cstar_target)
- /* no need to do an access_ok check here because r8 has been
- 32bit zero extended */
- /* hardware stack frame is complete now */
+
+#ifdef CONFIG_PAX_MEMORY_UDEREF
+ ASM_PAX_OPEN_USERLAND
+ movq pax_user_shadow_base,%r8
-+ addq RSP-ARGOFFSET(%rsp),%r8
++ addq RSP(%rsp),%r8
+#endif
+
ASM_STAC
1: movl (%r8),%r9d
_ASM_EXTABLE(1b,ia32_badarg)
ASM_CLAC
-- orl $TS_COMPAT,TI_status+THREAD_INFO(%rsp,RIP-ARGOFFSET)
-- testl $_TIF_WORK_SYSCALL_ENTRY,TI_flags+THREAD_INFO(%rsp,RIP-ARGOFFSET)
+- orl $TS_COMPAT, ASM_THREAD_INFO(TI_status, %rsp, SIZEOF_PTREGS)
+- testl $_TIF_WORK_SYSCALL_ENTRY, ASM_THREAD_INFO(TI_flags, %rsp, SIZEOF_PTREGS)
+
+#ifdef CONFIG_PAX_MEMORY_UDEREF
+ ASM_PAX_CLOSE_USERLAND
CFI_REMEMBER_STATE
jnz cstar_tracesys
cmpq $IA32_NR_syscalls-1,%rax
-@@ -335,13 +410,16 @@ cstar_do_call:
+@@ -404,12 +490,15 @@ cstar_do_call:
cstar_dispatch:
call *ia32_sys_call_table(,%rax,8)
- movq %rax,RAX-ARGOFFSET(%rsp)
+ movq %rax,RAX(%rsp)
+ GET_THREAD_INFO(%r11)
DISABLE_INTERRUPTS(CLBR_NONE)
TRACE_IRQS_OFF
-- testl $_TIF_ALLWORK_MASK,TI_flags+THREAD_INFO(%rsp,RIP-ARGOFFSET)
+- testl $_TIF_ALLWORK_MASK, ASM_THREAD_INFO(TI_flags, %rsp, SIZEOF_PTREGS)
+ testl $_TIF_ALLWORK_MASK,TI_flags(%r11)
jnz sysretl_audit
sysretl_from_sys_call:
-- andl $~TS_COMPAT,TI_status+THREAD_INFO(%rsp,RIP-ARGOFFSET)
-- RESTORE_ARGS 0,-ARG_SKIP,0,0,0
+- andl $~TS_COMPAT, ASM_THREAD_INFO(TI_status, %rsp, SIZEOF_PTREGS)
+ pax_exit_kernel_user
+ pax_erase_kstack
+ andl $~TS_COMPAT,TI_status(%r11)
-+ RESTORE_ARGS 0,-ORIG_RAX,0,0,0
- movl RIP-ARGOFFSET(%rsp),%ecx
+ RESTORE_RSI_RDI_RDX
+ movl RIP(%rsp),%ecx
CFI_REGISTER rip,rcx
- movl EFLAGS-ARGOFFSET(%rsp),%r11d
-@@ -368,7 +446,7 @@ sysretl_audit:
+@@ -451,7 +540,7 @@ sysretl_audit:
cstar_tracesys:
#ifdef CONFIG_AUDITSYSCALL
-- testl $(_TIF_WORK_SYSCALL_ENTRY & ~_TIF_SYSCALL_AUDIT),TI_flags+THREAD_INFO(%rsp,RIP-ARGOFFSET)
+- testl $(_TIF_WORK_SYSCALL_ENTRY & ~_TIF_SYSCALL_AUDIT), ASM_THREAD_INFO(TI_flags, %rsp, SIZEOF_PTREGS)
+ testl $(_TIF_WORK_SYSCALL_ENTRY & ~_TIF_SYSCALL_AUDIT),TI_flags(%r11)
jz cstar_auditsys
#endif
xchgl %r9d,%ebp
-@@ -382,11 +460,19 @@ cstar_tracesys:
+@@ -465,11 +554,19 @@ cstar_tracesys:
xchgl %ebp,%r9d
cmpq $(IA32_NR_syscalls-1),%rax
ja int_ret_from_sys_call /* cstar_tracesys has set RAX(%rsp) */
movq $-EFAULT,%rax
jmp ia32_sysret
CFI_ENDPROC
-@@ -423,19 +509,26 @@ ENTRY(ia32_syscall)
- CFI_REL_OFFSET rip,RIP-RIP
- PARAVIRT_ADJUST_EXCEPTION_FRAME
- SWAPGS
+@@ -505,14 +602,8 @@ ENTRY(ia32_syscall)
+ /*CFI_REL_OFFSET cs,1*8 */
+ CFI_REL_OFFSET rip,0*8
+
- /*
-- * No need to follow this irqs on/off section: the syscall
-- * disabled irqs and here we enable it straight after entry:
+- * Interrupts are off on entry.
+- * We do not frame this tiny irq-off block with TRACE_IRQS_OFF/ON,
+- * it is too small to ever cause noticeable irq latency.
- */
+ PARAVIRT_ADJUST_EXCEPTION_FRAME
+ SWAPGS
- ENABLE_INTERRUPTS(CLBR_NONE)
- movl %eax,%eax
- pushq_cfi %rax
- cld
- /* note the registers are not zero extended to the sf.
- this could be a problem. */
- SAVE_ARGS 0,1,0
-- orl $TS_COMPAT,TI_status+THREAD_INFO(%rsp,RIP-ARGOFFSET)
-- testl $_TIF_WORK_SYSCALL_ENTRY,TI_flags+THREAD_INFO(%rsp,RIP-ARGOFFSET)
+
+ /* Zero-extending 32-bit regs, do not remove */
+ movl %eax,%eax
+@@ -528,8 +619,26 @@ ENTRY(ia32_syscall)
+ sub $(10*8),%rsp /* pt_regs->r8-11,bp,bx,r12-15 not saved */
+ CFI_ADJUST_CFA_OFFSET 10*8
+
+- orl $TS_COMPAT, ASM_THREAD_INFO(TI_status, %rsp, SIZEOF_PTREGS)
+- testl $_TIF_WORK_SYSCALL_ENTRY, ASM_THREAD_INFO(TI_flags, %rsp, SIZEOF_PTREGS)
++#ifdef CONFIG_PAX_KERNEXEC_PLUGIN_METHOD_OR
++ movq_cfi r12, R12
++#endif
++
+ pax_enter_kernel_user
+
+#ifdef CONFIG_PAX_RANDKSTACK
+#endif
+
+ /*
-+ * No need to follow this irqs on/off section: the syscall
-+ * disabled irqs and here we enable it straight after entry:
++ * Interrupts are off on entry.
++ * We do not frame this tiny irq-off block with TRACE_IRQS_OFF/ON,
++ * it is too small to ever cause noticeable irq latency.
+ */
+ ENABLE_INTERRUPTS(CLBR_NONE)
++
+ GET_THREAD_INFO(%r11)
+ orl $TS_COMPAT,TI_status(%r11)
+ testl $_TIF_WORK_SYSCALL_ENTRY,TI_flags(%r11)
jnz ia32_tracesys
cmpq $(IA32_NR_syscalls-1),%rax
ja ia32_badsys
-@@ -458,6 +551,9 @@ ia32_tracesys:
- RESTORE_REST
+@@ -557,6 +666,9 @@ ia32_tracesys:
+ RESTORE_EXTRA_REGS
cmpq $(IA32_NR_syscalls-1),%rax
ja int_ret_from_sys_call /* ia32_tracesys has set RAX(%rsp) */
+
END(ia32_syscall)
diff --git a/arch/x86/ia32/sys_ia32.c b/arch/x86/ia32/sys_ia32.c
-index 8e0ceec..af13504 100644
+index 719cd70..69d576b 100644
--- a/arch/x86/ia32/sys_ia32.c
+++ b/arch/x86/ia32/sys_ia32.c
@@ -69,8 +69,8 @@ asmlinkage long sys32_ftruncate64(unsigned int fd, unsigned long offset_low,
SET_GID(gid, from_kgid_munged(current_user_ns(), stat->gid));
if (!access_ok(VERIFY_WRITE, ubuf, sizeof(struct stat64)) ||
diff --git a/arch/x86/include/asm/alternative-asm.h b/arch/x86/include/asm/alternative-asm.h
-index 372231c..51b537d 100644
+index bdf02ee..51a4656 100644
--- a/arch/x86/include/asm/alternative-asm.h
+++ b/arch/x86/include/asm/alternative-asm.h
@@ -18,6 +18,45 @@
+ .endm
+#endif
+
- .macro altinstruction_entry orig alt feature orig_len alt_len
+ .macro altinstruction_entry orig alt feature orig_len alt_len pad_len
.long \orig - .
.long \alt - .
+@@ -38,7 +77,7 @@
+ altinstruction_entry 140b,143f,\feature,142b-140b,144f-143f,142b-141b
+ .popsection
+
+- .pushsection .altinstr_replacement,"ax"
++ .pushsection .altinstr_replacement,"a"
+ 143:
+ \newinstr
+ 144:
+@@ -68,7 +107,7 @@
+ altinstruction_entry 140b,144f,\feature2,142b-140b,145f-144f,142b-141b
+ .popsection
+
+- .pushsection .altinstr_replacement,"ax"
++ .pushsection .altinstr_replacement,"a"
+ 143:
+ \newinstr1
+ 144:
diff --git a/arch/x86/include/asm/alternative.h b/arch/x86/include/asm/alternative.h
-index 473bdbe..b1e3377 100644
+index ba32af0..ff42fc0 100644
--- a/arch/x86/include/asm/alternative.h
+++ b/arch/x86/include/asm/alternative.h
-@@ -106,7 +106,7 @@ static inline int alternatives_text_reserved(void *start, void *end)
- ".pushsection .discard,\"aw\",@progbits\n" \
- DISCARD_ENTRY(1) \
+@@ -130,7 +130,7 @@ static inline int alternatives_text_reserved(void *start, void *end)
+ ".pushsection .altinstructions,\"a\"\n" \
+ ALTINSTR_ENTRY(feature, 1) \
".popsection\n" \
- ".pushsection .altinstr_replacement, \"ax\"\n" \
+ ".pushsection .altinstr_replacement, \"a\"\n" \
ALTINSTR_REPLACEMENT(newinstr, feature, 1) \
".popsection"
-@@ -120,7 +120,7 @@ static inline int alternatives_text_reserved(void *start, void *end)
- DISCARD_ENTRY(1) \
- DISCARD_ENTRY(2) \
+@@ -140,7 +140,7 @@ static inline int alternatives_text_reserved(void *start, void *end)
+ ALTINSTR_ENTRY(feature1, 1) \
+ ALTINSTR_ENTRY(feature2, 2) \
".popsection\n" \
- ".pushsection .altinstr_replacement, \"ax\"\n" \
+ ".pushsection .altinstr_replacement, \"a\"\n" \
ALTINSTR_REPLACEMENT(newinstr2, feature2, 2) \
".popsection"
diff --git a/arch/x86/include/asm/apic.h b/arch/x86/include/asm/apic.h
-index efc3b22..85c4f3a 100644
+index 976b86a..f3bc83a 100644
--- a/arch/x86/include/asm/apic.h
+++ b/arch/x86/include/asm/apic.h
@@ -45,7 +45,7 @@ static inline void generic_apic_probe(void)
#define atomic64_inc_not_zero(v) atomic64_add_unless((v), 1, 0)
diff --git a/arch/x86/include/asm/barrier.h b/arch/x86/include/asm/barrier.h
-index 2ab1eb3..1e8cc5d 100644
+index 959e45b..6ea9bf6 100644
--- a/arch/x86/include/asm/barrier.h
+++ b/arch/x86/include/asm/barrier.h
@@ -57,7 +57,7 @@
#ifdef CONFIG_X86_VSMP
#ifdef CONFIG_SMP
diff --git a/arch/x86/include/asm/calling.h b/arch/x86/include/asm/calling.h
-index 1f1297b..72b8439 100644
+index 1c8b50e..166bcaa 100644
--- a/arch/x86/include/asm/calling.h
+++ b/arch/x86/include/asm/calling.h
-@@ -82,106 +82,117 @@ For 32-bit we have the following conventions - kernel is built with
- #define RSP 152
- #define SS 160
-
--#define ARGOFFSET R11
-+#define ARGOFFSET R15
-
- .macro SAVE_ARGS addskip=0, save_rcx=1, save_r891011=1, rax_enosys=0
-- subq $9*8+\addskip, %rsp
-- CFI_ADJUST_CFA_OFFSET 9*8+\addskip
-- movq_cfi rdi, 8*8
-- movq_cfi rsi, 7*8
-- movq_cfi rdx, 6*8
-+ subq $ORIG_RAX-ARGOFFSET+\addskip, %rsp
-+ CFI_ADJUST_CFA_OFFSET ORIG_RAX-ARGOFFSET+\addskip
-+ movq_cfi rdi, RDI
-+ movq_cfi rsi, RSI
-+ movq_cfi rdx, RDX
-
- .if \save_rcx
-- movq_cfi rcx, 5*8
-+ movq_cfi rcx, RCX
- .endif
+@@ -96,23 +96,26 @@ For 32-bit we have the following conventions - kernel is built with
+ .endm
- .if \rax_enosys
-- movq $-ENOSYS, 4*8(%rsp)
-+ movq $-ENOSYS, RAX(%rsp)
- .else
-- movq_cfi rax, 4*8
-+ movq_cfi rax, RAX
+ .macro SAVE_C_REGS_HELPER offset=0 rax=1 rcx=1 r8910=1 r11=1
++#ifdef CONFIG_PAX_KERNEXEC_PLUGIN_METHOD_OR
++ movq_cfi r12, R12+\offset
++#endif
+ .if \r11
+- movq_cfi r11, 6*8+\offset
++ movq_cfi r11, R11+\offset
.endif
-
- .if \save_r891011
-- movq_cfi r8, 3*8
-- movq_cfi r9, 2*8
-- movq_cfi r10, 1*8
-- movq_cfi r11, 0*8
-+ movq_cfi r8, R8
-+ movq_cfi r9, R9
-+ movq_cfi r10, R10
-+ movq_cfi r11, R11
+ .if \r8910
+- movq_cfi r10, 7*8+\offset
+- movq_cfi r9, 8*8+\offset
+- movq_cfi r8, 9*8+\offset
++ movq_cfi r10, R10+\offset
++ movq_cfi r9, R9+\offset
++ movq_cfi r8, R8+\offset
+ .endif
+ .if \rax
+- movq_cfi rax, 10*8+\offset
++ movq_cfi rax, RAX+\offset
.endif
+ .if \rcx
+- movq_cfi rcx, 11*8+\offset
++ movq_cfi rcx, RCX+\offset
+ .endif
+- movq_cfi rdx, 12*8+\offset
+- movq_cfi rsi, 13*8+\offset
+- movq_cfi rdi, 14*8+\offset
++ movq_cfi rdx, RDX+\offset
++ movq_cfi rsi, RSI+\offset
++ movq_cfi rdi, RDI+\offset
+ .endm
+ .macro SAVE_C_REGS offset=0
+ SAVE_C_REGS_HELPER \offset, 1, 1, 1, 1
+@@ -131,76 +134,87 @@ For 32-bit we have the following conventions - kernel is built with
+ .endm
-+#ifdef CONFIG_PAX_KERNEXEC_PLUGIN_METHOD_OR
-+ movq_cfi r12, R12
+ .macro SAVE_EXTRA_REGS offset=0
+- movq_cfi r15, 0*8+\offset
+- movq_cfi r14, 1*8+\offset
+- movq_cfi r13, 2*8+\offset
+- movq_cfi r12, 3*8+\offset
+- movq_cfi rbp, 4*8+\offset
+- movq_cfi rbx, 5*8+\offset
++ movq_cfi r15, R15+\offset
++ movq_cfi r14, R14+\offset
++ movq_cfi r13, R13+\offset
++#ifndef CONFIG_PAX_KERNEXEC_PLUGIN_METHOD_OR
++ movq_cfi r12, R12+\offset
+#endif
-+
++ movq_cfi rbp, RBP+\offset
++ movq_cfi rbx, RBX+\offset
+ .endm
+ .macro SAVE_EXTRA_REGS_RBP offset=0
+- movq_cfi rbp, 4*8+\offset
++ movq_cfi rbp, RBP+\offset
+ .endm
+
+ .macro RESTORE_EXTRA_REGS offset=0
+- movq_cfi_restore 0*8+\offset, r15
+- movq_cfi_restore 1*8+\offset, r14
+- movq_cfi_restore 2*8+\offset, r13
+- movq_cfi_restore 3*8+\offset, r12
+- movq_cfi_restore 4*8+\offset, rbp
+- movq_cfi_restore 5*8+\offset, rbx
++ movq_cfi_restore R15+\offset, r15
++ movq_cfi_restore R14+\offset, r14
++ movq_cfi_restore R13+\offset, r13
++#ifndef CONFIG_PAX_KERNEXEC_PLUGIN_METHOD_OR
++ movq_cfi_restore R12+\offset, r12
++#endif
++ movq_cfi_restore RBP+\offset, rbp
++ movq_cfi_restore RBX+\offset, rbx
.endm
--#define ARG_SKIP (9*8)
-+#define ARG_SKIP ORIG_RAX
+ .macro ZERO_EXTRA_REGS
+ xorl %r15d, %r15d
+ xorl %r14d, %r14d
+ xorl %r13d, %r13d
++#ifndef CONFIG_PAX_KERNEXEC_PLUGIN_METHOD_OR
+ xorl %r12d, %r12d
++#endif
+ xorl %ebp, %ebp
+ xorl %ebx, %ebx
+ .endm
- .macro RESTORE_ARGS rstor_rax=1, addskip=0, rstor_rcx=1, rstor_r11=1, \
- rstor_r8910=1, rstor_rdx=1
-+
+- .macro RESTORE_C_REGS_HELPER rstor_rax=1, rstor_rcx=1, rstor_r11=1, rstor_r8910=1, rstor_rdx=1
++ .macro RESTORE_C_REGS_HELPER rstor_rax=1, rstor_rcx=1, rstor_r11=1, rstor_r8910=1, rstor_rdx=1, rstor_r12=1
+#ifdef CONFIG_PAX_KERNEXEC_PLUGIN_METHOD_OR
++ .if \rstor_r12
+ movq_cfi_restore R12, r12
++ .endif
+#endif
-+
.if \rstor_r11
-- movq_cfi_restore 0*8, r11
+- movq_cfi_restore 6*8, r11
+ movq_cfi_restore R11, r11
.endif
-
.if \rstor_r8910
-- movq_cfi_restore 1*8, r10
-- movq_cfi_restore 2*8, r9
-- movq_cfi_restore 3*8, r8
+- movq_cfi_restore 7*8, r10
+- movq_cfi_restore 8*8, r9
+- movq_cfi_restore 9*8, r8
+ movq_cfi_restore R10, r10
+ movq_cfi_restore R9, r9
+ movq_cfi_restore R8, r8
.endif
-
.if \rstor_rax
-- movq_cfi_restore 4*8, rax
+- movq_cfi_restore 10*8, rax
+ movq_cfi_restore RAX, rax
.endif
-
.if \rstor_rcx
-- movq_cfi_restore 5*8, rcx
+- movq_cfi_restore 11*8, rcx
+ movq_cfi_restore RCX, rcx
.endif
-
.if \rstor_rdx
-- movq_cfi_restore 6*8, rdx
+- movq_cfi_restore 12*8, rdx
+ movq_cfi_restore RDX, rdx
.endif
-
-- movq_cfi_restore 7*8, rsi
-- movq_cfi_restore 8*8, rdi
+- movq_cfi_restore 13*8, rsi
+- movq_cfi_restore 14*8, rdi
+ movq_cfi_restore RSI, rsi
+ movq_cfi_restore RDI, rdi
-
-- .if ARG_SKIP+\addskip > 0
-- addq $ARG_SKIP+\addskip, %rsp
-- CFI_ADJUST_CFA_OFFSET -(ARG_SKIP+\addskip)
-+ .if ORIG_RAX+\addskip > 0
-+ addq $ORIG_RAX+\addskip, %rsp
-+ CFI_ADJUST_CFA_OFFSET -(ORIG_RAX+\addskip)
- .endif
.endm
-
-- .macro LOAD_ARGS offset, skiprax=0
-- movq \offset(%rsp), %r11
-- movq \offset+8(%rsp), %r10
-- movq \offset+16(%rsp), %r9
-- movq \offset+24(%rsp), %r8
-- movq \offset+40(%rsp), %rcx
-- movq \offset+48(%rsp), %rdx
-- movq \offset+56(%rsp), %rsi
-- movq \offset+64(%rsp), %rdi
-+ .macro LOAD_ARGS skiprax=0
-+ movq R11(%rsp), %r11
-+ movq R10(%rsp), %r10
-+ movq R9(%rsp), %r9
-+ movq R8(%rsp), %r8
-+ movq RCX(%rsp), %rcx
-+ movq RDX(%rsp), %rdx
-+ movq RSI(%rsp), %rsi
-+ movq RDI(%rsp), %rdi
- .if \skiprax
- .else
-- movq \offset+72(%rsp), %rax
-+ movq ORIG_RAX(%rsp), %rax
- .endif
+ .macro RESTORE_C_REGS
+- RESTORE_C_REGS_HELPER 1,1,1,1,1
++ RESTORE_C_REGS_HELPER 1,1,1,1,1,1
.endm
-
--#define REST_SKIP (6*8)
--
- .macro SAVE_REST
-- subq $REST_SKIP, %rsp
-- CFI_ADJUST_CFA_OFFSET REST_SKIP
-- movq_cfi rbx, 5*8
-- movq_cfi rbp, 4*8
-- movq_cfi r12, 3*8
-- movq_cfi r13, 2*8
-- movq_cfi r14, 1*8
-- movq_cfi r15, 0*8
-+ movq_cfi rbx, RBX
-+ movq_cfi rbp, RBP
-+
-+#ifndef CONFIG_PAX_KERNEXEC_PLUGIN_METHOD_OR
-+ movq_cfi r12, R12
-+#endif
-+
-+ movq_cfi r13, R13
-+ movq_cfi r14, R14
-+ movq_cfi r15, R15
+ .macro RESTORE_C_REGS_EXCEPT_RAX
+- RESTORE_C_REGS_HELPER 0,1,1,1,1
++ RESTORE_C_REGS_HELPER 0,1,1,1,1,0
.endm
-
- .macro RESTORE_REST
-- movq_cfi_restore 0*8, r15
-- movq_cfi_restore 1*8, r14
-- movq_cfi_restore 2*8, r13
-- movq_cfi_restore 3*8, r12
-- movq_cfi_restore 4*8, rbp
-- movq_cfi_restore 5*8, rbx
-- addq $REST_SKIP, %rsp
-- CFI_ADJUST_CFA_OFFSET -(REST_SKIP)
-+ movq_cfi_restore R15, r15
-+ movq_cfi_restore R14, r14
-+ movq_cfi_restore R13, r13
-+
-+#ifndef CONFIG_PAX_KERNEXEC_PLUGIN_METHOD_OR
-+ movq_cfi_restore R12, r12
-+#endif
-+
-+ movq_cfi_restore RBP, rbp
-+ movq_cfi_restore RBX, rbx
+ .macro RESTORE_C_REGS_EXCEPT_RCX
+- RESTORE_C_REGS_HELPER 1,0,1,1,1
++ RESTORE_C_REGS_HELPER 1,0,1,1,1,0
+ .endm
+ .macro RESTORE_C_REGS_EXCEPT_R11
+- RESTORE_C_REGS_HELPER 1,1,0,1,1
++ RESTORE_C_REGS_HELPER 1,1,0,1,1,1
+ .endm
+ .macro RESTORE_C_REGS_EXCEPT_RCX_R11
+- RESTORE_C_REGS_HELPER 1,0,0,1,1
++ RESTORE_C_REGS_HELPER 1,0,0,1,1,1
+ .endm
+ .macro RESTORE_RSI_RDI
+- RESTORE_C_REGS_HELPER 0,0,0,0,0
++ RESTORE_C_REGS_HELPER 0,0,0,0,0,1
+ .endm
+ .macro RESTORE_RSI_RDI_RDX
+- RESTORE_C_REGS_HELPER 0,0,0,0,1
++ RESTORE_C_REGS_HELPER 0,0,0,0,1,1
.endm
- .macro SAVE_ALL
+ .macro REMOVE_PT_GPREGS_FROM_STACK addskip=0
diff --git a/arch/x86/include/asm/checksum_32.h b/arch/x86/include/asm/checksum_32.h
index f50de69..2b0a458 100644
--- a/arch/x86/include/asm/checksum_32.h
({ \
__typeof__ (*(ptr)) __ret = (inc); \
diff --git a/arch/x86/include/asm/compat.h b/arch/x86/include/asm/compat.h
-index 59c6c40..5e0b22c 100644
+index acdee09..a553db3 100644
--- a/arch/x86/include/asm/compat.h
+++ b/arch/x86/include/asm/compat.h
@@ -41,7 +41,7 @@ typedef s64 __attribute__((aligned(4))) compat_s64;
struct compat_timespec {
compat_time_t tv_sec;
diff --git a/arch/x86/include/asm/cpufeature.h b/arch/x86/include/asm/cpufeature.h
-index 90a5485..43b6211 100644
+index 3d6606f..5e22255 100644
--- a/arch/x86/include/asm/cpufeature.h
+++ b/arch/x86/include/asm/cpufeature.h
-@@ -213,7 +213,7 @@
+@@ -214,7 +214,8 @@
#define X86_FEATURE_PAUSEFILTER ( 8*32+13) /* AMD filtered pause intercept */
#define X86_FEATURE_PFTHRESHOLD ( 8*32+14) /* AMD pause filter threshold */
#define X86_FEATURE_VMMCALL ( 8*32+15) /* Prefer vmmcall to vmcall */
-
++#define X86_FEATURE_PCIDUDEREF ( 8*32+30) /* PaX PCID based UDEREF */
+#define X86_FEATURE_STRONGUDEREF (8*32+31) /* PaX PCID based strong UDEREF */
/* Intel-defined CPU features, CPUID level 0x00000007:0 (ebx), word 9 */
#define X86_FEATURE_FSGSBASE ( 9*32+ 0) /* {RD/WR}{FS/GS}BASE instructions*/
-@@ -221,7 +221,7 @@
+@@ -222,7 +223,7 @@
#define X86_FEATURE_BMI1 ( 9*32+ 3) /* 1st group bit manipulation extensions */
#define X86_FEATURE_HLE ( 9*32+ 4) /* Hardware Lock Elision */
#define X86_FEATURE_AVX2 ( 9*32+ 5) /* AVX2 instructions */
#define X86_FEATURE_BMI2 ( 9*32+ 8) /* 2nd group bit manipulation extensions */
#define X86_FEATURE_ERMS ( 9*32+ 9) /* Enhanced REP MOVSB/STOSB */
#define X86_FEATURE_INVPCID ( 9*32+10) /* Invalidate Processor Context ID */
-@@ -390,6 +390,7 @@ extern const char * const x86_bug_flags[NBUGINTS*32];
+@@ -401,6 +402,7 @@ extern const char * const x86_bug_flags[NBUGINTS*32];
#define cpu_has_eager_fpu boot_cpu_has(X86_FEATURE_EAGER_FPU)
#define cpu_has_topoext boot_cpu_has(X86_FEATURE_TOPOEXT)
#define cpu_has_bpext boot_cpu_has(X86_FEATURE_BPEXT)
#if __GNUC__ >= 4
extern void warn_pre_alternatives(void);
-@@ -441,7 +442,8 @@ static __always_inline __pure bool __static_cpu_has(u16 bit)
+@@ -454,7 +456,8 @@ static __always_inline __pure bool __static_cpu_has(u16 bit)
#ifdef CONFIG_X86_DEBUG_STATIC_CPU_HAS
t_warn:
return false;
#endif
-@@ -461,7 +463,7 @@ static __always_inline __pure bool __static_cpu_has(u16 bit)
+@@ -475,7 +478,7 @@ static __always_inline __pure bool __static_cpu_has(u16 bit)
".section .discard,\"aw\",@progbits\n"
" .byte 0xff + (4f-3f) - (2b-1b)\n" /* size check */
".previous\n"
"3: movb $1,%0\n"
"4:\n"
".previous\n"
-@@ -498,7 +500,7 @@ static __always_inline __pure bool _static_cpu_has_safe(u16 bit)
- " .byte 2b - 1b\n" /* src len */
- " .byte 4f - 3f\n" /* repl len */
+@@ -510,7 +513,7 @@ static __always_inline __pure bool _static_cpu_has_safe(u16 bit)
+ " .byte 5f - 4f\n" /* repl len */
+ " .byte 3b - 2b\n" /* pad len */
".previous\n"
- ".section .altinstr_replacement,\"ax\"\n"
+ ".section .altinstr_replacement,\"a\"\n"
- "3: .byte 0xe9\n .long %l[t_no] - 2b\n"
- "4:\n"
+ "4: jmp %l[t_no]\n"
+ "5:\n"
".previous\n"
-@@ -531,7 +533,7 @@ static __always_inline __pure bool _static_cpu_has_safe(u16 bit)
+@@ -545,7 +548,7 @@ static __always_inline __pure bool _static_cpu_has_safe(u16 bit)
".section .discard,\"aw\",@progbits\n"
" .byte 0xff + (4f-3f) - (2b-1b)\n" /* size check */
".previous\n"
"3: movb $0,%0\n"
"4:\n"
".previous\n"
-@@ -545,7 +547,7 @@ static __always_inline __pure bool _static_cpu_has_safe(u16 bit)
+@@ -560,7 +563,7 @@ static __always_inline __pure bool _static_cpu_has_safe(u16 bit)
".section .discard,\"aw\",@progbits\n"
" .byte 0xff + (6f-5f) - (4b-3b)\n" /* size check */
".previous\n"
"6:\n"
".previous\n"
diff --git a/arch/x86/include/asm/desc.h b/arch/x86/include/asm/desc.h
-index a94b82e..59ecefa 100644
+index a0bf89f..56f0b2a 100644
--- a/arch/x86/include/asm/desc.h
+++ b/arch/x86/include/asm/desc.h
@@ -4,6 +4,7 @@
unsigned dpl, unsigned ist, unsigned seg)
{
gate_desc s;
-@@ -379,9 +392,9 @@ static inline void _set_gate(int gate, unsigned type, void *addr,
- #define set_intr_gate(n, addr) \
+@@ -379,14 +392,14 @@ static inline void _set_gate(int gate, unsigned type, void *addr,
+ #define set_intr_gate_notrace(n, addr) \
do { \
BUG_ON((unsigned)n > 0xFF); \
- _set_gate(n, GATE_INTERRUPT, (void *)addr, 0, 0, \
+ _set_gate(n, GATE_INTERRUPT, (const void *)addr, 0, 0, \
__KERNEL_CS); \
+ } while (0)
+
+ #define set_intr_gate(n, addr) \
+ do { \
+ set_intr_gate_notrace(n, addr); \
- _trace_set_gate(n, GATE_INTERRUPT, (void *)trace_##addr,\
+ _trace_set_gate(n, GATE_INTERRUPT, (const void *)trace_##addr,\
0, 0, __KERNEL_CS); \
} while (0)
-@@ -409,19 +422,19 @@ static inline void alloc_system_vector(int vector)
+@@ -414,19 +427,19 @@ static inline void alloc_system_vector(int vector)
/*
* This routine sets up an interrupt gate at directory privilege level 3.
*/
{
BUG_ON((unsigned)n > 0xFF);
_set_gate(n, GATE_TRAP, addr, 0, 0, __KERNEL_CS);
-@@ -430,16 +443,16 @@ static inline void set_trap_gate(unsigned int n, void *addr)
+@@ -435,16 +448,16 @@ static inline void set_trap_gate(unsigned int n, void *addr)
static inline void set_task_gate(unsigned int n, unsigned int gdt_entry)
{
BUG_ON((unsigned)n > 0xFF);
{
BUG_ON((unsigned)n > 0xFF);
_set_gate(n, GATE_INTERRUPT, addr, 0x3, ist, __KERNEL_CS);
-@@ -511,4 +524,17 @@ static inline void load_current_idt(void)
+@@ -516,4 +529,17 @@ static inline void load_current_idt(void)
else
load_idt((const struct desc_ptr *)&idt_descr);
}
union {
u64 v64;
diff --git a/arch/x86/include/asm/elf.h b/arch/x86/include/asm/elf.h
-index ca3347a..1a5082a 100644
+index f161c18..97d43e8 100644
--- a/arch/x86/include/asm/elf.h
+++ b/arch/x86/include/asm/elf.h
@@ -75,9 +75,6 @@ typedef struct user_fxsr_struct elf_fpxregset_t;
#if defined(CONFIG_X86_32) || defined(CONFIG_COMPAT)
extern unsigned int vdso32_enabled;
#endif
-@@ -249,7 +246,25 @@ extern int force_personality32;
+@@ -250,7 +247,25 @@ extern int force_personality32;
the loader. We need to make sure that it is out of the way of the program
that it will "exec", and that there is sufficient room for the brk. */
/* This yields a mask that user programs can use to figure out what
instruction set this CPU supports. This could be done in user space,
-@@ -298,17 +313,13 @@ do { \
+@@ -299,17 +314,13 @@ do { \
#define ARCH_DLINFO \
do { \
} while (0)
#define AT_SYSINFO 32
-@@ -323,10 +334,10 @@ else \
+@@ -324,10 +335,10 @@ else \
#endif /* !CONFIG_X86_32 */
selected_vdso32->sym___kernel_vsyscall)
struct linux_binprm;
-@@ -338,9 +349,6 @@ extern int compat_arch_setup_additional_pages(struct linux_binprm *bprm,
- int uses_interp);
- #define compat_arch_setup_additional_pages compat_arch_setup_additional_pages
-
--extern unsigned long arch_randomize_brk(struct mm_struct *mm);
--#define arch_randomize_brk arch_randomize_brk
--
- /*
- * True on X86_32 or when emulating IA32 on X86_64
- */
diff --git a/arch/x86/include/asm/emergency-restart.h b/arch/x86/include/asm/emergency-restart.h
index 77a99ac..39ff7f5 100644
--- a/arch/x86/include/asm/emergency-restart.h
};
diff --git a/arch/x86/include/asm/fpu-internal.h b/arch/x86/include/asm/fpu-internal.h
-index 72ba21a..79f3f66 100644
+index da5e967..ab07eec 100644
--- a/arch/x86/include/asm/fpu-internal.h
+++ b/arch/x86/include/asm/fpu-internal.h
-@@ -124,8 +124,11 @@ static inline void sanitize_i387_state(struct task_struct *tsk)
+@@ -151,8 +151,11 @@ static inline void sanitize_i387_state(struct task_struct *tsk)
#define user_insn(insn, output, input...) \
({ \
int err; \
"2: " ASM_CLAC "\n" \
".section .fixup,\"ax\"\n" \
"3: movl $-1,%[err]\n" \
-@@ -134,6 +137,7 @@ static inline void sanitize_i387_state(struct task_struct *tsk)
+@@ -161,6 +164,7 @@ static inline void sanitize_i387_state(struct task_struct *tsk)
_ASM_EXTABLE(1b, 3b) \
: [err] "=r" (err), output \
: "0"(0), input); \
err; \
})
-@@ -300,7 +304,7 @@ static inline int restore_fpu_checking(struct task_struct *tsk)
+@@ -327,7 +331,7 @@ static inline int restore_fpu_checking(struct task_struct *tsk)
"fnclex\n\t"
"emms\n\t"
"fildl %P[addr]" /* set F?P to defined value */
- : : [addr] "m" (tsk->thread.fpu.has_fpu));
-+ : : [addr] "m" (init_tss[raw_smp_processor_id()].x86_tss.sp0));
++ : : [addr] "m" (cpu_tss[raw_smp_processor_id()].x86_tss.sp0));
}
return fpu_restore_checking(&tsk->thread.fpu);
pagefault_enable();
diff --git a/arch/x86/include/asm/hw_irq.h b/arch/x86/include/asm/hw_irq.h
-index 9662290..49ca5e5 100644
+index e9571dd..df5f542 100644
--- a/arch/x86/include/asm/hw_irq.h
+++ b/arch/x86/include/asm/hw_irq.h
@@ -160,8 +160,8 @@ static inline void unlock_vector_lock(void) {}
* Convert a virtual cached pointer to an uncached pointer
*/
diff --git a/arch/x86/include/asm/irqflags.h b/arch/x86/include/asm/irqflags.h
-index 0a8b519..80e7d5b 100644
+index b77f5ed..a2f791e 100644
--- a/arch/x86/include/asm/irqflags.h
+++ b/arch/x86/include/asm/irqflags.h
-@@ -141,6 +141,11 @@ static inline notrace unsigned long arch_local_irq_save(void)
- sti; \
- sysexit
+@@ -137,6 +137,11 @@ static inline notrace unsigned long arch_local_irq_save(void)
+ swapgs; \
+ sysretl
+#define GET_CR0_INTO_RDI mov %cr0, %rdi
+#define SET_RDI_INTO_CR0 mov %rdi, %cr0
atomic_t perf_rdpmc_allowed; /* nonzero if rdpmc is allowed */
} mm_context_t;
diff --git a/arch/x86/include/asm/mmu_context.h b/arch/x86/include/asm/mmu_context.h
-index 883f6b93..6869d96 100644
+index 883f6b93..5184058 100644
--- a/arch/x86/include/asm/mmu_context.h
+++ b/arch/x86/include/asm/mmu_context.h
@@ -42,6 +42,20 @@ void destroy_context(struct mm_struct *mm);
{
+
+#if defined(CONFIG_X86_64) && defined(CONFIG_PAX_MEMORY_UDEREF)
-+ if (!(static_cpu_has(X86_FEATURE_PCID))) {
++ if (!(static_cpu_has(X86_FEATURE_PCIDUDEREF))) {
+ unsigned int i;
+ pgd_t *pgd;
+
+ pax_open_kernel();
+
+#if defined(CONFIG_X86_64) && defined(CONFIG_PAX_MEMORY_UDEREF)
-+ if (static_cpu_has(X86_FEATURE_PCID))
++ if (static_cpu_has(X86_FEATURE_PCIDUDEREF))
+ __clone_user_pgds(get_cpu_pgd(cpu, user), next->pgd);
+ else
+#endif
+ BUG_ON((__pa(get_cpu_pgd(cpu, kernel)) | PCID_KERNEL) != (read_cr3() & __PHYSICAL_MASK) && (__pa(get_cpu_pgd(cpu, user)) | PCID_USER) != (read_cr3() & __PHYSICAL_MASK));
+
+#if defined(CONFIG_X86_64) && defined(CONFIG_PAX_MEMORY_UDEREF)
-+ if (static_cpu_has(X86_FEATURE_PCID)) {
++ if (static_cpu_has(X86_FEATURE_PCIDUDEREF)) {
+ if (static_cpu_has(X86_FEATURE_INVPCID)) {
+ u64 descriptor[2];
+ descriptor[0] = PCID_USER;
+#if defined(CONFIG_X86_32) && defined(CONFIG_PAX_PAGEEXEC) && defined(CONFIG_SMP)
+ if (!(__supported_pte_mask & _PAGE_NX)) {
+ smp_mb__before_atomic();
-+ cpu_clear(cpu, prev->context.cpu_user_cs_mask);
++ cpumask_clear_cpu(cpu, &prev->context.cpu_user_cs_mask);
+ smp_mb__after_atomic();
-+ cpu_set(cpu, next->context.cpu_user_cs_mask);
++ cpumask_set_cpu(cpu, &next->context.cpu_user_cs_mask);
+ }
+#endif
+
+ pax_open_kernel();
+
+#if defined(CONFIG_X86_64) && defined(CONFIG_PAX_MEMORY_UDEREF)
-+ if (static_cpu_has(X86_FEATURE_PCID))
++ if (static_cpu_has(X86_FEATURE_PCIDUDEREF))
+ __clone_user_pgds(get_cpu_pgd(cpu, user), next->pgd);
+ else
+#endif
+ BUG_ON((__pa(get_cpu_pgd(cpu, kernel)) | PCID_KERNEL) != (read_cr3() & __PHYSICAL_MASK) && (__pa(get_cpu_pgd(cpu, user)) | PCID_USER) != (read_cr3() & __PHYSICAL_MASK));
+
+#if defined(CONFIG_X86_64) && defined(CONFIG_PAX_MEMORY_UDEREF)
-+ if (static_cpu_has(X86_FEATURE_PCID)) {
++ if (static_cpu_has(X86_FEATURE_PCIDUDEREF)) {
+ if (static_cpu_has(X86_FEATURE_INVPCID)) {
+ u64 descriptor[2];
+ descriptor[0] = PCID_USER;
+
+#if defined(CONFIG_X86_32) && defined(CONFIG_PAX_PAGEEXEC)
+ if (!(__supported_pte_mask & _PAGE_NX))
-+ cpu_set(cpu, next->context.cpu_user_cs_mask);
++ cpumask_set_cpu(cpu, &next->context.cpu_user_cs_mask);
+#endif
+
+#if defined(CONFIG_X86_32) && (defined(CONFIG_PAX_PAGEEXEC) || defined(CONFIG_PAX_SEGMEXEC))
#define __phys_addr(x) __phys_addr_nodebug(x)
#define __phys_addr_symbol(x) \
diff --git a/arch/x86/include/asm/paravirt.h b/arch/x86/include/asm/paravirt.h
-index 965c47d..ffe0af8 100644
+index 8957810..f34efb4 100644
--- a/arch/x86/include/asm/paravirt.h
+++ b/arch/x86/include/asm/paravirt.h
@@ -560,7 +560,7 @@ static inline pmd_t __pmd(pmdval_t val)
#endif
#define INTERRUPT_RETURN \
-@@ -981,6 +1008,21 @@ extern void default_banner(void);
- PARA_SITE(PARA_PATCH(pv_cpu_ops, PV_CPU_irq_enable_sysexit), \
+@@ -976,6 +1003,21 @@ extern void default_banner(void);
+ PARA_SITE(PARA_PATCH(pv_cpu_ops, PV_CPU_usergs_sysret64), \
CLBR_NONE, \
- jmp PARA_INDIRECT(pv_cpu_ops+PV_CPU_irq_enable_sysexit))
+ jmp PARA_INDIRECT(pv_cpu_ops+PV_CPU_usergs_sysret64))
+
+#define GET_CR0_INTO_RDI \
+ call PARA_INDIRECT(pv_cpu_ops+PV_CPU_read_cr0); \
#endif /* __ASSEMBLY__ */
diff --git a/arch/x86/include/asm/paravirt_types.h b/arch/x86/include/asm/paravirt_types.h
-index 7549b8b..f0edfda 100644
+index f7b0b5c..cdd33f9 100644
--- a/arch/x86/include/asm/paravirt_types.h
+++ b/arch/x86/include/asm/paravirt_types.h
@@ -84,7 +84,7 @@ struct pv_init_ops {
void (*set_pgd)(pgd_t *pudp, pgd_t pgdval);
+ void (*set_pgd_batched)(pgd_t *pudp, pgd_t pgdval);
- #endif /* PAGETABLE_LEVELS == 4 */
- #endif /* PAGETABLE_LEVELS >= 3 */
+ #endif /* CONFIG_PGTABLE_LEVELS == 4 */
+ #endif /* CONFIG_PGTABLE_LEVELS >= 3 */
@@ -324,7 +325,13 @@ struct pv_mmu_ops {
an mfn. We can tell which is which from the index. */
extern struct pv_info pv_info;
extern struct pv_init_ops pv_init_ops;
diff --git a/arch/x86/include/asm/pgalloc.h b/arch/x86/include/asm/pgalloc.h
-index c4412e9..90e88c5 100644
+index bf7f8b5..ca5799d 100644
--- a/arch/x86/include/asm/pgalloc.h
+++ b/arch/x86/include/asm/pgalloc.h
@@ -63,6 +63,13 @@ static inline void pmd_populate_kernel(struct mm_struct *mm,
+}
#endif /* CONFIG_X86_PAE */
- #if PAGETABLE_LEVELS > 3
+ #if CONFIG_PGTABLE_LEVELS > 3
@@ -123,6 +140,12 @@ static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgd, pud_t *pud)
set_pgd(pgd, __pgd(_PAGE_TABLE | __pa(pud)));
}
/*
diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.h
-index a0c35bf..7045c6a 100644
+index fe57e7a..0573d42 100644
--- a/arch/x86/include/asm/pgtable.h
+++ b/arch/x86/include/asm/pgtable.h
@@ -47,6 +47,7 @@ extern struct mm_struct *pgd_page_get_mm(struct page *page);
}
diff --git a/arch/x86/include/asm/pgtable_64_types.h b/arch/x86/include/asm/pgtable_64_types.h
-index 602b602..acb53ed 100644
+index e6844df..432b56e 100644
--- a/arch/x86/include/asm/pgtable_64_types.h
+++ b/arch/x86/include/asm/pgtable_64_types.h
-@@ -61,11 +61,16 @@ typedef struct { pteval_t pte; } pte_t;
+@@ -60,11 +60,16 @@ typedef struct { pteval_t pte; } pte_t;
#define MODULES_VADDR (__START_KERNEL_map + KERNEL_IMAGE_SIZE)
#define MODULES_END _AC(0xffffffffff000000, UL)
#define MODULES_LEN (MODULES_END - MODULES_VADDR)
#endif /* _ASM_X86_PGTABLE_64_DEFS_H */
diff --git a/arch/x86/include/asm/pgtable_types.h b/arch/x86/include/asm/pgtable_types.h
-index 8c7c108..1c1b77f 100644
+index 78f0c8c..4424bb0 100644
--- a/arch/x86/include/asm/pgtable_types.h
+++ b/arch/x86/include/asm/pgtable_types.h
@@ -85,8 +85,10 @@
}
+#endif
-+#if PAGETABLE_LEVELS == 3
++#if CONFIG_PGTABLE_LEVELS == 3
+#include <asm-generic/pgtable-nopud.h>
+#endif
+
-+#if PAGETABLE_LEVELS == 2
++#if CONFIG_PGTABLE_LEVELS == 2
+#include <asm-generic/pgtable-nopmd.h>
+#endif
+
+#ifndef __ASSEMBLY__
- #if PAGETABLE_LEVELS > 3
+ #if CONFIG_PGTABLE_LEVELS > 3
typedef struct { pudval_t pud; } pud_t;
@@ -247,8 +262,6 @@ static inline pudval_t native_pud_val(pud_t pud)
/*
diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h
-index ec1c935..5cc6023 100644
+index 23ba676..6584489 100644
--- a/arch/x86/include/asm/processor.h
+++ b/arch/x86/include/asm/processor.h
-@@ -127,7 +127,7 @@ struct cpuinfo_x86 {
+@@ -130,7 +130,7 @@ struct cpuinfo_x86 {
/* Index into per_cpu list: */
u16 cpu_index;
u32 microcode;
#define X86_VENDOR_INTEL 0
#define X86_VENDOR_CYRIX 1
-@@ -198,9 +198,21 @@ static inline void native_cpuid(unsigned int *eax, unsigned int *ebx,
+@@ -201,9 +201,21 @@ static inline void native_cpuid(unsigned int *eax, unsigned int *ebx,
: "memory");
}
}
#ifdef CONFIG_X86_32
-@@ -282,7 +294,7 @@ struct tss_struct {
+@@ -300,7 +312,7 @@ struct tss_struct {
} ____cacheline_aligned;
--DECLARE_PER_CPU_SHARED_ALIGNED(struct tss_struct, init_tss);
-+extern struct tss_struct init_tss[NR_CPUS];
+-DECLARE_PER_CPU_SHARED_ALIGNED(struct tss_struct, cpu_tss);
++extern struct tss_struct cpu_tss[NR_CPUS];
- /*
- * Save the original ist values for checking stack pointers during debugging
-@@ -479,6 +491,7 @@ struct thread_struct {
+ #ifdef CONFIG_X86_32
+ DECLARE_PER_CPU(unsigned long, cpu_current_top_of_stack);
+@@ -500,6 +512,7 @@ struct thread_struct {
unsigned short ds;
unsigned short fsindex;
unsigned short gsindex;
#endif
#ifdef CONFIG_X86_32
unsigned long ip;
-@@ -805,11 +818,18 @@ static inline void spin_lock_prefetch(const void *x)
+@@ -585,10 +598,10 @@ static inline void native_swapgs(void)
+ #endif
+ }
+
+-static inline unsigned long current_top_of_stack(void)
++static inline unsigned long current_top_of_stack(unsigned int cpu)
+ {
+ #ifdef CONFIG_X86_64
+- return this_cpu_read_stable(cpu_tss.x86_tss.sp0);
++ return cpu_tss[cpu].x86_tss.sp0;
+ #else
+ /* sp0 on x86_32 is special in and around vm86 mode. */
+ return this_cpu_read_stable(cpu_current_top_of_stack);
+@@ -837,8 +850,15 @@ static inline void spin_lock_prefetch(const void *x)
*/
#define TASK_SIZE PAGE_OFFSET
#define TASK_SIZE_MAX TASK_SIZE
+#define STACK_TOP_MAX TASK_SIZE
#define INIT_THREAD { \
-- .sp0 = sizeof(init_stack) + (long)&init_stack, \
-+ .sp0 = sizeof(init_stack) + (long)&init_stack - 8, \
- .vm86_info = NULL, \
- .sysenter_cs = __KERNEL_CS, \
- .io_bitmap_ptr = NULL, \
-@@ -823,7 +843,7 @@ static inline void spin_lock_prefetch(const void *x)
+ .sp0 = TOP_OF_INIT_STACK, \
+@@ -859,12 +879,7 @@ extern unsigned long thread_saved_pc(struct task_struct *tsk);
+ * "struct pt_regs" is possible, but they may contain the
+ * completely wrong values.
*/
- #define INIT_TSS { \
- .x86_tss = { \
-- .sp0 = sizeof(init_stack) + (long)&init_stack, \
-+ .sp0 = sizeof(init_stack) + (long)&init_stack - 8, \
- .ss0 = __KERNEL_DS, \
- .ss1 = __KERNEL_CS, \
- .io_bitmap_base = INVALID_IO_BITMAP_OFFSET, \
-@@ -834,11 +854,7 @@ static inline void spin_lock_prefetch(const void *x)
- extern unsigned long thread_saved_pc(struct task_struct *tsk);
-
- #define THREAD_SIZE_LONGS (THREAD_SIZE/sizeof(unsigned long))
--#define KSTK_TOP(info) \
--({ \
-- unsigned long *__ptr = (unsigned long *)(info); \
-- (unsigned long)(&__ptr[THREAD_SIZE_LONGS]); \
+-#define task_pt_regs(task) \
+-({ \
+- unsigned long __ptr = (unsigned long)task_stack_page(task); \
+- __ptr += THREAD_SIZE - TOP_OF_KERNEL_STACK_PADDING; \
+- ((struct pt_regs *)__ptr) - 1; \
-})
-+#define KSTK_TOP(info) ((container_of(info, struct task_struct, tinfo))->thread.sp0)
++#define task_pt_regs(tsk) ((struct pt_regs *)(tsk)->thread.sp0 - 1)
- /*
- * The below -8 is to reserve 8 bytes on top of the ring0 stack.
-@@ -853,7 +869,7 @@ extern unsigned long thread_saved_pc(struct task_struct *tsk);
- #define task_pt_regs(task) \
- ({ \
- struct pt_regs *__regs__; \
-- __regs__ = (struct pt_regs *)(KSTK_TOP(task_stack_page(task))-8); \
-+ __regs__ = (struct pt_regs *)((task)->thread.sp0); \
- __regs__ - 1; \
- })
+ #define KSTK_ESP(task) (task_pt_regs(task)->sp)
-@@ -869,13 +885,13 @@ extern unsigned long thread_saved_pc(struct task_struct *tsk);
+@@ -878,13 +893,13 @@ extern unsigned long thread_saved_pc(struct task_struct *tsk);
* particular problem by preventing anything from being mapped
* at the maximum canonical address.
*/
#define TASK_SIZE (test_thread_flag(TIF_ADDR32) ? \
IA32_PAGE_OFFSET : TASK_SIZE_MAX)
-@@ -886,11 +902,11 @@ extern unsigned long thread_saved_pc(struct task_struct *tsk);
- #define STACK_TOP_MAX TASK_SIZE_MAX
-
- #define INIT_THREAD { \
-- .sp0 = (unsigned long)&init_stack + sizeof(init_stack) \
-+ .sp0 = (unsigned long)&init_stack + sizeof(init_stack) - 16 \
- }
-
- #define INIT_TSS { \
-- .x86_tss.sp0 = (unsigned long)&init_stack + sizeof(init_stack) \
-+ .x86_tss.sp0 = (unsigned long)&init_stack + sizeof(init_stack) - 16 \
- }
-
- /*
-@@ -918,6 +934,10 @@ extern void start_thread(struct pt_regs *regs, unsigned long new_ip,
+@@ -918,6 +933,10 @@ extern void start_thread(struct pt_regs *regs, unsigned long new_ip,
*/
#define TASK_UNMAPPED_BASE (PAGE_ALIGN(TASK_SIZE / 3))
#define KSTK_EIP(task) (task_pt_regs(task)->ip)
/* Get/set a process' ability to use the timestamp counter instruction */
-@@ -962,7 +982,7 @@ static inline uint32_t hypervisor_cpuid_base(const char *sig, uint32_t leaves)
+@@ -962,7 +981,7 @@ static inline uint32_t hypervisor_cpuid_base(const char *sig, uint32_t leaves)
return 0;
}
extern void free_init_pages(char *what, unsigned long begin, unsigned long end);
void default_idle(void);
-@@ -972,6 +992,6 @@ bool xen_set_default_idle(void);
+@@ -972,6 +991,6 @@ bool xen_set_default_idle(void);
#define xen_set_default_idle 0
#endif
void df_debug(struct pt_regs *regs, long error_code);
#endif /* _ASM_X86_PROCESSOR_H */
diff --git a/arch/x86/include/asm/ptrace.h b/arch/x86/include/asm/ptrace.h
-index 86fc2bb..bd5049a 100644
+index 5fabf13..7388158 100644
--- a/arch/x86/include/asm/ptrace.h
+++ b/arch/x86/include/asm/ptrace.h
-@@ -89,28 +89,29 @@ static inline unsigned long regs_return_value(struct pt_regs *regs)
- }
-
- /*
-- * user_mode_vm(regs) determines whether a register set came from user mode.
-+ * user_mode(regs) determines whether a register set came from user mode.
- * This is true if V8086 mode was enabled OR if the register set was from
- * protected mode with RPL-3 CS value. This tricky test checks that with
- * one comparison. Many places in the kernel can bypass this full check
-- * if they have already ruled out V8086 mode, so user_mode(regs) can be used.
-+ * if they have already ruled out V8086 mode, so user_mode_novm(regs) can
-+ * be used.
- */
--static inline int user_mode(struct pt_regs *regs)
-+static inline int user_mode_novm(struct pt_regs *regs)
- {
- #ifdef CONFIG_X86_32
- return (regs->cs & SEGMENT_RPL_MASK) == USER_RPL;
- #else
-- return !!(regs->cs & 3);
-+ return !!(regs->cs & SEGMENT_RPL_MASK);
- #endif
- }
-
--static inline int user_mode_vm(struct pt_regs *regs)
-+static inline int user_mode(struct pt_regs *regs)
- {
- #ifdef CONFIG_X86_32
- return ((regs->cs & SEGMENT_RPL_MASK) | (regs->flags & X86_VM_MASK)) >=
- USER_RPL;
- #else
-- return user_mode(regs);
-+ return user_mode_novm(regs);
- #endif
- }
-
-@@ -126,15 +127,16 @@ static inline int v8086_mode(struct pt_regs *regs)
+@@ -125,15 +125,16 @@ static inline int v8086_mode(struct pt_regs *regs)
#ifdef CONFIG_X86_64
static inline bool user_64bit_mode(struct pt_regs *regs)
{
#endif
}
-@@ -185,9 +187,11 @@ static inline unsigned long regs_get_register(struct pt_regs *regs,
+@@ -180,9 +181,11 @@ static inline unsigned long regs_get_register(struct pt_regs *regs,
* Traps from the kernel do not save sp and ss.
* Use the helper function to retrieve sp.
*/
#endif /* __KERNEL__ */
diff --git a/arch/x86/include/asm/segment.h b/arch/x86/include/asm/segment.h
-index db257a5..b91bc77 100644
+index 7d5a192..23ef1aa 100644
--- a/arch/x86/include/asm/segment.h
+++ b/arch/x86/include/asm/segment.h
-@@ -73,10 +73,15 @@
+@@ -82,14 +82,20 @@
* 26 - ESPFIX small SS
* 27 - per-cpu [ offset to per-cpu data area ]
- * 28 - stack_canary-20 [ for stack protector ]
+ * 28 - stack_canary-20 [ for stack protector ] <=== cacheline #8
- * 29 - unused
- * 30 - unused
+ * 29 - PCI BIOS CS
+#define __KERNEXEC_EFI_CS (GDT_ENTRY_KERNEXEC_EFI_CS*8)
+#define __KERNEXEC_EFI_DS (GDT_ENTRY_KERNEXEC_EFI_DS*8)
+
- #define GDT_ENTRY_TLS_MIN 6
- #define GDT_ENTRY_TLS_MAX (GDT_ENTRY_TLS_MIN + GDT_ENTRY_TLS_ENTRIES - 1)
-
-@@ -88,6 +93,8 @@
+ #define GDT_ENTRY_TLS_MIN 6
+ #define GDT_ENTRY_TLS_MAX (GDT_ENTRY_TLS_MIN + GDT_ENTRY_TLS_ENTRIES - 1)
- #define GDT_ENTRY_KERNEL_CS (GDT_ENTRY_KERNEL_BASE+0)
+ #define GDT_ENTRY_KERNEL_CS 12
++#define GDT_ENTRY_KERNEXEC_KERNEL_CS 4
+ #define GDT_ENTRY_KERNEL_DS 13
+ #define GDT_ENTRY_DEFAULT_USER_CS 14
+ #define GDT_ENTRY_DEFAULT_USER_DS 15
+@@ -106,6 +112,12 @@
+ #define GDT_ENTRY_PERCPU 27
+ #define GDT_ENTRY_STACK_CANARY 28
-+#define GDT_ENTRY_KERNEXEC_KERNEL_CS (4)
++#define GDT_ENTRY_PCIBIOS_CS 29
++#define __PCIBIOS_DS (GDT_ENTRY_PCIBIOS_DS * 8)
+
- #define GDT_ENTRY_KERNEL_DS (GDT_ENTRY_KERNEL_BASE+1)
-
- #define GDT_ENTRY_TSS (GDT_ENTRY_KERNEL_BASE+4)
-@@ -113,6 +120,12 @@
- #define __KERNEL_STACK_CANARY 0
- #endif
-
-+#define GDT_ENTRY_PCIBIOS_CS (GDT_ENTRY_KERNEL_BASE+17)
++#define GDT_ENTRY_PCIBIOS_DS 30
+#define __PCIBIOS_CS (GDT_ENTRY_PCIBIOS_CS * 8)
-+
-+#define GDT_ENTRY_PCIBIOS_DS (GDT_ENTRY_KERNEL_BASE+18)
-+#define __PCIBIOS_DS (GDT_ENTRY_PCIBIOS_DS * 8)
+
#define GDT_ENTRY_DOUBLEFAULT_TSS 31
/*
-@@ -140,7 +153,7 @@
+@@ -118,6 +130,7 @@
*/
- /* Matches PNP_CS32 and PNP_CS16 (they must be consecutive) */
--#define SEGMENT_IS_PNP_CODE(x) (((x) & 0xf4) == GDT_ENTRY_PNPBIOS_BASE * 8)
-+#define SEGMENT_IS_PNP_CODE(x) (((x) & 0xFFFCU) == PNP_CS32 || ((x) & 0xFFFCU) == PNP_CS16)
+ #define __KERNEL_CS (GDT_ENTRY_KERNEL_CS*8)
++#define __KERNEXEC_KERNEL_CS (GDT_ENTRY_KERNEXEC_KERNEL_CS*8)
+ #define __KERNEL_DS (GDT_ENTRY_KERNEL_DS*8)
+ #define __USER_DS (GDT_ENTRY_DEFAULT_USER_DS*8 + 3)
+ #define __USER_CS (GDT_ENTRY_DEFAULT_USER_CS*8 + 3)
+@@ -129,7 +142,7 @@
+ #define PNP_CS16 (GDT_ENTRY_PNPBIOS_CS16*8)
+ /* "Is this PNP code selector (PNP_CS32 or PNP_CS16)?" */
+-#define SEGMENT_IS_PNP_CODE(x) (((x) & 0xf4) == PNP_CS32)
++#define SEGMENT_IS_PNP_CODE(x) (((x) & 0xFFFCU) == PNP_CS32 || ((x) & 0xFFFCU) == PNP_CS16)
- #else
-@@ -164,6 +177,8 @@
- #define __USER32_CS (GDT_ENTRY_DEFAULT_USER32_CS*8+3)
- #define __USER32_DS __USER_DS
+ /* data segment for BIOS: */
+ #define PNP_DS (GDT_ENTRY_PNPBIOS_DS*8)
+@@ -176,6 +189,8 @@
+ #define GDT_ENTRY_DEFAULT_USER_DS 5
+ #define GDT_ENTRY_DEFAULT_USER_CS 6
-+#define GDT_ENTRY_KERNEXEC_KERNEL_CS 7
++#define GDT_ENTRY_KERNEXEC_KERNEL_CS 7
+
- #define GDT_ENTRY_TSS 8 /* needs two entries */
- #define GDT_ENTRY_LDT 10 /* needs two entries */
- #define GDT_ENTRY_TLS_MIN 12
-@@ -172,6 +187,8 @@
- #define GDT_ENTRY_PER_CPU 15 /* Abused to load per CPU data from limit */
- #define __PER_CPU_SEG (GDT_ENTRY_PER_CPU * 8 + 3)
+ /* Needs two entries */
+ #define GDT_ENTRY_TSS 8
+ /* Needs two entries */
+@@ -187,10 +202,12 @@
+ /* Abused to load per CPU data from limit */
+ #define GDT_ENTRY_PER_CPU 15
-+#define GDT_ENTRY_UDEREF_KERNEL_DS 16
++#define GDT_ENTRY_UDEREF_KERNEL_DS 16
+
- /* TLS indexes for 64bit - hardcoded in arch_prctl */
- #define FS_TLS 0
- #define GS_TLS 1
-@@ -179,12 +196,14 @@
- #define GS_TLS_SEL ((GDT_ENTRY_TLS_MIN+GS_TLS)*8 + 3)
- #define FS_TLS_SEL ((GDT_ENTRY_TLS_MIN+FS_TLS)*8 + 3)
-
--#define GDT_ENTRIES 16
-+#define GDT_ENTRIES 17
-
- #endif
-
- #define __KERNEL_CS (GDT_ENTRY_KERNEL_CS*8)
-+#define __KERNEXEC_KERNEL_CS (GDT_ENTRY_KERNEXEC_KERNEL_CS*8)
- #define __KERNEL_DS (GDT_ENTRY_KERNEL_DS*8)
-+#define __UDEREF_KERNEL_DS (GDT_ENTRY_UDEREF_KERNEL_DS*8)
- #define __USER_DS (GDT_ENTRY_DEFAULT_USER_DS*8+3)
- #define __USER_CS (GDT_ENTRY_DEFAULT_USER_CS*8+3)
- #ifndef CONFIG_PARAVIRT
-@@ -256,7 +275,7 @@ static inline unsigned long get_limit(unsigned long segment)
- {
- unsigned long __limit;
- asm("lsll %1,%0" : "=r" (__limit) : "r" (segment));
-- return __limit + 1;
-+ return __limit;
- }
+ /*
+ * Number of entries in the GDT table:
+ */
+-#define GDT_ENTRIES 16
++#define GDT_ENTRIES 17
- #endif /* !__ASSEMBLY__ */
+ /*
+ * Segment selector values corresponding to the above entries:
+@@ -200,7 +217,9 @@
+ */
+ #define __KERNEL32_CS (GDT_ENTRY_KERNEL32_CS*8)
+ #define __KERNEL_CS (GDT_ENTRY_KERNEL_CS*8)
++#define __KERNEXEC_KERNEL_CS (GDT_ENTRY_KERNEXEC_KERNEL_CS*8)
+ #define __KERNEL_DS (GDT_ENTRY_KERNEL_DS*8)
++#define __UDEREF_KERNEL_DS (GDT_ENTRY_UDEREF_KERNEL_DS*8)
+ #define __USER32_CS (GDT_ENTRY_DEFAULT_USER32_CS*8 + 3)
+ #define __USER_DS (GDT_ENTRY_DEFAULT_USER_DS*8 + 3)
+ #define __USER32_DS __USER_DS
diff --git a/arch/x86/include/asm/smap.h b/arch/x86/include/asm/smap.h
-index 8d3120f..352b440 100644
+index ba665eb..0f72938 100644
--- a/arch/x86/include/asm/smap.h
+++ b/arch/x86/include/asm/smap.h
-@@ -25,11 +25,40 @@
+@@ -25,6 +25,18 @@
#include <asm/alternative-asm.h>
+#if defined(CONFIG_X86_64) && defined(CONFIG_PAX_MEMORY_UDEREF)
+#define ASM_PAX_OPEN_USERLAND \
-+ 661: jmp 663f; \
-+ .pushsection .altinstr_replacement, "a" ; \
-+ 662: pushq %rax; nop; \
-+ .popsection ; \
-+ .pushsection .altinstructions, "a" ; \
-+ altinstruction_entry 661b, 662b, X86_FEATURE_STRONGUDEREF, 2, 2;\
-+ .popsection ; \
-+ call __pax_open_userland; \
-+ popq %rax; \
-+ 663:
++ ALTERNATIVE "", "call __pax_open_userland", X86_FEATURE_STRONGUDEREF
+
+#define ASM_PAX_CLOSE_USERLAND \
-+ 661: jmp 663f; \
-+ .pushsection .altinstr_replacement, "a" ; \
-+ 662: pushq %rax; nop; \
-+ .popsection; \
-+ .pushsection .altinstructions, "a" ; \
-+ altinstruction_entry 661b, 662b, X86_FEATURE_STRONGUDEREF, 2, 2;\
-+ .popsection; \
-+ call __pax_close_userland; \
-+ popq %rax; \
-+ 663:
++ ALTERNATIVE "", "call __pax_close_userland", X86_FEATURE_STRONGUDEREF
++
+#else
+#define ASM_PAX_OPEN_USERLAND
+#define ASM_PAX_CLOSE_USERLAND
+
#ifdef CONFIG_X86_SMAP
- #define ASM_CLAC \
- 661: ASM_NOP3 ; \
-- .pushsection .altinstr_replacement, "ax" ; \
-+ .pushsection .altinstr_replacement, "a" ; \
- 662: __ASM_CLAC ; \
- .popsection ; \
- .pushsection .altinstructions, "a" ; \
-@@ -38,7 +67,7 @@
-
- #define ASM_STAC \
- 661: ASM_NOP3 ; \
-- .pushsection .altinstr_replacement, "ax" ; \
-+ .pushsection .altinstr_replacement, "a" ; \
- 662: __ASM_STAC ; \
- .popsection ; \
- .pushsection .altinstructions, "a" ; \
-@@ -56,6 +85,37 @@
+ #define ASM_CLAC \
+@@ -44,6 +56,37 @@
#include <asm/alternative.h>
+{
+
+#if defined(CONFIG_X86_64) && defined(CONFIG_PAX_MEMORY_UDEREF)
-+ asm volatile(ALTERNATIVE(ASM_NOP5, "call %P[open]", X86_FEATURE_STRONGUDEREF)
++ asm volatile(ALTERNATIVE("", "call %P[open]", X86_FEATURE_STRONGUDEREF)
+ :
+ : [open] "i" (__pax_open_userland)
+ : "memory", "rax");
+{
+
+#if defined(CONFIG_X86_64) && defined(CONFIG_PAX_MEMORY_UDEREF)
-+ asm volatile(ALTERNATIVE(ASM_NOP5, "call %P[close]", X86_FEATURE_STRONGUDEREF)
++ asm volatile(ALTERNATIVE("", "call %P[close]", X86_FEATURE_STRONGUDEREF)
+ :
+ : [close] "i" (__pax_close_userland)
+ : "memory", "rax");
static __always_inline void clac(void)
diff --git a/arch/x86/include/asm/smp.h b/arch/x86/include/asm/smp.h
-index 8cd1cc3..827e09e 100644
+index 17a8dce..79f7280 100644
--- a/arch/x86/include/asm/smp.h
+++ b/arch/x86/include/asm/smp.h
@@ -35,7 +35,7 @@ DECLARE_PER_CPU_READ_MOSTLY(cpumask_var_t, cpu_core_map);
/* Globals due to paravirt */
extern void set_cpu_sibling_map(int cpu);
-@@ -191,14 +191,8 @@ extern unsigned disabled_cpus;
+@@ -192,14 +192,8 @@ extern unsigned disabled_cpus;
extern int safe_smp_processor_id(void);
#elif defined(CONFIG_X86_64_SMP)
__switch_canary_iparam \
: "memory", "cc" __EXTRA_CLOBBER)
diff --git a/arch/x86/include/asm/thread_info.h b/arch/x86/include/asm/thread_info.h
-index 1d4e4f2..506db18 100644
+index b4bdec3..e8af9bc 100644
--- a/arch/x86/include/asm/thread_info.h
+++ b/arch/x86/include/asm/thread_info.h
-@@ -24,7 +24,6 @@ struct exec_domain;
+@@ -36,7 +36,7 @@
+ #ifdef CONFIG_X86_32
+ # define TOP_OF_KERNEL_STACK_PADDING 8
+ #else
+-# define TOP_OF_KERNEL_STACK_PADDING 0
++# define TOP_OF_KERNEL_STACK_PADDING 16
+ #endif
+
+ /*
+@@ -50,27 +50,26 @@ struct task_struct;
#include <linux/atomic.h>
struct thread_info {
- struct task_struct *task; /* main task structure */
- struct exec_domain *exec_domain; /* execution domain */
__u32 flags; /* low level flags */
__u32 status; /* thread synchronous flags */
-@@ -32,13 +31,13 @@ struct thread_info {
+ __u32 cpu; /* current CPU */
int saved_preempt_count;
mm_segment_t addr_limit;
void __user *sysenter_return;
+#define INIT_THREAD_INFO \
{ \
- .task = &tsk, \
- .exec_domain = &default_exec_domain, \
.flags = 0, \
.cpu = 0, \
-@@ -46,7 +45,7 @@ struct thread_info {
+ .saved_preempt_count = INIT_PREEMPT_COUNT, \
.addr_limit = KERNEL_DS, \
}
#define init_stack (init_thread_union.stack)
#else /* !__ASSEMBLY__ */
-@@ -86,6 +85,7 @@ struct thread_info {
+@@ -110,6 +109,7 @@ struct thread_info {
#define TIF_SYSCALL_TRACEPOINT 28 /* syscall tracepoint instrumentation */
#define TIF_ADDR32 29 /* 32-bit address space on 64 bits */
#define TIF_X32 30 /* 32-bit native x86-64 binary */
#define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE)
#define _TIF_NOTIFY_RESUME (1 << TIF_NOTIFY_RESUME)
-@@ -109,17 +109,18 @@ struct thread_info {
+@@ -133,17 +133,18 @@ struct thread_info {
#define _TIF_SYSCALL_TRACEPOINT (1 << TIF_SYSCALL_TRACEPOINT)
#define _TIF_ADDR32 (1 << TIF_ADDR32)
#define _TIF_X32 (1 << TIF_X32)
/* work to do on interrupt/exception return */
#define _TIF_WORK_MASK \
-@@ -130,7 +131,7 @@ struct thread_info {
+@@ -154,7 +155,7 @@ struct thread_info {
/* work to do on any return to user space */
#define _TIF_ALLWORK_MASK \
((0x0000FFFF & ~_TIF_SECCOMP) | _TIF_SYSCALL_TRACEPOINT | \
/* Only used for 64 bit */
#define _TIF_DO_NOTIFY_MASK \
-@@ -145,7 +146,6 @@ struct thread_info {
- #define _TIF_WORK_CTXSW_NEXT (_TIF_WORK_CTXSW)
-
- #define STACK_WARN (THREAD_SIZE/8)
--#define KERNEL_STACK_OFFSET (5*(BITS_PER_LONG/8))
-
- /*
- * macros/functions for gaining access to the thread information structure
-@@ -156,12 +156,11 @@ struct thread_info {
+@@ -179,9 +180,11 @@ struct thread_info {
DECLARE_PER_CPU(unsigned long, kernel_stack);
+
static inline struct thread_info *current_thread_info(void)
{
-- struct thread_info *ti;
-- ti = (void *)(this_cpu_read_stable(kernel_stack) +
-- KERNEL_STACK_OFFSET - THREAD_SIZE);
-- return ti;
+- return (struct thread_info *)(current_top_of_stack() - THREAD_SIZE);
+ return this_cpu_read_stable(current_tinfo);
}
static inline unsigned long current_stack_pointer(void)
-@@ -179,14 +178,7 @@ static inline unsigned long current_stack_pointer(void)
+@@ -199,8 +202,7 @@ static inline unsigned long current_stack_pointer(void)
- /* how to get the thread information struct from ASM */
+ /* Load thread_info address into "reg" */
#define GET_THREAD_INFO(reg) \
- _ASM_MOV PER_CPU_VAR(kernel_stack),reg ; \
-- _ASM_SUB $(THREAD_SIZE-KERNEL_STACK_OFFSET),reg ;
--
--/*
-- * Same if PER_CPU_VAR(kernel_stack) is, perhaps with some offset, already in
-- * a certain register (to be used in assembler memory operands).
-- */
--#define THREAD_INFO(reg, off) KERNEL_STACK_OFFSET+(off)-THREAD_SIZE(reg)
+- _ASM_SUB $(THREAD_SIZE),reg ;
+ _ASM_MOV PER_CPU_VAR(current_tinfo),reg ;
- #endif
-
-@@ -242,5 +234,12 @@ static inline bool is_ia32_task(void)
+ /*
+ * ASM operand which evaluates to a 'thread_info' address of
+@@ -293,5 +295,12 @@ static inline bool is_ia32_task(void)
extern void arch_task_cache_init(void);
extern int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src);
extern void arch_release_task_struct(struct task_struct *tsk);
#endif
#endif /* _ASM_X86_THREAD_INFO_H */
diff --git a/arch/x86/include/asm/tlbflush.h b/arch/x86/include/asm/tlbflush.h
-index cd79194..e7a9491 100644
+index cd79194..6a9956f 100644
--- a/arch/x86/include/asm/tlbflush.h
+++ b/arch/x86/include/asm/tlbflush.h
@@ -86,18 +86,44 @@ static inline void cr4_set_bits_and_update_boot(unsigned long mask)
+ }
+
+#if defined(CONFIG_X86_64) && defined(CONFIG_PAX_MEMORY_UDEREF)
-+ if (static_cpu_has(X86_FEATURE_PCID)) {
++ if (static_cpu_has(X86_FEATURE_PCIDUDEREF)) {
+ unsigned int cpu = raw_get_cpu();
+
+ native_write_cr3(__pa(get_cpu_pgd(cpu, user)) | PCID_USER);
}
static inline void __native_flush_tlb_global(void)
-@@ -118,6 +144,41 @@ static inline void __native_flush_tlb_global(void)
+@@ -118,6 +144,43 @@ static inline void __native_flush_tlb_global(void)
static inline void __native_flush_tlb_single(unsigned long addr)
{
+ descriptor[1] = addr;
+
+#if defined(CONFIG_X86_64) && defined(CONFIG_PAX_MEMORY_UDEREF)
-+ if (!static_cpu_has(X86_FEATURE_STRONGUDEREF) || addr >= TASK_SIZE_MAX) {
-+ if (addr < TASK_SIZE_MAX)
-+ descriptor[1] += pax_user_shadow_base;
-+ asm volatile(__ASM_INVPCID : : "d"(&descriptor), "a"(INVPCID_SINGLE_ADDRESS) : "memory");
-+ }
++ if (static_cpu_has(X86_FEATURE_PCIDUDEREF)) {
++ if (!static_cpu_has(X86_FEATURE_STRONGUDEREF) || addr >= TASK_SIZE_MAX) {
++ if (addr < TASK_SIZE_MAX)
++ descriptor[1] += pax_user_shadow_base;
++ asm volatile(__ASM_INVPCID : : "d"(&descriptor), "a"(INVPCID_SINGLE_ADDRESS) : "memory");
++ }
+
-+ descriptor[0] = PCID_USER;
-+ descriptor[1] = addr;
++ descriptor[0] = PCID_USER;
++ descriptor[1] = addr;
++ }
+#endif
+
+ asm volatile(__ASM_INVPCID : : "d"(&descriptor), "a"(INVPCID_SINGLE_ADDRESS) : "memory");
+ }
+
+#if defined(CONFIG_X86_64) && defined(CONFIG_PAX_MEMORY_UDEREF)
-+ if (static_cpu_has(X86_FEATURE_PCID)) {
++ if (static_cpu_has(X86_FEATURE_PCIDUDEREF)) {
+ unsigned int cpu = raw_get_cpu();
+
+ native_write_cr3(__pa(get_cpu_pgd(cpu, user)) | PCID_USER | PCID_NOFLUSH);
extern struct x86_init_ops x86_init;
extern struct x86_cpuinit_ops x86_cpuinit;
diff --git a/arch/x86/include/asm/xen/page.h b/arch/x86/include/asm/xen/page.h
-index 358dcd3..23c0bf1 100644
+index c44a5d5..7f83cfc 100644
--- a/arch/x86/include/asm/xen/page.h
+++ b/arch/x86/include/asm/xen/page.h
@@ -82,7 +82,7 @@ static inline int xen_safe_read_ulong(unsigned long *addr, unsigned long *val)
}
diff --git a/arch/x86/include/uapi/asm/e820.h b/arch/x86/include/uapi/asm/e820.h
-index d993e33..8db1b18 100644
+index 960a8a9..404daf7 100644
--- a/arch/x86/include/uapi/asm/e820.h
+++ b/arch/x86/include/uapi/asm/e820.h
-@@ -58,7 +58,7 @@ struct e820map {
+@@ -68,7 +68,7 @@ struct e820map {
#define ISA_START_ADDRESS 0xa0000
#define ISA_END_ADDRESS 0x100000
#define BIOS_END 0x00100000
#define BIOS_ROM_BASE 0xffe00000
-diff --git a/arch/x86/include/uapi/asm/ptrace-abi.h b/arch/x86/include/uapi/asm/ptrace-abi.h
-index 7b0a55a..ad115bf 100644
---- a/arch/x86/include/uapi/asm/ptrace-abi.h
-+++ b/arch/x86/include/uapi/asm/ptrace-abi.h
-@@ -49,7 +49,6 @@
- #define EFLAGS 144
- #define RSP 152
- #define SS 160
--#define ARGOFFSET R11
- #endif /* __ASSEMBLY__ */
-
- /* top of stack page */
diff --git a/arch/x86/kernel/Makefile b/arch/x86/kernel/Makefile
-index cdb1b70..426434c 100644
+index 9bcd0b5..750f1b7 100644
--- a/arch/x86/kernel/Makefile
+++ b/arch/x86/kernel/Makefile
@@ -28,7 +28,7 @@ obj-y += time.o ioport.o ldt.o dumpstack.o nmi.o
obj-$(CONFIG_X86_64) += mcount_64.o
obj-y += syscall_$(BITS).o vsyscall_gtod.o
diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c
-index 803b684..68c64f1 100644
+index dbe76a1..e2ec334 100644
--- a/arch/x86/kernel/acpi/boot.c
+++ b/arch/x86/kernel/acpi/boot.c
@@ -1361,7 +1361,7 @@ static void __init acpi_reduced_hw_init(void)
bogus_magic:
jmp bogus_magic
diff --git a/arch/x86/kernel/alternative.c b/arch/x86/kernel/alternative.c
-index 703130f..27a155d 100644
+index aef6531..2044b66 100644
--- a/arch/x86/kernel/alternative.c
+++ b/arch/x86/kernel/alternative.c
-@@ -268,6 +268,13 @@ void __init_or_module apply_alternatives(struct alt_instr *start,
- */
- for (a = start; a < end; a++) {
+@@ -248,7 +248,9 @@ static void __init_or_module add_nops(void *insns, unsigned int len)
+ unsigned int noplen = len;
+ if (noplen > ASM_NOP_MAX)
+ noplen = ASM_NOP_MAX;
++ pax_open_kernel();
+ memcpy(insns, ideal_nops[noplen], noplen);
++ pax_close_kernel();
+ insns += noplen;
+ len -= noplen;
+ }
+@@ -276,6 +278,11 @@ recompute_jump(struct alt_instr *a, u8 *orig_insn, u8 *repl_insn, u8 *insnbuf)
+ if (a->replacementlen != 5)
+ return;
+
++#if defined(CONFIG_X86_32) && defined(CONFIG_PAX_KERNEXEC)
++ if (orig_insn < (u8 *)_text || (u8 *)_einittext <= orig_insn)
++ orig_insn = ktva_ktla(orig_insn);
++#endif
++
+ o_dspl = *(s32 *)(insnbuf + 1);
+
+ /* next_rip of the replacement JMP */
+@@ -362,7 +369,23 @@ void __init_or_module apply_alternatives(struct alt_instr *start,
+ int insnbuf_sz = 0;
+
instr = (u8 *)&a->instr_offset + a->instr_offset;
+
+#if defined(CONFIG_X86_32) && defined(CONFIG_PAX_KERNEXEC)
-+ instr += ____LOAD_PHYSICAL_ADDR - LOAD_PHYSICAL_ADDR;
-+ if (instr < (u8 *)_text || (u8 *)_einittext <= instr)
-+ instr -= ____LOAD_PHYSICAL_ADDR - LOAD_PHYSICAL_ADDR;
++ if ((u8 *)_text <= instr && instr < (u8 *)_einittext) {
++ instr += ____LOAD_PHYSICAL_ADDR - LOAD_PHYSICAL_ADDR;
++ instr = ktla_ktva(instr);
++ }
+#endif
+
replacement = (u8 *)&a->repl_offset + a->repl_offset;
- BUG_ON(a->replacementlen > a->instrlen);
++
++#if defined(CONFIG_X86_32) && defined(CONFIG_PAX_KERNEXEC)
++ if ((u8 *)_text <= replacement && replacement < (u8 *)_einittext) {
++ replacement += ____LOAD_PHYSICAL_ADDR - LOAD_PHYSICAL_ADDR;
++ replacement = ktla_ktva(replacement);
++ }
++#endif
++
BUG_ON(a->instrlen > sizeof(insnbuf));
-@@ -284,6 +291,11 @@ void __init_or_module apply_alternatives(struct alt_instr *start,
- add_nops(insnbuf + a->replacementlen,
- a->instrlen - a->replacementlen);
+ BUG_ON(a->cpuid >= (NCAPINTS + NBUGINTS) * 32);
+ if (!boot_cpu_has(a->cpuid)) {
+@@ -402,6 +425,11 @@ void __init_or_module apply_alternatives(struct alt_instr *start,
+ }
+ DUMP_BYTES(insnbuf, insnbuf_sz, "%p: final_insn: ", instr);
+#if defined(CONFIG_X86_32) && defined(CONFIG_PAX_KERNEXEC)
+ if (instr < (u8 *)_text || (u8 *)_einittext <= instr)
+ instr = ktva_ktla(instr);
+#endif
+
- text_poke_early(instr, insnbuf, a->instrlen);
+ text_poke_early(instr, insnbuf, insnbuf_sz);
}
}
-@@ -299,10 +311,16 @@ static void alternatives_smp_lock(const s32 *start, const s32 *end,
+@@ -416,10 +444,16 @@ static void alternatives_smp_lock(const s32 *start, const s32 *end,
for (poff = start; poff < end; poff++) {
u8 *ptr = (u8 *)poff + *poff;
text_poke(ptr, ((unsigned char []){0xf0}), 1);
}
mutex_unlock(&text_mutex);
-@@ -317,10 +335,16 @@ static void alternatives_smp_unlock(const s32 *start, const s32 *end,
+@@ -434,10 +468,16 @@ static void alternatives_smp_unlock(const s32 *start, const s32 *end,
for (poff = start; poff < end; poff++) {
u8 *ptr = (u8 *)poff + *poff;
text_poke(ptr, ((unsigned char []){0x3E}), 1);
}
mutex_unlock(&text_mutex);
-@@ -457,7 +481,7 @@ void __init_or_module apply_paravirt(struct paravirt_patch_site *start,
+@@ -574,7 +614,7 @@ void __init_or_module apply_paravirt(struct paravirt_patch_site *start,
BUG_ON(p->len > MAX_PATCH_LEN);
/* prep the buffer with the original instructions */
used = pv_init_ops.patch(p->instrtype, p->clobbers, insnbuf,
(unsigned long)p->instr, p->len);
-@@ -504,7 +528,7 @@ void __init alternative_instructions(void)
+@@ -621,7 +661,7 @@ void __init alternative_instructions(void)
if (!uniproc_patched || num_possible_cpus() == 1)
free_init_pages("SMP alternatives",
(unsigned long)__smp_locks,
#endif
apply_paravirt(__parainstructions, __parainstructions_end);
-@@ -524,13 +548,17 @@ void __init alternative_instructions(void)
+@@ -641,13 +681,17 @@ void __init alternative_instructions(void)
* instructions. And on the local CPU you need to be protected again NMI or MCE
* handlers seeing an inconsistent instruction while you patch.
*/
local_irq_restore(flags);
/* Could also do a CLFLUSH here to speed up CPU recovery; but
that causes hangs on some VIA CPUs. */
-@@ -552,36 +580,22 @@ void *__init_or_module text_poke_early(void *addr, const void *opcode,
+@@ -669,36 +713,22 @@ void *__init_or_module text_poke_early(void *addr, const void *opcode,
*/
void *text_poke(void *addr, const void *opcode, size_t len)
{
return addr;
}
-@@ -601,7 +615,7 @@ int poke_int3_handler(struct pt_regs *regs)
- if (likely(!bp_patching_in_progress))
- return 0;
-
-- if (user_mode_vm(regs) || regs->ip != (unsigned long)bp_int3_addr)
-+ if (user_mode(regs) || regs->ip != (unsigned long)bp_int3_addr)
- return 0;
-
- /* set up the specified breakpoint handler */
-@@ -635,7 +649,7 @@ int poke_int3_handler(struct pt_regs *regs)
+@@ -752,7 +782,7 @@ int poke_int3_handler(struct pt_regs *regs)
*/
void *text_poke_bp(void *addr, const void *opcode, size_t len, void *handler)
{
bp_int3_handler = handler;
bp_int3_addr = (u8 *)addr + sizeof(int3);
diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c
-index ad3639a..bd4253c 100644
+index dcb5285..cc79e9d 100644
--- a/arch/x86/kernel/apic/apic.c
+++ b/arch/x86/kernel/apic/apic.c
@@ -171,7 +171,7 @@ int first_system_vector = FIRST_SYSTEM_VECTOR;
int pic_mode;
-@@ -1918,7 +1918,7 @@ static inline void __smp_error_interrupt(struct pt_regs *regs)
+@@ -1857,7 +1857,7 @@ static inline void __smp_error_interrupt(struct pt_regs *regs)
apic_write(APIC_ESR, 0);
v = apic_read(APIC_ESR);
ack_APIC_irq();
raw_spin_unlock(&vector_lock);
}
diff --git a/arch/x86/kernel/apic/x2apic_cluster.c b/arch/x86/kernel/apic/x2apic_cluster.c
-index e658f21..b695a1a 100644
+index ab3219b..e8033eb 100644
--- a/arch/x86/kernel/apic/x2apic_cluster.c
+++ b/arch/x86/kernel/apic/x2apic_cluster.c
@@ -182,7 +182,7 @@ update_clusterinfo(struct notifier_block *nfb, unsigned long action, void *hcpu)
.name = "physical x2apic",
.probe = x2apic_phys_probe,
diff --git a/arch/x86/kernel/apic/x2apic_uv_x.c b/arch/x86/kernel/apic/x2apic_uv_x.c
-index 8e9dcfd..c61b3e4 100644
+index c8d9295..9af2d03 100644
--- a/arch/x86/kernel/apic/x2apic_uv_x.c
+++ b/arch/x86/kernel/apic/x2apic_uv_x.c
-@@ -348,7 +348,7 @@ static int uv_probe(void)
+@@ -375,7 +375,7 @@ static int uv_probe(void)
return apic == &apic_x2apic_uv_x;
}
BLANK();
OFFSET(XEN_vcpu_info_mask, vcpu_info, evtchn_upcall_mask);
diff --git a/arch/x86/kernel/asm-offsets_64.c b/arch/x86/kernel/asm-offsets_64.c
-index fdcbb4d..036dd93 100644
+index 5ce6f2d..9e738f3 100644
--- a/arch/x86/kernel/asm-offsets_64.c
+++ b/arch/x86/kernel/asm-offsets_64.c
@@ -80,6 +80,7 @@ int main(void)
+ DEFINE(TSS_size, sizeof(struct tss_struct));
OFFSET(TSS_ist, tss_struct, x86_tss.ist);
+ OFFSET(TSS_sp0, tss_struct, x86_tss.sp0);
BLANK();
-
diff --git a/arch/x86/kernel/cpu/Makefile b/arch/x86/kernel/cpu/Makefile
-index 80091ae..0c5184f 100644
+index 9bff687..5b899fb 100644
--- a/arch/x86/kernel/cpu/Makefile
+++ b/arch/x86/kernel/cpu/Makefile
@@ -8,10 +8,6 @@ CFLAGS_REMOVE_common.o = -pg
obj-y += common.o
obj-y += rdrand.o
diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c
-index a220239..607fc38 100644
+index e4cf633..941f450 100644
--- a/arch/x86/kernel/cpu/amd.c
+++ b/arch/x86/kernel/cpu/amd.c
-@@ -717,7 +717,7 @@ static void init_amd(struct cpuinfo_x86 *c)
+@@ -729,7 +729,7 @@ static void init_amd(struct cpuinfo_x86 *c)
static unsigned int amd_size_cache(struct cpuinfo_x86 *c, unsigned int size)
{
/* AMD errata T13 (order #21922) */
if (c->x86_model == 3 && c->x86_mask == 0)
size = 64;
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
-index 2346c95..c061472 100644
+index a62cf04..56afd65 100644
--- a/arch/x86/kernel/cpu/common.c
+++ b/arch/x86/kernel/cpu/common.c
@@ -91,60 +91,6 @@ static const struct cpu_dev default_cpu = {
static int __init x86_xsave_setup(char *s)
{
if (strlen(s))
-@@ -306,6 +252,59 @@ static __always_inline void setup_smap(struct cpuinfo_x86 *c)
+@@ -306,6 +252,62 @@ static __always_inline void setup_smap(struct cpuinfo_x86 *c)
}
}
+
+static void setup_pcid(struct cpuinfo_x86 *c)
+{
-+ if (!cpu_has(c, X86_FEATURE_PCID)) {
++ if (cpu_has(c, X86_FEATURE_PCID)) {
++ printk("PAX: PCID detected\n");
++ cr4_set_bits(X86_CR4_PCIDE);
++ } else
+ clear_cpu_cap(c, X86_FEATURE_INVPCID);
+
++ if (cpu_has(c, X86_FEATURE_INVPCID))
++ printk("PAX: INVPCID detected\n");
++
+#ifdef CONFIG_PAX_MEMORY_UDEREF
-+ if (clone_pgd_mask != ~(pgdval_t)0UL) {
-+ pax_open_kernel();
-+ pax_user_shadow_base = 1UL << TASK_SIZE_MAX_SHIFT;
-+ pax_close_kernel();
-+ printk("PAX: slow and weak UDEREF enabled\n");
-+ } else
-+ printk("PAX: UDEREF disabled\n");
-+#endif
++ if (clone_pgd_mask == ~(pgdval_t)0UL) {
++ printk("PAX: UDEREF disabled\n");
++ return;
++ }
+
++ if (!cpu_has(c, X86_FEATURE_PCID)) {
++ pax_open_kernel();
++ pax_user_shadow_base = 1UL << TASK_SIZE_MAX_SHIFT;
++ pax_close_kernel();
++ printk("PAX: slow and weak UDEREF enabled\n");
+ return;
+ }
+
-+ printk("PAX: PCID detected\n");
-+ cr4_set_bits(X86_CR4_PCIDE);
++ set_cpu_cap(c, X86_FEATURE_PCIDUDEREF);
+
-+#ifdef CONFIG_PAX_MEMORY_UDEREF
+ pax_open_kernel();
+ clone_pgd_mask = ~(pgdval_t)0UL;
+ pax_close_kernel();
+ }
+#endif
+
-+ if (cpu_has(c, X86_FEATURE_INVPCID))
-+ printk("PAX: INVPCID detected\n");
+}
+#endif
+
/*
* Some CPU features depend on higher CPUID levels, which may not always
* be available due to CPUID level capping or broken virtualization
-@@ -406,7 +405,7 @@ void switch_to_new_gdt(int cpu)
+@@ -406,7 +408,7 @@ void switch_to_new_gdt(int cpu)
{
struct desc_ptr gdt_descr;
gdt_descr.size = GDT_SIZE - 1;
load_gdt(&gdt_descr);
/* Reload the per-cpu base */
-@@ -897,6 +896,20 @@ static void identify_cpu(struct cpuinfo_x86 *c)
+@@ -935,6 +937,20 @@ static void identify_cpu(struct cpuinfo_x86 *c)
setup_smep(c);
setup_smap(c);
/*
* The vendor-specific functions might have changed features.
* Now we do "generic changes."
-@@ -979,7 +992,7 @@ static void syscall32_cpu_init(void)
- void enable_sep_cpu(void)
- {
- int cpu = get_cpu();
-- struct tss_struct *tss = &per_cpu(init_tss, cpu);
-+ struct tss_struct *tss = init_tss + cpu;
+@@ -1009,7 +1025,7 @@ void enable_sep_cpu(void)
+ int cpu;
- if (!boot_cpu_has(X86_FEATURE_SEP)) {
- put_cpu();
-@@ -1117,14 +1130,16 @@ static __init int setup_disablecpuid(char *arg)
+ cpu = get_cpu();
+- tss = &per_cpu(cpu_tss, cpu);
++ tss = cpu_tss + cpu;
+
+ if (!boot_cpu_has(X86_FEATURE_SEP))
+ goto out;
+@@ -1155,14 +1171,16 @@ static __init int setup_disablecpuid(char *arg)
}
__setup("clearcpuid=", setup_disablecpuid);
+EXPORT_PER_CPU_SYMBOL(current_tinfo);
+
DEFINE_PER_CPU(unsigned long, kernel_stack) =
-- (unsigned long)&init_thread_union - KERNEL_STACK_OFFSET + THREAD_SIZE;
+- (unsigned long)&init_thread_union + THREAD_SIZE;
+ (unsigned long)&init_thread_union - 16 + THREAD_SIZE;
EXPORT_PER_CPU_SYMBOL(kernel_stack);
DEFINE_PER_CPU_FIRST(union irq_stack_union,
irq_stack_union) __aligned(PAGE_SIZE) __visible;
-@@ -1307,7 +1322,7 @@ void cpu_init(void)
+@@ -1367,7 +1385,7 @@ void cpu_init(void)
*/
load_ucode_ap();
-- t = &per_cpu(init_tss, cpu);
-+ t = init_tss + cpu;
+- t = &per_cpu(cpu_tss, cpu);
++ t = cpu_tss + cpu;
oist = &per_cpu(orig_ist, cpu);
#ifdef CONFIG_NUMA
-@@ -1339,7 +1354,6 @@ void cpu_init(void)
+@@ -1399,7 +1417,6 @@ void cpu_init(void)
wrmsrl(MSR_KERNEL_GS_BASE, 0);
barrier();
x2apic_setup();
/*
-@@ -1391,7 +1405,7 @@ void cpu_init(void)
+@@ -1451,7 +1468,7 @@ void cpu_init(void)
{
int cpu = smp_processor_id();
struct task_struct *curr = current;
-- struct tss_struct *t = &per_cpu(init_tss, cpu);
-+ struct tss_struct *t = init_tss + cpu;
+- struct tss_struct *t = &per_cpu(cpu_tss, cpu);
++ struct tss_struct *t = cpu_tss + cpu;
struct thread_struct *thread = &curr->thread;
wait_for_master_cpu(cpu);
diff --git a/arch/x86/kernel/cpu/intel_cacheinfo.c b/arch/x86/kernel/cpu/intel_cacheinfo.c
-index 6596433..1ad6eaf 100644
+index edcb0e2..a138233 100644
--- a/arch/x86/kernel/cpu/intel_cacheinfo.c
+++ b/arch/x86/kernel/cpu/intel_cacheinfo.c
-@@ -1024,6 +1024,22 @@ static struct attribute *default_attrs[] = {
- };
+@@ -519,25 +519,23 @@ cache_private_attrs_is_visible(struct kobject *kobj,
+ return 0;
+ }
- #ifdef CONFIG_AMD_NB
-+static struct attribute *default_attrs_amd_nb[] = {
-+ &type.attr,
-+ &level.attr,
-+ &coherency_line_size.attr,
-+ &physical_line_partition.attr,
-+ &ways_of_associativity.attr,
-+ &number_of_sets.attr,
-+ &size.attr,
-+ &shared_cpu_map.attr,
-+ &shared_cpu_list.attr,
-+ NULL,
-+ NULL,
-+ NULL,
-+ NULL
-+};
++static struct attribute *amd_l3_attrs[4];
+
- static struct attribute **amd_l3_attrs(void)
+ static struct attribute_group cache_private_group = {
+ .is_visible = cache_private_attrs_is_visible,
++ .attrs = amd_l3_attrs,
+ };
+
+ static void init_amd_l3_attrs(void)
{
- static struct attribute **attrs;
-@@ -1034,18 +1050,7 @@ static struct attribute **amd_l3_attrs(void)
+ int n = 1;
+- static struct attribute **amd_l3_attrs;
+-
+- if (amd_l3_attrs) /* already initialized */
+- return;
- n = ARRAY_SIZE(default_attrs);
+ if (amd_nb_has_feature(AMD_NB_L3_INDEX_DISABLE))
+ n += 2;
+ if (amd_nb_has_feature(AMD_NB_L3_PARTITIONING))
+ n += 1;
-- if (amd_nb_has_feature(AMD_NB_L3_INDEX_DISABLE))
-- n += 2;
--
-- if (amd_nb_has_feature(AMD_NB_L3_PARTITIONING))
-- n += 1;
--
-- attrs = kzalloc(n * sizeof (struct attribute *), GFP_KERNEL);
-- if (attrs == NULL)
-- return attrs = default_attrs;
--
-- for (n = 0; default_attrs[n]; n++)
-- attrs[n] = default_attrs[n];
-+ attrs = default_attrs_amd_nb;
-
- if (amd_nb_has_feature(AMD_NB_L3_INDEX_DISABLE)) {
- attrs[n++] = &cache_disable_0.attr;
-@@ -1096,6 +1101,13 @@ static struct kobj_type ktype_cache = {
- .default_attrs = default_attrs,
- };
+- amd_l3_attrs = kcalloc(n, sizeof(*amd_l3_attrs), GFP_KERNEL);
+- if (!amd_l3_attrs)
++ if (n > 1 && amd_l3_attrs[0]) /* already initialized */
+ return;
-+#ifdef CONFIG_AMD_NB
-+static struct kobj_type ktype_cache_amd_nb = {
-+ .sysfs_ops = &sysfs_ops,
-+ .default_attrs = default_attrs_amd_nb,
-+};
-+#endif
-+
- static struct kobj_type ktype_percpu_entry = {
- .sysfs_ops = &sysfs_ops,
- };
-@@ -1161,20 +1173,26 @@ static int cache_add_dev(struct device *dev)
- return retval;
+ n = 0;
+@@ -547,8 +545,6 @@ static void init_amd_l3_attrs(void)
}
+ if (amd_nb_has_feature(AMD_NB_L3_PARTITIONING))
+ amd_l3_attrs[n++] = &dev_attr_subcaches.attr;
+-
+- cache_private_group.attrs = amd_l3_attrs;
+ }
-+#ifdef CONFIG_AMD_NB
-+ amd_l3_attrs();
-+#endif
-+
- for (i = 0; i < num_cache_leaves; i++) {
-+ struct kobj_type *ktype;
-+
- this_object = INDEX_KOBJECT_PTR(cpu, i);
- this_object->cpu = cpu;
- this_object->index = i;
+ const struct attribute_group *
+@@ -559,7 +555,7 @@ cache_get_priv_group(struct cacheinfo *this_leaf)
+ if (this_leaf->level < 3 || !nb)
+ return NULL;
- this_leaf = CPUID4_INFO_IDX(cpu, i);
+- if (nb && nb->l3_cache.indices)
++ if (nb->l3_cache.indices)
+ init_amd_l3_attrs();
-- ktype_cache.default_attrs = default_attrs;
-+ ktype = &ktype_cache;
- #ifdef CONFIG_AMD_NB
- if (this_leaf->base.nb)
-- ktype_cache.default_attrs = amd_l3_attrs();
-+ ktype = &ktype_cache_amd_nb;
- #endif
- retval = kobject_init_and_add(&(this_object->kobj),
-- &ktype_cache,
-+ ktype,
- per_cpu(ici_cache_kobject, cpu),
- "index%1lu", i);
- if (unlikely(retval)) {
+ return &cache_private_group;
diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c
-index 3c036cb..3b5677d 100644
+index 20190bd..cadb2ab 100644
--- a/arch/x86/kernel/cpu/mcheck/mce.c
+++ b/arch/x86/kernel/cpu/mcheck/mce.c
@@ -47,6 +47,7 @@
#include "mce-internal.h"
-@@ -258,7 +259,7 @@ static void print_mce(struct mce *m)
+@@ -256,7 +257,7 @@ static void print_mce(struct mce *m)
!(m->mcgstatus & MCG_STATUS_EIPV) ? " !INEXACT!" : "",
m->cs, m->ip);
print_symbol("{%s}", m->ip);
pr_cont("\n");
}
-@@ -291,10 +292,10 @@ static void print_mce(struct mce *m)
+@@ -289,10 +290,10 @@ static void print_mce(struct mce *m)
#define PANIC_TIMEOUT 5 /* 5 seconds */
/* Panic in progress. Enable interrupts and wait for final IPI */
static void wait_for_panic(void)
-@@ -318,7 +319,7 @@ static void mce_panic(const char *msg, struct mce *final, char *exp)
+@@ -316,7 +317,7 @@ static void mce_panic(const char *msg, struct mce *final, char *exp)
/*
* Make sure only one CPU runs in machine check panic
*/
wait_for_panic();
barrier();
-@@ -326,7 +327,7 @@ static void mce_panic(const char *msg, struct mce *final, char *exp)
+@@ -324,7 +325,7 @@ static void mce_panic(const char *msg, struct mce *final, char *exp)
console_verbose();
} else {
/* Don't log too much for fake panic */
return;
}
/* First print corrected ones that are still unlogged */
-@@ -365,7 +366,7 @@ static void mce_panic(const char *msg, struct mce *final, char *exp)
+@@ -363,7 +364,7 @@ static void mce_panic(const char *msg, struct mce *final, char *exp)
if (!fake_panic) {
if (panic_timeout == 0)
panic_timeout = mca_cfg.panic_timeout;
} else
pr_emerg(HW_ERR "Fake kernel panic: %s\n", msg);
}
-@@ -743,7 +744,7 @@ static int mce_timed_out(u64 *t, const char *msg)
+@@ -749,7 +750,7 @@ static int mce_timed_out(u64 *t, const char *msg)
* might have been modified by someone else.
*/
rmb();
wait_for_panic();
if (!mca_cfg.monarch_timeout)
goto out;
-@@ -1669,7 +1670,7 @@ static void unexpected_machine_check(struct pt_regs *regs, long error_code)
+@@ -1679,7 +1680,7 @@ static void unexpected_machine_check(struct pt_regs *regs, long error_code)
}
/* Call the installed machine check handler for this CPU setup. */
unexpected_machine_check;
/*
-@@ -1692,7 +1693,9 @@ void mcheck_cpu_init(struct cpuinfo_x86 *c)
+@@ -1702,7 +1703,9 @@ void mcheck_cpu_init(struct cpuinfo_x86 *c)
return;
}
__mcheck_cpu_init_generic();
__mcheck_cpu_init_vendor(c);
-@@ -1706,7 +1709,7 @@ void mcheck_cpu_init(struct cpuinfo_x86 *c)
+@@ -1716,7 +1719,7 @@ void mcheck_cpu_init(struct cpuinfo_x86 *c)
*/
static DEFINE_SPINLOCK(mce_chrdev_state_lock);
static int mce_chrdev_open_exclu; /* already open exclusive? */
static int mce_chrdev_open(struct inode *inode, struct file *file)
-@@ -1714,7 +1717,7 @@ static int mce_chrdev_open(struct inode *inode, struct file *file)
+@@ -1724,7 +1727,7 @@ static int mce_chrdev_open(struct inode *inode, struct file *file)
spin_lock(&mce_chrdev_state_lock);
if (mce_chrdev_open_exclu ||
spin_unlock(&mce_chrdev_state_lock);
return -EBUSY;
-@@ -1722,7 +1725,7 @@ static int mce_chrdev_open(struct inode *inode, struct file *file)
+@@ -1732,7 +1735,7 @@ static int mce_chrdev_open(struct inode *inode, struct file *file)
if (file->f_flags & O_EXCL)
mce_chrdev_open_exclu = 1;
spin_unlock(&mce_chrdev_state_lock);
-@@ -1733,7 +1736,7 @@ static int mce_chrdev_release(struct inode *inode, struct file *file)
+@@ -1743,7 +1746,7 @@ static int mce_chrdev_release(struct inode *inode, struct file *file)
{
spin_lock(&mce_chrdev_state_lock);
mce_chrdev_open_exclu = 0;
spin_unlock(&mce_chrdev_state_lock);
-@@ -2408,7 +2411,7 @@ static __init void mce_init_banks(void)
+@@ -2419,7 +2422,7 @@ static __init void mce_init_banks(void)
for (i = 0; i < mca_cfg.banks; i++) {
struct mce_bank *b = &mce_banks[i];
sysfs_attr_init(&a->attr);
a->attr.name = b->attrname;
-@@ -2515,7 +2518,7 @@ struct dentry *mce_get_debugfs_dir(void)
+@@ -2526,7 +2529,7 @@ struct dentry *mce_get_debugfs_dir(void)
static void mce_reset(void)
{
cpu_missing = 0;
};
diff --git a/arch/x86/kernel/cpu/microcode/intel.c b/arch/x86/kernel/cpu/microcode/intel.c
-index 746e7fd..8dc677e 100644
+index a41bead..4e3685b 100644
--- a/arch/x86/kernel/cpu/microcode/intel.c
+++ b/arch/x86/kernel/cpu/microcode/intel.c
@@ -298,13 +298,13 @@ static enum ucode_state request_microcode_fw(int cpu, struct device *device,
extern int generic_get_free_region(unsigned long base, unsigned long size,
int replace_reg);
diff --git a/arch/x86/kernel/cpu/perf_event.c b/arch/x86/kernel/cpu/perf_event.c
-index b71a7f8..534af0e 100644
+index aa4e3a7..469370f 100644
--- a/arch/x86/kernel/cpu/perf_event.c
+++ b/arch/x86/kernel/cpu/perf_event.c
-@@ -1376,7 +1376,7 @@ static void __init pmu_check_apic(void)
+@@ -1509,7 +1509,7 @@ static void __init pmu_check_apic(void)
}
.name = "format",
.attrs = NULL,
};
-@@ -1475,7 +1475,7 @@ static struct attribute *events_attr[] = {
+@@ -1608,7 +1608,7 @@ static struct attribute *events_attr[] = {
NULL,
};
.name = "events",
.attrs = events_attr,
};
-@@ -2037,7 +2037,7 @@ static unsigned long get_segment_base(unsigned int segment)
+@@ -2181,7 +2181,7 @@ static unsigned long get_segment_base(unsigned int segment)
if (idx > GDT_ENTRIES)
return 0;
}
return get_desc_base(desc + idx);
-@@ -2127,7 +2127,7 @@ perf_callchain_user(struct perf_callchain_entry *entry, struct pt_regs *regs)
+@@ -2271,7 +2271,7 @@ perf_callchain_user(struct perf_callchain_entry *entry, struct pt_regs *regs)
break;
perf_callchain_store(entry, frame.return_address);
while (amd_iommu_v2_event_descs[i].attr.attr.name)
diff --git a/arch/x86/kernel/cpu/perf_event_intel.c b/arch/x86/kernel/cpu/perf_event_intel.c
-index 2589906..1ca1000 100644
+index 2813ea0..3ef5969c8 100644
--- a/arch/x86/kernel/cpu/perf_event_intel.c
+++ b/arch/x86/kernel/cpu/perf_event_intel.c
-@@ -2353,10 +2353,10 @@ __init int intel_pmu_init(void)
+@@ -3033,10 +3033,10 @@ __init int intel_pmu_init(void)
x86_pmu.num_counters_fixed = max((int)edx.split.num_counters_fixed, 3);
if (boot_cpu_has(X86_FEATURE_PDCM)) {
}
intel_ds_init();
+diff --git a/arch/x86/kernel/cpu/perf_event_intel_bts.c b/arch/x86/kernel/cpu/perf_event_intel_bts.c
+index 7795f3f..3535b76 100644
+--- a/arch/x86/kernel/cpu/perf_event_intel_bts.c
++++ b/arch/x86/kernel/cpu/perf_event_intel_bts.c
+@@ -252,7 +252,7 @@ static void bts_event_start(struct perf_event *event, int flags)
+ __bts_event_start(event);
+
+ /* PMI handler: this counter is running and likely generating PMIs */
+- ACCESS_ONCE(bts->started) = 1;
++ ACCESS_ONCE_RW(bts->started) = 1;
+ }
+
+ static void __bts_event_stop(struct perf_event *event)
+@@ -266,7 +266,7 @@ static void __bts_event_stop(struct perf_event *event)
+ if (event->hw.state & PERF_HES_STOPPED)
+ return;
+
+- ACCESS_ONCE(event->hw.state) |= PERF_HES_STOPPED;
++ ACCESS_ONCE_RW(event->hw.state) |= PERF_HES_STOPPED;
+ }
+
+ static void bts_event_stop(struct perf_event *event, int flags)
+@@ -274,7 +274,7 @@ static void bts_event_stop(struct perf_event *event, int flags)
+ struct bts_ctx *bts = this_cpu_ptr(&bts_ctx);
+
+ /* PMI handler: don't restart this counter */
+- ACCESS_ONCE(bts->started) = 0;
++ ACCESS_ONCE_RW(bts->started) = 0;
+
+ __bts_event_stop(event);
+
+diff --git a/arch/x86/kernel/cpu/perf_event_intel_cqm.c b/arch/x86/kernel/cpu/perf_event_intel_cqm.c
+index e4d1b8b..2c6ffa0 100644
+--- a/arch/x86/kernel/cpu/perf_event_intel_cqm.c
++++ b/arch/x86/kernel/cpu/perf_event_intel_cqm.c
+@@ -1352,7 +1352,9 @@ static int __init intel_cqm_init(void)
+ goto out;
+ }
+
+- event_attr_intel_cqm_llc_scale.event_str = str;
++ pax_open_kernel();
++ *(const char **)&event_attr_intel_cqm_llc_scale.event_str = str;
++ pax_close_kernel();
+
+ ret = intel_cqm_setup_rmid_cache();
+ if (ret)
+diff --git a/arch/x86/kernel/cpu/perf_event_intel_pt.c b/arch/x86/kernel/cpu/perf_event_intel_pt.c
+index 123ff1b..d53e500 100644
+--- a/arch/x86/kernel/cpu/perf_event_intel_pt.c
++++ b/arch/x86/kernel/cpu/perf_event_intel_pt.c
+@@ -116,16 +116,12 @@ static const struct attribute_group *pt_attr_groups[] = {
+
+ static int __init pt_pmu_hw_init(void)
+ {
+- struct dev_ext_attribute *de_attrs;
+- struct attribute **attrs;
+- size_t size;
+- int ret;
++ static struct dev_ext_attribute de_attrs[ARRAY_SIZE(pt_caps)];
++ static struct attribute *attrs[ARRAY_SIZE(pt_caps)];
+ long i;
+
+- attrs = NULL;
+- ret = -ENODEV;
+ if (!test_cpu_cap(&boot_cpu_data, X86_FEATURE_INTEL_PT))
+- goto fail;
++ return -ENODEV;
+
+ for (i = 0; i < PT_CPUID_LEAVES; i++) {
+ cpuid_count(20, i,
+@@ -135,39 +131,25 @@ static int __init pt_pmu_hw_init(void)
+ &pt_pmu.caps[CR_EDX + i*4]);
+ }
+
+- ret = -ENOMEM;
+- size = sizeof(struct attribute *) * (ARRAY_SIZE(pt_caps)+1);
+- attrs = kzalloc(size, GFP_KERNEL);
+- if (!attrs)
+- goto fail;
+-
+- size = sizeof(struct dev_ext_attribute) * (ARRAY_SIZE(pt_caps)+1);
+- de_attrs = kzalloc(size, GFP_KERNEL);
+- if (!de_attrs)
+- goto fail;
+-
++ pax_open_kernel();
+ for (i = 0; i < ARRAY_SIZE(pt_caps); i++) {
+- struct dev_ext_attribute *de_attr = de_attrs + i;
++ struct dev_ext_attribute *de_attr = &de_attrs[i];
+
+- de_attr->attr.attr.name = pt_caps[i].name;
++ *(const char **)&de_attr->attr.attr.name = pt_caps[i].name;
+
+ sysfs_attr_init(&de_attr->attr.attr);
+
+- de_attr->attr.attr.mode = S_IRUGO;
+- de_attr->attr.show = pt_cap_show;
+- de_attr->var = (void *)i;
++ *(umode_t *)&de_attr->attr.attr.mode = S_IRUGO;
++ *(void **)&de_attr->attr.show = pt_cap_show;
++ *(void **)&de_attr->var = (void *)i;
+
+ attrs[i] = &de_attr->attr.attr;
+ }
+
+- pt_cap_group.attrs = attrs;
++ *(struct attribute ***)&pt_cap_group.attrs = attrs;
++ pax_close_kernel();
+
+ return 0;
+-
+-fail:
+- kfree(attrs);
+-
+- return ret;
+ }
+
+ #define PT_CONFIG_MASK (RTIT_CTL_TSC_EN | RTIT_CTL_DISRETC)
+@@ -928,7 +910,7 @@ static void pt_event_start(struct perf_event *event, int mode)
+ return;
+ }
+
+- ACCESS_ONCE(pt->handle_nmi) = 1;
++ ACCESS_ONCE_RW(pt->handle_nmi) = 1;
+ event->hw.state = 0;
+
+ pt_config_buffer(buf->cur->table, buf->cur_idx,
+@@ -945,7 +927,7 @@ static void pt_event_stop(struct perf_event *event, int mode)
+ * Protect against the PMI racing with disabling wrmsr,
+ * see comment in intel_pt_interrupt().
+ */
+- ACCESS_ONCE(pt->handle_nmi) = 0;
++ ACCESS_ONCE_RW(pt->handle_nmi) = 0;
+ pt_config_start(false);
+
+ if (event->hw.state == PERF_HES_STOPPED)
diff --git a/arch/x86/kernel/cpu/perf_event_intel_rapl.c b/arch/x86/kernel/cpu/perf_event_intel_rapl.c
-index c4bb8b8..9f7384d 100644
+index 358c54a..f068235 100644
--- a/arch/x86/kernel/cpu/perf_event_intel_rapl.c
+++ b/arch/x86/kernel/cpu/perf_event_intel_rapl.c
-@@ -465,7 +465,7 @@ static struct attribute *rapl_events_hsw_attr[] = {
+@@ -487,7 +487,7 @@ static struct attribute *rapl_events_hsw_attr[] = {
NULL,
};
.attrs = NULL, /* patched at runtime */
};
diff --git a/arch/x86/kernel/cpu/perf_event_intel_uncore.c b/arch/x86/kernel/cpu/perf_event_intel_uncore.c
-index c635b8b..b78835e 100644
+index 90b7c50..7863ae3 100644
--- a/arch/x86/kernel/cpu/perf_event_intel_uncore.c
+++ b/arch/x86/kernel/cpu/perf_event_intel_uncore.c
-@@ -733,7 +733,7 @@ static void __init uncore_types_exit(struct intel_uncore_type **types)
+@@ -732,7 +732,7 @@ static void __init uncore_types_exit(struct intel_uncore_type **types)
static int __init uncore_type_init(struct intel_uncore_type *type)
{
struct intel_uncore_pmu *pmus;
int i, j;
diff --git a/arch/x86/kernel/cpu/perf_event_intel_uncore.h b/arch/x86/kernel/cpu/perf_event_intel_uncore.h
-index 6c8c1e7..515b98a 100644
+index ceac8f5..a562de7 100644
--- a/arch/x86/kernel/cpu/perf_event_intel_uncore.h
+++ b/arch/x86/kernel/cpu/perf_event_intel_uncore.h
-@@ -114,7 +114,7 @@ struct intel_uncore_box {
+@@ -115,7 +115,7 @@ struct intel_uncore_box {
struct uncore_event_desc {
struct kobj_attribute attr;
const char *config;
{
.notifier_call = cpuid_class_cpu_callback,
};
-diff --git a/arch/x86/kernel/crash.c b/arch/x86/kernel/crash.c
-index aceb2f9..c76d3e3 100644
---- a/arch/x86/kernel/crash.c
-+++ b/arch/x86/kernel/crash.c
-@@ -105,7 +105,7 @@ static void kdump_nmi_callback(int cpu, struct pt_regs *regs)
- #ifdef CONFIG_X86_32
- struct pt_regs fixed_regs;
-
-- if (!user_mode_vm(regs)) {
-+ if (!user_mode(regs)) {
- crash_fixup_ss_esp(&fixed_regs, regs);
- regs = &fixed_regs;
- }
diff --git a/arch/x86/kernel/crash_dump_64.c b/arch/x86/kernel/crash_dump_64.c
index afa64ad..dce67dd 100644
--- a/arch/x86/kernel/crash_dump_64.c
.__cr3 = __pa_nodebug(swapper_pg_dir),
diff --git a/arch/x86/kernel/dumpstack.c b/arch/x86/kernel/dumpstack.c
-index cf3df1d..b637d9a 100644
+index 9c30acf..8cf2411 100644
--- a/arch/x86/kernel/dumpstack.c
+++ b/arch/x86/kernel/dumpstack.c
@@ -2,6 +2,9 @@
#include <linux/kallsyms.h>
#include <linux/kprobes.h>
#include <linux/uaccess.h>
-@@ -33,23 +36,21 @@ static void printk_stack_address(unsigned long address, int reliable)
+@@ -35,23 +38,21 @@ static void printk_stack_address(unsigned long address, int reliable,
void printk_address(unsigned long address)
{
index = task->curr_ret_stack;
if (!task->ret_stack || index < *graph)
-@@ -66,7 +67,7 @@ print_ftrace_graph_addr(unsigned long addr, void *data,
+@@ -68,7 +69,7 @@ print_ftrace_graph_addr(unsigned long addr, void *data,
static inline void
print_ftrace_graph_addr(unsigned long addr, void *data,
const struct stacktrace_ops *ops,
{ }
#endif
-@@ -77,10 +78,8 @@ print_ftrace_graph_addr(unsigned long addr, void *data,
+@@ -79,10 +80,8 @@ print_ftrace_graph_addr(unsigned long addr, void *data,
* severe exception (double fault, nmi, stack fault, debug, mce) hardware stack
*/
if (end) {
if (p < end && p >= (end-THREAD_SIZE))
return 1;
-@@ -91,14 +90,14 @@ static inline int valid_stack_ptr(struct thread_info *tinfo,
+@@ -93,14 +92,14 @@ static inline int valid_stack_ptr(struct thread_info *tinfo,
}
unsigned long
unsigned long addr;
addr = *stack;
-@@ -110,7 +109,7 @@ print_context_stack(struct thread_info *tinfo,
+@@ -112,7 +111,7 @@ print_context_stack(struct thread_info *tinfo,
} else {
ops->address(data, addr, 0);
}
}
stack++;
}
-@@ -119,7 +118,7 @@ print_context_stack(struct thread_info *tinfo,
+@@ -121,7 +120,7 @@ print_context_stack(struct thread_info *tinfo,
EXPORT_SYMBOL_GPL(print_context_stack);
unsigned long
unsigned long *stack, unsigned long bp,
const struct stacktrace_ops *ops, void *data,
unsigned long *end, int *graph)
-@@ -127,7 +126,7 @@ print_context_stack_bp(struct thread_info *tinfo,
+@@ -129,7 +128,7 @@ print_context_stack_bp(struct thread_info *tinfo,
struct stack_frame *frame = (struct stack_frame *)bp;
unsigned long *ret_addr = &frame->return_address;
unsigned long addr = *ret_addr;
if (!__kernel_text_address(addr))
-@@ -136,7 +135,7 @@ print_context_stack_bp(struct thread_info *tinfo,
+@@ -138,7 +137,7 @@ print_context_stack_bp(struct thread_info *tinfo,
ops->address(data, addr, 1);
frame = frame->next_frame;
ret_addr = &frame->return_address;
}
return (unsigned long)frame;
-@@ -155,7 +154,7 @@ static int print_trace_stack(void *data, char *name)
- static void print_trace_address(void *data, unsigned long addr, int reliable)
- {
- touch_nmi_watchdog();
-- printk(data);
-+ printk("%s", (char *)data);
- printk_stack_address(addr, reliable);
- }
-
-@@ -225,6 +224,8 @@ unsigned long oops_begin(void)
+@@ -226,6 +225,8 @@ unsigned long oops_begin(void)
EXPORT_SYMBOL_GPL(oops_begin);
NOKPROBE_SYMBOL(oops_begin);
void oops_end(unsigned long flags, struct pt_regs *regs, int signr)
{
if (regs && kexec_should_crash(current))
-@@ -246,7 +247,10 @@ void oops_end(unsigned long flags, struct pt_regs *regs, int signr)
+@@ -247,7 +248,10 @@ void oops_end(unsigned long flags, struct pt_regs *regs, int signr)
panic("Fatal exception in interrupt");
if (panic_on_oops)
panic("Fatal exception");
}
NOKPROBE_SYMBOL(oops_end);
-@@ -278,7 +282,7 @@ int __die(const char *str, struct pt_regs *regs, long err)
- print_modules();
- show_regs(regs);
- #ifdef CONFIG_X86_32
-- if (user_mode_vm(regs)) {
-+ if (user_mode(regs)) {
- sp = regs->sp;
- ss = regs->ss & 0xffff;
- } else {
-@@ -307,7 +311,7 @@ void die(const char *str, struct pt_regs *regs, long err)
- unsigned long flags = oops_begin();
- int sig = SIGSEGV;
-
-- if (!user_mode_vm(regs))
-+ if (!user_mode(regs))
- report_bug(regs->ip, regs);
-
- if (__die(str, regs, err))
diff --git a/arch/x86/kernel/dumpstack_32.c b/arch/x86/kernel/dumpstack_32.c
-index 5abd4cd..c65733b 100644
+index 464ffd6..01f2cda 100644
--- a/arch/x86/kernel/dumpstack_32.c
+++ b/arch/x86/kernel/dumpstack_32.c
@@ -61,15 +61,14 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs,
end_stack, &graph);
/* Stop if not on irq stack */
-@@ -123,27 +122,28 @@ void show_regs(struct pt_regs *regs)
- int i;
-
- show_regs_print_info(KERN_EMERG);
-- __show_regs(regs, !user_mode_vm(regs));
-+ __show_regs(regs, !user_mode(regs));
-
- /*
- * When in-kernel, we also print out the stack and code at the
- * time of the fault..
- */
-- if (!user_mode_vm(regs)) {
-+ if (!user_mode(regs)) {
- unsigned int code_prologue = code_bytes * 43 / 64;
+@@ -137,16 +136,17 @@ void show_regs(struct pt_regs *regs)
unsigned int code_len = code_bytes;
unsigned char c;
u8 *ip;
code_len = code_len - code_prologue + 1;
}
for (i = 0; i < code_len; i++, ip++) {
-@@ -152,7 +152,7 @@ void show_regs(struct pt_regs *regs)
+@@ -155,7 +155,7 @@ void show_regs(struct pt_regs *regs)
pr_cont(" Bad EIP value.");
break;
}
pr_cont(" <%02x>", c);
else
pr_cont(" %02x", c);
-@@ -165,6 +165,7 @@ int is_valid_bugaddr(unsigned long ip)
+@@ -168,6 +168,7 @@ int is_valid_bugaddr(unsigned long ip)
{
unsigned short ud2;
if (ip < PAGE_OFFSET)
return 0;
if (probe_kernel_address((unsigned short *)ip, ud2))
-@@ -172,3 +173,15 @@ int is_valid_bugaddr(unsigned long ip)
+@@ -175,3 +176,15 @@ int is_valid_bugaddr(unsigned long ip)
return ud2 == 0x0b0f;
}
+
+#if defined(CONFIG_PAX_MEMORY_STACKLEAK) || defined(CONFIG_PAX_USERCOPY)
-+void pax_check_alloca(unsigned long size)
++void __used pax_check_alloca(unsigned long size)
+{
+ unsigned long sp = (unsigned long)&sp, stack_left;
+
+EXPORT_SYMBOL(pax_check_alloca);
+#endif
diff --git a/arch/x86/kernel/dumpstack_64.c b/arch/x86/kernel/dumpstack_64.c
-index ff86f19..73eabf4 100644
+index 5f1c626..1cba97e 100644
--- a/arch/x86/kernel/dumpstack_64.c
+++ b/arch/x86/kernel/dumpstack_64.c
@@ -153,12 +153,12 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs,
put_cpu();
}
EXPORT_SYMBOL(dump_trace);
-@@ -344,8 +347,55 @@ int is_valid_bugaddr(unsigned long ip)
+@@ -347,8 +350,55 @@ int is_valid_bugaddr(unsigned long ip)
{
unsigned short ud2;
}
+
+#if defined(CONFIG_PAX_MEMORY_STACKLEAK) || defined(CONFIG_PAX_USERCOPY)
-+void pax_check_alloca(unsigned long size)
++void __used pax_check_alloca(unsigned long size)
+{
+ unsigned long sp = (unsigned long)&sp, stack_start, stack_end;
+ unsigned cpu, used;
+EXPORT_SYMBOL(pax_check_alloca);
+#endif
diff --git a/arch/x86/kernel/e820.c b/arch/x86/kernel/e820.c
-index 46201de..ebffabf 100644
+index e2ce85d..00ccad0 100644
--- a/arch/x86/kernel/e820.c
+++ b/arch/x86/kernel/e820.c
-@@ -794,8 +794,8 @@ unsigned long __init e820_end_of_low_ram_pfn(void)
+@@ -802,8 +802,8 @@ unsigned long __init e820_end_of_low_ram_pfn(void)
static void early_panic(char *msg)
{
static int userdef __initdata;
diff --git a/arch/x86/kernel/early_printk.c b/arch/x86/kernel/early_printk.c
-index a62536a..8444df4 100644
+index 89427d8..00c0d52 100644
--- a/arch/x86/kernel/early_printk.c
+++ b/arch/x86/kernel/early_printk.c
@@ -7,6 +7,7 @@
#include <asm/processor.h>
#include <asm/fcntl.h>
diff --git a/arch/x86/kernel/entry_32.S b/arch/x86/kernel/entry_32.S
-index 31e2d5b..b31c76d 100644
+index 1c30976..71b41b9 100644
--- a/arch/x86/kernel/entry_32.S
+++ b/arch/x86/kernel/entry_32.S
@@ -177,13 +177,154 @@
+#else
+ mov %cr0, %esi
+#endif
-+ bts $16, %esi
++ bts $X86_CR0_WP_BIT, %esi
+ jnc 1f
+ mov %cs, %esi
+ cmp $__KERNEL_CS, %esi
+#else
+ mov %cr0, %esi
+#endif
-+ btr $16, %esi
++ btr $X86_CR0_WP_BIT, %esi
+ ljmp $__KERNEL_CS, $1f
+1:
+#ifdef CONFIG_PARAVIRT
#endif
CFI_ENDPROC
-@@ -395,30 +553,45 @@ sysenter_past_esp:
+@@ -395,33 +553,45 @@ sysenter_past_esp:
/*CFI_REL_OFFSET cs, 0*/
/*
* Push current_thread_info()->sysenter_return to the stack.
-- * A tiny bit of offset fixup is necessary - 4*4 means the 4 words
-- * pushed above; +8 corresponds to copy_thread's esp0 setting.
+- * A tiny bit of offset fixup is necessary: TI_sysenter_return
+- * is relative to thread_info, which is at the bottom of the
+- * kernel stack page. 4*4 means the 4 words pushed above;
+- * TOP_OF_KERNEL_STACK_PADDING takes us to the top of the stack;
+- * and THREAD_SIZE takes us to the bottom.
*/
-- pushl_cfi ((TI_sysenter_return)-THREAD_SIZE+8+4*4)(%esp)
+- pushl_cfi ((TI_sysenter_return) - THREAD_SIZE + TOP_OF_KERNEL_STACK_PADDING + 4*4)(%esp)
+ pushl_cfi $0
CFI_REL_OFFSET eip, 0
testl $_TIF_WORK_SYSCALL_ENTRY,TI_flags(%ebp)
jnz sysenter_audit
sysenter_do_call:
-@@ -434,12 +607,24 @@ sysenter_after_call:
+@@ -437,12 +607,24 @@ sysenter_after_call:
testl $_TIF_ALLWORK_MASK, %ecx
- jne sysexit_audit
+ jnz sysexit_audit
sysenter_exit:
+
+#ifdef CONFIG_PAX_RANDKSTACK
PTGS_TO_GS
ENABLE_INTERRUPTS_SYSEXIT
-@@ -453,6 +638,9 @@ sysenter_audit:
+@@ -456,6 +638,9 @@ sysenter_audit:
pushl_cfi PT_ESI(%esp) /* a3: 5th arg */
pushl_cfi PT_EDX+4(%esp) /* a2: 4th arg */
call __audit_syscall_entry
popl_cfi %ecx /* get that remapped edx off the stack */
popl_cfi %ecx /* get that remapped esi off the stack */
movl PT_EAX(%esp),%eax /* reload syscall number */
-@@ -479,10 +667,16 @@ sysexit_audit:
+@@ -482,10 +667,16 @@ sysexit_audit:
CFI_ENDPROC
.pushsection .fixup,"ax"
PTGS_TO_GS_EX
ENDPROC(ia32_sysenter_target)
-@@ -493,6 +687,11 @@ ENTRY(system_call)
+@@ -496,6 +687,11 @@ ENTRY(system_call)
pushl_cfi %eax # save orig_eax
SAVE_ALL
GET_THREAD_INFO(%ebp)
# system call tracing in operation / emulation
testl $_TIF_WORK_SYSCALL_ENTRY,TI_flags(%ebp)
jnz syscall_trace_entry
-@@ -512,6 +711,15 @@ syscall_exit:
+@@ -515,6 +711,15 @@ syscall_exit:
testl $_TIF_ALLWORK_MASK, %ecx # current->work
- jne syscall_exit_work
+ jnz syscall_exit_work
+restore_all_pax:
+
restore_all:
TRACE_IRQS_IRET
restore_all_notrace:
-@@ -566,14 +774,34 @@ ldt_ss:
+@@ -569,14 +774,34 @@ ldt_ss:
* compensating for the offset by changing to the ESPFIX segment with
* a base address that matches for the difference.
*/
+
+#ifdef CONFIG_PAX_KERNEXEC
+ mov %cr0, %esi
-+ btr $16, %esi
++ btr $X86_CR0_WP_BIT, %esi
+ mov %esi, %cr0
+#endif
+
+ mov %dh, 7 + GDT_ESPFIX_SS /* bits 24..31 */
+
+#ifdef CONFIG_PAX_KERNEXEC
-+ bts $16, %esi
++ bts $X86_CR0_WP_BIT, %esi
+ mov %esi, %cr0
+#endif
+
pushl_cfi $__ESPFIX_SS
pushl_cfi %eax /* new kernel esp */
/* Disable interrupts, but do not irqtrace this section: we
-@@ -603,20 +831,18 @@ work_resched:
+@@ -606,20 +831,18 @@ work_resched:
movl TI_flags(%ebp), %ecx
andl $_TIF_WORK_MASK, %ecx # is there any work to be done other
# than syscall tracing?
#ifdef CONFIG_VM86
testl $X86_EFLAGS_VM, PT_EFLAGS(%esp)
- movl %esp, %eax
- jne work_notifysig_v86 # returning to kernel-space or
+ jnz work_notifysig_v86 # returning to kernel-space or
# vm86-space
1:
-#else
#endif
TRACE_IRQS_ON
ENABLE_INTERRUPTS(CLBR_NONE)
-@@ -637,7 +863,7 @@ work_notifysig_v86:
+@@ -640,7 +863,7 @@ work_notifysig_v86:
movl %eax, %esp
jmp 1b
#endif
# perform syscall exit tracing
ALIGN
-@@ -645,11 +871,14 @@ syscall_trace_entry:
+@@ -648,11 +871,14 @@ syscall_trace_entry:
movl $-ENOSYS,PT_EAX(%esp)
movl %esp, %eax
call syscall_trace_enter
# perform syscall exit tracing
ALIGN
-@@ -662,26 +891,30 @@ syscall_exit_work:
+@@ -665,26 +891,30 @@ syscall_exit_work:
movl %esp, %eax
call syscall_trace_leave
jmp resume_userspace
CFI_ENDPROC
.macro FIXUP_ESPFIX_STACK
-@@ -694,8 +927,15 @@ END(sysenter_badsys)
+@@ -697,8 +927,15 @@ END(sysenter_badsys)
*/
#ifdef CONFIG_X86_ESPFIX32
/* fixup the stack */
shl $16, %eax
addl %esp, %eax /* the adjusted stack pointer */
pushl_cfi $__KERNEL_DS
-@@ -751,7 +991,7 @@ vector=vector+1
- .endr
- 2: jmp common_interrupt
- .endr
+@@ -737,7 +974,7 @@ ENTRY(irq_entries_start)
+ CFI_ADJUST_CFA_OFFSET -4
+ .align 8
+ .endr
-END(irq_entries_start)
+ENDPROC(irq_entries_start)
- .previous
- END(interrupt)
-@@ -808,7 +1048,7 @@ ENTRY(coprocessor_error)
+ /*
+ * the CPU automatically disables interrupts when executing an IRQ vector,
+@@ -790,7 +1027,7 @@ ENTRY(coprocessor_error)
pushl_cfi $do_coprocessor_error
jmp error_code
CFI_ENDPROC
ENTRY(simd_coprocessor_error)
RING0_INT_FRAME
-@@ -821,7 +1061,7 @@ ENTRY(simd_coprocessor_error)
- .section .altinstructions,"a"
- altinstruction_entry 661b, 663f, X86_FEATURE_XMM, 662b-661b, 664f-663f
- .previous
--.section .altinstr_replacement,"ax"
-+.section .altinstr_replacement,"a"
- 663: pushl $do_simd_coprocessor_error
- 664:
- .previous
-@@ -830,7 +1070,7 @@ ENTRY(simd_coprocessor_error)
+@@ -806,7 +1043,7 @@ ENTRY(simd_coprocessor_error)
#endif
jmp error_code
CFI_ENDPROC
ENTRY(device_not_available)
RING0_INT_FRAME
-@@ -839,18 +1079,18 @@ ENTRY(device_not_available)
+@@ -815,18 +1052,18 @@ ENTRY(device_not_available)
pushl_cfi $do_device_not_available
jmp error_code
CFI_ENDPROC
#endif
ENTRY(overflow)
-@@ -860,7 +1100,7 @@ ENTRY(overflow)
+@@ -836,7 +1073,7 @@ ENTRY(overflow)
pushl_cfi $do_overflow
jmp error_code
CFI_ENDPROC
ENTRY(bounds)
RING0_INT_FRAME
-@@ -869,7 +1109,7 @@ ENTRY(bounds)
+@@ -845,7 +1082,7 @@ ENTRY(bounds)
pushl_cfi $do_bounds
jmp error_code
CFI_ENDPROC
ENTRY(invalid_op)
RING0_INT_FRAME
-@@ -878,7 +1118,7 @@ ENTRY(invalid_op)
+@@ -854,7 +1091,7 @@ ENTRY(invalid_op)
pushl_cfi $do_invalid_op
jmp error_code
CFI_ENDPROC
ENTRY(coprocessor_segment_overrun)
RING0_INT_FRAME
-@@ -887,7 +1127,7 @@ ENTRY(coprocessor_segment_overrun)
+@@ -863,7 +1100,7 @@ ENTRY(coprocessor_segment_overrun)
pushl_cfi $do_coprocessor_segment_overrun
jmp error_code
CFI_ENDPROC
ENTRY(invalid_TSS)
RING0_EC_FRAME
-@@ -895,7 +1135,7 @@ ENTRY(invalid_TSS)
+@@ -871,7 +1108,7 @@ ENTRY(invalid_TSS)
pushl_cfi $do_invalid_TSS
jmp error_code
CFI_ENDPROC
ENTRY(segment_not_present)
RING0_EC_FRAME
-@@ -903,7 +1143,7 @@ ENTRY(segment_not_present)
+@@ -879,7 +1116,7 @@ ENTRY(segment_not_present)
pushl_cfi $do_segment_not_present
jmp error_code
CFI_ENDPROC
ENTRY(stack_segment)
RING0_EC_FRAME
-@@ -911,7 +1151,7 @@ ENTRY(stack_segment)
+@@ -887,7 +1124,7 @@ ENTRY(stack_segment)
pushl_cfi $do_stack_segment
jmp error_code
CFI_ENDPROC
ENTRY(alignment_check)
RING0_EC_FRAME
-@@ -919,7 +1159,7 @@ ENTRY(alignment_check)
+@@ -895,7 +1132,7 @@ ENTRY(alignment_check)
pushl_cfi $do_alignment_check
jmp error_code
CFI_ENDPROC
ENTRY(divide_error)
RING0_INT_FRAME
-@@ -928,7 +1168,7 @@ ENTRY(divide_error)
+@@ -904,7 +1141,7 @@ ENTRY(divide_error)
pushl_cfi $do_divide_error
jmp error_code
CFI_ENDPROC
#ifdef CONFIG_X86_MCE
ENTRY(machine_check)
-@@ -938,7 +1178,7 @@ ENTRY(machine_check)
+@@ -914,7 +1151,7 @@ ENTRY(machine_check)
pushl_cfi machine_check_vector
jmp error_code
CFI_ENDPROC
#endif
ENTRY(spurious_interrupt_bug)
-@@ -948,7 +1188,7 @@ ENTRY(spurious_interrupt_bug)
+@@ -924,7 +1161,7 @@ ENTRY(spurious_interrupt_bug)
pushl_cfi $do_spurious_interrupt_bug
jmp error_code
CFI_ENDPROC
#ifdef CONFIG_XEN
/* Xen doesn't set %esp to be precisely what the normal sysenter
-@@ -1057,7 +1297,7 @@ BUILD_INTERRUPT3(hyperv_callback_vector, HYPERVISOR_CALLBACK_VECTOR,
+@@ -1033,7 +1270,7 @@ BUILD_INTERRUPT3(hyperv_callback_vector, HYPERVISOR_CALLBACK_VECTOR,
ENTRY(mcount)
ret
ENTRY(ftrace_caller)
pushl %eax
-@@ -1087,7 +1327,7 @@ ftrace_graph_call:
+@@ -1063,7 +1300,7 @@ ftrace_graph_call:
.globl ftrace_stub
ftrace_stub:
ret
ENTRY(ftrace_regs_caller)
pushf /* push flags before compare (in cs location) */
-@@ -1185,7 +1425,7 @@ trace:
+@@ -1161,7 +1398,7 @@ trace:
popl %ecx
popl %eax
jmp ftrace_stub
#endif /* CONFIG_DYNAMIC_FTRACE */
#endif /* CONFIG_FUNCTION_TRACER */
-@@ -1203,7 +1443,7 @@ ENTRY(ftrace_graph_caller)
+@@ -1179,7 +1416,7 @@ ENTRY(ftrace_graph_caller)
popl %ecx
popl %eax
ret
.globl return_to_handler
return_to_handler:
-@@ -1264,15 +1504,18 @@ error_code:
+@@ -1233,15 +1470,18 @@ error_code:
movl $-1, PT_ORIG_EAX(%esp) # no syscall to restart
REG_TO_PTGS %ecx
SET_KERNEL_GS %ecx
/*
* Debug traps and NMI can happen at the one SYSENTER instruction
-@@ -1315,7 +1558,7 @@ debug_stack_correct:
+@@ -1284,7 +1524,7 @@ debug_stack_correct:
call do_debug
jmp ret_from_exception
CFI_ENDPROC
/*
* NMI is doubly nasty. It can happen _while_ we're handling
-@@ -1355,6 +1598,9 @@ nmi_stack_correct:
+@@ -1324,6 +1564,9 @@ nmi_stack_correct:
xorl %edx,%edx # zero error code
movl %esp,%eax # pt_regs pointer
call do_nmi
jmp restore_all_notrace
CFI_ENDPROC
-@@ -1392,13 +1638,16 @@ nmi_espfix_stack:
+@@ -1361,13 +1604,16 @@ nmi_espfix_stack:
FIXUP_ESPFIX_STACK # %eax == %esp
xorl %edx,%edx # zero error code
call do_nmi
ENTRY(int3)
RING0_INT_FRAME
-@@ -1411,14 +1660,14 @@ ENTRY(int3)
+@@ -1380,14 +1626,14 @@ ENTRY(int3)
call do_int3
jmp ret_from_exception
CFI_ENDPROC
#ifdef CONFIG_KVM_GUEST
ENTRY(async_page_fault)
-@@ -1427,6 +1676,6 @@ ENTRY(async_page_fault)
+@@ -1396,6 +1642,6 @@ ENTRY(async_page_fault)
pushl_cfi $do_async_page_fault
jmp error_code
CFI_ENDPROC
#endif
diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S
-index f0095a7..ec77893 100644
+index 02c2eff..a13739f 100644
--- a/arch/x86/kernel/entry_64.S
+++ b/arch/x86/kernel/entry_64.S
-@@ -59,6 +59,8 @@
+@@ -46,6 +46,8 @@
#include <asm/smap.h>
#include <asm/pgtable_types.h>
#include <linux/err.h>
/* Avoid __ASSEMBLER__'ifying <linux/audit.h> just for this. */
#include <linux/elf-em.h>
-@@ -81,6 +83,431 @@ ENTRY(native_usergs_sysret64)
+@@ -64,6 +66,401 @@ ENTRY(native_usergs_sysret64)
ENDPROC(native_usergs_sysret64)
#endif /* CONFIG_PARAVIRT */
+
+#ifdef CONFIG_PAX_KERNEXEC
+ GET_CR0_INTO_RDI
-+ bts $16,%rdi
++ bts $X86_CR0_WP_BIT,%rdi
+ jnc 3f
+ mov %cs,%edi
+ cmp $__KERNEL_CS,%edi
+#endif
+
+#ifdef CONFIG_PAX_MEMORY_UDEREF
-+ 661: jmp 111f
-+ .pushsection .altinstr_replacement, "a"
-+ 662: ASM_NOP2
-+ .popsection
-+ .pushsection .altinstructions, "a"
-+ altinstruction_entry 661b, 662b, X86_FEATURE_PCID, 2, 2
-+ .popsection
++ ALTERNATIVE "jmp 111f", "", X86_FEATURE_PCID
+ GET_CR3_INTO_RDI
+ cmp $0,%dil
+ jnz 112f
+ cmp $__KERNEXEC_KERNEL_CS,%edi
+ jz 2f
+ GET_CR0_INTO_RDI
-+ bts $16,%rdi
++ bts $X86_CR0_WP_BIT,%rdi
+ jnc 4f
+1:
+#endif
+
+#ifdef CONFIG_PAX_MEMORY_UDEREF
-+ 661: jmp 111f
-+ .pushsection .altinstr_replacement, "a"
-+ 662: ASM_NOP2
-+ .popsection
-+ .pushsection .altinstructions, "a"
-+ altinstruction_entry 661b, 662b, X86_FEATURE_PCID, 2, 2
-+ .popsection
++ ALTERNATIVE "jmp 111f", "", X86_FEATURE_PCID
+ mov %ss,%edi
+ cmp $__UDEREF_KERNEL_DS,%edi
+ jnz 111f
+
+#ifdef CONFIG_PAX_KERNEXEC
+2: GET_CR0_INTO_RDI
-+ btr $16,%rdi
++ btr $X86_CR0_WP_BIT,%rdi
+ jnc 4f
+ ljmpq __KERNEL_CS,3f
+3: SET_RDI_INTO_CR0
+ PV_SAVE_REGS(CLBR_RDI)
+#endif
+
-+ 661: jmp 111f
-+ .pushsection .altinstr_replacement, "a"
-+ 662: ASM_NOP2
-+ .popsection
-+ .pushsection .altinstructions, "a"
-+ altinstruction_entry 661b, 662b, X86_FEATURE_PCID, 2, 2
-+ .popsection
++ ALTERNATIVE "jmp 111f", "", X86_FEATURE_PCID
+ GET_CR3_INTO_RDI
+ cmp $1,%dil
+ jnz 4f
+
+#ifdef CONFIG_PAX_KERNEXEC
+ GET_CR0_INTO_RDI
-+ bts $16,%rdi
++ bts $X86_CR0_WP_BIT,%rdi
+ SET_RDI_INTO_CR0
+#endif
+
+#endif
+
+ GET_CR3_INTO_RDI
-+ 661: jmp 1f
-+ .pushsection .altinstr_replacement, "a"
-+ 662: ASM_NOP2
-+ .popsection
-+ .pushsection .altinstructions, "a"
-+ altinstruction_entry 661b, 662b, X86_FEATURE_PCID, 2, 2
-+ .popsection
++ ALTERNATIVE "jmp 1f", "", X86_FEATURE_PCID
+ cmp $0,%dil
+ jnz 3f
+ add $4097,%rdi
+
+#ifdef CONFIG_PAX_KERNEXEC
+ GET_CR0_INTO_RDI
-+ btr $16,%rdi
++ btr $X86_CR0_WP_BIT,%rdi
+ jnc 3f
+ SET_RDI_INTO_CR0
+#endif
+
+#ifdef CONFIG_PAX_KERNEXEC
+ GET_CR0_INTO_RDI
-+ bts $16,%rdi
++ bts $X86_CR0_WP_BIT,%rdi
+ jc 110f
+ SET_RDI_INTO_CR0
+ or $2,%ebx
+#endif
+
+#ifdef CONFIG_PAX_MEMORY_UDEREF
-+ 661: jmp 111f
-+ .pushsection .altinstr_replacement, "a"
-+ 662: ASM_NOP2
-+ .popsection
-+ .pushsection .altinstructions, "a"
-+ altinstruction_entry 661b, 662b, X86_FEATURE_PCID, 2, 2
-+ .popsection
++ ALTERNATIVE "jmp 111f", "", X86_FEATURE_PCID
+ GET_CR3_INTO_RDI
+ cmp $0,%dil
+ jz 111f
+ btr $1,%ebx
+ jnc 110f
+ GET_CR0_INTO_RDI
-+ btr $16,%rdi
++ btr $X86_CR0_WP_BIT,%rdi
+ SET_RDI_INTO_CR0
+110:
+#endif
+ENDPROC(pax_erase_kstack)
+#endif
- .macro TRACE_IRQS_IRETQ offset=ARGOFFSET
+ .macro TRACE_IRQS_IRETQ
#ifdef CONFIG_TRACE_IRQFLAGS
-@@ -117,7 +544,7 @@ ENDPROC(native_usergs_sysret64)
+@@ -100,7 +497,7 @@ ENDPROC(native_usergs_sysret64)
.endm
- .macro TRACE_IRQS_IRETQ_DEBUG offset=ARGOFFSET
-- bt $9,EFLAGS-\offset(%rsp) /* interrupts off? */
-+ bt $X86_EFLAGS_IF_BIT,EFLAGS-\offset(%rsp) /* interrupts off? */
+ .macro TRACE_IRQS_IRETQ_DEBUG
+- bt $9,EFLAGS(%rsp) /* interrupts off? */
++ bt $X86_EFLAGS_IF_BIT,EFLAGS(%rsp) /* interrupts off? */
jnc 1f
TRACE_IRQS_ON_DEBUG
1:
-@@ -243,9 +670,52 @@ ENTRY(save_paranoid)
- js 1f /* negative -> in kernel */
- SWAPGS
- xorl %ebx,%ebx
--1: ret
-+1:
-+#ifdef CONFIG_PAX_MEMORY_UDEREF
-+ testb $3, CS+8(%rsp)
-+ jnz 1f
-+ pax_enter_kernel
-+ jmp 2f
-+1: pax_enter_kernel_user
-+2:
-+#else
-+ pax_enter_kernel
+@@ -221,14 +618,6 @@ GLOBAL(system_call_after_swapgs)
+ /* Construct struct pt_regs on stack */
+ pushq_cfi $__USER_DS /* pt_regs->ss */
+ pushq_cfi PER_CPU_VAR(rsp_scratch) /* pt_regs->sp */
+- /*
+- * Re-enable interrupts.
+- * We use 'rsp_scratch' as a scratch space, hence irq-off block above
+- * must execute atomically in the face of possible interrupt-driven
+- * task preemption. We must enable interrupts only after we're done
+- * with using rsp_scratch:
+- */
+- ENABLE_INTERRUPTS(CLBR_NONE)
+ pushq_cfi %r11 /* pt_regs->flags */
+ pushq_cfi $__USER_CS /* pt_regs->cs */
+ pushq_cfi %rcx /* pt_regs->ip */
+@@ -246,7 +635,27 @@ GLOBAL(system_call_after_swapgs)
+ sub $(6*8),%rsp /* pt_regs->bp,bx,r12-15 not saved */
+ CFI_ADJUST_CFA_OFFSET 6*8
+
+- testl $_TIF_WORK_SYSCALL_ENTRY, ASM_THREAD_INFO(TI_flags, %rsp, SIZEOF_PTREGS)
++#ifdef CONFIG_PAX_KERNEXEC_PLUGIN_METHOD_OR
++ movq_cfi r12, R12
+#endif
-+ pax_force_retaddr
-+ ret
- CFI_ENDPROC
--END(save_paranoid)
-+ENDPROC(save_paranoid)
+
-+ENTRY(save_paranoid_nmi)
-+ XCPT_FRAME 1 RDI+8
-+ cld
-+ movq_cfi rdi, RDI+8
-+ movq_cfi rsi, RSI+8
-+ movq_cfi rdx, RDX+8
-+ movq_cfi rcx, RCX+8
-+ movq_cfi rax, RAX+8
-+ movq_cfi r8, R8+8
-+ movq_cfi r9, R9+8
-+ movq_cfi r10, R10+8
-+ movq_cfi r11, R11+8
-+ movq_cfi rbx, RBX+8
-+ movq_cfi rbp, RBP+8
-+ movq_cfi r12, R12+8
-+ movq_cfi r13, R13+8
-+ movq_cfi r14, R14+8
-+ movq_cfi r15, R15+8
-+ movl $1,%ebx
-+ movl $MSR_GS_BASE,%ecx
-+ rdmsr
-+ testl %edx,%edx
-+ js 1f /* negative -> in kernel */
-+ SWAPGS
-+ xorl %ebx,%ebx
-+1: pax_enter_kernel_nmi
-+ pax_force_retaddr
-+ ret
-+ CFI_ENDPROC
-+ENDPROC(save_paranoid_nmi)
-
- /*
- * A newly forked process directly context switches into this address.
-@@ -266,7 +736,7 @@ ENTRY(ret_from_fork)
-
- RESTORE_REST
-
-- testl $3, CS-ARGOFFSET(%rsp) # from kernel_thread?
-+ testb $3, CS-ARGOFFSET(%rsp) # from kernel_thread?
- jz 1f
-
- /*
-@@ -279,15 +749,13 @@ ENTRY(ret_from_fork)
- jmp int_ret_from_sys_call
-
- 1:
-- subq $REST_SKIP, %rsp # leave space for volatiles
-- CFI_ADJUST_CFA_OFFSET REST_SKIP
- movq %rbp, %rdi
- call *%rbx
- movl $0, RAX(%rsp)
- RESTORE_REST
- jmp int_ret_from_sys_call
- CFI_ENDPROC
--END(ret_from_fork)
-+ENDPROC(ret_from_fork)
-
- /*
- * System call entry. Up to 6 arguments in registers are supported.
-@@ -324,7 +792,7 @@ END(ret_from_fork)
- ENTRY(system_call)
- CFI_STARTPROC simple
- CFI_SIGNAL_FRAME
-- CFI_DEF_CFA rsp,KERNEL_STACK_OFFSET
-+ CFI_DEF_CFA rsp,0
- CFI_REGISTER rip,rcx
- /*CFI_REGISTER rflags,r11*/
- SWAPGS_UNSAFE_STACK
-@@ -337,16 +805,23 @@ GLOBAL(system_call_after_swapgs)
-
- movq %rsp,PER_CPU_VAR(old_rsp)
- movq PER_CPU_VAR(kernel_stack),%rsp
-+ SAVE_ARGS 8*6, 0, rax_enosys=1
+ pax_enter_kernel_user
+
+#ifdef CONFIG_PAX_RANDKSTACK
+ pax_erase_kstack
+#endif
+
- /*
- * No need to follow this irqs off/on section - it's straight
- * and short:
- */
- ENABLE_INTERRUPTS(CLBR_NONE)
-- SAVE_ARGS 8, 0, rax_enosys=1
- movq_cfi rax,(ORIG_RAX-ARGOFFSET)
- movq %rcx,RIP-ARGOFFSET(%rsp)
- CFI_REL_OFFSET rip,RIP-ARGOFFSET
-- testl $_TIF_WORK_SYSCALL_ENTRY,TI_flags+THREAD_INFO(%rsp,RIP-ARGOFFSET)
++ /*
++ * Re-enable interrupts.
++ * We use 'rsp_scratch' as a scratch space, hence irq-off block above
++ * must execute atomically in the face of possible interrupt-driven
++ * task preemption. We must enable interrupts only after we're done
++ * with using rsp_scratch:
++ */
++ ENABLE_INTERRUPTS(CLBR_NONE)
++
+ GET_THREAD_INFO(%rcx)
+ testl $_TIF_WORK_SYSCALL_ENTRY,TI_flags(%rcx)
jnz tracesys
system_call_fastpath:
#if __SYSCALL_MASK == ~0
-@@ -376,10 +851,13 @@ ret_from_sys_call:
+@@ -279,10 +688,13 @@ system_call_fastpath:
* flags (TIF_NOTIFY_RESUME, TIF_USER_RETURN_NOTIFY, etc) set is
* very bad.
*/
-- testl $_TIF_ALLWORK_MASK,TI_flags+THREAD_INFO(%rsp,RIP-ARGOFFSET)
+- testl $_TIF_ALLWORK_MASK, ASM_THREAD_INFO(TI_flags, %rsp, SIZEOF_PTREGS)
+ GET_THREAD_INFO(%rcx)
+ testl $_TIF_ALLWORK_MASK,TI_flags(%rcx)
- jnz int_ret_from_sys_call_fixup /* Go the the slow path */
+ jnz int_ret_from_sys_call_irqs_off /* Go to the slow path */
CFI_REMEMBER_STATE
+ pax_exit_kernel_user
+ pax_erase_kstack
- /*
- * sysretq will re-enable interrupts:
- */
-@@ -399,12 +877,15 @@ int_ret_from_sys_call_fixup:
- /* Do syscall tracing */
- tracesys:
-- leaq -REST_SKIP(%rsp), %rdi
-+ movq %rsp, %rdi
- movq $AUDIT_ARCH_X86_64, %rsi
+ RESTORE_C_REGS_EXCEPT_RCX_R11
+ movq RIP(%rsp),%rcx
+@@ -316,6 +728,9 @@ tracesys:
call syscall_trace_enter_phase1
test %rax, %rax
jnz tracesys_phase2 /* if needed, run the slow path */
-- LOAD_ARGS 0 /* else restore clobbered regs */
+
+ pax_erase_kstack
+
-+ LOAD_ARGS /* else restore clobbered regs */
+ RESTORE_C_REGS_EXCEPT_RAX /* else restore clobbered regs */
+ movq ORIG_RAX(%rsp), %rax
jmp system_call_fastpath /* and return to the fast path */
-
- tracesys_phase2:
-@@ -415,12 +896,14 @@ tracesys_phase2:
+@@ -327,6 +742,8 @@ tracesys_phase2:
movq %rax,%rdx
call syscall_trace_enter_phase2
+ pax_erase_kstack
+
/*
- * Reload arg registers from stack in case ptrace changed them.
+ * Reload registers from stack in case ptrace changed them.
* We don't reload %rax because syscall_trace_entry_phase2() returned
- * the value it wants us to use in the table lookup.
- */
-- LOAD_ARGS ARGOFFSET, 1
-+ LOAD_ARGS 1
- RESTORE_REST
- #if __SYSCALL_MASK == ~0
- cmpq $__NR_syscall_max,%rax
-@@ -451,7 +934,9 @@ GLOBAL(int_with_check)
+@@ -364,6 +781,8 @@ GLOBAL(int_with_check)
andl %edi,%edx
jnz int_careful
- andl $~TS_COMPAT,TI_status(%rcx)
-- jmp retint_swapgs
+ andl $~TS_COMPAT,TI_status(%rcx)
+ pax_exit_kernel_user
+ pax_erase_kstack
-+ jmp retint_swapgs_pax
+ jmp syscall_return
/* Either reschedule or signal or syscall exit tracking needed. */
- /* First do a reschedule test. */
-@@ -497,7 +982,7 @@ int_restore_rest:
- TRACE_IRQS_OFF
- jmp int_with_check
+@@ -485,7 +904,7 @@ opportunistic_sysret_failed:
+ SWAPGS
+ jmp restore_c_regs_and_iret
CFI_ENDPROC
-END(system_call)
+ENDPROC(system_call)
+
.macro FORK_LIKE func
- ENTRY(stub_\func)
-@@ -510,9 +995,10 @@ ENTRY(stub_\func)
- DEFAULT_FRAME 0 8 /* offset 8: return address */
- call sys_\func
- RESTORE_TOP_OF_STACK %r11, 8
-- ret $REST_SKIP /* pop extended registers */
-+ pax_force_retaddr
-+ ret
+@@ -495,7 +914,7 @@ ENTRY(stub_\func)
+ SAVE_EXTRA_REGS 8
+ jmp sys_\func
CFI_ENDPROC
-END(stub_\func)
+ENDPROC(stub_\func)
.endm
- .macro FIXED_FRAME label,func
-@@ -522,9 +1008,10 @@ ENTRY(\label)
- FIXUP_TOP_OF_STACK %r11, 8-ARGOFFSET
- call \func
- RESTORE_TOP_OF_STACK %r11, 8-ARGOFFSET
-+ pax_force_retaddr
- ret
- CFI_ENDPROC
--END(\label)
-+ENDPROC(\label)
- .endm
-
FORK_LIKE clone
-@@ -543,7 +1030,7 @@ ENTRY(stub_execve)
- RESTORE_REST
- jmp int_ret_from_sys_call
+@@ -519,7 +938,7 @@ return_from_execve:
+ movq %rax,RAX(%rsp)
+ jmp int_ret_from_sys_call
CFI_ENDPROC
-END(stub_execve)
+ENDPROC(stub_execve)
-
- ENTRY(stub_execveat)
- CFI_STARTPROC
-@@ -557,7 +1044,7 @@ ENTRY(stub_execveat)
- RESTORE_REST
- jmp int_ret_from_sys_call
+ /*
+ * Remaining execve stubs are only 7 bytes long.
+ * ENTRY() often aligns to 16 bytes, which in this case has no benefits.
+@@ -531,7 +950,7 @@ GLOBAL(stub_execveat)
+ call sys_execveat
+ jmp return_from_execve
CFI_ENDPROC
-END(stub_execveat)
+ENDPROC(stub_execveat)
- /*
- * sigreturn is special because it needs to restore all registers on return.
-@@ -574,7 +1061,7 @@ ENTRY(stub_rt_sigreturn)
- RESTORE_REST
+ #ifdef CONFIG_X86_X32_ABI
+ .align 8
+@@ -541,7 +960,7 @@ GLOBAL(stub_x32_execve)
+ call compat_sys_execve
+ jmp return_from_execve
+ CFI_ENDPROC
+-END(stub_x32_execve)
++ENDPROC(stub_x32_execve)
+ .align 8
+ GLOBAL(stub_x32_execveat)
+ CFI_STARTPROC
+@@ -549,7 +968,7 @@ GLOBAL(stub_x32_execveat)
+ call compat_sys_execveat
+ jmp return_from_execve
+ CFI_ENDPROC
+-END(stub_x32_execveat)
++ENDPROC(stub_x32_execveat)
+ #endif
+
+ #ifdef CONFIG_IA32_EMULATION
+@@ -592,7 +1011,7 @@ return_from_stub:
+ movq %rax,RAX(%rsp)
jmp int_ret_from_sys_call
CFI_ENDPROC
-END(stub_rt_sigreturn)
#ifdef CONFIG_X86_X32_ABI
ENTRY(stub_x32_rt_sigreturn)
-@@ -588,7 +1075,7 @@ ENTRY(stub_x32_rt_sigreturn)
- RESTORE_REST
- jmp int_ret_from_sys_call
+@@ -602,7 +1021,7 @@ ENTRY(stub_x32_rt_sigreturn)
+ call sys32_x32_rt_sigreturn
+ jmp return_from_stub
CFI_ENDPROC
-END(stub_x32_rt_sigreturn)
+ENDPROC(stub_x32_rt_sigreturn)
+ #endif
- ENTRY(stub_x32_execve)
- CFI_STARTPROC
-@@ -602,7 +1089,7 @@ ENTRY(stub_x32_execve)
- RESTORE_REST
- jmp int_ret_from_sys_call
- CFI_ENDPROC
--END(stub_x32_execve)
-+ENDPROC(stub_x32_execve)
+ /*
+@@ -622,7 +1041,7 @@ ENTRY(ret_from_fork)
- ENTRY(stub_x32_execveat)
- CFI_STARTPROC
-@@ -616,7 +1103,7 @@ ENTRY(stub_x32_execveat)
- RESTORE_REST
+ RESTORE_EXTRA_REGS
+
+- testl $3,CS(%rsp) # from kernel_thread?
++ testb $3,CS(%rsp) # from kernel_thread?
+
+ /*
+ * By the time we get here, we have no idea whether our pt_regs,
+@@ -641,7 +1060,7 @@ ENTRY(ret_from_fork)
+ RESTORE_EXTRA_REGS
jmp int_ret_from_sys_call
CFI_ENDPROC
--END(stub_x32_execveat)
-+ENDPROC(stub_x32_execveat)
-
- #endif
+-END(ret_from_fork)
++ENDPROC(ret_from_fork)
-@@ -653,7 +1140,7 @@ vector=vector+1
- 2: jmp common_interrupt
- .endr
+ /*
+ * Build the entry stubs with some assembler magic.
+@@ -659,7 +1078,7 @@ ENTRY(irq_entries_start)
+ .align 8
+ .endr
CFI_ENDPROC
-END(irq_entries_start)
+ENDPROC(irq_entries_start)
- .previous
- END(interrupt)
-@@ -670,28 +1157,29 @@ END(interrupt)
+ /*
+ * Interrupt entry/exit.
+@@ -672,21 +1091,13 @@ END(irq_entries_start)
/* 0(%rsp): ~(interrupt number) */
.macro interrupt func
- /* reserve pt_regs for scratch regs and rbp */
-- subq $ORIG_RAX-RBP, %rsp
-- CFI_ADJUST_CFA_OFFSET ORIG_RAX-RBP
-+ subq $ORIG_RAX, %rsp
-+ CFI_ADJUST_CFA_OFFSET ORIG_RAX
cld
-- /* start from rbp in pt_regs and jump over */
-- movq_cfi rdi, (RDI-RBP)
-- movq_cfi rsi, (RSI-RBP)
-- movq_cfi rdx, (RDX-RBP)
-- movq_cfi rcx, (RCX-RBP)
-- movq_cfi rax, (RAX-RBP)
-- movq_cfi r8, (R8-RBP)
-- movq_cfi r9, (R9-RBP)
-- movq_cfi r10, (R10-RBP)
-- movq_cfi r11, (R11-RBP)
-+ /* start from r15 in pt_regs and jump over */
-+ movq_cfi rdi, RDI
-+ movq_cfi rsi, RSI
-+ movq_cfi rdx, RDX
-+ movq_cfi rcx, RCX
-+ movq_cfi rax, RAX
-+ movq_cfi r8, R8
-+ movq_cfi r9, R9
-+ movq_cfi r10, R10
-+ movq_cfi r11, R11
-+ movq_cfi r12, R12
-
- /* Save rbp so that we can unwind from get_irq_regs() */
-- movq_cfi rbp, 0
-+ movq_cfi rbp, RBP
-
- /* Save previous stack value */
- movq %rsp, %rsi
-
-- leaq -RBP(%rsp),%rdi /* arg1 for handler */
-- testl $3, CS-RBP(%rsi)
-+ movq %rsp,%rdi /* arg1 for handler */
-+ testb $3, CS(%rsi)
+- /*
+- * Since nothing in interrupt handling code touches r12...r15 members
+- * of "struct pt_regs", and since interrupts can nest, we can save
+- * four stack slots and simultaneously provide
+- * an unwind-friendly stack layout by saving "truncated" pt_regs
+- * exactly up to rbp slot, without these members.
+- */
+- ALLOC_PT_GPREGS_ON_STACK -RBP
+- SAVE_C_REGS -RBP
+- /* this goes to 0(%rsp) for unwinder, not for saving the value: */
+- SAVE_EXTRA_REGS_RBP -RBP
++ ALLOC_PT_GPREGS_ON_STACK
++ SAVE_C_REGS
++ SAVE_EXTRA_REGS
+
+- leaq -RBP(%rsp),%rdi /* arg1 for \func (pointer to pt_regs) */
++ movq %rsp,%rdi /* arg1 for \func (pointer to pt_regs) */
+
+- testl $3, CS-RBP(%rsp)
++ testb $3, CS(%rsp)
je 1f
SWAPGS
- /*
-@@ -711,6 +1199,18 @@ END(interrupt)
+ 1:
+@@ -709,8 +1120,20 @@ END(irq_entries_start)
+ CFI_ESCAPE 0x0f /* DW_CFA_def_cfa_expression */, 6, \
+ 0x77 /* DW_OP_breg7 (rsp) */, 0, \
0x06 /* DW_OP_deref */, \
- 0x08 /* DW_OP_const1u */, SS+8-RBP, \
+- 0x08 /* DW_OP_const1u */, SIZEOF_PTREGS-RBP, \
++ 0x08 /* DW_OP_const1u */, SIZEOF_PTREGS, \
0x22 /* DW_OP_plus */
+
+#ifdef CONFIG_PAX_MEMORY_UDEREF
/* We entered an interrupt context - irqs are off: */
TRACE_IRQS_OFF
-@@ -735,14 +1235,14 @@ ret_from_intr:
+@@ -735,13 +1158,12 @@ ret_from_intr:
/* Restore saved previous stack */
popq %rsi
-- CFI_DEF_CFA rsi,SS+8-RBP /* reg/off reset after def_cfa_expr */
-- leaq ARGOFFSET-RBP(%rsi), %rsp
-+ CFI_DEF_CFA rsi,SS+8 /* reg/off reset after def_cfa_expr */
+- CFI_DEF_CFA rsi,SIZEOF_PTREGS-RBP /* reg/off reset after def_cfa_expr */
+- /* return code expects complete pt_regs - adjust rsp accordingly: */
+- leaq -RBP(%rsi),%rsp
++ CFI_DEF_CFA rsi,SIZEOF_PTREGS /* reg/off reset after def_cfa_expr */
+ movq %rsi, %rsp
CFI_DEF_CFA_REGISTER rsp
-- CFI_ADJUST_CFA_OFFSET RBP-ARGOFFSET
-+ CFI_ADJUST_CFA_OFFSET -ARGOFFSET
+- CFI_ADJUST_CFA_OFFSET RBP
++ CFI_ADJUST_CFA_OFFSET 0
- exit_intr:
- GET_THREAD_INFO(%rcx)
-- testl $3,CS-ARGOFFSET(%rsp)
-+ testb $3,CS-ARGOFFSET(%rsp)
+- testl $3,CS(%rsp)
++ testb $3,CS(%rsp)
je retint_kernel
-
/* Interrupt came from user space */
-@@ -764,14 +1264,16 @@ retint_swapgs: /* return to user-space */
+
+@@ -763,6 +1185,8 @@ retint_swapgs: /* return to user-space */
* The iretq could re-enable interrupts:
*/
DISABLE_INTERRUPTS(CLBR_ANY)
+ pax_exit_kernel_user
-+retint_swapgs_pax:
++# pax_erase_kstack
TRACE_IRQS_IRETQ
- /*
- * Try to use SYSRET instead of IRET if we're returning to
- * a completely clean 64-bit userspace context.
- */
-- movq (RCX-R11)(%rsp), %rcx
-- cmpq %rcx,(RIP-R11)(%rsp) /* RCX == RIP */
-+ movq (RCX-ARGOFFSET)(%rsp), %rcx
-+ cmpq %rcx,(RIP-ARGOFFSET)(%rsp) /* RCX == RIP */
- jne opportunistic_sysret_failed
-
- /*
-@@ -792,7 +1294,7 @@ retint_swapgs: /* return to user-space */
- shr $__VIRTUAL_MASK_SHIFT, %rcx
- jnz opportunistic_sysret_failed
-
-- cmpq $__USER_CS,(CS-R11)(%rsp) /* CS must match SYSRET */
-+ cmpq $__USER_CS,(CS-ARGOFFSET)(%rsp) /* CS must match SYSRET */
- jne opportunistic_sysret_failed
-
- movq (R11-ARGOFFSET)(%rsp), %r11
-@@ -838,6 +1340,27 @@ opportunistic_sysret_failed:
-
- retint_restore_args: /* return to kernel space */
- DISABLE_INTERRUPTS(CLBR_ANY)
+ SWAPGS
+@@ -781,6 +1205,21 @@ retint_kernel:
+ jmp 0b
+ 1:
+ #endif
++
+ pax_exit_kernel
+
+#if defined(CONFIG_EFI) && defined(CONFIG_PAX_KERNEXEC)
+ * (BTS/OR) before starting any userland process; even before starting
+ * up the APs.
+ */
-+ .pushsection .altinstr_replacement, "a"
-+ 601: pax_force_retaddr (RIP-ARGOFFSET)
-+ 602:
-+ .popsection
-+ 603: .fill 602b-601b, 1, 0x90
-+ .pushsection .altinstructions, "a"
-+ altinstruction_entry 603b, 601b, X86_FEATURE_ALWAYS, 602b-601b, 602b-601b
-+ .popsection
++ ALTERNATIVE "", "pax_force_retaddr 16*8", X86_FEATURE_ALWAYS
+#else
-+ pax_force_retaddr (RIP-ARGOFFSET)
++ pax_force_retaddr RIP
+#endif
+
/*
* The iretq could re-enable interrupts:
*/
-@@ -875,15 +1398,15 @@ native_irq_return_ldt:
+@@ -793,8 +1232,6 @@ retint_kernel:
+ restore_c_regs_and_iret:
+ RESTORE_C_REGS
+ REMOVE_PT_GPREGS_FROM_STACK 8
+-
+-irq_return:
+ INTERRUPT_RETURN
+
+ ENTRY(native_iret)
+@@ -824,15 +1261,15 @@ native_irq_return_ldt:
SWAPGS
movq PER_CPU_VAR(espfix_waddr),%rdi
movq %rax,(0*8)(%rdi) /* RAX */
movq %rax,(4*8)(%rdi)
andl $0xffff0000,%eax
popq_cfi %rdi
-@@ -937,7 +1460,7 @@ ENTRY(retint_kernel)
- jmp exit_intr
- #endif
+@@ -875,7 +1312,7 @@ retint_signal:
+ jmp retint_with_reschedule
+
CFI_ENDPROC
-END(common_interrupt)
+ENDPROC(common_interrupt)
/*
* APIC interrupts.
-@@ -951,7 +1474,7 @@ ENTRY(\sym)
+@@ -889,7 +1326,7 @@ ENTRY(\sym)
interrupt \do_sym
jmp ret_from_intr
CFI_ENDPROC
.endm
#ifdef CONFIG_TRACING
-@@ -1024,7 +1547,7 @@ apicinterrupt IRQ_WORK_VECTOR \
+@@ -962,7 +1399,7 @@ apicinterrupt IRQ_WORK_VECTOR \
/*
* Exception entry points.
*/
--#define INIT_TSS_IST(x) PER_CPU_VAR(init_tss) + (TSS_ist + ((x) - 1) * 8)
-+#define INIT_TSS_IST(x) (TSS_ist + ((x) - 1) * 8)(%r13)
+-#define CPU_TSS_IST(x) PER_CPU_VAR(cpu_tss) + (TSS_ist + ((x) - 1) * 8)
++#define CPU_TSS_IST(x) (TSS_ist + ((x) - 1) * 8)(%r13)
.macro idtentry sym do_sym has_error_code:req paranoid=0 shift_ist=-1
ENTRY(\sym)
-@@ -1080,6 +1603,12 @@ ENTRY(\sym)
+@@ -1018,6 +1455,12 @@ ENTRY(\sym)
.endif
.if \shift_ist != -1
+#ifdef CONFIG_SMP
+ imul $TSS_size, PER_CPU_VAR(cpu_number), %r13d
-+ lea init_tss(%r13), %r13
++ lea cpu_tss(%r13), %r13
+#else
-+ lea init_tss(%rip), %r13
++ lea cpu_tss(%rip), %r13
+#endif
- subq $EXCEPTION_STKSZ, INIT_TSS_IST(\shift_ist)
+ subq $EXCEPTION_STKSZ, CPU_TSS_IST(\shift_ist)
.endif
-@@ -1126,7 +1655,7 @@ ENTRY(\sym)
+@@ -1065,7 +1508,7 @@ ENTRY(\sym)
.endif
CFI_ENDPROC
.endm
#ifdef CONFIG_TRACING
-@@ -1167,9 +1696,10 @@ gs_change:
+@@ -1106,9 +1549,10 @@ gs_change:
2: mfence /* workaround */
SWAPGS
popfq_cfi
_ASM_EXTABLE(gs_change,bad_gs)
.section .fixup,"ax"
-@@ -1197,9 +1727,10 @@ ENTRY(do_softirq_own_stack)
+@@ -1136,9 +1580,10 @@ ENTRY(do_softirq_own_stack)
CFI_DEF_CFA_REGISTER rsp
CFI_ADJUST_CFA_OFFSET -8
decl PER_CPU_VAR(irq_count)
#ifdef CONFIG_XEN
idtentry xen_hypervisor_callback xen_do_hypervisor_callback has_error_code=0
-@@ -1240,7 +1771,7 @@ ENTRY(xen_do_hypervisor_callback) # do_hypervisor_callback(struct *pt_regs)
+@@ -1179,7 +1624,7 @@ ENTRY(xen_do_hypervisor_callback) # do_hypervisor_callback(struct *pt_regs)
#endif
jmp error_exit
CFI_ENDPROC
/*
* Hypervisor uses this for application faults while it executes.
-@@ -1299,7 +1830,7 @@ ENTRY(xen_failsafe_callback)
- SAVE_ALL
+@@ -1240,7 +1685,7 @@ ENTRY(xen_failsafe_callback)
+ SAVE_EXTRA_REGS
jmp error_exit
CFI_ENDPROC
-END(xen_failsafe_callback)
apicinterrupt3 HYPERVISOR_CALLBACK_VECTOR \
xen_hvm_callback_vector xen_evtchn_do_upcall
-@@ -1344,18 +1875,25 @@ ENTRY(paranoid_exit)
+@@ -1286,9 +1731,39 @@ ENTRY(paranoid_entry)
+ js 1f /* negative -> in kernel */
+ SWAPGS
+ xorl %ebx,%ebx
+-1: ret
++1:
++#ifdef CONFIG_PAX_MEMORY_UDEREF
++ testb $3, CS+8(%rsp)
++ jnz 1f
++ pax_enter_kernel
++ jmp 2f
++1: pax_enter_kernel_user
++2:
++#else
++ pax_enter_kernel
++#endif
++ pax_force_retaddr
++ ret
+ CFI_ENDPROC
+-END(paranoid_entry)
++ENDPROC(paranoid_entry)
++
++ENTRY(paranoid_entry_nmi)
++ XCPT_FRAME 1 15*8
++ cld
++ SAVE_C_REGS 8
++ SAVE_EXTRA_REGS 8
++ movl $1,%ebx
++ movl $MSR_GS_BASE,%ecx
++ rdmsr
++ testl %edx,%edx
++ js 1f /* negative -> in kernel */
++ SWAPGS
++ xorl %ebx,%ebx
++1: pax_enter_kernel_nmi
++ pax_force_retaddr
++ ret
++ CFI_ENDPROC
++ENDPROC(paranoid_entry_nmi)
+
+ /*
+ * "Paranoid" exit path from exception stack. This is invoked
+@@ -1305,20 +1780,27 @@ ENTRY(paranoid_exit)
DEFAULT_FRAME
DISABLE_INTERRUPTS(CLBR_NONE)
TRACE_IRQS_OFF_DEBUG
- testl %ebx,%ebx /* swapgs needed? */
+ testl $1,%ebx /* swapgs needed? */
- jnz paranoid_restore
+ jnz paranoid_exit_no_swapgs
+#ifdef CONFIG_PAX_MEMORY_UDEREF
+ pax_exit_kernel_user
+#else
+ pax_exit_kernel
+#endif
- TRACE_IRQS_IRETQ 0
+ TRACE_IRQS_IRETQ
SWAPGS_UNSAFE_STACK
- RESTORE_ALL 8
- INTERRUPT_RETURN
- paranoid_restore:
+ jmp paranoid_exit_restore
+ paranoid_exit_no_swapgs:
+ pax_exit_kernel
- TRACE_IRQS_IRETQ_DEBUG 0
- RESTORE_ALL 8
+ TRACE_IRQS_IRETQ_DEBUG
+ paranoid_exit_restore:
+ RESTORE_EXTRA_REGS
+ RESTORE_C_REGS
+ REMOVE_PT_GPREGS_FROM_STACK 8
+ pax_force_retaddr_bts
INTERRUPT_RETURN
CFI_ENDPROC
+ENDPROC(paranoid_exit)
/*
- * Exception entry point. This expects an error code/orig_rax on the stack.
-@@ -1382,12 +1920,23 @@ ENTRY(error_entry)
- movq %r14, R14+8(%rsp)
- movq %r15, R15+8(%rsp)
+ * Save all registers in pt_regs, and switch gs if needed.
+@@ -1330,12 +1812,23 @@ ENTRY(error_entry)
+ SAVE_C_REGS 8
+ SAVE_EXTRA_REGS 8
xorl %ebx,%ebx
- testl $3,CS+8(%rsp)
+ testb $3,CS+8(%rsp)
+ pax_force_retaddr
ret
- /*
-@@ -1422,7 +1971,7 @@ error_bad_iret:
+ /*
+@@ -1370,7 +1863,7 @@ error_bad_iret:
decl %ebx /* Return to usergs */
jmp error_sti
CFI_ENDPROC
+ENDPROC(error_entry)
- /* ebx: no swapgs flag (1: don't need swapgs, 0: need it) */
-@@ -1433,7 +1982,7 @@ ENTRY(error_exit)
+ /* On entry, ebx is "no swapgs" flag (1: don't need swapgs, 0: need it) */
+@@ -1381,7 +1874,7 @@ ENTRY(error_exit)
DISABLE_INTERRUPTS(CLBR_NONE)
TRACE_IRQS_OFF
GET_THREAD_INFO(%rcx)
jne retint_kernel
LOCKDEP_SYS_EXIT_IRQ
movl TI_flags(%rcx),%edx
-@@ -1442,7 +1991,7 @@ ENTRY(error_exit)
+@@ -1390,7 +1883,7 @@ ENTRY(error_exit)
jnz retint_careful
jmp retint_swapgs
CFI_ENDPROC
-END(error_exit)
+ENDPROC(error_exit)
- /*
- * Test if a given stack is an NMI stack or not.
-@@ -1500,9 +2049,11 @@ ENTRY(nmi)
- * If %cs was not the kernel segment, then the NMI triggered in user
- * space, which means it is definitely not nested.
+ /* Runs on exception stack */
+ ENTRY(nmi)
+@@ -1413,11 +1906,12 @@ ENTRY(nmi)
+ * If the variable is not set and the stack is not the NMI
+ * stack then:
+ * o Set the special variable on the stack
+- * o Copy the interrupt frame into a "saved" location on the stack
+- * o Copy the interrupt frame into a "copy" location on the stack
++ * o Copy the interrupt frame into an "outermost" location on the
++ * stack
++ * o Copy the interrupt frame into an "iret" location on the stack
+ * o Continue processing the NMI
+ * If the variable is set or the previous stack is the NMI stack:
+- * o Modify the "copy" location to jump to the repeate_nmi
++ * o Modify the "iret" location to jump to the repeat_nmi
+ * o return back to the first NMI
+ *
+ * Now on exit of the first NMI, we first clear the stack variable
+@@ -1426,32 +1920,185 @@ ENTRY(nmi)
+ * a nested NMI that updated the copy interrupt stack frame, a
+ * jump will be made to the repeat_nmi code that will handle the second
+ * NMI.
++ *
++ * However, espfix prevents us from directly returning to userspace
++ * with a single IRET instruction. Similarly, IRET to user mode
++ * can fault. We therefore handle NMIs from user space like
++ * other IST entries.
*/
-+ cmpl $__KERNEXEC_KERNEL_CS, 16(%rsp)
-+ je 1f
- cmpl $__KERNEL_CS, 16(%rsp)
- jne first_nmi
--
+
+ /* Use %rdx as our temp variable throughout */
+ pushq_cfi %rdx
+ CFI_REL_OFFSET rdx, 0
+
++ testb $3, CS-RIP+8(%rsp)
++ jz .Lnmi_from_kernel
++
++ /*
++ * NMI from user mode. We need to run on the thread stack, but we
++ * can't go through the normal entry paths: NMIs are masked, and
++ * we don't want to enable interrupts, because then we'll end
++ * up in an awkward situation in which IRQs are on but NMIs
++ * are off.
++ */
++
++ SWAPGS
++ cld
++ movq %rsp, %rdx
++ movq PER_CPU_VAR(kernel_stack), %rsp
++ pushq 5*8(%rdx) /* pt_regs->ss */
++ pushq 4*8(%rdx) /* pt_regs->rsp */
++ pushq 3*8(%rdx) /* pt_regs->flags */
++ pushq 2*8(%rdx) /* pt_regs->cs */
++ pushq 1*8(%rdx) /* pt_regs->rip */
++ pushq $-1 /* pt_regs->orig_ax */
++ pushq %rdi /* pt_regs->di */
++ pushq %rsi /* pt_regs->si */
++ pushq (%rdx) /* pt_regs->dx */
++ pushq %rcx /* pt_regs->cx */
++ pushq %rax /* pt_regs->ax */
++ pushq %r8 /* pt_regs->r8 */
++ pushq %r9 /* pt_regs->r9 */
++ pushq %r10 /* pt_regs->r10 */
++ pushq %r11 /* pt_regs->r11 */
++ pushq %rbx /* pt_regs->rbx */
++ pushq %rbp /* pt_regs->rbp */
++ pushq %r12 /* pt_regs->r12 */
++ pushq %r13 /* pt_regs->r13 */
++ pushq %r14 /* pt_regs->r14 */
++ pushq %r15 /* pt_regs->r15 */
++
++#if defined(CONFIG_PAX_KERNEXEC) || defined(CONFIG_PAX_MEMORY_UDEREF)
++ xorl %ebx,%ebx
++#endif
++
++ pax_enter_kernel_nmi
++
+ /*
+- * If %cs was not the kernel segment, then the NMI triggered in user
+- * space, which means it is definitely not nested.
++ * At this point we no longer need to worry about stack damage
++ * due to nesting -- we're on the normal thread stack and we're
++ * done with the NMI stack.
+ */
+- cmpl $__KERNEL_CS, 16(%rsp)
+- jne first_nmi
++
++ movq %rsp, %rdi
++ movq $-1, %rsi
++ call do_nmi
++
++ pax_exit_kernel_nmi
++
++ /*
++ * Return back to user mode. We must *not* do the normal exit
++ * work, because we don't want to enable interrupts. Fortunately,
++ * do_nmi doesn't modify pt_regs.
++ */
++ SWAPGS
++
++ /*
++ * Open-code the entire return process for compatibility with varying
++ * register layouts across different kernel versions.
++ */
++
++#if defined(CONFIG_PAX_KERNEXEC) || defined(CONFIG_PAX_MEMORY_UDEREF)
++ movq RBX(%rsp), %rbx /* pt_regs->rbx*/
++#endif
++
++#ifdef CONFIG_PAX_KERNEXEC_PLUGIN_METHOD_OR
++ movq R12(%rsp), %r12 /* pt_regs->r12*/
++#endif
++
++ addq $6*8, %rsp /* skip bx, bp, and r12-r15 */
++ popq %r11 /* pt_regs->r11 */
++ popq %r10 /* pt_regs->r10 */
++ popq %r9 /* pt_regs->r9 */
++ popq %r8 /* pt_regs->r8 */
++ popq %rax /* pt_regs->ax */
++ popq %rcx /* pt_regs->cx */
++ popq %rdx /* pt_regs->dx */
++ popq %rsi /* pt_regs->si */
++ popq %rdi /* pt_regs->di */
++ addq $8, %rsp /* skip orig_ax */
++ INTERRUPT_RETURN
++
++.Lnmi_from_kernel:
++ /*
++ * Here's what our stack frame will look like:
++ * +---------------------------------------------------------+
++ * | original SS |
++ * | original Return RSP |
++ * | original RFLAGS |
++ * | original CS |
++ * | original RIP |
++ * +---------------------------------------------------------+
++ * | temp storage for rdx |
++ * +---------------------------------------------------------+
++ * | "NMI executing" variable |
++ * +---------------------------------------------------------+
++ * | iret SS } Copied from "outermost" frame |
++ * | iret Return RSP } on each loop iteration; overwritten |
++ * | iret RFLAGS } by a nested NMI to force another |
++ * | iret CS } iteration if needed. |
++ * | iret RIP } |
++ * +---------------------------------------------------------+
++ * | outermost SS } initialized in first_nmi; |
++ * | outermost Return RSP } will not be changed before |
++ * | outermost RFLAGS } NMI processing is done. |
++ * | outermost CS } Copied to "iret" frame on each |
++ * | outermost RIP } iteration. |
++ * +---------------------------------------------------------+
++ * | pt_regs |
++ * +---------------------------------------------------------+
++ *
++ * The "original" frame is used by hardware. Before re-enabling
++ * NMIs, we need to be done with it, and we need to leave enough
++ * space for the asm code here.
++ *
++ * We return by executing IRET while RSP points to the "iret" frame.
++ * That will either return for real or it will loop back into NMI
++ * processing.
++ *
++ * The "outermost" frame is copied to the "iret" frame on each
++ * iteration of the loop, so each iteration starts with the "iret"
++ * frame pointing to the final return target.
++ */
++
++ /*
++ * If we interrupted kernel code between repeat_nmi and
++ * end_repeat_nmi, then we are a nested NMI. We must not
++ * modify the "iret" frame because it's being written by
++ * the outer NMI. That's okay: the outer NMI handler is
++ * about to about to call do_nmi anyway, so we can just
++ * resume the outer NMI.
++ */
++
++ movq $repeat_nmi, %rdx
++ cmpq 8(%rsp), %rdx
++ ja 1f
++ movq $end_repeat_nmi, %rdx
++ cmpq 8(%rsp), %rdx
++ ja nested_nmi_out
+1:
+
/*
- * Check the special variable on the stack to see if NMIs are
- * executing.
-@@ -1536,8 +2087,7 @@ nested_nmi:
+- * Check the special variable on the stack to see if NMIs are
+- * executing.
++ * Now check "NMI executing". If it's set, then we're nested.
++ *
++ * First check "NMI executing". If it's set, then we're nested.
++ * This will not detect if we interrupted an outer NMI just
++ * before IRET.
+ */
+ cmpl $1, -8(%rsp)
+ je nested_nmi
- 1:
- /* Set up the interrupted NMIs stack to jump to repeat_nmi */
+ /*
+- * Now test if the previous stack was an NMI stack.
+- * We need the double check. We check the NMI stack to satisfy the
+- * race when the first NMI clears the variable before returning.
+- * We check the variable because the first NMI could be in a
+- * breakpoint routine using a breakpoint stack.
++ * Now test if the previous stack was an NMI stack. This covers
++ * the case where we interrupt an outer NMI after it clears
++ * "NMI executing" but before IRET. We need to be careful, though:
++ * there is one case in which RSP could point to the NMI stack
++ * despite there being no NMI active: naughty userspace controls
++ * RSP at the very beginning of the SYSCALL targets. We can
++ * pull a fast one on naughty userspace, though: we program
++ * SYSCALL to mask DF, so userspace cannot cause DF to be set
++ * if it controls the kernel's RSP. We set DF before we clear
++ * "NMI executing".
+ */
+ lea 6*8(%rsp), %rdx
+ /* Compare the NMI stack (rdx) with the stack we came from (4*8(%rsp)) */
+@@ -1462,27 +2109,22 @@ ENTRY(nmi)
+ cmpq %rdx, 4*8(%rsp)
+ /* If it is below the NMI stack, it is a normal NMI */
+ jb first_nmi
+- /* Ah, it is within the NMI stack, treat it as nested */
++
++ /* Ah, it is within the NMI stack. */
++
++ testb $(X86_EFLAGS_DF >> 8), (3*8 + 1)(%rsp)
++ jz first_nmi /* RSP was user controlled. */
+
+ CFI_REMEMBER_STATE
+
++ /* This is a nested NMI. */
++
+ nested_nmi:
+ /*
+- * Do nothing if we interrupted the fixup in repeat_nmi.
+- * It's about to repeat the NMI handler, so we are fine
+- * with ignoring this one.
++ * Modify the "iret" frame to point to repeat_nmi, forcing another
++ * iteration of NMI handling.
+ */
+- movq $repeat_nmi, %rdx
+- cmpq 8(%rsp), %rdx
+- ja 1f
+- movq $end_repeat_nmi, %rdx
+- cmpq 8(%rsp), %rdx
+- ja nested_nmi_out
+-
+-1:
+- /* Set up the interrupted NMIs stack to jump to repeat_nmi */
- leaq -1*8(%rsp), %rdx
- movq %rdx, %rsp
+ subq $8, %rsp
CFI_ADJUST_CFA_OFFSET 1*8
leaq -10*8(%rsp), %rdx
pushq_cfi $__KERNEL_DS
-@@ -1555,6 +2105,7 @@ nested_nmi_out:
+@@ -1499,60 +2141,24 @@ nested_nmi_out:
+ popq_cfi %rdx
CFI_RESTORE rdx
- /* No need to check faults here */
+- /* No need to check faults here */
++ /* We are returning to kernel mode, so this cannot result in a fault. */
+# pax_force_retaddr_bts
INTERRUPT_RETURN
CFI_RESTORE_STATE
-@@ -1651,13 +2202,13 @@ end_repeat_nmi:
- subq $ORIG_RAX-R15, %rsp
- CFI_ADJUST_CFA_OFFSET ORIG_RAX-R15
+ first_nmi:
+- /*
+- * Because nested NMIs will use the pushed location that we
+- * stored in rdx, we must keep that space available.
+- * Here's what our stack frame will look like:
+- * +-------------------------+
+- * | original SS |
+- * | original Return RSP |
+- * | original RFLAGS |
+- * | original CS |
+- * | original RIP |
+- * +-------------------------+
+- * | temp storage for rdx |
+- * +-------------------------+
+- * | NMI executing variable |
+- * +-------------------------+
+- * | copied SS |
+- * | copied Return RSP |
+- * | copied RFLAGS |
+- * | copied CS |
+- * | copied RIP |
+- * +-------------------------+
+- * | Saved SS |
+- * | Saved Return RSP |
+- * | Saved RFLAGS |
+- * | Saved CS |
+- * | Saved RIP |
+- * +-------------------------+
+- * | pt_regs |
+- * +-------------------------+
+- *
+- * The saved stack frame is used to fix up the copied stack frame
+- * that a nested NMI may change to make the interrupted NMI iret jump
+- * to the repeat_nmi. The original stack frame and the temp storage
+- * is also used by nested NMIs and can not be trusted on exit.
+- */
+- /* Do not pop rdx, nested NMIs will corrupt that part of the stack */
++ /* Restore rdx. */
+ movq (%rsp), %rdx
+ CFI_RESTORE rdx
+
+ /* Set the NMI executing variable on the stack. */
+ pushq_cfi $1
+
+- /*
+- * Leave room for the "copied" frame
+- */
++ /* Leave room for the "iret" frame */
+ subq $(5*8), %rsp
+ CFI_ADJUST_CFA_OFFSET 5*8
+
+- /* Copy the stack frame to the Saved frame */
++ /* Copy the "original" frame to the "outermost" frame */
+ .rept 5
+ pushq_cfi 11*8(%rsp)
+ .endr
+@@ -1560,6 +2166,7 @@ first_nmi:
+
+ /* Everything up to here is safe from nested NMIs */
+
++repeat_nmi:
+ /*
+ * If there was a nested NMI, the first NMI's iret will return
+ * here. But NMIs are still enabled and we can take another
+@@ -1568,16 +2175,21 @@ first_nmi:
+ * it will just return, as we are about to repeat an NMI anyway.
+ * This makes it safe to copy to the stack frame that a nested
+ * NMI will update.
+- */
+-repeat_nmi:
+- /*
+- * Update the stack variable to say we are still in NMI (the update
+- * is benign for the non-repeat case, where 1 was pushed just above
+- * to this very stack slot).
++ *
++ * RSP is pointing to "outermost RIP". gsbase is unknown, but, if
++ * we're repeating an NMI, gsbase has the same value that it had on
++ * the first iteration. paranoid_entry will load the kernel
++ * gsbase if needed before we call do_nmi.
++ *
++ * Set "NMI executing" in case we came back here via IRET.
+ */
+ movq $1, 10*8(%rsp)
+
+- /* Make another copy, this one may be modified by nested NMIs */
++ /*
++ * Copy the "outermost" frame to the "iret" frame. NMIs that nest
++ * here must not modify the "iret" frame while we're writing to
++ * it or it will end up containing garbage.
++ */
+ addq $(10*8), %rsp
+ CFI_ADJUST_CFA_OFFSET -10*8
+ .rept 5
+@@ -1588,66 +2200,65 @@ repeat_nmi:
+ end_repeat_nmi:
+
+ /*
+- * Everything below this point can be preempted by a nested
+- * NMI if the first NMI took an exception and reset our iret stack
+- * so that we repeat another NMI.
++ * Everything below this point can be preempted by a nested NMI.
++ * If this happens, then the inner NMI will change the "iret"
++ * frame to point back to repeat_nmi.
+ */
+ pushq_cfi $-1 /* ORIG_RAX: no syscall to restart */
+ ALLOC_PT_GPREGS_ON_STACK
+
/*
-- * Use save_paranoid to handle SWAPGS, but no need to use paranoid_exit
-+ * Use save_paranoid_nmi to handle SWAPGS, but no need to use paranoid_exit
+- * Use paranoid_entry to handle SWAPGS, but no need to use paranoid_exit
++ * Use paranoid_entry_nmi to handle SWAPGS, but no need to use paranoid_exit
* as we should not be calling schedule in NMI context.
* Even with normal interrupts enabled. An NMI should not be
* setting NEED_RESCHED or anything that normal interrupts and
* exceptions might do.
*/
-- call save_paranoid
-+ call save_paranoid_nmi
+- call paranoid_entry
++ call paranoid_entry_nmi
DEFAULT_FRAME 0
- /*
-@@ -1667,9 +2218,9 @@ end_repeat_nmi:
- * NMI itself takes a page fault, the page fault that was preempted
- * will read the information from the NMI page fault and not the
- * origin fault. Save it off and restore it if it changes.
+- /*
+- * Save off the CR2 register. If we take a page fault in the NMI then
+- * it could corrupt the CR2 value. If the NMI preempts a page fault
+- * handler before it was able to read the CR2 register, and then the
+- * NMI itself takes a page fault, the page fault that was preempted
+- * will read the information from the NMI page fault and not the
+- * origin fault. Save it off and restore it if it changes.
- * Use the r12 callee-saved register.
-+ * Use the r13 callee-saved register.
- */
+- */
- movq %cr2, %r12
-+ movq %cr2, %r13
-
+-
/* paranoidentry do_nmi, 0; without TRACE_IRQS_OFF */
movq %rsp,%rdi
-@@ -1678,29 +2229,34 @@ end_repeat_nmi:
+ movq $-1,%rsi
+ call do_nmi
- /* Did the NMI take a page fault? Restore cr2 if it did */
- movq %cr2, %rcx
+- /* Did the NMI take a page fault? Restore cr2 if it did */
+- movq %cr2, %rcx
- cmpq %rcx, %r12
-+ cmpq %rcx, %r13
- je 1f
+- je 1f
- movq %r12, %cr2
-+ movq %r13, %cr2
- 1:
-
+-1:
+-
- testl %ebx,%ebx /* swapgs needed? */
+ testl $1,%ebx /* swapgs needed? */
jnz nmi_restore
SWAPGS_UNSAFE_STACK
nmi_restore:
+ pax_exit_kernel_nmi
- /* Pop the extra iret frame at once */
- RESTORE_ALL 6*8
-+ testb $3, 8(%rsp)
-+ jnz 1f
-+ pax_force_retaddr_bts
-+1:
+ RESTORE_EXTRA_REGS
+ RESTORE_C_REGS
+- /* Pop the extra iret frame at once */
++
+ REMOVE_PT_GPREGS_FROM_STACK 6*8
- /* Clear the NMI executing stack variable */
- movq $0, 5*8(%rsp)
- jmp irq_return
+- /* Clear the NMI executing stack variable */
+- movq $0, 5*8(%rsp)
+- jmp irq_return
++ pax_force_retaddr_bts
++
++ /*
++ * Clear "NMI executing". Set DF first so that we can easily
++ * distinguish the remaining code between here and IRET from
++ * the SYSCALL entry and exit paths. On a native kernel, we
++ * could just inspect RIP, but, on paravirt kernels,
++ * INTERRUPT_RETURN can translate into a jump into a
++ * hypercall page.
++ */
++ std
++ movq $0, 5*8(%rsp) /* clear "NMI executing" */
++
++ /*
++ * INTERRUPT_RETURN reads the "iret" frame and exits the NMI
++ * stack in a single instruction. We are returning to kernel
++ * mode, so this cannot result in a fault.
++ */
++ INTERRUPT_RETURN
CFI_ENDPROC
-END(nmi)
+ENDPROC(nmi)
unlock_done:
mutex_unlock(&espfix_init_mutex);
diff --git a/arch/x86/kernel/ftrace.c b/arch/x86/kernel/ftrace.c
-index 8b7b0a5..2395f29 100644
+index 8b7b0a5..02219db 100644
--- a/arch/x86/kernel/ftrace.c
+++ b/arch/x86/kernel/ftrace.c
@@ -89,7 +89,7 @@ static unsigned long text_ip_addr(unsigned long ip)
return -EFAULT;
/* Make sure it is what we expect it to be */
+@@ -670,11 +672,11 @@ static unsigned char *ftrace_jmp_replace(unsigned long ip, unsigned long addr)
+ /* Module allocation simplifies allocating memory for code */
+ static inline void *alloc_tramp(unsigned long size)
+ {
+- return module_alloc(size);
++ return module_alloc_exec(size);
+ }
+ static inline void tramp_free(void *tramp)
+ {
+- module_memfree(tramp);
++ module_memfree_exec(tramp);
+ }
+ #else
+ /* Trampolines can only be created if modules are supported */
+@@ -753,7 +755,9 @@ create_trampoline(struct ftrace_ops *ops, unsigned int *tramp_size)
+ *tramp_size = size + MCOUNT_INSN_SIZE + sizeof(void *);
+
+ /* Copy ftrace_caller onto the trampoline memory */
++ pax_open_kernel();
+ ret = probe_kernel_read(trampoline, (void *)start_offset, size);
++ pax_close_kernel();
+ if (WARN_ON(ret < 0)) {
+ tramp_free(trampoline);
+ return 0;
+@@ -763,6 +767,7 @@ create_trampoline(struct ftrace_ops *ops, unsigned int *tramp_size)
+
+ /* The trampoline ends with a jmp to ftrace_return */
+ jmp = ftrace_jmp_replace(ip, (unsigned long)ftrace_return);
++ pax_open_kernel();
+ memcpy(trampoline + size, jmp, MCOUNT_INSN_SIZE);
+
+ /*
+@@ -775,6 +780,7 @@ create_trampoline(struct ftrace_ops *ops, unsigned int *tramp_size)
+
+ ptr = (unsigned long *)(trampoline + size + MCOUNT_INSN_SIZE);
+ *ptr = (unsigned long)ops;
++ pax_close_kernel();
+
+ op_offset -= start_offset;
+ memcpy(&op_ptr, trampoline + op_offset, OP_REF_SIZE);
+@@ -792,7 +798,9 @@ create_trampoline(struct ftrace_ops *ops, unsigned int *tramp_size)
+ op_ptr.offset = offset;
+
+ /* put in the new offset to the ftrace_ops */
++ pax_open_kernel();
+ memcpy(trampoline + op_offset, &op_ptr, OP_REF_SIZE);
++ pax_close_kernel();
+
+ /* ALLOC_TRAMP flags lets us know we created it */
+ ops->flags |= FTRACE_OPS_FL_ALLOC_TRAMP;
diff --git a/arch/x86/kernel/head64.c b/arch/x86/kernel/head64.c
-index c4f8d46..2d63ae2 100644
+index 5a46681..1ef7ffa 100644
--- a/arch/x86/kernel/head64.c
+++ b/arch/x86/kernel/head64.c
@@ -68,12 +68,12 @@ again:
}
pmd = (physaddr & PMD_MASK) + early_pmd_flags;
pmd_p[pmd_index(address)] = pmd;
-@@ -180,7 +180,6 @@ asmlinkage __visible void __init x86_64_start_kernel(char * real_mode_data)
- if (console_loglevel >= CONSOLE_LOGLEVEL_DEBUG)
- early_printk("Kernel alive\n");
+@@ -177,7 +177,6 @@ asmlinkage __visible void __init x86_64_start_kernel(char * real_mode_data)
+ */
+ load_ucode_bsp();
- clear_page(init_level4_pgt);
/* set init_level4_pgt kernel high mapping*/
init_level4_pgt[511] = early_level4_pgt[511];
diff --git a/arch/x86/kernel/head_32.S b/arch/x86/kernel/head_32.S
-index f36bd42..0ab4474 100644
+index 7e429c9..7244a52 100644
--- a/arch/x86/kernel/head_32.S
+++ b/arch/x86/kernel/head_32.S
-@@ -26,6 +26,12 @@
+@@ -27,6 +27,12 @@
/* Physical address */
#define pa(X) ((X) - __PAGE_OFFSET)
/*
* References to members of the new_cpu_data structure.
*/
-@@ -55,11 +61,7 @@
+@@ -56,11 +62,7 @@
* and small than max_low_pfn, otherwise will waste some page table entries
*/
-#endif
+#define PAGE_TABLE_SIZE(pages) ((pages) / PTRS_PER_PTE)
- /* Number of possible pages in the lowmem region */
- LOWMEM_PAGES = (((1<<32) - __PAGE_OFFSET) >> PAGE_SHIFT)
-@@ -78,6 +80,12 @@ INIT_MAP_SIZE = PAGE_TABLE_SIZE(KERNEL_PAGES) * PAGE_SIZE
+ /*
+ * Number of possible pages in the lowmem region.
+@@ -86,6 +88,12 @@ INIT_MAP_SIZE = PAGE_TABLE_SIZE(KERNEL_PAGES) * PAGE_SIZE
RESERVE_BRK(pagetables, INIT_MAP_SIZE)
/*
* 32-bit kernel entrypoint; only used by the boot CPU. On entry,
* %esi points to the real-mode code as a 32-bit pointer.
* CS and DS must be 4 GB flat segments, but we don't depend on
-@@ -85,6 +93,13 @@ RESERVE_BRK(pagetables, INIT_MAP_SIZE)
+@@ -93,6 +101,13 @@ RESERVE_BRK(pagetables, INIT_MAP_SIZE)
* can.
*/
__HEAD
ENTRY(startup_32)
movl pa(stack_start),%ecx
-@@ -106,6 +121,59 @@ ENTRY(startup_32)
+@@ -114,6 +129,59 @@ ENTRY(startup_32)
2:
leal -__PAGE_OFFSET(%ecx),%esp
/*
* Clear BSS first so that there are no surprises...
*/
-@@ -201,8 +269,11 @@ ENTRY(startup_32)
+@@ -209,8 +277,11 @@ ENTRY(startup_32)
movl %eax, pa(max_pfn_mapped)
/* Do early initialization of the fixmap area */
#else /* Not PAE */
page_pde_offset = (__PAGE_OFFSET >> 20);
-@@ -232,8 +303,11 @@ page_pde_offset = (__PAGE_OFFSET >> 20);
+@@ -240,8 +311,11 @@ page_pde_offset = (__PAGE_OFFSET >> 20);
movl %eax, pa(max_pfn_mapped)
/* Do early initialization of the fixmap area */
#endif
#ifdef CONFIG_PARAVIRT
-@@ -247,9 +321,7 @@ page_pde_offset = (__PAGE_OFFSET >> 20);
+@@ -255,9 +329,7 @@ page_pde_offset = (__PAGE_OFFSET >> 20);
cmpl $num_subarch_entries, %eax
jae bad_subarch
bad_subarch:
WEAK(lguest_entry)
-@@ -261,10 +333,10 @@ WEAK(xen_entry)
+@@ -269,10 +341,10 @@ WEAK(xen_entry)
__INITDATA
subarch_entries:
num_subarch_entries = (. - subarch_entries) / 4
.previous
#else
-@@ -354,6 +426,7 @@ default_entry:
+@@ -362,6 +434,7 @@ default_entry:
movl pa(mmu_cr4_features),%eax
movl %eax,%cr4
testb $X86_CR4_PAE, %al # check if PAE is enabled
jz enable_paging
-@@ -382,6 +455,9 @@ default_entry:
+@@ -390,6 +463,9 @@ default_entry:
/* Make changes effective */
wrmsr
enable_paging:
/*
-@@ -449,14 +525,20 @@ is486:
+@@ -457,14 +533,20 @@ is486:
1: movl $(__KERNEL_DS),%eax # reload all the segment registers
movl %eax,%ss # after changing gdt.
movl %eax,%gs
xorl %eax,%eax # Clear LDT
-@@ -512,8 +594,11 @@ setup_once:
+@@ -521,8 +603,11 @@ setup_once:
* relocation. Manually set base address in stack canary
* segment descriptor.
*/
movw %cx, 8 * GDT_ENTRY_STACK_CANARY + 2(%eax)
shrl $16, %ecx
movb %cl, 8 * GDT_ENTRY_STACK_CANARY + 4(%eax)
-@@ -548,7 +633,7 @@ ENTRY(early_idt_handler)
+@@ -559,7 +644,7 @@ early_idt_handler_common:
cmpl $2,(%esp) # X86_TRAP_NMI
je is_nmi # Ignore NMI
je hlt_loop
incl %ss:early_recursion_flag
-@@ -586,8 +671,8 @@ ENTRY(early_idt_handler)
+@@ -597,8 +682,8 @@ early_idt_handler_common:
pushl (20+6*4)(%esp) /* trapno */
pushl $fault_msg
call printk
hlt_loop:
hlt
jmp hlt_loop
-@@ -607,8 +692,11 @@ ENDPROC(early_idt_handler)
+@@ -618,8 +703,11 @@ ENDPROC(early_idt_handler_common)
/* This is the default interrupt "handler" :-) */
ALIGN
ignore_int:
pushl %eax
pushl %ecx
pushl %edx
-@@ -617,9 +705,6 @@ ignore_int:
+@@ -628,9 +716,6 @@ ignore_int:
movl $(__KERNEL_DS),%eax
movl %eax,%ds
movl %eax,%es
pushl 16(%esp)
pushl 24(%esp)
pushl 32(%esp)
-@@ -653,29 +738,34 @@ ENTRY(setup_once_ref)
+@@ -664,29 +749,34 @@ ENTRY(setup_once_ref)
/*
* BSS section
*/
ENTRY(initial_page_table)
.long pa(initial_pg_pmd+PGD_IDENT_ATTR),0 /* low identity map */
# if KPMDS == 3
-@@ -694,12 +784,20 @@ ENTRY(initial_page_table)
+@@ -705,12 +795,20 @@ ENTRY(initial_page_table)
# error "Kernel PMDs should be 1, 2 or 3"
# endif
.align PAGE_SIZE /* needs to be page-sized too */
__INITRODATA
int_msg:
-@@ -727,7 +825,7 @@ fault_msg:
+@@ -738,7 +836,7 @@ fault_msg:
* segment size, and 32-bit linear address value:
*/
.globl boot_gdt_descr
.globl idt_descr
-@@ -736,7 +834,7 @@ fault_msg:
+@@ -747,7 +845,7 @@ fault_msg:
.word 0 # 32 bit align gdt_desc.address
boot_gdt_descr:
.word __BOOT_DS+7
.word 0 # 32-bit align idt_desc.address
idt_descr:
-@@ -747,7 +845,7 @@ idt_descr:
+@@ -758,7 +856,7 @@ idt_descr:
.word 0 # 32 bit align gdt_desc.address
ENTRY(early_gdt_descr)
.word GDT_ENTRIES*8-1
/*
* The boot_gdt must mirror the equivalent in setup.S and is
-@@ -756,5 +854,65 @@ ENTRY(early_gdt_descr)
+@@ -767,5 +865,65 @@ ENTRY(early_gdt_descr)
.align L1_CACHE_BYTES
ENTRY(boot_gdt)
.fill GDT_ENTRY_BOOT_CS,8,0
+ .fill PAGE_SIZE_asm - GDT_SIZE,1,0
+ .endr
diff --git a/arch/x86/kernel/head_64.S b/arch/x86/kernel/head_64.S
-index 6fd514d9..320367e 100644
+index df7e780..e97a497 100644
--- a/arch/x86/kernel/head_64.S
+++ b/arch/x86/kernel/head_64.S
@@ -20,6 +20,8 @@
.word 0
__FINITDATA
-@@ -391,7 +427,7 @@ ENTRY(early_idt_handler)
+@@ -393,7 +429,7 @@ early_idt_handler_common:
call dump_stack
#ifdef CONFIG_KALLSYMS
leaq early_idt_ripmsg(%rip),%rdi
call __print_symbol
#endif
#endif /* EARLY_PRINTK */
-@@ -420,6 +456,7 @@ ENDPROC(early_idt_handler)
+@@ -422,6 +458,7 @@ ENDPROC(early_idt_handler_common)
early_recursion_flag:
.long 0
#ifdef CONFIG_EARLY_PRINTK
early_idt_msg:
.asciz "PANIC: early exception %02lx rip %lx:%lx error %lx cr2 %lx\n"
-@@ -447,29 +484,52 @@ NEXT_PAGE(early_level4_pgt)
+@@ -449,29 +486,52 @@ NEXT_PAGE(early_level4_pgt)
NEXT_PAGE(early_dynamic_pgts)
.fill 512*EARLY_DYNAMIC_PAGE_TABLES,8,0
NEXT_PAGE(level3_kernel_pgt)
.fill L3_START_KERNEL,8,0
-@@ -477,6 +537,9 @@ NEXT_PAGE(level3_kernel_pgt)
+@@ -479,6 +539,9 @@ NEXT_PAGE(level3_kernel_pgt)
.quad level2_kernel_pgt - __START_KERNEL_map + _KERNPG_TABLE
.quad level2_fixmap_pgt - __START_KERNEL_map + _PAGE_TABLE
NEXT_PAGE(level2_kernel_pgt)
/*
* 512 MB kernel mapping. We spend a full page on this pagetable
-@@ -492,23 +555,61 @@ NEXT_PAGE(level2_kernel_pgt)
+@@ -494,23 +557,61 @@ NEXT_PAGE(level2_kernel_pgt)
KERNEL_IMAGE_SIZE/PMD_SIZE)
NEXT_PAGE(level2_fixmap_pgt)
ENTRY(phys_base)
/* This must match the first entry in level2_kernel_pgt */
-@@ -532,8 +633,8 @@ NEXT_PAGE(kasan_zero_pud)
+@@ -534,8 +635,8 @@ NEXT_PAGE(kasan_zero_pud)
#include "../../x86/xen/xen-head.S"
+#ifdef CONFIG_PAX_PER_CPU_PGD
+EXPORT_SYMBOL(cpu_pgd);
+#endif
-diff --git a/arch/x86/kernel/i387.c b/arch/x86/kernel/i387.c
-index d5651fc..29c740d 100644
---- a/arch/x86/kernel/i387.c
-+++ b/arch/x86/kernel/i387.c
-@@ -68,7 +68,7 @@ static inline bool interrupted_kernel_fpu_idle(void)
- static inline bool interrupted_user_mode(void)
- {
- struct pt_regs *regs = get_irq_regs();
-- return regs && user_mode_vm(regs);
-+ return regs && user_mode(regs);
- }
-
- /*
diff --git a/arch/x86/kernel/i8259.c b/arch/x86/kernel/i8259.c
index e7cc537..67d7372 100644
--- a/arch/x86/kernel/i8259.c
.callback = dmi_io_delay_0xed_port,
.ident = "Compaq Presario V6000",
diff --git a/arch/x86/kernel/ioport.c b/arch/x86/kernel/ioport.c
-index 4ddaf66..49d5c18 100644
+index 37dae79..620dd84 100644
--- a/arch/x86/kernel/ioport.c
+++ b/arch/x86/kernel/ioport.c
@@ -6,6 +6,7 @@
* because the ->io_bitmap_max value must match the bitmap
* contents:
*/
-- tss = &per_cpu(init_tss, get_cpu());
-+ tss = init_tss + get_cpu();
+- tss = &per_cpu(cpu_tss, get_cpu());
++ tss = cpu_tss + get_cpu();
if (turn_on)
bitmap_clear(t->io_bitmap_ptr, from, num);
regs->flags = (regs->flags & ~X86_EFLAGS_IOPL) | (level << 12);
t->iopl = level << 12;
diff --git a/arch/x86/kernel/irq.c b/arch/x86/kernel/irq.c
-index 67b1cbe..6ad4cbc 100644
+index e5952c2..11c3a54 100644
--- a/arch/x86/kernel/irq.c
+++ b/arch/x86/kernel/irq.c
@@ -22,7 +22,7 @@
}
diff --git a/arch/x86/kernel/irq_32.c b/arch/x86/kernel/irq_32.c
-index 28d28f5..e6cc9ae 100644
+index f9fd86a..e6cc9ae 100644
--- a/arch/x86/kernel/irq_32.c
+++ b/arch/x86/kernel/irq_32.c
@@ -29,6 +29,8 @@ EXPORT_PER_CPU_SYMBOL(irq_regs);
}
bool handle_irq(unsigned irq, struct pt_regs *regs)
-@@ -165,7 +171,7 @@ bool handle_irq(unsigned irq, struct pt_regs *regs)
- if (unlikely(!desc))
- return false;
-
-- if (user_mode_vm(regs) || !execute_on_irq_stack(overflow, desc, irq)) {
-+ if (user_mode(regs) || !execute_on_irq_stack(overflow, desc, irq)) {
- if (unlikely(overflow))
- print_stack_overflow();
- desc->handle_irq(irq, desc);
diff --git a/arch/x86/kernel/irq_64.c b/arch/x86/kernel/irq_64.c
-index e4b503d..824fce8 100644
+index 394e643..824fce8 100644
--- a/arch/x86/kernel/irq_64.c
+++ b/arch/x86/kernel/irq_64.c
@@ -26,6 +26,8 @@ EXPORT_PER_CPU_SYMBOL(irq_stat);
int sysctl_panic_on_stackoverflow;
/*
-@@ -44,7 +46,7 @@ static inline void stack_overflow_check(struct pt_regs *regs)
- u64 estack_top, estack_bottom;
- u64 curbase = (u64)task_stack_page(current);
-
-- if (user_mode_vm(regs))
-+ if (user_mode(regs))
- return;
-
- if (regs->sp >= curbase + sizeof(struct thread_info) +
@@ -69,6 +71,8 @@ static inline void stack_overflow_check(struct pt_regs *regs)
irq_stack_top, irq_stack_bottom,
estack_top, estack_bottom);
}
memcpy(&code, ideal_nops[NOP_ATOMIC5], JUMP_LABEL_NOP_SIZE);
diff --git a/arch/x86/kernel/kgdb.c b/arch/x86/kernel/kgdb.c
-index 25ecd56..e12482f 100644
+index d6178d9..e12482f 100644
--- a/arch/x86/kernel/kgdb.c
+++ b/arch/x86/kernel/kgdb.c
-@@ -126,11 +126,11 @@ char *dbg_get_reg(int regno, void *mem, struct pt_regs *regs)
- #ifdef CONFIG_X86_32
- switch (regno) {
- case GDB_SS:
-- if (!user_mode_vm(regs))
-+ if (!user_mode(regs))
- *(unsigned long *)mem = __KERNEL_DS;
- break;
- case GDB_SP:
-- if (!user_mode_vm(regs))
-+ if (!user_mode(regs))
- *(unsigned long *)mem = kernel_stack_pointer(regs);
- break;
- case GDB_GS:
@@ -228,7 +228,10 @@ static void kgdb_correct_hw_break(void)
bp->attr.bp_addr = breakinfo[breakno].addr;
bp->attr.bp_len = breakinfo[breakno].len;
}
diff --git a/arch/x86/kernel/kprobes/core.c b/arch/x86/kernel/kprobes/core.c
-index 4e3d5a9..03fffd8 100644
+index 1deffe6..4705700 100644
--- a/arch/x86/kernel/kprobes/core.c
+++ b/arch/x86/kernel/kprobes/core.c
@@ -120,9 +120,12 @@ __synthesize_relative_insn(void *from, void *to, u8 op)
}
/*
-@@ -364,7 +367,9 @@ int __copy_instruction(u8 *dest, u8 *src)
+@@ -367,7 +370,9 @@ int __copy_instruction(u8 *dest, u8 *src)
/* Another subsystem puts a breakpoint, failed to recover */
if (insn.opcode.bytes[0] == BREAKPOINT_INSTRUCTION)
return 0;
+ pax_open_kernel();
- memcpy(dest, insn.kaddr, insn.length);
+ memcpy(dest, insn.kaddr, length);
+ pax_close_kernel();
#ifdef CONFIG_X86_64
if (insn_rip_relative(&insn)) {
-@@ -391,7 +396,9 @@ int __copy_instruction(u8 *dest, u8 *src)
+@@ -394,7 +399,9 @@ int __copy_instruction(u8 *dest, u8 *src)
return 0;
}
disp = (u8 *) dest + insn_offset_displacement(&insn);
+ pax_close_kernel();
}
#endif
- return insn.length;
-@@ -533,7 +540,7 @@ static void setup_singlestep(struct kprobe *p, struct pt_regs *regs,
+ return length;
+@@ -536,7 +543,7 @@ static void setup_singlestep(struct kprobe *p, struct pt_regs *regs,
* nor set current_kprobe, because it doesn't use single
* stepping.
*/
preempt_enable_no_resched();
return;
}
-@@ -550,9 +557,9 @@ static void setup_singlestep(struct kprobe *p, struct pt_regs *regs,
+@@ -553,9 +560,9 @@ static void setup_singlestep(struct kprobe *p, struct pt_regs *regs,
regs->flags &= ~X86_EFLAGS_IF;
/* single step inline if the instruction is an int3 */
if (p->opcode == BREAKPOINT_INSTRUCTION)
}
NOKPROBE_SYMBOL(setup_singlestep);
-@@ -602,7 +609,7 @@ int kprobe_int3_handler(struct pt_regs *regs)
- struct kprobe *p;
- struct kprobe_ctlblk *kcb;
-
-- if (user_mode_vm(regs))
-+ if (user_mode(regs))
- return 0;
-
- addr = (kprobe_opcode_t *)(regs->ip - sizeof(kprobe_opcode_t));
-@@ -637,7 +644,7 @@ int kprobe_int3_handler(struct pt_regs *regs)
+@@ -640,7 +647,7 @@ int kprobe_int3_handler(struct pt_regs *regs)
setup_singlestep(p, regs, kcb, 0);
return 1;
}
/*
* The breakpoint instruction was removed right
* after we hit it. Another cpu has removed
-@@ -684,6 +691,9 @@ static void __used kretprobe_trampoline_holder(void)
+@@ -687,6 +694,9 @@ static void __used kretprobe_trampoline_holder(void)
" movq %rax, 152(%rsp)\n"
RESTORE_REGS_STRING
" popfq\n"
#else
" pushf\n"
SAVE_REGS_STRING
-@@ -824,7 +834,7 @@ static void resume_execution(struct kprobe *p, struct pt_regs *regs,
+@@ -827,7 +837,7 @@ static void resume_execution(struct kprobe *p, struct pt_regs *regs,
struct kprobe_ctlblk *kcb)
{
unsigned long *tos = stack_addr(regs);
unsigned long orig_ip = (unsigned long)p->addr;
kprobe_opcode_t *insn = p->ainsn.insn;
-@@ -1007,7 +1017,7 @@ int kprobe_exceptions_notify(struct notifier_block *self, unsigned long val,
- struct die_args *args = data;
- int ret = NOTIFY_DONE;
-
-- if (args->regs && user_mode_vm(args->regs))
-+ if (args->regs && user_mode(args->regs))
- return ret;
-
- if (val == DIE_GPF) {
diff --git a/arch/x86/kernel/kprobes/opt.c b/arch/x86/kernel/kprobes/opt.c
index 7b3b9d1..e2478b91 100644
--- a/arch/x86/kernel/kprobes/opt.c
.name = "data",
.mode = S_IRUGO,
diff --git a/arch/x86/kernel/ldt.c b/arch/x86/kernel/ldt.c
-index c37886d..d851d32 100644
+index c37886d..f43b63d 100644
--- a/arch/x86/kernel/ldt.c
+++ b/arch/x86/kernel/ldt.c
-@@ -66,13 +66,13 @@ static int alloc_ldt(mm_context_t *pc, int mincount, int reload)
+@@ -11,6 +11,7 @@
+ #include <linux/sched.h>
+ #include <linux/string.h>
+ #include <linux/mm.h>
++#include <linux/ratelimit.h>
+ #include <linux/smp.h>
+ #include <linux/vmalloc.h>
+ #include <linux/uaccess.h>
+@@ -20,6 +21,14 @@
+ #include <asm/mmu_context.h>
+ #include <asm/syscalls.h>
+
++#ifdef CONFIG_GRKERNSEC
++int sysctl_modify_ldt __read_only = 0;
++#elif defined(CONFIG_DEFAULT_MODIFY_LDT_SYSCALL)
++int sysctl_modify_ldt __read_only = 1;
++#else
++int sysctl_modify_ldt __read_only = 0;
++#endif
++
+ #ifdef CONFIG_SMP
+ static void flush_ldt(void *current_mm)
+ {
+@@ -66,13 +75,13 @@ static int alloc_ldt(mm_context_t *pc, int mincount, int reload)
if (reload) {
#ifdef CONFIG_SMP
preempt_disable();
#endif
}
if (oldsize) {
-@@ -94,7 +94,7 @@ static inline int copy_ldt(mm_context_t *new, mm_context_t *old)
+@@ -94,7 +103,7 @@ static inline int copy_ldt(mm_context_t *new, mm_context_t *old)
return err;
for (i = 0; i < old->size; i++)
return 0;
}
-@@ -115,6 +115,24 @@ int init_new_context(struct task_struct *tsk, struct mm_struct *mm)
+@@ -115,6 +124,24 @@ int init_new_context(struct task_struct *tsk, struct mm_struct *mm)
retval = copy_ldt(&mm->context, &old_mm->context);
mutex_unlock(&old_mm->context.lock);
}
+ mm->context.user_cs_limit = ~0UL;
+
+#if defined(CONFIG_PAX_PAGEEXEC) && defined(CONFIG_SMP)
-+ cpus_clear(mm->context.cpu_user_cs_mask);
++ cpumask_clear(&mm->context.cpu_user_cs_mask);
+#endif
+
+#endif
return retval;
}
-@@ -229,6 +247,13 @@ static int write_ldt(void __user *ptr, unsigned long bytecount, int oldmode)
+@@ -229,6 +256,13 @@ static int write_ldt(void __user *ptr, unsigned long bytecount, int oldmode)
}
}
if (!IS_ENABLED(CONFIG_X86_16BIT) && !ldt_info.seg_32bit) {
error = -EINVAL;
goto out_unlock;
+@@ -254,6 +288,15 @@ asmlinkage int sys_modify_ldt(int func, void __user *ptr,
+ {
+ int ret = -ENOSYS;
+
++ if (!sysctl_modify_ldt) {
++ printk_ratelimited(KERN_INFO
++ "Denied a call to modify_ldt() from %s[%d] (uid: %d)."
++ " Adjust sysctl if this was not an exploit attempt.\n",
++ current->comm, task_pid_nr(current),
++ from_kuid_munged(current_user_ns(), current_uid()));
++ return ret;
++ }
++
+ switch (func) {
+ case 0:
+ ret = read_ldt(ptr, bytecount);
diff --git a/arch/x86/kernel/livepatch.c b/arch/x86/kernel/livepatch.c
index ff3c3101d..d7c0cd8 100644
--- a/arch/x86/kernel/livepatch.c
+ENDPROC(return_to_handler)
#endif
diff --git a/arch/x86/kernel/module.c b/arch/x86/kernel/module.c
-index d1ac80b..f593701 100644
+index 005c03e..2f440cd 100644
--- a/arch/x86/kernel/module.c
+++ b/arch/x86/kernel/module.c
-@@ -82,17 +82,17 @@ static unsigned long int get_module_load_offset(void)
+@@ -75,17 +75,17 @@ static unsigned long int get_module_load_offset(void)
}
#endif
__builtin_return_address(0));
if (p && (kasan_module_alloc(p, size) < 0)) {
vfree(p);
-@@ -102,6 +102,51 @@ void *module_alloc(unsigned long size)
+@@ -95,6 +95,51 @@ void *module_alloc(unsigned long size)
return p;
}
#ifdef CONFIG_X86_32
int apply_relocate(Elf32_Shdr *sechdrs,
const char *strtab,
-@@ -112,14 +157,16 @@ int apply_relocate(Elf32_Shdr *sechdrs,
+@@ -105,14 +150,16 @@ int apply_relocate(Elf32_Shdr *sechdrs,
unsigned int i;
Elf32_Rel *rel = (void *)sechdrs[relsec].sh_addr;
Elf32_Sym *sym;
/* This is the symbol it is referring to. Note that all
undefined symbols have been resolved. */
sym = (Elf32_Sym *)sechdrs[symindex].sh_addr
-@@ -128,11 +175,15 @@ int apply_relocate(Elf32_Shdr *sechdrs,
+@@ -121,11 +168,15 @@ int apply_relocate(Elf32_Shdr *sechdrs,
switch (ELF32_R_TYPE(rel[i].r_info)) {
case R_386_32:
/* We add the value into the location given */
break;
default:
pr_err("%s: Unknown relocation: %u\n",
-@@ -177,21 +228,30 @@ int apply_relocate_add(Elf64_Shdr *sechdrs,
+@@ -170,21 +221,30 @@ int apply_relocate_add(Elf64_Shdr *sechdrs,
case R_X86_64_NONE:
break;
case R_X86_64_64:
};
diff --git a/arch/x86/kernel/nmi.c b/arch/x86/kernel/nmi.c
-index c3e985d..110a36a 100644
+index c3e985d..f690edd 100644
--- a/arch/x86/kernel/nmi.c
+++ b/arch/x86/kernel/nmi.c
@@ -98,16 +98,16 @@ fs_initcall(nmi_warning_debugfs);
break;
}
}
-@@ -528,6 +529,17 @@ static inline void nmi_nesting_postprocess(void)
- dotraplinkage notrace void
- do_nmi(struct pt_regs *regs, long error_code)
+@@ -408,15 +409,15 @@ static void default_do_nmi(struct pt_regs *regs)
+ NOKPROBE_SYMBOL(default_do_nmi);
+
+ /*
+- * NMIs can hit breakpoints which will cause it to lose its
+- * NMI context with the CPU when the breakpoint does an iret.
+- */
+-#ifdef CONFIG_X86_32
+-/*
+- * For i386, NMIs use the same stack as the kernel, and we can
+- * add a workaround to the iret problem in C (preventing nested
+- * NMIs if an NMI takes a trap). Simply have 3 states the NMI
+- * can be in:
++ * NMIs can page fault or hit breakpoints which will cause it to lose
++ * its NMI context with the CPU when the breakpoint or page fault does an IRET.
++ *
++ * As a result, NMIs can nest if NMIs get unmasked due an IRET during
++ * NMI processing. On x86_64, the asm glue protects us from nested NMIs
++ * if the outer NMI came from kernel mode, but we can still nest if the
++ * outer NMI came from user mode.
++ *
++ * To handle these nested NMIs, we have three states:
+ *
+ * 1) not running
+ * 2) executing
+@@ -430,15 +431,14 @@ NOKPROBE_SYMBOL(default_do_nmi);
+ * (Note, the latch is binary, thus multiple NMIs triggering,
+ * when one is running, are ignored. Only one NMI is restarted.)
+ *
+- * If an NMI hits a breakpoint that executes an iret, another
+- * NMI can preempt it. We do not want to allow this new NMI
+- * to run, but we want to execute it when the first one finishes.
+- * We set the state to "latched", and the exit of the first NMI will
+- * perform a dec_return, if the result is zero (NOT_RUNNING), then
+- * it will simply exit the NMI handler. If not, the dec_return
+- * would have set the state to NMI_EXECUTING (what we want it to
+- * be when we are running). In this case, we simply jump back
+- * to rerun the NMI handler again, and restart the 'latched' NMI.
++ * If an NMI executes an iret, another NMI can preempt it. We do not
++ * want to allow this new NMI to run, but we want to execute it when the
++ * first one finishes. We set the state to "latched", and the exit of
++ * the first NMI will perform a dec_return, if the result is zero
++ * (NOT_RUNNING), then it will simply exit the NMI handler. If not, the
++ * dec_return would have set the state to NMI_EXECUTING (what we want it
++ * to be when we are running). In this case, we simply jump back to
++ * rerun the NMI handler again, and restart the 'latched' NMI.
+ *
+ * No trap (breakpoint or page fault) should be hit before nmi_restart,
+ * thus there is no race between the first check of state for NOT_RUNNING
+@@ -461,49 +461,47 @@ enum nmi_states {
+ static DEFINE_PER_CPU(enum nmi_states, nmi_state);
+ static DEFINE_PER_CPU(unsigned long, nmi_cr2);
+
+-#define nmi_nesting_preprocess(regs) \
+- do { \
+- if (this_cpu_read(nmi_state) != NMI_NOT_RUNNING) { \
+- this_cpu_write(nmi_state, NMI_LATCHED); \
+- return; \
+- } \
+- this_cpu_write(nmi_state, NMI_EXECUTING); \
+- this_cpu_write(nmi_cr2, read_cr2()); \
+- } while (0); \
+- nmi_restart:
+-
+-#define nmi_nesting_postprocess() \
+- do { \
+- if (unlikely(this_cpu_read(nmi_cr2) != read_cr2())) \
+- write_cr2(this_cpu_read(nmi_cr2)); \
+- if (this_cpu_dec_return(nmi_state)) \
+- goto nmi_restart; \
+- } while (0)
+-#else /* x86_64 */
++#ifdef CONFIG_X86_64
+ /*
+- * In x86_64 things are a bit more difficult. This has the same problem
+- * where an NMI hitting a breakpoint that calls iret will remove the
+- * NMI context, allowing a nested NMI to enter. What makes this more
+- * difficult is that both NMIs and breakpoints have their own stack.
+- * When a new NMI or breakpoint is executed, the stack is set to a fixed
+- * point. If an NMI is nested, it will have its stack set at that same
+- * fixed address that the first NMI had, and will start corrupting the
+- * stack. This is handled in entry_64.S, but the same problem exists with
+- * the breakpoint stack.
++ * In x86_64, we need to handle breakpoint -> NMI -> breakpoint. Without
++ * some care, the inner breakpoint will clobber the outer breakpoint's
++ * stack.
+ *
+- * If a breakpoint is being processed, and the debug stack is being used,
+- * if an NMI comes in and also hits a breakpoint, the stack pointer
+- * will be set to the same fixed address as the breakpoint that was
+- * interrupted, causing that stack to be corrupted. To handle this case,
+- * check if the stack that was interrupted is the debug stack, and if
+- * so, change the IDT so that new breakpoints will use the current stack
+- * and not switch to the fixed address. On return of the NMI, switch back
+- * to the original IDT.
++ * If a breakpoint is being processed, and the debug stack is being
++ * used, if an NMI comes in and also hits a breakpoint, the stack
++ * pointer will be set to the same fixed address as the breakpoint that
++ * was interrupted, causing that stack to be corrupted. To handle this
++ * case, check if the stack that was interrupted is the debug stack, and
++ * if so, change the IDT so that new breakpoints will use the current
++ * stack and not switch to the fixed address. On return of the NMI,
++ * switch back to the original IDT.
+ */
+ static DEFINE_PER_CPU(int, update_debug_stack);
++#endif
+
+-static inline void nmi_nesting_preprocess(struct pt_regs *regs)
++dotraplinkage notrace void
++do_nmi(struct pt_regs *regs, long error_code)
{
+
+#if defined(CONFIG_X86_32) && defined(CONFIG_PAX_KERNEXEC)
+ }
+#endif
+
- nmi_nesting_preprocess(regs);
++ if (this_cpu_read(nmi_state) != NMI_NOT_RUNNING) {
++ this_cpu_write(nmi_state, NMI_LATCHED);
++ return;
++ }
++ this_cpu_write(nmi_state, NMI_EXECUTING);
++ this_cpu_write(nmi_cr2, read_cr2());
++nmi_restart:
++
++#ifdef CONFIG_X86_64
+ /*
+ * If we interrupted a breakpoint, it is possible that
+ * the nmi handler will have breakpoints too. We need to
+@@ -514,22 +512,8 @@ static inline void nmi_nesting_preprocess(struct pt_regs *regs)
+ debug_stack_set_zero();
+ this_cpu_write(update_debug_stack, 1);
+ }
+-}
+-
+-static inline void nmi_nesting_postprocess(void)
+-{
+- if (unlikely(this_cpu_read(update_debug_stack))) {
+- debug_stack_reset();
+- this_cpu_write(update_debug_stack, 0);
+- }
+-}
+ #endif
+-dotraplinkage notrace void
+-do_nmi(struct pt_regs *regs, long error_code)
+-{
+- nmi_nesting_preprocess(regs);
+-
nmi_enter();
+
+ inc_irq_stat(__nmi_count);
+@@ -539,8 +523,17 @@ do_nmi(struct pt_regs *regs, long error_code)
+
+ nmi_exit();
+
+- /* On i386, may loop back to preprocess */
+- nmi_nesting_postprocess();
++#ifdef CONFIG_X86_64
++ if (unlikely(this_cpu_read(update_debug_stack))) {
++ debug_stack_reset();
++ this_cpu_write(update_debug_stack, 0);
++ }
++#endif
++
++ if (unlikely(this_cpu_read(nmi_cr2) != read_cr2()))
++ write_cr2(this_cpu_read(nmi_cr2));
++ if (this_cpu_dec_return(nmi_state))
++ goto nmi_restart;
+ }
+ NOKPROBE_SYMBOL(do_nmi);
+
diff --git a/arch/x86/kernel/nmi_selftest.c b/arch/x86/kernel/nmi_selftest.c
index 6d9582e..f746287 100644
--- a/arch/x86/kernel/nmi_selftest.c
.lock_spinning = __PV_IS_CALLEE_SAVE(paravirt_nop),
.unlock_kick = paravirt_nop,
diff --git a/arch/x86/kernel/paravirt.c b/arch/x86/kernel/paravirt.c
-index 548d25f..f8fb99c 100644
+index c614dd4..9ad659e 100644
--- a/arch/x86/kernel/paravirt.c
+++ b/arch/x86/kernel/paravirt.c
@@ -56,6 +56,9 @@ u64 _paravirt_ident_64(u64 x)
.set_pgd = native_set_pgd,
+ .set_pgd_batched = native_set_pgd_batched,
#endif
- #endif /* PAGETABLE_LEVELS >= 3 */
+ #endif /* CONFIG_PGTABLE_LEVELS >= 3 */
@@ -479,6 +492,12 @@ struct pv_mmu_ops pv_mmu_ops = {
},
dma_generic_free_coherent(dev, size, vaddr, dma_addr, attrs);
}
diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c
-index a388bb8..97064ad 100644
+index 6e338e3..82f946e 100644
--- a/arch/x86/kernel/process.c
+++ b/arch/x86/kernel/process.c
@@ -38,7 +38,8 @@
* section. Since TSS's are completely CPU-local, we want them
* on exact cacheline boundaries, to eliminate cacheline ping-pong.
*/
--__visible DEFINE_PER_CPU_SHARED_ALIGNED(struct tss_struct, init_tss) = INIT_TSS;
-+struct tss_struct init_tss[NR_CPUS] __visible ____cacheline_internodealigned_in_smp = { [0 ... NR_CPUS-1] = INIT_TSS };
-+EXPORT_SYMBOL(init_tss);
+-__visible DEFINE_PER_CPU_SHARED_ALIGNED(struct tss_struct, cpu_tss) = {
++struct tss_struct cpu_tss[NR_CPUS] __visible ____cacheline_internodealigned_in_smp = {
++ [0 ... NR_CPUS-1] = {
+ .x86_tss = {
+ .sp0 = TOP_OF_INIT_STACK,
+ #ifdef CONFIG_X86_32
+@@ -56,6 +57,7 @@ __visible DEFINE_PER_CPU_SHARED_ALIGNED(struct tss_struct, cpu_tss) = {
+ */
+ .io_bitmap = { [0 ... IO_BITMAP_LONGS] = ~0 },
+ #endif
++}
+ };
+ EXPORT_PER_CPU_SYMBOL(cpu_tss);
- #ifdef CONFIG_X86_64
- static DEFINE_PER_CPU(unsigned char, is_idle);
-@@ -96,7 +97,7 @@ void arch_task_cache_init(void)
+@@ -115,7 +117,7 @@ void arch_task_cache_init(void)
task_xstate_cachep =
kmem_cache_create("task_xstate", xstate_size,
__alignof__(union thread_xstate),
setup_xstate_comp();
}
-@@ -110,7 +111,7 @@ void exit_thread(void)
+@@ -129,7 +131,7 @@ void exit_thread(void)
unsigned long *bp = t->io_bitmap_ptr;
if (bp) {
-- struct tss_struct *tss = &per_cpu(init_tss, get_cpu());
-+ struct tss_struct *tss = init_tss + get_cpu();
+- struct tss_struct *tss = &per_cpu(cpu_tss, get_cpu());
++ struct tss_struct *tss = cpu_tss + get_cpu();
t->io_bitmap_ptr = NULL;
clear_thread_flag(TIF_IO_BITMAP);
-@@ -130,6 +131,9 @@ void flush_thread(void)
+@@ -149,6 +151,9 @@ void flush_thread(void)
{
struct task_struct *tsk = current;
+#endif
flush_ptrace_hw_breakpoint(tsk);
memset(tsk->thread.tls_array, 0, sizeof(tsk->thread.tls_array));
- drop_init_fpu(tsk);
-@@ -276,7 +280,7 @@ static void __exit_idle(void)
+
+@@ -302,7 +307,7 @@ static void __exit_idle(void)
void exit_idle(void)
{
/* idle loop has pid 0 */
return;
__exit_idle();
}
-@@ -329,7 +333,7 @@ bool xen_set_default_idle(void)
+@@ -355,7 +360,7 @@ bool xen_set_default_idle(void)
return ret;
}
#endif
{
local_irq_disable();
/*
-@@ -508,16 +512,37 @@ static int __init idle_setup(char *str)
+@@ -531,16 +536,43 @@ static int __init idle_setup(char *str)
}
early_param("idle", idle_setup);
-unsigned long arch_align_stack(unsigned long sp)
-+#ifdef CONFIG_PAX_RANDKSTACK
-+void pax_randomize_kstack(struct pt_regs *regs)
- {
+-{
- if (!(current->personality & ADDR_NO_RANDOMIZE) && randomize_va_space)
- sp -= get_random_int() % 8192;
- return sp & ~0xf;
-}
+-
+ unsigned long arch_randomize_brk(struct mm_struct *mm)
+ {
+ unsigned long range_end = mm->brk + 0x02000000;
+ return randomize_range(mm->brk, range_end, 0) ? : mm->brk;
+ }
+
++#ifdef CONFIG_PAX_RANDKSTACK
++void pax_randomize_kstack(struct pt_regs *regs)
++{
+ struct thread_struct *thread = ¤t->thread;
+ unsigned long time;
-
--unsigned long arch_randomize_brk(struct mm_struct *mm)
--{
-- unsigned long range_end = mm->brk + 0x02000000;
-- return randomize_range(mm->brk, range_end, 0) ? : mm->brk;
--}
++
+ if (!randomize_va_space)
+ return;
+
+ if (v8086_mode(regs))
+ return;
-
++
+ rdtscl(time);
+
+ /* P4 seems to return a 0 LSB, ignore it */
+#endif
+
+ thread->sp0 ^= time;
-+ load_sp0(init_tss + smp_processor_id(), thread);
++ load_sp0(cpu_tss + smp_processor_id(), thread);
+
+#ifdef CONFIG_X86_64
+ this_cpu_write(kernel_stack, thread->sp0);
+}
+#endif
diff --git a/arch/x86/kernel/process_32.c b/arch/x86/kernel/process_32.c
-index 603c4f9..3a105d7 100644
+index 8ed2106..1345704 100644
--- a/arch/x86/kernel/process_32.c
+++ b/arch/x86/kernel/process_32.c
@@ -64,6 +64,7 @@ asmlinkage void ret_from_kernel_thread(void) __asm__("ret_from_kernel_thread");
}
void __show_regs(struct pt_regs *regs, int all)
-@@ -73,19 +74,18 @@ void __show_regs(struct pt_regs *regs, int all)
- unsigned long sp;
- unsigned short ss, gs;
-
-- if (user_mode_vm(regs)) {
-+ if (user_mode(regs)) {
+@@ -76,16 +77,15 @@ void __show_regs(struct pt_regs *regs, int all)
+ if (user_mode(regs)) {
sp = regs->sp;
ss = regs->ss & 0xffff;
- gs = get_user_gs(regs);
childregs->fs = __KERNEL_PERCPU;
childregs->bx = sp; /* function */
childregs->bp = arg;
-@@ -248,7 +249,7 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
+@@ -244,7 +245,7 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
struct thread_struct *prev = &prev_p->thread,
*next = &next_p->thread;
int cpu = smp_processor_id();
-- struct tss_struct *tss = &per_cpu(init_tss, cpu);
-+ struct tss_struct *tss = init_tss + cpu;
+- struct tss_struct *tss = &per_cpu(cpu_tss, cpu);
++ struct tss_struct *tss = cpu_tss + cpu;
fpu_switch_t fpu;
/* never put a printk in __switch_to... printk() calls wake_up*() indirectly */
-@@ -272,6 +273,10 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
+@@ -263,6 +264,10 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
*/
lazy_save_gs(prev->gs);
/*
* Load the per-thread Thread-Local Storage descriptor.
*/
-@@ -310,9 +315,9 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
+@@ -306,12 +311,10 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
+ * current_thread_info().
*/
- arch_end_context_switch(next_p);
-
+ load_sp0(tss, next);
- this_cpu_write(kernel_stack,
-- (unsigned long)task_stack_page(next_p) +
-- THREAD_SIZE - KERNEL_STACK_OFFSET);
+- (unsigned long)task_stack_page(next_p) +
+- THREAD_SIZE);
+- this_cpu_write(cpu_current_top_of_stack,
+- (unsigned long)task_stack_page(next_p) +
+- THREAD_SIZE);
+ this_cpu_write(current_task, next_p);
+ this_cpu_write(current_tinfo, &next_p->tinfo);
+ this_cpu_write(kernel_stack, next->sp0);
++ this_cpu_write(cpu_current_top_of_stack, next->sp0);
/*
* Restore %gs if needed (which is common)
-@@ -322,8 +327,6 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
+@@ -321,8 +324,6 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
switch_fpu_finish(next_p, fpu);
return prev_p;
}
-@@ -353,4 +356,3 @@ unsigned long get_wchan(struct task_struct *p)
+@@ -352,4 +353,3 @@ unsigned long get_wchan(struct task_struct *p)
} while (count++ < 16);
return 0;
}
-
diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c
-index 67fcc43..0d2c630 100644
+index ddfdbf7..625417c 100644
--- a/arch/x86/kernel/process_64.c
+++ b/arch/x86/kernel/process_64.c
-@@ -158,10 +158,11 @@ int copy_thread(unsigned long clone_flags, unsigned long sp,
+@@ -158,9 +158,10 @@ int copy_thread(unsigned long clone_flags, unsigned long sp,
struct pt_regs *childregs;
struct task_struct *me = current;
+ p->thread.sp0 = (unsigned long)task_stack_page(p) + THREAD_SIZE - 16;
childregs = task_pt_regs(p);
p->thread.sp = (unsigned long) childregs;
- p->thread.usersp = me->thread.usersp;
+ p->tinfo.lowest_stack = (unsigned long)task_stack_page(p) + 2 * sizeof(unsigned long);
set_tsk_thread_flag(p, TIF_FORK);
p->thread.io_bitmap_ptr = NULL;
-@@ -171,6 +172,8 @@ int copy_thread(unsigned long clone_flags, unsigned long sp,
+@@ -170,6 +171,8 @@ int copy_thread(unsigned long clone_flags, unsigned long sp,
p->thread.fs = p->thread.fsindex ? 0 : me->thread.fs;
savesegment(es, p->thread.es);
savesegment(ds, p->thread.ds);
memset(p->thread.ptrace_bps, 0, sizeof(p->thread.ptrace_bps));
if (unlikely(p->flags & PF_KTHREAD)) {
-@@ -277,7 +280,7 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
+@@ -275,7 +278,7 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
struct thread_struct *prev = &prev_p->thread;
struct thread_struct *next = &next_p->thread;
int cpu = smp_processor_id();
-- struct tss_struct *tss = &per_cpu(init_tss, cpu);
-+ struct tss_struct *tss = init_tss + cpu;
+- struct tss_struct *tss = &per_cpu(cpu_tss, cpu);
++ struct tss_struct *tss = cpu_tss + cpu;
unsigned fsindex, gsindex;
fpu_switch_t fpu;
-@@ -331,6 +334,10 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
+@@ -326,6 +329,10 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
if (unlikely(next->ds | prev->ds))
loadsegment(ds, next->ds);
/*
* Switch FS and GS.
*
-@@ -404,6 +411,7 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
- prev->usersp = this_cpu_read(old_rsp);
- this_cpu_write(old_rsp, next->usersp);
+@@ -397,6 +404,7 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
+ * Switch the PDA and FPU contexts.
+ */
this_cpu_write(current_task, next_p);
+ this_cpu_write(current_tinfo, &next_p->tinfo);
/*
* If it were not for PREEMPT_ACTIVE we could guarantee that the
-@@ -413,9 +421,7 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
- task_thread_info(prev_p)->saved_preempt_count = this_cpu_read(__preempt_count);
- this_cpu_write(__preempt_count, task_thread_info(next_p)->saved_preempt_count);
+@@ -409,8 +417,7 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
+ /* Reload esp0 and ss1. This changes current_thread_info(). */
+ load_sp0(tss, next);
- this_cpu_write(kernel_stack,
-- (unsigned long)task_stack_page(next_p) +
-- THREAD_SIZE - KERNEL_STACK_OFFSET);
+- (unsigned long)task_stack_page(next_p) + THREAD_SIZE);
+ this_cpu_write(kernel_stack, next->sp0);
/*
* Now maybe reload the debug registers and handle I/O bitmaps
-@@ -485,12 +491,11 @@ unsigned long get_wchan(struct task_struct *p)
+@@ -508,12 +515,11 @@ unsigned long get_wchan(struct task_struct *p)
if (!p || p == current || p->state == TASK_RUNNING)
return 0;
stack = (unsigned long)task_stack_page(p);
ip = *(u64 *)(fp+8);
if (!in_sched_functions(ip))
diff --git a/arch/x86/kernel/ptrace.c b/arch/x86/kernel/ptrace.c
-index e510618..5165ac0 100644
+index a7bc794..094ee8e 100644
--- a/arch/x86/kernel/ptrace.c
+++ b/arch/x86/kernel/ptrace.c
@@ -186,10 +186,10 @@ unsigned long kernel_stack_pointer(struct pt_regs *regs)
if (prev_esp)
return (unsigned long)prev_esp;
-@@ -452,6 +452,20 @@ static int putreg(struct task_struct *child,
+@@ -446,6 +446,20 @@ static int putreg(struct task_struct *child,
if (child->thread.gs != value)
return do_arch_prctl(child, ARCH_SET_GS, value);
return 0;
#endif
}
-@@ -588,7 +602,7 @@ static void ptrace_triggered(struct perf_event *bp,
+@@ -582,7 +596,7 @@ static void ptrace_triggered(struct perf_event *bp,
static unsigned long ptrace_get_dr7(struct perf_event *bp[])
{
int i;
struct arch_hw_breakpoint *info;
for (i = 0; i < HBP_NUM; i++) {
-@@ -822,7 +836,7 @@ long arch_ptrace(struct task_struct *child, long request,
+@@ -816,7 +830,7 @@ long arch_ptrace(struct task_struct *child, long request,
unsigned long addr, unsigned long data)
{
int ret;
switch (request) {
/* read the word at location addr in the USER area. */
-@@ -907,14 +921,14 @@ long arch_ptrace(struct task_struct *child, long request,
+@@ -901,14 +915,14 @@ long arch_ptrace(struct task_struct *child, long request,
if ((int) addr < 0)
return -EIO;
ret = do_get_thread_area(child, addr,
break;
#endif
-@@ -1292,7 +1306,7 @@ long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
+@@ -1286,7 +1300,7 @@ long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
#ifdef CONFIG_X86_64
[REGSET_GENERAL] = {
.core_note_type = NT_PRSTATUS,
.n = sizeof(struct user_regs_struct) / sizeof(long),
-@@ -1333,7 +1347,7 @@ static const struct user_regset_view user_x86_64_view = {
+@@ -1327,7 +1341,7 @@ static const struct user_regset_view user_x86_64_view = {
#endif /* CONFIG_X86_64 */
#if defined CONFIG_X86_32 || defined CONFIG_IA32_EMULATION
[REGSET_GENERAL] = {
.core_note_type = NT_PRSTATUS,
.n = sizeof(struct user_regs_struct32) / sizeof(u32),
-@@ -1386,7 +1400,7 @@ static const struct user_regset_view user_x86_32_view = {
+@@ -1380,7 +1394,7 @@ static const struct user_regset_view user_x86_32_view = {
*/
u64 xstate_fx_sw_bytes[USER_XSTATE_FX_SW_WORDS];
{
#ifdef CONFIG_X86_64
x86_64_regsets[REGSET_XSTATE].n = size / sizeof(u64);
-@@ -1421,7 +1435,7 @@ static void fill_sigtrap_info(struct task_struct *tsk,
+@@ -1415,7 +1429,7 @@ static void fill_sigtrap_info(struct task_struct *tsk,
memset(info, 0, sizeof(*info));
info->si_signo = SIGTRAP;
info->si_code = si_code;
-- info->si_addr = user_mode_vm(regs) ? (void __user *)regs->ip : NULL;
+- info->si_addr = user_mode(regs) ? (void __user *)regs->ip : NULL;
+ info->si_addr = user_mode(regs) ? (__force void __user *)regs->ip : NULL;
}
void user_single_step_siginfo(struct task_struct *tsk,
-@@ -1455,6 +1469,10 @@ static void do_audit_syscall_entry(struct pt_regs *regs, u32 arch)
+@@ -1449,6 +1463,10 @@ static void do_audit_syscall_entry(struct pt_regs *regs, u32 arch)
}
}
/*
* We can return 0 to resume the syscall or anything else to go to phase
* 2. If we resume the syscall, we need to put something appropriate in
-@@ -1562,6 +1580,11 @@ long syscall_trace_enter_phase2(struct pt_regs *regs, u32 arch,
+@@ -1556,6 +1574,11 @@ long syscall_trace_enter_phase2(struct pt_regs *regs, u32 arch,
BUG_ON(regs != task_pt_regs(current));
/*
* If we stepped into a sysenter/syscall insn, it trapped in
* kernel mode; do_debug() cleared TF and set TIF_SINGLESTEP.
-@@ -1620,6 +1643,11 @@ void syscall_trace_leave(struct pt_regs *regs)
+@@ -1614,6 +1637,11 @@ void syscall_trace_leave(struct pt_regs *regs)
*/
user_exit();
if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT)))
diff --git a/arch/x86/kernel/pvclock.c b/arch/x86/kernel/pvclock.c
-index e5ecd20..60f7eef 100644
+index 2f355d2..e75ed0a 100644
--- a/arch/x86/kernel/pvclock.c
+++ b/arch/x86/kernel/pvclock.c
@@ -51,11 +51,11 @@ void pvclock_touch_watchdogs(void)
/*
* PCI ids solely used for fixups_table go here
diff --git a/arch/x86/kernel/relocate_kernel_64.S b/arch/x86/kernel/relocate_kernel_64.S
-index 3fd2c69..a444264 100644
+index 98111b3..73ca125 100644
--- a/arch/x86/kernel/relocate_kernel_64.S
+++ b/arch/x86/kernel/relocate_kernel_64.S
@@ -96,8 +96,7 @@ relocate_kernel:
identity_mapped:
/* set return address to 0 if not preserving context */
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
-index 0a2421c..11f3f36 100644
+index d74ac33..d9efe04 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -111,6 +111,7 @@
u64 size = __pa_symbol(_end) - start;
/*
-@@ -855,8 +858,12 @@ dump_kernel_offset(struct notifier_block *self, unsigned long v, void *p)
+@@ -860,8 +863,12 @@ dump_kernel_offset(struct notifier_block *self, unsigned long v, void *p)
void __init setup_arch(char **cmdline_p)
{
early_reserve_initrd();
-@@ -954,16 +961,16 @@ void __init setup_arch(char **cmdline_p)
+@@ -959,16 +966,16 @@ void __init setup_arch(char **cmdline_p)
if (!boot_params.hdr.root_flags)
root_mountflags &= ~MS_RDONLY;
* Up to this point, the boot CPU has been using .init.data
* area. Reload any changed state for the boot CPU.
diff --git a/arch/x86/kernel/signal.c b/arch/x86/kernel/signal.c
-index e504246..ba10432 100644
+index 1ea14fd..b16147f 100644
--- a/arch/x86/kernel/signal.c
+++ b/arch/x86/kernel/signal.c
-@@ -190,7 +190,7 @@ static unsigned long align_sigframe(unsigned long sp)
+@@ -183,7 +183,7 @@ static unsigned long align_sigframe(unsigned long sp)
* Align the stack pointer according to the i386 ABI,
* i.e. so that on function entry ((sp + 4) & 15) == 0.
*/
#else /* !CONFIG_X86_32 */
sp = round_down(sp, 16) - 8;
#endif
-@@ -298,10 +298,9 @@ __setup_frame(int sig, struct ksignal *ksig, sigset_t *set,
+@@ -291,10 +291,9 @@ __setup_frame(int sig, struct ksignal *ksig, sigset_t *set,
}
if (current->mm->context.vdso)
if (ksig->ka.sa.sa_flags & SA_RESTORER)
restorer = ksig->ka.sa.sa_restorer;
-@@ -315,7 +314,7 @@ __setup_frame(int sig, struct ksignal *ksig, sigset_t *set,
+@@ -308,7 +307,7 @@ __setup_frame(int sig, struct ksignal *ksig, sigset_t *set,
* reasons and because gdb uses it as a signature to notice
* signal handler stack frames.
*/
if (err)
return -EFAULT;
-@@ -362,8 +361,10 @@ static int __setup_rt_frame(int sig, struct ksignal *ksig,
+@@ -355,8 +354,10 @@ static int __setup_rt_frame(int sig, struct ksignal *ksig,
save_altstack_ex(&frame->uc.uc_stack, regs->sp);
/* Set up to return from userspace. */
if (ksig->ka.sa.sa_flags & SA_RESTORER)
restorer = ksig->ka.sa.sa_restorer;
put_user_ex(restorer, &frame->pretcode);
-@@ -375,7 +376,7 @@ static int __setup_rt_frame(int sig, struct ksignal *ksig,
+@@ -368,7 +369,7 @@ static int __setup_rt_frame(int sig, struct ksignal *ksig,
* reasons and because gdb uses it as a signature to notice
* signal handler stack frames.
*/
} put_user_catch(err);
err |= copy_siginfo_to_user(&frame->info, &ksig->info);
-@@ -611,7 +612,12 @@ setup_rt_frame(struct ksignal *ksig, struct pt_regs *regs)
+@@ -598,7 +599,12 @@ setup_rt_frame(struct ksignal *ksig, struct pt_regs *regs)
{
- int usig = signr_convert(ksig->sig);
+ int usig = ksig->sig;
sigset_t *set = sigmask_to_save();
- compat_sigset_t *cset = (compat_sigset_t *) set;
+ sigset_t sigcopy;
/* Set up the stack frame */
if (is_ia32_frame()) {
-@@ -622,7 +628,7 @@ setup_rt_frame(struct ksignal *ksig, struct pt_regs *regs)
+@@ -609,7 +615,7 @@ setup_rt_frame(struct ksignal *ksig, struct pt_regs *regs)
} else if (is_x32_frame()) {
return x32_setup_rt_frame(ksig, cset, regs);
} else {
.smp_prepare_cpus = native_smp_prepare_cpus,
.smp_cpus_done = native_smp_cpus_done,
diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c
-index febc6aa..37d8edf 100644
+index 50e547e..d59d06a 100644
--- a/arch/x86/kernel/smpboot.c
+++ b/arch/x86/kernel/smpboot.c
-@@ -229,14 +229,17 @@ static void notrace start_secondary(void *unused)
+@@ -226,14 +226,17 @@ static void notrace start_secondary(void *unused)
enable_start_cpu0 = 0;
/*
* Check TSC synchronization with the BP:
*/
-@@ -800,8 +803,9 @@ static int do_boot_cpu(int apicid, int cpu, struct task_struct *idle)
+@@ -782,18 +785,17 @@ void common_cpu_up(unsigned int cpu, struct task_struct *idle)
alternatives_enable_smp();
- idle->thread.sp = (unsigned long) (((struct pt_regs *)
-- (THREAD_SIZE + task_stack_page(idle))) - 1);
-+ (THREAD_SIZE - 16 + task_stack_page(idle))) - 1);
per_cpu(current_task, cpu) = idle;
+ per_cpu(current_tinfo, cpu) = &idle->tinfo;
#ifdef CONFIG_X86_32
/* Stack for startup_32 can be just as for start_secondary onwards */
-@@ -810,10 +814,10 @@ static int do_boot_cpu(int apicid, int cpu, struct task_struct *idle)
+ irq_ctx_init(cpu);
+- per_cpu(cpu_current_top_of_stack, cpu) =
+- (unsigned long)task_stack_page(idle) + THREAD_SIZE;
++ per_cpu(cpu_current_top_of_stack, cpu) = (unsigned long)task_stack_page(idle) - 16 + THREAD_SIZE;
+ #else
clear_tsk_thread_flag(idle, TIF_FORK);
initial_gs = per_cpu_offset(cpu);
#endif
- per_cpu(kernel_stack, cpu) =
-- (unsigned long)task_stack_page(idle) -
-- KERNEL_STACK_OFFSET + THREAD_SIZE;
+- (unsigned long)task_stack_page(idle) + THREAD_SIZE;
+ per_cpu(kernel_stack, cpu) = (unsigned long)task_stack_page(idle) - 16 + THREAD_SIZE;
+ }
+
+ /*
+@@ -814,9 +816,11 @@ static int do_boot_cpu(int apicid, int cpu, struct task_struct *idle)
+ unsigned long timeout;
+
+ idle->thread.sp = (unsigned long) (((struct pt_regs *)
+- (THREAD_SIZE + task_stack_page(idle))) - 1);
++ (THREAD_SIZE - 16 + task_stack_page(idle))) - 1);
+
+ pax_open_kernel();
early_gdt_descr.address = (unsigned long)get_cpu_gdt_table(cpu);
+ pax_close_kernel();
initial_code = (unsigned long)start_secondary;
stack_start = idle->thread.sp;
-@@ -953,6 +957,15 @@ int native_cpu_up(unsigned int cpu, struct task_struct *tidle)
- /* the FPU context is blank, nobody can own it */
- __cpu_disable_lazy_restore(cpu);
+@@ -961,6 +965,15 @@ int native_cpu_up(unsigned int cpu, struct task_struct *tidle)
+
+ common_cpu_up(cpu, tidle);
+#ifdef CONFIG_PAX_PER_CPU_PGD
+ clone_pgd_range(get_cpu_pgd(cpu, kernel) + KERNEL_PGD_BOUNDARY,
+ return arch_get_unmapped_area(filp, addr0, len, pgoff, flags);
+}
diff --git a/arch/x86/kernel/sys_x86_64.c b/arch/x86/kernel/sys_x86_64.c
-index 30277e2..5664a29 100644
+index 10e0272..b4bb9a7 100644
--- a/arch/x86/kernel/sys_x86_64.c
+++ b/arch/x86/kernel/sys_x86_64.c
-@@ -81,8 +81,8 @@ out:
+@@ -97,8 +97,8 @@ out:
return error;
}
{
if (!test_thread_flag(TIF_ADDR32) && (flags & MAP_32BIT)) {
unsigned long new_begin;
-@@ -101,7 +101,7 @@ static void find_start_end(unsigned long flags, unsigned long *begin,
+@@ -117,7 +117,7 @@ static void find_start_end(unsigned long flags, unsigned long *begin,
*begin = new_begin;
}
} else {
*end = TASK_SIZE;
}
}
-@@ -114,20 +114,24 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
+@@ -130,20 +130,24 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
struct vm_area_struct *vma;
struct vm_unmapped_area_info info;
unsigned long begin, end;
return addr;
}
-@@ -137,6 +141,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
- info.high_limit = end;
- info.align_mask = filp ? get_align_mask() : 0;
- info.align_offset = pgoff << PAGE_SHIFT;
+@@ -157,6 +161,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
+ info.align_mask = get_align_mask();
+ info.align_offset += get_align_bits();
+ }
+ info.threadstack_offset = offset;
return vm_unmapped_area(&info);
}
-@@ -149,6 +154,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
+@@ -169,6 +174,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
struct mm_struct *mm = current->mm;
unsigned long addr = addr0;
struct vm_unmapped_area_info info;
/* requested length too big for entire address space */
if (len > TASK_SIZE)
-@@ -161,12 +167,15 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
+@@ -181,12 +187,15 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
if (!test_thread_flag(TIF_ADDR32) && (flags & MAP_32BIT))
goto bottomup;
return addr;
}
-@@ -176,6 +185,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
- info.high_limit = mm->mmap_base;
- info.align_mask = filp ? get_align_mask() : 0;
- info.align_offset = pgoff << PAGE_SHIFT;
+@@ -200,6 +209,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
+ info.align_mask = get_align_mask();
+ info.align_offset += get_align_bits();
+ }
+ info.threadstack_offset = offset;
addr = vm_unmapped_area(&info);
if (!(addr & ~PAGE_MASK))
#ifdef CONFIG_DEBUG_FS
diff --git a/arch/x86/kernel/time.c b/arch/x86/kernel/time.c
-index 25adc0e..1df4349 100644
+index d39c091..1df4349 100644
--- a/arch/x86/kernel/time.c
+++ b/arch/x86/kernel/time.c
-@@ -30,9 +30,9 @@ unsigned long profile_pc(struct pt_regs *regs)
- {
- unsigned long pc = instruction_pointer(regs);
+@@ -32,7 +32,7 @@ unsigned long profile_pc(struct pt_regs *regs)
-- if (!user_mode_vm(regs) && in_lock_functions(pc)) {
-+ if (!user_mode(regs) && in_lock_functions(pc)) {
+ if (!user_mode(regs) && in_lock_functions(pc)) {
#ifdef CONFIG_FRAME_POINTER
- return *(unsigned long *)(regs->bp + sizeof(long));
+ return ktla_ktva(*(unsigned long *)(regs->bp + sizeof(long)));
static int trace_irq_vector_refcount;
static DEFINE_MUTEX(irq_vector_mutex);
diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c
-index 4ff5d16..736e3e1 100644
+index 324ab52..0cfd2d05 100644
--- a/arch/x86/kernel/traps.c
+++ b/arch/x86/kernel/traps.c
@@ -68,7 +68,7 @@
DECLARE_BITMAP(used_vectors, NR_VECTORS);
EXPORT_SYMBOL_GPL(used_vectors);
-@@ -112,7 +112,7 @@ enum ctx_state ist_enter(struct pt_regs *regs)
- {
- enum ctx_state prev_state;
+@@ -174,7 +174,7 @@ void ist_begin_non_atomic(struct pt_regs *regs)
+ * will catch asm bugs and any attempt to use ist_preempt_enable
+ * from double_fault.
+ */
+- BUG_ON((unsigned long)(current_top_of_stack() -
++ BUG_ON((unsigned long)(current_top_of_stack(smp_processor_id()) -
+ current_stack_pointer()) >= THREAD_SIZE);
-- if (user_mode_vm(regs)) {
-+ if (user_mode(regs)) {
- /* Other than that, we're just an exception. */
- prev_state = exception_enter();
- } else {
-@@ -146,7 +146,7 @@ void ist_exit(struct pt_regs *regs, enum ctx_state prev_state)
- /* Must be before exception_exit. */
preempt_count_sub(HARDIRQ_OFFSET);
-
-- if (user_mode_vm(regs))
-+ if (user_mode(regs))
- return exception_exit(prev_state);
- else
- rcu_nmi_exit();
-@@ -158,7 +158,7 @@ void ist_exit(struct pt_regs *regs, enum ctx_state prev_state)
- *
- * IST exception handlers normally cannot schedule. As a special
- * exception, if the exception interrupted userspace code (i.e.
-- * user_mode_vm(regs) would return true) and the exception was not
-+ * user_mode(regs) would return true) and the exception was not
- * a double fault, it can be safe to schedule. ist_begin_non_atomic()
- * begins a non-atomic section within an ist_enter()/ist_exit() region.
- * Callers are responsible for enabling interrupts themselves inside
-@@ -167,7 +167,7 @@ void ist_exit(struct pt_regs *regs, enum ctx_state prev_state)
- */
- void ist_begin_non_atomic(struct pt_regs *regs)
- {
-- BUG_ON(!user_mode_vm(regs));
-+ BUG_ON(!user_mode(regs));
-
- /*
- * Sanity check: we need to be on the normal thread stack. This
-@@ -191,11 +191,11 @@ void ist_end_non_atomic(void)
+@@ -191,7 +191,7 @@ void ist_end_non_atomic(void)
}
static nokprobe_inline int
+do_trap_no_signal(struct task_struct *tsk, int trapnr, const char *str,
struct pt_regs *regs, long error_code)
{
- #ifdef CONFIG_X86_32
-- if (regs->flags & X86_VM_MASK) {
-+ if (v8086_mode(regs)) {
- /*
- * Traps 0, 1, 3, 4, and 5 should be forwarded to vm86.
- * On nmi (interrupt 2), do_trap should not be called.
-@@ -208,12 +208,24 @@ do_trap_no_signal(struct task_struct *tsk, int trapnr, char *str,
- return -1;
- }
- #endif
-- if (!user_mode(regs)) {
-+ if (!user_mode_novm(regs)) {
+ if (v8086_mode(regs)) {
+@@ -211,8 +211,20 @@ do_trap_no_signal(struct task_struct *tsk, int trapnr, char *str,
if (!fixup_exception(regs)) {
tsk->thread.error_code = error_code;
tsk->thread.trap_nr = trapnr;
return 0;
}
-@@ -252,7 +264,7 @@ static siginfo_t *fill_trap_info(struct pt_regs *regs, int signr, int trapnr,
+@@ -251,7 +263,7 @@ static siginfo_t *fill_trap_info(struct pt_regs *regs, int signr, int trapnr,
}
static void
long error_code, siginfo_t *info)
{
struct task_struct *tsk = current;
-@@ -276,7 +288,7 @@ do_trap(int trapnr, int signr, char *str, struct pt_regs *regs,
+@@ -275,7 +287,7 @@ do_trap(int trapnr, int signr, char *str, struct pt_regs *regs,
if (show_unhandled_signals && unhandled_signal(tsk, signr) &&
printk_ratelimit()) {
pr_info("%s[%d] trap %s ip:%lx sp:%lx error:%lx",
regs->ip, regs->sp, error_code);
print_vma_addr(" in ", regs->ip);
pr_cont("\n");
-@@ -358,6 +370,11 @@ dotraplinkage void do_double_fault(struct pt_regs *regs, long error_code)
+@@ -357,6 +369,11 @@ dotraplinkage void do_double_fault(struct pt_regs *regs, long error_code)
tsk->thread.error_code = error_code;
tsk->thread.trap_nr = X86_TRAP_DF;
#ifdef CONFIG_DOUBLEFAULT
df_debug(regs, error_code);
#endif
-@@ -384,7 +401,7 @@ dotraplinkage void do_bounds(struct pt_regs *regs, long error_code)
- goto exit;
- conditional_sti(regs);
-
-- if (!user_mode_vm(regs))
-+ if (!user_mode(regs))
- die("bounds", regs, error_code);
-
- if (!cpu_feature_enabled(X86_FEATURE_MPX)) {
-@@ -463,7 +480,7 @@ do_general_protection(struct pt_regs *regs, long error_code)
- conditional_sti(regs);
-
- #ifdef CONFIG_X86_32
-- if (regs->flags & X86_VM_MASK) {
-+ if (v8086_mode(regs)) {
- local_irq_enable();
- handle_vm86_fault((struct kernel_vm86_regs *) regs, error_code);
- goto exit;
-@@ -471,18 +488,42 @@ do_general_protection(struct pt_regs *regs, long error_code)
- #endif
-
- tsk = current;
-- if (!user_mode(regs)) {
-+ if (!user_mode_novm(regs)) {
- if (fixup_exception(regs))
- goto exit;
-
+@@ -475,11 +492,35 @@ do_general_protection(struct pt_regs *regs, long error_code)
tsk->thread.error_code = error_code;
tsk->thread.trap_nr = X86_TRAP_GP;
if (notify_die(DIE_GPF, "general protection fault", regs, error_code,
tsk->thread.error_code = error_code;
tsk->thread.trap_nr = X86_TRAP_GP;
-@@ -581,13 +622,16 @@ struct bad_iret_stack *fixup_bad_iret(struct bad_iret_stack *s)
+@@ -578,6 +619,9 @@ struct bad_iret_stack *fixup_bad_iret(struct bad_iret_stack *s)
container_of(task_pt_regs(current),
struct bad_iret_stack, regs);
/* Copy the IRET target to the new stack. */
memmove(&new_stack->regs.ip, (void *)s->regs.sp, 5*8);
- /* Copy the remainder of the stack from the current stack. */
- memmove(new_stack, s, offsetof(struct bad_iret_stack, regs.ip));
-
-- BUG_ON(!user_mode_vm(&new_stack->regs));
-+ BUG_ON(!user_mode(&new_stack->regs));
- return new_stack;
- }
- NOKPROBE_SYMBOL(fixup_bad_iret);
-@@ -637,7 +681,7 @@ dotraplinkage void do_debug(struct pt_regs *regs, long error_code)
- * then it's very likely the result of an icebp/int01 trap.
- * User wants a sigtrap for that.
- */
-- if (!dr6 && user_mode_vm(regs))
-+ if (!dr6 && user_mode(regs))
- user_icebp = 1;
-
- /* Catch kmemcheck conditions first of all! */
-@@ -673,7 +717,7 @@ dotraplinkage void do_debug(struct pt_regs *regs, long error_code)
- /* It's safe to allow irq's after DR6 has been saved */
- preempt_conditional_sti(regs);
-
-- if (regs->flags & X86_VM_MASK) {
-+ if (v8086_mode(regs)) {
- handle_vm86_trap((struct kernel_vm86_regs *) regs, error_code,
- X86_TRAP_DB);
- preempt_conditional_cli(regs);
-@@ -688,7 +732,7 @@ dotraplinkage void do_debug(struct pt_regs *regs, long error_code)
- * We already checked v86 mode above, so we can check for kernel mode
- * by just checking the CPL of CS.
- */
-- if ((dr6 & DR_STEP) && !user_mode(regs)) {
-+ if ((dr6 & DR_STEP) && !user_mode_novm(regs)) {
- tsk->thread.debugreg6 &= ~DR_STEP;
- set_tsk_thread_flag(tsk, TIF_SINGLESTEP);
- regs->flags &= ~X86_EFLAGS_TF;
-@@ -721,7 +765,7 @@ static void math_error(struct pt_regs *regs, int error_code, int trapnr)
- return;
- conditional_sti(regs);
-
-- if (!user_mode_vm(regs))
-+ if (!user_mode(regs))
- {
- if (!fixup_exception(regs)) {
- task->thread.error_code = error_code;
diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c
index 5054497..139f8f8 100644
--- a/arch/x86/kernel/tsc.c
/*
diff --git a/arch/x86/kernel/uprobes.c b/arch/x86/kernel/uprobes.c
-index 81f8adb0..fff670e 100644
+index 0b81ad6..fff670e 100644
--- a/arch/x86/kernel/uprobes.c
+++ b/arch/x86/kernel/uprobes.c
-@@ -912,7 +912,7 @@ int arch_uprobe_exception_notify(struct notifier_block *self, unsigned long val,
- int ret = NOTIFY_DONE;
-
- /* We are only interested in userspace traps */
-- if (regs && !user_mode_vm(regs))
-+ if (regs && !user_mode(regs))
- return NOTIFY_DONE;
-
- switch (val) {
@@ -986,7 +986,7 @@ arch_uretprobe_hijack_return_addr(unsigned long trampoline_vaddr, struct pt_regs
if (nleft != rasize) {
* verify_cpu, returns the status of longmode and SSE in register %eax.
* 0: Success 1: Failure
diff --git a/arch/x86/kernel/vm86_32.c b/arch/x86/kernel/vm86_32.c
-index e8edcf5..27f9344 100644
+index fc9db6e..2c5865d 100644
--- a/arch/x86/kernel/vm86_32.c
+++ b/arch/x86/kernel/vm86_32.c
@@ -44,6 +44,7 @@
do_exit(SIGSEGV);
}
-- tss = &per_cpu(init_tss, get_cpu());
-+ tss = init_tss + get_cpu();
+- tss = &per_cpu(cpu_tss, get_cpu());
++ tss = cpu_tss + get_cpu();
current->thread.sp0 = current->thread.saved_sp0;
current->thread.sysenter_cs = __KERNEL_CS;
load_sp0(tss, ¤t->thread);
tsk->thread.saved_fs = info->regs32->fs;
tsk->thread.saved_gs = get_user_gs(info->regs32);
-- tss = &per_cpu(init_tss, get_cpu());
-+ tss = init_tss + get_cpu();
+- tss = &per_cpu(cpu_tss, get_cpu());
++ tss = cpu_tss + get_cpu();
tsk->thread.sp0 = (unsigned long) &info->VM86_TSS_ESP0;
if (cpu_has_sep)
tsk->thread.sysenter_cs = 0;
.read = native_io_apic_read,
.write = native_io_apic_write,
diff --git a/arch/x86/kernel/xsave.c b/arch/x86/kernel/xsave.c
-index cdc6cf9..e04f495 100644
+index 87a815b..727dbe6 100644
--- a/arch/x86/kernel/xsave.c
+++ b/arch/x86/kernel/xsave.c
@@ -168,18 +168,18 @@ static inline int save_xstate_epilog(void __user *buf, int ia32_frame)
if ((unsigned long)buf % 64 || fx_only) {
u64 init_bv = pcntxt_mask & ~XSTATE_FPSSE;
diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c
-index 8a80737..bac4961 100644
+index 1d08ad3..c6a4faf 100644
--- a/arch/x86/kvm/cpuid.c
+++ b/arch/x86/kvm/cpuid.c
-@@ -182,15 +182,20 @@ int kvm_vcpu_ioctl_set_cpuid2(struct kvm_vcpu *vcpu,
+@@ -204,15 +204,20 @@ int kvm_vcpu_ioctl_set_cpuid2(struct kvm_vcpu *vcpu,
struct kvm_cpuid2 *cpuid,
struct kvm_cpuid_entry2 __user *entries)
{
vcpu->arch.cpuid_nent = cpuid->nent;
kvm_apic_set_version(vcpu);
kvm_x86_ops->cpuid_update(vcpu);
-@@ -203,15 +208,19 @@ int kvm_vcpu_ioctl_get_cpuid2(struct kvm_vcpu *vcpu,
+@@ -225,15 +230,19 @@ int kvm_vcpu_ioctl_get_cpuid2(struct kvm_vcpu *vcpu,
struct kvm_cpuid2 *cpuid,
struct kvm_cpuid_entry2 __user *entries)
{
out:
diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
-index 106c015..2db7161 100644
+index 630bcb0..a7f6d9e 100644
--- a/arch/x86/kvm/emulate.c
+++ b/arch/x86/kvm/emulate.c
-@@ -3572,7 +3572,7 @@ static int check_cr_write(struct x86_emulate_ctxt *ctxt)
+@@ -3569,7 +3569,7 @@ static int check_cr_write(struct x86_emulate_ctxt *ctxt)
int cr = ctxt->modrm_reg;
u64 efer = 0;
0, 0, 0, /* CR3 checked later */
CR4_RESERVED_BITS,
diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c
-index 4ee827d..a14eff9 100644
+index 67d07e0..10769d5 100644
--- a/arch/x86/kvm/lapic.c
+++ b/arch/x86/kvm/lapic.c
@@ -56,7 +56,7 @@
#define APIC_LVT_NUM 6
/* 14 is the version for Xeon and Pentium 8.4.8*/
+diff --git a/arch/x86/kvm/lapic.h b/arch/x86/kvm/lapic.h
+index 9d28383..c4ea87e 100644
+--- a/arch/x86/kvm/lapic.h
++++ b/arch/x86/kvm/lapic.h
+@@ -150,7 +150,7 @@ static inline bool kvm_apic_vid_enabled(struct kvm *kvm)
+
+ static inline bool kvm_apic_has_events(struct kvm_vcpu *vcpu)
+ {
+- return vcpu->arch.apic->pending_events;
++ return kvm_vcpu_has_lapic(vcpu) && vcpu->arch.apic->pending_events;
+ }
+
+ bool kvm_apic_pending_eoi(struct kvm_vcpu *vcpu, int vector);
diff --git a/arch/x86/kvm/paging_tmpl.h b/arch/x86/kvm/paging_tmpl.h
-index fd49c86..77e1aa0 100644
+index 6e6d115..43fecbf 100644
--- a/arch/x86/kvm/paging_tmpl.h
+++ b/arch/x86/kvm/paging_tmpl.h
@@ -343,7 +343,7 @@ retry_walk:
goto error;
walker->ptep_user[walker->level - 1] = ptep_user;
diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
-index cc618c8..3f72f76 100644
+index 4911bf1..e7d3ed2 100644
--- a/arch/x86/kvm/svm.c
+++ b/arch/x86/kvm/svm.c
-@@ -3568,7 +3568,11 @@ static void reload_tss(struct kvm_vcpu *vcpu)
+@@ -3577,7 +3577,11 @@ static void reload_tss(struct kvm_vcpu *vcpu)
int cpu = raw_smp_processor_id();
struct svm_cpu_data *sd = per_cpu(svm_data, cpu);
load_TR_desc();
}
-@@ -3964,6 +3968,10 @@ static void svm_vcpu_run(struct kvm_vcpu *vcpu)
+@@ -3973,6 +3977,10 @@ static void svm_vcpu_run(struct kvm_vcpu *vcpu)
#endif
#endif
local_irq_disable();
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
-index a60bd3a..748e856 100644
+index 2d73807..84a0e59 100644
--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -1440,12 +1440,12 @@ static void vmcs_write64(unsigned long field, u64 value)
{
u64 host_tsc, tsc_offset;
-@@ -4466,7 +4474,10 @@ static void vmx_set_constant_host_state(struct vcpu_vmx *vmx)
+@@ -4467,7 +4475,10 @@ static void vmx_set_constant_host_state(struct vcpu_vmx *vmx)
unsigned long cr4;
vmcs_writel(HOST_CR0, read_cr0() & ~X86_CR0_TS); /* 22.2.3 */
/* Save the most likely value for this task's CR4 in the VMCS. */
cr4 = cr4_read_shadow();
-@@ -4493,7 +4504,7 @@ static void vmx_set_constant_host_state(struct vcpu_vmx *vmx)
+@@ -4494,7 +4505,7 @@ static void vmx_set_constant_host_state(struct vcpu_vmx *vmx)
vmcs_writel(HOST_IDTR_BASE, dt.address); /* 22.2.4 */
vmx->host_idt_base = dt.address;
rdmsr(MSR_IA32_SYSENTER_CS, low32, high32);
vmcs_write32(HOST_IA32_SYSENTER_CS, low32);
-@@ -6104,11 +6115,17 @@ static __init int hardware_setup(void)
+@@ -6107,11 +6118,17 @@ static __init int hardware_setup(void)
* page upon invalidation. No need to do anything if not
* using the APIC_ACCESS_ADDR VMCS field.
*/
if (enable_ept && !cpu_has_vmx_ept_2m_page())
kvm_disable_largepages();
-@@ -6119,14 +6136,16 @@ static __init int hardware_setup(void)
+@@ -6122,14 +6139,16 @@ static __init int hardware_setup(void)
if (!cpu_has_vmx_apicv())
enable_apicv = 0;
vmx_disable_intercept_for_msr(MSR_FS_BASE, false);
vmx_disable_intercept_for_msr(MSR_GS_BASE, false);
-@@ -6179,10 +6198,12 @@ static __init int hardware_setup(void)
+@@ -6182,10 +6201,12 @@ static __init int hardware_setup(void)
enable_pml = 0;
if (!enable_pml) {
}
return alloc_kvm_area();
-@@ -8227,6 +8248,12 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu)
+@@ -8230,6 +8251,12 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu)
"jmp 2f \n\t"
"1: " __ex(ASM_VMX_VMRESUME) "\n\t"
"2: "
/* Save guest registers, load host registers, keep flags */
"mov %0, %c[wordsize](%%" _ASM_SP ") \n\t"
"pop %0 \n\t"
-@@ -8279,6 +8306,11 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu)
+@@ -8282,6 +8309,11 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu)
#endif
[cr2]"i"(offsetof(struct vcpu_vmx, vcpu.arch.cr2)),
[wordsize]"i"(sizeof(ulong))
: "cc", "memory"
#ifdef CONFIG_X86_64
, "rax", "rbx", "rdi", "rsi"
-@@ -8292,7 +8324,7 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu)
+@@ -8295,7 +8327,7 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu)
if (debugctlmsr)
update_debugctlmsr(debugctlmsr);
/*
* The sysexit path does not restore ds/es, so we must set them to
* a reasonable value ourselves.
-@@ -8301,8 +8333,18 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu)
+@@ -8304,8 +8336,18 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu)
* may be executed in interrupt context, which saves and restore segments
* around it, nullifying its effect.
*/
vcpu->arch.regs_avail = ~((1 << VCPU_REGS_RIP) | (1 << VCPU_REGS_RSP)
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
-index e222ba5..6f0f2de 100644
+index ea306ad..669f42d 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
-@@ -1897,8 +1897,8 @@ static int xen_hvm_config(struct kvm_vcpu *vcpu, u64 data)
+@@ -1929,8 +1929,8 @@ static int xen_hvm_config(struct kvm_vcpu *vcpu, u64 data)
{
struct kvm *kvm = vcpu->kvm;
int lm = is_long_mode(vcpu);
u8 blob_size = lm ? kvm->arch.xen_hvm_config.blob_size_64
: kvm->arch.xen_hvm_config.blob_size_32;
u32 page_num = data & ~PAGE_MASK;
-@@ -2835,6 +2835,8 @@ long kvm_arch_dev_ioctl(struct file *filp,
+@@ -2867,6 +2867,8 @@ long kvm_arch_dev_ioctl(struct file *filp,
if (n < msr_list.nmsrs)
goto out;
r = -EFAULT;
if (copy_to_user(user_msr_list->indices, &msrs_to_save,
num_msrs_to_save * sizeof(u32)))
goto out;
-@@ -5739,7 +5741,7 @@ static struct notifier_block pvclock_gtod_notifier = {
+@@ -5784,7 +5786,7 @@ static struct notifier_block pvclock_gtod_notifier = {
};
#endif
int r;
struct kvm_x86_ops *ops = opaque;
diff --git a/arch/x86/lguest/boot.c b/arch/x86/lguest/boot.c
-index ac4453d..1f43bf3 100644
+index 8f9a133..3c7694b 100644
--- a/arch/x86/lguest/boot.c
+++ b/arch/x86/lguest/boot.c
-@@ -1340,9 +1340,10 @@ static __init int early_put_chars(u32 vtermno, const char *buf, int count)
+@@ -1341,9 +1341,10 @@ static __init int early_put_chars(u32 vtermno, const char *buf, int count)
* Rebooting also tells the Host we're finished, but the RESTART flag tells the
* Launcher to reboot us.
*/
movl %eax, (v)
movl %edx, 4(v)
diff --git a/arch/x86/lib/atomic64_cx8_32.S b/arch/x86/lib/atomic64_cx8_32.S
-index f5cc9eb..51fa319 100644
+index 082a851..6a963bc 100644
--- a/arch/x86/lib/atomic64_cx8_32.S
+++ b/arch/x86/lib/atomic64_cx8_32.S
-@@ -35,10 +35,20 @@ ENTRY(atomic64_read_cx8)
+@@ -25,10 +25,20 @@ ENTRY(atomic64_read_cx8)
CFI_STARTPROC
read64 %ecx
ENTRY(atomic64_set_cx8)
CFI_STARTPROC
-@@ -48,10 +58,25 @@ ENTRY(atomic64_set_cx8)
+@@ -38,10 +48,25 @@ ENTRY(atomic64_set_cx8)
cmpxchg8b (%esi)
jne 1b
ENTRY(atomic64_xchg_cx8)
CFI_STARTPROC
-@@ -60,12 +85,13 @@ ENTRY(atomic64_xchg_cx8)
+@@ -50,12 +75,13 @@ ENTRY(atomic64_xchg_cx8)
cmpxchg8b (%esi)
jne 1b
+.macro addsub_return func ins insc unchecked=""
+ENTRY(atomic64_\func\()_return\unchecked\()_cx8)
CFI_STARTPROC
- SAVE ebp
- SAVE ebx
-@@ -82,27 +108,44 @@ ENTRY(atomic64_\func\()_return_cx8)
+ pushl_cfi_reg ebp
+ pushl_cfi_reg ebx
+@@ -72,27 +98,44 @@ ENTRY(atomic64_\func\()_return_cx8)
movl %edx, %ecx
\ins\()l %esi, %ebx
\insc\()l %edi, %ecx
+#endif
+.endif
+
- RESTORE edi
- RESTORE esi
- RESTORE ebx
- RESTORE ebp
+ popl_cfi_reg edi
+ popl_cfi_reg esi
+ popl_cfi_reg ebx
+ popl_cfi_reg ebp
+ pax_force_retaddr
ret
CFI_ENDPROC
+.macro incdec_return func ins insc unchecked=""
+ENTRY(atomic64_\func\()_return\unchecked\()_cx8)
CFI_STARTPROC
- SAVE ebx
+ pushl_cfi_reg ebx
-@@ -112,21 +155,39 @@ ENTRY(atomic64_\func\()_return_cx8)
+@@ -102,21 +145,38 @@ ENTRY(atomic64_\func\()_return_cx8)
movl %edx, %ecx
\ins\()l $1, %ebx
\insc\()l $0, %ecx
LOCK_PREFIX
cmpxchg8b (%esi)
jne 1b
-
+-
-10:
movl %ebx, %eax
movl %ecx, %edx
+#endif
+.endif
+
- RESTORE ebx
+ popl_cfi_reg ebx
+ pax_force_retaddr
ret
CFI_ENDPROC
ENTRY(atomic64_dec_if_positive_cx8)
CFI_STARTPROC
-@@ -138,6 +199,13 @@ ENTRY(atomic64_dec_if_positive_cx8)
+@@ -128,6 +188,13 @@ ENTRY(atomic64_dec_if_positive_cx8)
movl %edx, %ecx
subl $1, %ebx
sbb $0, %ecx
js 2f
LOCK_PREFIX
cmpxchg8b (%esi)
-@@ -147,6 +215,7 @@ ENTRY(atomic64_dec_if_positive_cx8)
+@@ -137,6 +204,7 @@ ENTRY(atomic64_dec_if_positive_cx8)
movl %ebx, %eax
movl %ecx, %edx
- RESTORE ebx
+ popl_cfi_reg ebx
+ pax_force_retaddr
ret
CFI_ENDPROC
ENDPROC(atomic64_dec_if_positive_cx8)
-@@ -171,6 +240,13 @@ ENTRY(atomic64_add_unless_cx8)
+@@ -161,6 +229,13 @@ ENTRY(atomic64_add_unless_cx8)
movl %edx, %ecx
addl %ebp, %ebx
adcl %edi, %ecx
LOCK_PREFIX
cmpxchg8b (%esi)
jne 1b
-@@ -181,6 +257,7 @@ ENTRY(atomic64_add_unless_cx8)
+@@ -171,6 +246,7 @@ ENTRY(atomic64_add_unless_cx8)
CFI_ADJUST_CFA_OFFSET -8
- RESTORE ebx
- RESTORE ebp
+ popl_cfi_reg ebx
+ popl_cfi_reg ebp
+ pax_force_retaddr
ret
4:
cmpl %edx, 4(%esp)
-@@ -203,6 +280,13 @@ ENTRY(atomic64_inc_not_zero_cx8)
+@@ -193,6 +269,13 @@ ENTRY(atomic64_inc_not_zero_cx8)
xorl %ecx, %ecx
addl $1, %ebx
adcl %edx, %ecx
LOCK_PREFIX
cmpxchg8b (%esi)
jne 1b
-@@ -210,6 +294,7 @@ ENTRY(atomic64_inc_not_zero_cx8)
+@@ -200,6 +283,7 @@ ENTRY(atomic64_inc_not_zero_cx8)
movl $1, %eax
3:
- RESTORE ebx
+ popl_cfi_reg ebx
+ pax_force_retaddr
ret
CFI_ENDPROC
ENDPROC(atomic64_inc_not_zero_cx8)
diff --git a/arch/x86/lib/checksum_32.S b/arch/x86/lib/checksum_32.S
-index e78b8eee..7e173a8 100644
+index 9bc944a..e52be6c 100644
--- a/arch/x86/lib/checksum_32.S
+++ b/arch/x86/lib/checksum_32.S
@@ -29,7 +29,8 @@
/*
* computes a partial checksum, e.g. for TCP/UDP fragments
*/
-@@ -293,9 +294,24 @@ unsigned int csum_partial_copy_generic (const char *src, char *dst,
+@@ -285,9 +286,24 @@ unsigned int csum_partial_copy_generic (const char *src, char *dst,
#define ARGBASE 16
#define FP 12
+ENTRY(csum_partial_copy_generic)
subl $4,%esp
CFI_ADJUST_CFA_OFFSET 4
- pushl_cfi %edi
-@@ -317,7 +333,7 @@ ENTRY(csum_partial_copy_generic)
+ pushl_cfi_reg edi
+@@ -306,7 +322,7 @@ ENTRY(csum_partial_copy_generic)
jmp 4f
SRC(1: movw (%esi), %bx )
addl $2, %esi
addl $2, %edi
addw %bx, %ax
adcl $0, %eax
-@@ -329,30 +345,30 @@ DST( movw %bx, (%edi) )
+@@ -318,30 +334,30 @@ DST( movw %bx, (%edi) )
SRC(1: movl (%esi), %ebx )
SRC( movl 4(%esi), %edx )
adcl %ebx, %eax
lea 32(%esi), %esi
lea 32(%edi), %edi
-@@ -366,7 +382,7 @@ DST( movl %edx, 28(%edi) )
+@@ -355,7 +371,7 @@ DST( movl %edx, 28(%edi) )
shrl $2, %edx # This clears CF
SRC(3: movl (%esi), %ebx )
adcl %ebx, %eax
lea 4(%esi), %esi
lea 4(%edi), %edi
dec %edx
-@@ -378,12 +394,12 @@ DST( movl %ebx, (%edi) )
+@@ -367,12 +383,12 @@ DST( movl %ebx, (%edi) )
jb 5f
SRC( movw (%esi), %cx )
leal 2(%esi), %esi
6: addl %ecx, %eax
adcl $0, %eax
7:
-@@ -394,7 +410,7 @@ DST( movb %cl, (%edi) )
+@@ -383,7 +399,7 @@ DST( movb %cl, (%edi) )
6001:
movl ARGBASE+20(%esp), %ebx # src_err_ptr
# zero the complete destination - computing the rest
# is too much work
-@@ -407,11 +423,15 @@ DST( movb %cl, (%edi) )
+@@ -396,37 +412,58 @@ DST( movb %cl, (%edi) )
6002:
movl ARGBASE+24(%esp), %ebx # dst_err_ptr
+ popl_cfi %ds
+ pushl_cfi %ss
+ popl_cfi %es
- popl_cfi %ebx
- CFI_RESTORE ebx
- popl_cfi %esi
-@@ -421,26 +441,43 @@ DST( movb %cl, (%edi) )
+ popl_cfi_reg ebx
+ popl_cfi_reg esi
+ popl_cfi_reg edi
popl_cfi %ecx # equivalent to addl $4,%esp
ret
CFI_ENDPROC
+#endif
+
+ENTRY(csum_partial_copy_generic)
- pushl_cfi %ebx
- CFI_REL_OFFSET ebx, 0
- pushl_cfi %edi
-@@ -461,7 +498,7 @@ ENTRY(csum_partial_copy_generic)
+ pushl_cfi_reg ebx
+ pushl_cfi_reg edi
+ pushl_cfi_reg esi
+@@ -444,7 +481,7 @@ ENTRY(csum_partial_copy_generic)
subl %ebx, %edi
lea -1(%esi),%edx
andl $-32,%edx
testl %esi, %esi
jmp *%ebx
1: addl $64,%esi
-@@ -482,19 +519,19 @@ ENTRY(csum_partial_copy_generic)
+@@ -465,19 +502,19 @@ ENTRY(csum_partial_copy_generic)
jb 5f
SRC( movw (%esi), %dx )
leal 2(%esi), %esi
# zero the complete destination (computing the rest is too much work)
movl ARGBASE+8(%esp),%edi # dst
movl ARGBASE+12(%esp),%ecx # len
-@@ -502,10 +539,17 @@ DST( movb %dl, (%edi) )
+@@ -485,16 +522,23 @@ DST( movb %dl, (%edi) )
rep; stosb
jmp 7b
6002: movl ARGBASE+24(%esp), %ebx # dst_err_ptr
+ popl_cfi %es
+#endif
+
- popl_cfi %esi
- CFI_RESTORE esi
- popl_cfi %edi
-@@ -514,7 +558,7 @@ DST( movb %dl, (%edi) )
- CFI_RESTORE ebx
+ popl_cfi_reg esi
+ popl_cfi_reg edi
+ popl_cfi_reg ebx
ret
CFI_ENDPROC
-ENDPROC(csum_partial_copy_generic)
#undef ROUND
#undef ROUND1
diff --git a/arch/x86/lib/clear_page_64.S b/arch/x86/lib/clear_page_64.S
-index f2145cf..cea889d 100644
+index e67e579..4782449 100644
--- a/arch/x86/lib/clear_page_64.S
+++ b/arch/x86/lib/clear_page_64.S
-@@ -11,6 +11,7 @@ ENTRY(clear_page_c)
+@@ -23,6 +23,7 @@ ENTRY(clear_page)
movl $4096/8,%ecx
xorl %eax,%eax
rep stosq
+ pax_force_retaddr
ret
CFI_ENDPROC
- ENDPROC(clear_page_c)
-@@ -20,6 +21,7 @@ ENTRY(clear_page_c_e)
+ ENDPROC(clear_page)
+@@ -47,6 +48,7 @@ ENTRY(clear_page_orig)
+ leaq 64(%rdi),%rdi
+ jnz .Lloop
+ nop
++ pax_force_retaddr
+ ret
+ CFI_ENDPROC
+ ENDPROC(clear_page_orig)
+@@ -56,6 +58,7 @@ ENTRY(clear_page_c_e)
movl $4096,%ecx
xorl %eax,%eax
rep stosb
ret
CFI_ENDPROC
ENDPROC(clear_page_c_e)
-@@ -43,6 +45,7 @@ ENTRY(clear_page)
- leaq 64(%rdi),%rdi
- jnz .Lloop
- nop
-+ pax_force_retaddr
- ret
- CFI_ENDPROC
- .Lclear_page_end:
-@@ -58,7 +61,7 @@ ENDPROC(clear_page)
-
- #include <asm/cpufeature.h>
-
-- .section .altinstr_replacement,"ax"
-+ .section .altinstr_replacement,"a"
- 1: .byte 0xeb /* jmp <disp8> */
- .byte (clear_page_c - clear_page) - (2f - 1b) /* offset */
- 2: .byte 0xeb /* jmp <disp8> */
diff --git a/arch/x86/lib/cmpxchg16b_emu.S b/arch/x86/lib/cmpxchg16b_emu.S
index 40a1725..5d12ac4 100644
--- a/arch/x86/lib/cmpxchg16b_emu.S
CFI_ENDPROC
diff --git a/arch/x86/lib/copy_page_64.S b/arch/x86/lib/copy_page_64.S
-index 176cca6..e0d658e 100644
+index 8239dbc..e714d2a 100644
--- a/arch/x86/lib/copy_page_64.S
+++ b/arch/x86/lib/copy_page_64.S
-@@ -9,6 +9,7 @@ copy_page_rep:
- CFI_STARTPROC
+@@ -17,6 +17,7 @@ ENTRY(copy_page)
+ ALTERNATIVE "jmp copy_page_regs", "", X86_FEATURE_REP_GOOD
movl $4096/8, %ecx
rep movsq
+ pax_force_retaddr
ret
CFI_ENDPROC
- ENDPROC(copy_page_rep)
-@@ -24,8 +25,8 @@ ENTRY(copy_page)
+ ENDPROC(copy_page)
+@@ -27,8 +28,8 @@ ENTRY(copy_page_regs)
CFI_ADJUST_CFA_OFFSET 2*8
movq %rbx, (%rsp)
CFI_REL_OFFSET rbx, 0
movl $(4096/64)-5, %ecx
.p2align 4
-@@ -38,7 +39,7 @@ ENTRY(copy_page)
+@@ -41,7 +42,7 @@ ENTRY(copy_page_regs)
movq 0x8*4(%rsi), %r9
movq 0x8*5(%rsi), %r10
movq 0x8*6(%rsi), %r11
prefetcht0 5*64(%rsi)
-@@ -49,7 +50,7 @@ ENTRY(copy_page)
+@@ -52,7 +53,7 @@ ENTRY(copy_page_regs)
movq %r9, 0x8*4(%rdi)
movq %r10, 0x8*5(%rdi)
movq %r11, 0x8*6(%rdi)
leaq 64 (%rsi), %rsi
leaq 64 (%rdi), %rdi
-@@ -68,7 +69,7 @@ ENTRY(copy_page)
+@@ -71,7 +72,7 @@ ENTRY(copy_page_regs)
movq 0x8*4(%rsi), %r9
movq 0x8*5(%rsi), %r10
movq 0x8*6(%rsi), %r11
movq %rax, 0x8*0(%rdi)
movq %rbx, 0x8*1(%rdi)
-@@ -77,7 +78,7 @@ ENTRY(copy_page)
+@@ -80,7 +81,7 @@ ENTRY(copy_page_regs)
movq %r9, 0x8*4(%rdi)
movq %r10, 0x8*5(%rdi)
movq %r11, 0x8*6(%rdi)
leaq 64(%rdi), %rdi
leaq 64(%rsi), %rsi
-@@ -85,10 +86,11 @@ ENTRY(copy_page)
+@@ -88,10 +89,11 @@ ENTRY(copy_page_regs)
movq (%rsp), %rbx
CFI_RESTORE rbx
CFI_ADJUST_CFA_OFFSET -2*8
+ pax_force_retaddr
ret
- .Lcopy_page_end:
CFI_ENDPROC
-@@ -99,7 +101,7 @@ ENDPROC(copy_page)
-
- #include <asm/cpufeature.h>
-
-- .section .altinstr_replacement,"ax"
-+ .section .altinstr_replacement,"a"
- 1: .byte 0xeb /* jmp <disp8> */
- .byte (copy_page_rep - copy_page) - (2f - 1b) /* offset */
- 2:
+ ENDPROC(copy_page_regs)
diff --git a/arch/x86/lib/copy_user_64.S b/arch/x86/lib/copy_user_64.S
-index dee945d..a84067b 100644
+index fa997df..060ab18 100644
--- a/arch/x86/lib/copy_user_64.S
+++ b/arch/x86/lib/copy_user_64.S
-@@ -18,31 +18,7 @@
+@@ -15,6 +15,7 @@
#include <asm/alternative-asm.h>
#include <asm/asm.h>
#include <asm/smap.h>
--
--/*
-- * By placing feature2 after feature1 in altinstructions section, we logically
-- * implement:
-- * If CPU has feature2, jmp to alt2 is used
-- * else if CPU has feature1, jmp to alt1 is used
-- * else jmp to orig is used.
-- */
-- .macro ALTERNATIVE_JUMP feature1,feature2,orig,alt1,alt2
--0:
-- .byte 0xe9 /* 32bit jump */
-- .long \orig-1f /* by default jump to orig */
--1:
-- .section .altinstr_replacement,"ax"
--2: .byte 0xe9 /* near jump with 32bit immediate */
-- .long \alt1-1b /* offset */ /* or alternatively to alt1 */
--3: .byte 0xe9 /* near jump with 32bit immediate */
-- .long \alt2-1b /* offset */ /* or alternatively to alt2 */
-- .previous
--
-- .section .altinstructions,"a"
-- altinstruction_entry 0b,2b,\feature1,5,5
-- altinstruction_entry 0b,3b,\feature2,5,5
-- .previous
-- .endm
+#include <asm/pgtable.h>
.macro ALIGN_DESTINATION
- #ifdef FIX_ALIGNMENT
-@@ -70,52 +46,6 @@
- #endif
+ /* check for bad alignment of destination */
+@@ -40,56 +41,6 @@
+ _ASM_EXTABLE(101b,103b)
.endm
-/* Standard copy_to_user with segment limit checking */
- jc bad_to_user
- cmpq TI_addr_limit(%rax),%rcx
- ja bad_to_user
-- ALTERNATIVE_JUMP X86_FEATURE_REP_GOOD,X86_FEATURE_ERMS, \
-- copy_user_generic_unrolled,copy_user_generic_string, \
-- copy_user_enhanced_fast_string
+- ALTERNATIVE_2 "jmp copy_user_generic_unrolled", \
+- "jmp copy_user_generic_string", \
+- X86_FEATURE_REP_GOOD, \
+- "jmp copy_user_enhanced_fast_string", \
+- X86_FEATURE_ERMS
- CFI_ENDPROC
-ENDPROC(_copy_to_user)
-
- jc bad_from_user
- cmpq TI_addr_limit(%rax),%rcx
- ja bad_from_user
-- ALTERNATIVE_JUMP X86_FEATURE_REP_GOOD,X86_FEATURE_ERMS, \
-- copy_user_generic_unrolled,copy_user_generic_string, \
-- copy_user_enhanced_fast_string
+- ALTERNATIVE_2 "jmp copy_user_generic_unrolled", \
+- "jmp copy_user_generic_string", \
+- X86_FEATURE_REP_GOOD, \
+- "jmp copy_user_enhanced_fast_string", \
+- X86_FEATURE_ERMS
- CFI_ENDPROC
-ENDPROC(_copy_from_user)
-
/*
* copy_user_generic_unrolled - memory copy with exception handling.
* This version is for CPUs like P4 that don't have efficient micro
-@@ -131,6 +61,7 @@ ENDPROC(bad_from_user)
+@@ -105,6 +56,7 @@ ENDPROC(bad_from_user)
*/
ENTRY(copy_user_generic_unrolled)
CFI_STARTPROC
ASM_STAC
cmpl $8,%edx
jb 20f /* less then 8 bytes, go to byte copy loop */
-@@ -180,6 +111,8 @@ ENTRY(copy_user_generic_unrolled)
+@@ -154,6 +106,8 @@ ENTRY(copy_user_generic_unrolled)
jnz 21b
23: xor %eax,%eax
ASM_CLAC
ret
.section .fixup,"ax"
-@@ -235,6 +168,7 @@ ENDPROC(copy_user_generic_unrolled)
+@@ -209,6 +163,7 @@ ENDPROC(copy_user_generic_unrolled)
*/
ENTRY(copy_user_generic_string)
CFI_STARTPROC
ASM_STAC
cmpl $8,%edx
jb 2f /* less than 8 bytes, go to byte copy loop */
-@@ -249,6 +183,8 @@ ENTRY(copy_user_generic_string)
+@@ -223,6 +178,8 @@ ENTRY(copy_user_generic_string)
movsb
xorl %eax,%eax
ASM_CLAC
ret
.section .fixup,"ax"
-@@ -276,12 +212,15 @@ ENDPROC(copy_user_generic_string)
+@@ -250,12 +207,15 @@ ENDPROC(copy_user_generic_string)
*/
ENTRY(copy_user_enhanced_fast_string)
CFI_STARTPROC
.section .fixup,"ax"
diff --git a/arch/x86/lib/csum-copy_64.S b/arch/x86/lib/csum-copy_64.S
-index 2419d5f..fe52d0e 100644
+index 9734182..dbee61c 100644
--- a/arch/x86/lib/csum-copy_64.S
+++ b/arch/x86/lib/csum-copy_64.S
@@ -9,6 +9,7 @@
CFI_ENDPROC
END(bad_get_user_8)
diff --git a/arch/x86/lib/insn.c b/arch/x86/lib/insn.c
-index 85994f5..9929d7f 100644
+index 8f72b33..a43d9969 100644
--- a/arch/x86/lib/insn.c
+++ b/arch/x86/lib/insn.c
@@ -20,8 +20,10 @@
CFI_ENDPROC
ENDPROC(__iowrite32_copy)
diff --git a/arch/x86/lib/memcpy_64.S b/arch/x86/lib/memcpy_64.S
-index 89b53c9..97357ca 100644
+index b046664..dec9465 100644
--- a/arch/x86/lib/memcpy_64.S
+++ b/arch/x86/lib/memcpy_64.S
-@@ -24,7 +24,7 @@
- * This gets patched over the unrolled variant (below) via the
- * alternative instructions framework:
- */
-- .section .altinstr_replacement, "ax", @progbits
-+ .section .altinstr_replacement, "a", @progbits
- .Lmemcpy_c:
- movq %rdi, %rax
- movq %rdx, %rcx
-@@ -33,6 +33,7 @@
+@@ -37,6 +37,7 @@ ENTRY(memcpy)
rep movsq
movl %edx, %ecx
rep movsb
+ pax_force_retaddr
ret
- .Lmemcpy_e:
- .previous
-@@ -44,11 +45,12 @@
- * This gets patched over the unrolled variant (below) via the
- * alternative instructions framework:
- */
-- .section .altinstr_replacement, "ax", @progbits
-+ .section .altinstr_replacement, "a", @progbits
- .Lmemcpy_c_e:
+ ENDPROC(memcpy)
+ ENDPROC(__memcpy)
+@@ -49,6 +50,7 @@ ENTRY(memcpy_erms)
movq %rdi, %rax
movq %rdx, %rcx
rep movsb
+ pax_force_retaddr
ret
- .Lmemcpy_e_e:
- .previous
-@@ -138,6 +140,7 @@ ENTRY(memcpy)
+ ENDPROC(memcpy_erms)
+
+@@ -134,6 +136,7 @@ ENTRY(memcpy_orig)
movq %r9, 1*8(%rdi)
movq %r10, -2*8(%rdi, %rdx)
movq %r11, -1*8(%rdi, %rdx)
retq
.p2align 4
.Lless_16bytes:
-@@ -150,6 +153,7 @@ ENTRY(memcpy)
+@@ -146,6 +149,7 @@ ENTRY(memcpy_orig)
movq -1*8(%rsi, %rdx), %r9
movq %r8, 0*8(%rdi)
movq %r9, -1*8(%rdi, %rdx)
retq
.p2align 4
.Lless_8bytes:
-@@ -163,6 +167,7 @@ ENTRY(memcpy)
+@@ -159,6 +163,7 @@ ENTRY(memcpy_orig)
movl -4(%rsi, %rdx), %r8d
movl %ecx, (%rdi)
movl %r8d, -4(%rdi, %rdx)
retq
.p2align 4
.Lless_3bytes:
-@@ -181,6 +186,7 @@ ENTRY(memcpy)
+@@ -177,6 +182,7 @@ ENTRY(memcpy_orig)
movb %cl, (%rdi)
.Lend:
+ pax_force_retaddr
retq
CFI_ENDPROC
- ENDPROC(memcpy)
+ ENDPROC(memcpy_orig)
diff --git a/arch/x86/lib/memmove_64.S b/arch/x86/lib/memmove_64.S
-index 9c4b530..830b77a 100644
+index 0f8a0d0..f6e0ea4 100644
--- a/arch/x86/lib/memmove_64.S
+++ b/arch/x86/lib/memmove_64.S
-@@ -205,14 +205,16 @@ ENTRY(__memmove)
+@@ -43,7 +43,7 @@ ENTRY(__memmove)
+ jg 2f
+
+ .Lmemmove_begin_forward:
+- ALTERNATIVE "", "movq %rdx, %rcx; rep movsb; retq", X86_FEATURE_ERMS
++ ALTERNATIVE "", "movq %rdx, %rcx; rep movsb; pax_force_retaddr; retq", X86_FEATURE_ERMS
+
+ /*
+ * movsq instruction have many startup latency
+@@ -206,6 +206,7 @@ ENTRY(__memmove)
movb (%rsi), %r11b
movb %r11b, (%rdi)
13:
+ pax_force_retaddr
retq
CFI_ENDPROC
-
-- .section .altinstr_replacement,"ax"
-+ .section .altinstr_replacement,"a"
- .Lmemmove_begin_forward_efs:
- /* Forward moving data. */
- movq %rdx, %rcx
- rep movsb
-+ pax_force_retaddr
- retq
- .Lmemmove_end_forward_efs:
- .previous
+ ENDPROC(__memmove)
diff --git a/arch/x86/lib/memset_64.S b/arch/x86/lib/memset_64.S
-index 6f44935..fbf5f6d 100644
+index 93118fb..386ed2a 100644
--- a/arch/x86/lib/memset_64.S
+++ b/arch/x86/lib/memset_64.S
-@@ -16,7 +16,7 @@
- *
- * rax original destination
- */
-- .section .altinstr_replacement, "ax", @progbits
-+ .section .altinstr_replacement, "a", @progbits
- .Lmemset_c:
- movq %rdi,%r9
- movq %rdx,%rcx
-@@ -30,6 +30,7 @@
+@@ -41,6 +41,7 @@ ENTRY(__memset)
movl %edx,%ecx
rep stosb
movq %r9,%rax
+ pax_force_retaddr
ret
- .Lmemset_e:
- .previous
-@@ -45,13 +46,14 @@
- *
- * rax original destination
- */
-- .section .altinstr_replacement, "ax", @progbits
-+ .section .altinstr_replacement, "a", @progbits
- .Lmemset_c_e:
- movq %rdi,%r9
- movb %sil,%al
+ ENDPROC(memset)
+ ENDPROC(__memset)
+@@ -62,6 +63,7 @@ ENTRY(memset_erms)
movq %rdx,%rcx
rep stosb
movq %r9,%rax
+ pax_force_retaddr
ret
- .Lmemset_e_e:
- .previous
-@@ -120,6 +122,7 @@ ENTRY(__memset)
+ ENDPROC(memset_erms)
+
+@@ -126,6 +128,7 @@ ENTRY(memset_orig)
.Lende:
movq %r10,%rax
from += 64;
to += 64;
diff --git a/arch/x86/lib/msr-reg.S b/arch/x86/lib/msr-reg.S
-index f6d13ee..d789440 100644
+index 3ca5218..c2ae6bc 100644
--- a/arch/x86/lib/msr-reg.S
+++ b/arch/x86/lib/msr-reg.S
@@ -3,6 +3,7 @@
/*
@@ -37,6 +38,7 @@ ENTRY(\op\()_safe_regs)
movl %edi, 28(%r10)
- popq_cfi %rbp
- popq_cfi %rbx
+ popq_cfi_reg rbp
+ popq_cfi_reg rbx
+ pax_force_retaddr
ret
3:
xor %eax,%eax
EXIT
diff --git a/arch/x86/lib/rwsem.S b/arch/x86/lib/rwsem.S
-index 5dff5f0..cadebf4 100644
+index 2322abe..1e78a75 100644
--- a/arch/x86/lib/rwsem.S
+++ b/arch/x86/lib/rwsem.S
-@@ -94,6 +94,7 @@ ENTRY(call_rwsem_down_read_failed)
- __ASM_SIZE(pop,_cfi) %__ASM_REG(dx)
- CFI_RESTORE __ASM_REG(dx)
+@@ -92,6 +92,7 @@ ENTRY(call_rwsem_down_read_failed)
+ call rwsem_down_read_failed
+ __ASM_SIZE(pop,_cfi_reg) __ASM_REG(dx)
restore_common_regs
+ pax_force_retaddr
ret
CFI_ENDPROC
ENDPROC(call_rwsem_down_read_failed)
-@@ -104,6 +105,7 @@ ENTRY(call_rwsem_down_write_failed)
+@@ -102,6 +103,7 @@ ENTRY(call_rwsem_down_write_failed)
movq %rax,%rdi
call rwsem_down_write_failed
restore_common_regs
ret
CFI_ENDPROC
ENDPROC(call_rwsem_down_write_failed)
-@@ -117,7 +119,8 @@ ENTRY(call_rwsem_wake)
+@@ -115,7 +117,8 @@ ENTRY(call_rwsem_wake)
movq %rax,%rdi
call rwsem_wake
restore_common_regs
CFI_ENDPROC
ENDPROC(call_rwsem_wake)
-@@ -131,6 +134,7 @@ ENTRY(call_rwsem_downgrade_wake)
- __ASM_SIZE(pop,_cfi) %__ASM_REG(dx)
- CFI_RESTORE __ASM_REG(dx)
+@@ -127,6 +130,7 @@ ENTRY(call_rwsem_downgrade_wake)
+ call rwsem_downgrade_wake
+ __ASM_SIZE(pop,_cfi_reg) __ASM_REG(dx)
restore_common_regs
+ pax_force_retaddr
ret
CFI_ENDPROC
ENDPROC(call_rwsem_downgrade_wake)
diff --git a/arch/x86/lib/thunk_64.S b/arch/x86/lib/thunk_64.S
-index b30b5eb..2b57052 100644
+index f89ba4e9..512b2de 100644
--- a/arch/x86/lib/thunk_64.S
+++ b/arch/x86/lib/thunk_64.S
@@ -9,6 +9,7 @@
/* rdi: arg1 ... normal C conventions. rax is saved/restored. */
.macro THUNK name, func, put_ret_addr_in_rdi=0
-@@ -16,11 +17,11 @@
- \name:
- CFI_STARTPROC
-
-- /* this one pushes 9 elems, the next one would be %rIP */
-- SAVE_ARGS
-+ /* this one pushes 15+1 elems, the next one would be %rIP */
-+ SAVE_ARGS 8
-
- .if \put_ret_addr_in_rdi
-- movq_cfi_restore 9*8, rdi
-+ movq_cfi_restore RIP, rdi
- .endif
-
- call \func
-@@ -47,9 +48,10 @@
-
- /* SAVE_ARGS below is used only for the .cfi directives it contains. */
- CFI_STARTPROC
-- SAVE_ARGS
-+ SAVE_ARGS 8
- restore:
-- RESTORE_ARGS
-+ RESTORE_ARGS 1,8
+@@ -69,6 +70,7 @@ restore:
+ popq_cfi_reg rdx
+ popq_cfi_reg rsi
+ popq_cfi_reg rdi
+ pax_force_retaddr
ret
CFI_ENDPROC
_ASM_NOKPROBE(restore)
+diff --git a/arch/x86/lib/usercopy.c b/arch/x86/lib/usercopy.c
+index ddf9ecb..e342586 100644
+--- a/arch/x86/lib/usercopy.c
++++ b/arch/x86/lib/usercopy.c
+@@ -20,7 +20,7 @@ copy_from_user_nmi(void *to, const void __user *from, unsigned long n)
+ unsigned long ret;
+
+ if (__range_not_ok(from, n, TASK_SIZE))
+- return 0;
++ return n;
+
+ /*
+ * Even though this function is typically called from NMI/IRQ context
diff --git a/arch/x86/lib/usercopy_32.c b/arch/x86/lib/usercopy_32.c
index e2f5e21..4b22130 100644
--- a/arch/x86/lib/usercopy_32.c
return len;
}
diff --git a/arch/x86/mm/Makefile b/arch/x86/mm/Makefile
-index c4cc740..60a7362 100644
+index a482d10..1a6edb5 100644
--- a/arch/x86/mm/Makefile
+++ b/arch/x86/mm/Makefile
-@@ -35,3 +35,7 @@ obj-$(CONFIG_NUMA_EMU) += numa_emulation.o
- obj-$(CONFIG_MEMTEST) += memtest.o
+@@ -33,3 +33,7 @@ obj-$(CONFIG_ACPI_NUMA) += srat.o
+ obj-$(CONFIG_NUMA_EMU) += numa_emulation.o
obj-$(CONFIG_X86_INTEL_MPX) += mpx.o
+
+quote:="
+obj-$(CONFIG_X86_64) += uderef_64.o
-+CFLAGS_uderef_64.o := $(subst $(quote),,$(CONFIG_ARCH_HWEIGHT_CFLAGS))
++CFLAGS_uderef_64.o := $(subst $(quote),,$(CONFIG_ARCH_HWEIGHT_CFLAGS)) -fcall-saved-rax
diff --git a/arch/x86/mm/extable.c b/arch/x86/mm/extable.c
index 903ec1e..c4166b2 100644
--- a/arch/x86/mm/extable.c
}
diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c
-index ede025f..380466b 100644
+index 181c53b..d336596 100644
--- a/arch/x86/mm/fault.c
+++ b/arch/x86/mm/fault.c
@@ -13,12 +13,19 @@
#define CREATE_TRACE_POINTS
#include <asm/trace/exceptions.h>
-@@ -59,7 +66,7 @@ static nokprobe_inline int kprobes_fault(struct pt_regs *regs)
- int ret = 0;
-
- /* kprobe_running() needs smp_processor_id() */
-- if (kprobes_built_in() && !user_mode_vm(regs)) {
-+ if (kprobes_built_in() && !user_mode(regs)) {
- preempt_disable();
- if (kprobe_running() && kprobe_fault_handler(regs, 14))
- ret = 1;
@@ -120,7 +127,10 @@ check_prefetch_opcode(struct pt_regs *regs, unsigned char *instr,
return !instr_lo || (instr_lo>>1) == 1;
case 0x00:
+#ifdef CONFIG_PAX_KERNEXEC
+ if (init_mm.start_code <= address && address < init_mm.end_code) {
+ if (current->signal->curr_ip)
-+ printk(KERN_ERR "PAX: From %pI4: %s:%d, uid/euid: %u/%u, attempted to modify kernel code\n",
++ printk(KERN_EMERG "PAX: From %pI4: %s:%d, uid/euid: %u/%u, attempted to modify kernel code\n",
+ ¤t->signal->curr_ip, current->comm, task_pid_nr(current),
+ from_kuid_munged(&init_user_ns, current_uid()), from_kuid_munged(&init_user_ns, current_euid()));
+ else
-+ printk(KERN_ERR "PAX: %s:%d, uid/euid: %u/%u, attempted to modify kernel code\n", current->comm, task_pid_nr(current),
++ printk(KERN_EMERG "PAX: %s:%d, uid/euid: %u/%u, attempted to modify kernel code\n", current->comm, task_pid_nr(current),
+ from_kuid_munged(&init_user_ns, current_uid()), from_kuid_munged(&init_user_ns, current_euid()));
+ }
+#endif
code = BUS_MCEERR_AR;
}
#endif
-@@ -916,6 +1028,99 @@ static int spurious_fault_check(unsigned long error_code, pte_t *pte)
+@@ -916,6 +1028,107 @@ static int spurious_fault_check(unsigned long error_code, pte_t *pte)
return 1;
}
+#if defined(CONFIG_X86_32) && defined(CONFIG_PAX_PAGEEXEC)
++static inline unsigned long get_limit(unsigned long segment)
++{
++ unsigned long __limit;
++
++ asm("lsll %1,%0" : "=r" (__limit) : "r" (segment));
++ return __limit + 1;
++}
++
+static int pax_handle_pageexec_fault(struct pt_regs *regs, struct mm_struct *mm, unsigned long address, unsigned long error_code)
+{
+ pte_t *pte;
+ }
+
+#ifdef CONFIG_SMP
-+ if (likely(address > get_limit(regs->cs) && cpu_isset(smp_processor_id(), mm->context.cpu_user_cs_mask)))
++ if (likely(address > get_limit(regs->cs) && cpumask_test_cpu(smp_processor_id(), &mm->context.cpu_user_cs_mask)))
+#else
+ if (likely(address > get_limit(regs->cs)))
+#endif
/*
* Handle a spurious fault caused by a stale TLB entry.
*
-@@ -1001,6 +1206,9 @@ int show_unhandled_signals = 1;
+@@ -1001,6 +1214,9 @@ int show_unhandled_signals = 1;
static inline int
access_error(unsigned long error_code, struct vm_area_struct *vma)
{
if (error_code & PF_WRITE) {
/* write, present and write, not present: */
if (unlikely(!(vma->vm_flags & VM_WRITE)))
-@@ -1035,7 +1243,7 @@ static inline bool smap_violation(int error_code, struct pt_regs *regs)
- if (error_code & PF_USER)
- return false;
-
-- if (!user_mode_vm(regs) && (regs->flags & X86_EFLAGS_AC))
-+ if (!user_mode(regs) && (regs->flags & X86_EFLAGS_AC))
- return false;
-
- return true;
-@@ -1063,6 +1271,22 @@ __do_page_fault(struct pt_regs *regs, unsigned long error_code,
+@@ -1063,6 +1279,22 @@ __do_page_fault(struct pt_regs *regs, unsigned long error_code,
tsk = current;
mm = tsk->mm;
+#if defined(CONFIG_X86_64) && defined(CONFIG_PAX_MEMORY_UDEREF)
+ if (!user_mode(regs) && address < 2 * pax_user_shadow_base) {
+ if (!search_exception_tables(regs->ip)) {
-+ printk(KERN_ERR "PAX: please report this to pageexec@freemail.hu\n");
++ printk(KERN_EMERG "PAX: please report this to pageexec@freemail.hu\n");
+ bad_area_nosemaphore(regs, error_code, address);
+ return;
+ }
+ if (address < pax_user_shadow_base) {
-+ printk(KERN_ERR "PAX: please report this to pageexec@freemail.hu\n");
-+ printk(KERN_ERR "PAX: faulting IP: %pS\n", (void *)regs->ip);
-+ show_trace_log_lvl(NULL, NULL, (void *)regs->sp, regs->bp, KERN_ERR);
++ printk(KERN_EMERG "PAX: please report this to pageexec@freemail.hu\n");
++ printk(KERN_EMERG "PAX: faulting IP: %pS\n", (void *)regs->ip);
++ show_trace_log_lvl(NULL, NULL, (void *)regs->sp, regs->bp, KERN_EMERG);
+ } else
+ address -= pax_user_shadow_base;
+ }
/*
* Detect and handle instructions that would cause a page fault for
* both a tracked kernel page and a userspace page.
-@@ -1140,7 +1364,7 @@ __do_page_fault(struct pt_regs *regs, unsigned long error_code,
- * User-mode registers count as a user access even for any
- * potential system fault or CPU buglet:
- */
-- if (user_mode_vm(regs)) {
-+ if (user_mode(regs)) {
- local_irq_enable();
- error_code |= PF_USER;
- flags |= FAULT_FLAG_USER;
-@@ -1187,6 +1411,11 @@ retry:
+@@ -1187,6 +1419,11 @@ retry:
might_sleep();
}
vma = find_vma(mm, address);
if (unlikely(!vma)) {
bad_area(regs, error_code, address);
-@@ -1198,18 +1427,24 @@ retry:
+@@ -1198,18 +1435,24 @@ retry:
bad_area(regs, error_code, address);
return;
}
if (unlikely(expand_stack(vma, address))) {
bad_area(regs, error_code, address);
return;
-@@ -1329,3 +1564,292 @@ trace_do_page_fault(struct pt_regs *regs, unsigned long error_code)
+@@ -1329,3 +1572,292 @@ trace_do_page_fault(struct pt_regs *regs, unsigned long error_code)
}
NOKPROBE_SYMBOL(trace_do_page_fault);
#endif /* CONFIG_TRACING */
#endif /* CONFIG_HUGETLB_PAGE */
diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
-index a110efc..a31a18f 100644
+index 1d55318..d58fd6a 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -4,6 +4,7 @@
/*
* We need to define the tracepoints somewhere, and tlb.c
-@@ -620,7 +623,18 @@ void __init init_mem_mapping(void)
+@@ -615,7 +618,18 @@ void __init init_mem_mapping(void)
early_ioremap_page_table_range_init();
#endif
__flush_tlb_all();
early_memtest(0, max_pfn_mapped << PAGE_SHIFT);
-@@ -636,10 +650,40 @@ void __init init_mem_mapping(void)
+@@ -631,10 +645,40 @@ void __init init_mem_mapping(void)
* Access has to be given to non-kernel-ram areas as well, these contain the PCI
* mmio resources as well as potential bios/acpi data regions.
*/
if (iomem_is_exclusive(pagenr << PAGE_SHIFT))
return 0;
if (!page_is_ram(pagenr))
-@@ -685,8 +729,117 @@ void free_init_pages(char *what, unsigned long begin, unsigned long end)
+@@ -680,8 +724,117 @@ void free_init_pages(char *what, unsigned long begin, unsigned long end)
#endif
}
printk(KERN_INFO "Write protecting the kernel text: %luk\n",
size >> 10);
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
-index 30eb05a..ae671ac 100644
+index 3fba623..5ee9802 100644
--- a/arch/x86/mm/init_64.c
+++ b/arch/x86/mm/init_64.c
-@@ -150,7 +150,7 @@ early_param("gbpages", parse_direct_gbpages_on);
+@@ -136,7 +136,7 @@ int kernel_ident_mapping_init(struct x86_mapping_info *info, pgd_t *pgd_page,
* around without checking the pgd every time.
*/
EXPORT_SYMBOL_GPL(__supported_pte_mask);
int force_personality32;
-@@ -183,7 +183,12 @@ void sync_global_pgds(unsigned long start, unsigned long end, int removed)
+@@ -169,7 +169,12 @@ void sync_global_pgds(unsigned long start, unsigned long end, int removed)
for (address = start; address <= end; address += PGDIR_SIZE) {
const pgd_t *pgd_ref = pgd_offset_k(address);
/*
* When it is called after memory hot remove, pgd_none()
-@@ -194,6 +199,25 @@ void sync_global_pgds(unsigned long start, unsigned long end, int removed)
+@@ -180,6 +185,25 @@ void sync_global_pgds(unsigned long start, unsigned long end, int removed)
continue;
spin_lock(&pgd_lock);
list_for_each_entry(page, &pgd_list, lru) {
pgd_t *pgd;
spinlock_t *pgt_lock;
-@@ -202,6 +226,7 @@ void sync_global_pgds(unsigned long start, unsigned long end, int removed)
+@@ -188,6 +212,7 @@ void sync_global_pgds(unsigned long start, unsigned long end, int removed)
/* the pgt_lock only for Xen */
pgt_lock = &pgd_page_get_mm(page)->page_table_lock;
spin_lock(pgt_lock);
if (!pgd_none(*pgd_ref) && !pgd_none(*pgd))
BUG_ON(pgd_page_vaddr(*pgd)
-@@ -215,7 +240,10 @@ void sync_global_pgds(unsigned long start, unsigned long end, int removed)
+@@ -201,7 +226,10 @@ void sync_global_pgds(unsigned long start, unsigned long end, int removed)
set_pgd(pgd, *pgd_ref);
}
}
spin_unlock(&pgd_lock);
}
-@@ -248,7 +276,7 @@ static pud_t *fill_pud(pgd_t *pgd, unsigned long vaddr)
+@@ -234,7 +262,7 @@ static pud_t *fill_pud(pgd_t *pgd, unsigned long vaddr)
{
if (pgd_none(*pgd)) {
pud_t *pud = (pud_t *)spp_getpage();
if (pud != pud_offset(pgd, 0))
printk(KERN_ERR "PAGETABLE BUG #00! %p <-> %p\n",
pud, pud_offset(pgd, 0));
-@@ -260,7 +288,7 @@ static pmd_t *fill_pmd(pud_t *pud, unsigned long vaddr)
+@@ -246,7 +274,7 @@ static pmd_t *fill_pmd(pud_t *pud, unsigned long vaddr)
{
if (pud_none(*pud)) {
pmd_t *pmd = (pmd_t *) spp_getpage();
if (pmd != pmd_offset(pud, 0))
printk(KERN_ERR "PAGETABLE BUG #01! %p <-> %p\n",
pmd, pmd_offset(pud, 0));
-@@ -289,7 +317,9 @@ void set_pte_vaddr_pud(pud_t *pud_page, unsigned long vaddr, pte_t new_pte)
+@@ -275,7 +303,9 @@ void set_pte_vaddr_pud(pud_t *pud_page, unsigned long vaddr, pte_t new_pte)
pmd = fill_pmd(pud, vaddr);
pte = fill_pte(pmd, vaddr);
/*
* It's enough to flush this one mapping.
-@@ -351,14 +381,12 @@ static void __init __init_extra_mapping(unsigned long phys, unsigned long size,
+@@ -337,14 +367,12 @@ static void __init __init_extra_mapping(unsigned long phys, unsigned long size,
pgd = pgd_offset_k((unsigned long)__va(phys));
if (pgd_none(*pgd)) {
pud = (pud_t *) spp_getpage();
}
pmd = pmd_offset(pud, phys);
BUG_ON(!pmd_none(*pmd));
-@@ -599,7 +627,7 @@ phys_pud_init(pud_t *pud_page, unsigned long addr, unsigned long end,
+@@ -585,7 +613,7 @@ phys_pud_init(pud_t *pud_page, unsigned long addr, unsigned long end,
prot);
spin_lock(&init_mm.page_table_lock);
spin_unlock(&init_mm.page_table_lock);
}
__flush_tlb_all();
-@@ -640,7 +668,7 @@ kernel_physical_mapping_init(unsigned long start,
+@@ -626,7 +654,7 @@ kernel_physical_mapping_init(unsigned long start,
page_size_mask);
spin_lock(&init_mm.page_table_lock);
return (void *)vaddr;
diff --git a/arch/x86/mm/ioremap.c b/arch/x86/mm/ioremap.c
-index fdf617c..b9e85bc 100644
+index 70e7444..75b9a13 100644
--- a/arch/x86/mm/ioremap.c
+++ b/arch/x86/mm/ioremap.c
@@ -56,8 +56,8 @@ static int __ioremap_check_ram(unsigned long start_pfn, unsigned long nr_pages,
return 1;
WARN_ONCE(1, "ioremap on RAM pfn 0x%lx\n", start_pfn);
-@@ -283,7 +283,7 @@ EXPORT_SYMBOL(ioremap_prot);
+@@ -288,7 +288,7 @@ EXPORT_SYMBOL(ioremap_prot);
*
* Caller must ensure there is only one unmapping for the same pointer.
*/
{
struct vm_struct *p, *o;
-@@ -332,30 +332,29 @@ EXPORT_SYMBOL(iounmap);
+@@ -351,32 +351,36 @@ int arch_ioremap_pmd_supported(void)
*/
void *xlate_dev_mem_ptr(phys_addr_t phys)
{
-- void *addr;
-- unsigned long start = phys & PAGE_MASK;
--
- /* If page is RAM, we can use __va. Otherwise ioremap and unmap. */
+- unsigned long start = phys & PAGE_MASK;
+- unsigned long offset = phys & ~PAGE_MASK;
+- unsigned long vaddr;
++ phys_addr_t pfn = phys >> PAGE_SHIFT;
+
+- /* If page is RAM, we can use __va. Otherwise ioremap and unmap. */
- if (page_is_ram(start >> PAGE_SHIFT))
-+ if (page_is_ram(phys >> PAGE_SHIFT))
+- return __va(phys);
++ if (page_is_ram(pfn)) {
+#ifdef CONFIG_HIGHMEM
-+ if ((phys >> PAGE_SHIFT) < max_low_pfn)
++ if (pfn >= max_low_pfn)
++ return kmap_high(pfn_to_page(pfn));
++ else
+#endif
- return __va(phys);
++ return __va(phys);
++ }
-- addr = (void __force *)ioremap_cache(start, PAGE_SIZE);
-- if (addr)
-- addr = (void *)((unsigned long)addr | (phys & ~PAGE_MASK));
+- vaddr = (unsigned long)ioremap_cache(start, PAGE_SIZE);
+- /* Only add the offset on success and return NULL if the ioremap() failed: */
+- if (vaddr)
+- vaddr += offset;
-
-- return addr;
-+ return (void __force *)ioremap_cache(phys, PAGE_SIZE);
+- return (void *)vaddr;
++ return (void __force *)ioremap_cache(phys, 1);
}
void unxlate_dev_mem_ptr(phys_addr_t phys, void *addr)
{
- if (page_is_ram(phys >> PAGE_SHIFT))
+- if (page_is_ram(phys >> PAGE_SHIFT))
++ phys_addr_t pfn = phys >> PAGE_SHIFT;
++
++ if (page_is_ram(pfn)) {
+#ifdef CONFIG_HIGHMEM
-+ if ((phys >> PAGE_SHIFT) < max_low_pfn)
++ if (pfn >= max_low_pfn)
++ kunmap_high(pfn_to_page(pfn));
+#endif
return;
++ }
- iounmap((void __iomem *)((unsigned long)addr & PAGE_MASK));
- return;
+- iounmap((void __iomem *)((unsigned long)addr & PAGE_MASK));
+- return;
++ iounmap((void __iomem __force *)addr);
}
-static pte_t bm_pte[PAGE_SIZE/sizeof(pte_t)] __page_aligned_bss;
static inline pmd_t * __init early_ioremap_pmd(unsigned long addr)
{
-@@ -391,8 +390,7 @@ void __init early_ioremap_init(void)
+@@ -412,8 +416,7 @@ void __init early_ioremap_init(void)
early_ioremap_setup();
pmd = early_ioremap_pmd(fix_to_virt(FIX_BTMAP_BEGIN));
pte = kmemcheck_pte_lookup(address);
diff --git a/arch/x86/mm/mmap.c b/arch/x86/mm/mmap.c
-index df4552b..12c129c 100644
+index 9d518d6..8a091f5 100644
--- a/arch/x86/mm/mmap.c
+++ b/arch/x86/mm/mmap.c
@@ -52,7 +52,7 @@ static unsigned long stack_maxrandom_size(void)
static int mmap_is_legacy(void)
{
-@@ -82,27 +82,40 @@ static unsigned long mmap_rnd(void)
+@@ -81,27 +81,40 @@ unsigned long arch_mmap_rnd(void)
return rnd << PAGE_SHIFT;
}
--static unsigned long mmap_base(void)
-+static unsigned long mmap_base(struct mm_struct *mm)
+-static unsigned long mmap_base(unsigned long rnd)
++static unsigned long mmap_base(struct mm_struct *mm, unsigned long rnd)
{
unsigned long gap = rlimit(RLIMIT_STACK);
+ unsigned long pax_task_size = TASK_SIZE;
else if (gap > MAX_GAP)
gap = MAX_GAP;
-- return PAGE_ALIGN(TASK_SIZE - gap - mmap_rnd());
-+ return PAGE_ALIGN(pax_task_size - gap - mmap_rnd());
+- return PAGE_ALIGN(TASK_SIZE - gap - rnd);
++ return PAGE_ALIGN(pax_task_size - gap - rnd);
}
/*
* Bottom-up (legacy) layout on X86_32 did not support randomization, X86_64
* does, but not when emulating X86_32
*/
--static unsigned long mmap_legacy_base(void)
-+static unsigned long mmap_legacy_base(struct mm_struct *mm)
+-static unsigned long mmap_legacy_base(unsigned long rnd)
++static unsigned long mmap_legacy_base(struct mm_struct *mm, unsigned long rnd)
{
- if (mmap_is_ia32())
+ if (mmap_is_ia32()) {
return TASK_UNMAPPED_BASE;
- else
+ } else
- return TASK_UNMAPPED_BASE + mmap_rnd();
+ return TASK_UNMAPPED_BASE + rnd;
}
-@@ -112,8 +125,15 @@ static unsigned long mmap_legacy_base(void)
- */
- void arch_pick_mmap_layout(struct mm_struct *mm)
+@@ -113,16 +126,27 @@ void arch_pick_mmap_layout(struct mm_struct *mm)
{
-- mm->mmap_legacy_base = mmap_legacy_base();
-- mm->mmap_base = mmap_base();
-+ mm->mmap_legacy_base = mmap_legacy_base(mm);
-+ mm->mmap_base = mmap_base(mm);
+ unsigned long random_factor = 0UL;
+
++#ifdef CONFIG_PAX_RANDMMAP
++ if (!(mm->pax_flags & MF_PAX_RANDMMAP))
++#endif
+ if (current->flags & PF_RANDOMIZE)
+ random_factor = arch_mmap_rnd();
+
+- mm->mmap_legacy_base = mmap_legacy_base(random_factor);
++ mm->mmap_legacy_base = mmap_legacy_base(mm, random_factor);
+
+ if (mmap_is_legacy()) {
+ mm->mmap_base = mm->mmap_legacy_base;
+ mm->get_unmapped_area = arch_get_unmapped_area;
+ } else {
+- mm->mmap_base = mmap_base(random_factor);
++ mm->mmap_base = mmap_base(mm, random_factor);
+ mm->get_unmapped_area = arch_get_unmapped_area_topdown;
+ }
+
+#ifdef CONFIG_PAX_RANDMMAP
+ if (mm->pax_flags & MF_PAX_RANDMMAP) {
+ mm->mmap_base -= mm->delta_mmap + mm->delta_stack;
+ }
+#endif
-
- if (mmap_is_legacy()) {
- mm->mmap_base = mm->mmap_legacy_base;
++
+ }
diff --git a/arch/x86/mm/mmio-mod.c b/arch/x86/mm/mmio-mod.c
index 0057a7a..95c7edd 100644
--- a/arch/x86/mm/mmio-mod.c
might_sleep();
if (is_enabled()) /* recheck and proper locking in *_core() */
diff --git a/arch/x86/mm/numa.c b/arch/x86/mm/numa.c
-index cd4785b..25188b6 100644
+index 4053bb5..b1ad3dc 100644
--- a/arch/x86/mm/numa.c
+++ b/arch/x86/mm/numa.c
-@@ -499,7 +499,7 @@ static void __init numa_clear_kernel_node_hotplug(void)
+@@ -506,7 +506,7 @@ static void __init numa_clear_kernel_node_hotplug(void)
}
}
unsigned long uninitialized_var(pfn_align);
int i, nid;
diff --git a/arch/x86/mm/pageattr.c b/arch/x86/mm/pageattr.c
-index 536ea2f..f42c293 100644
+index 89af288..05381957 100644
--- a/arch/x86/mm/pageattr.c
+++ b/arch/x86/mm/pageattr.c
-@@ -262,7 +262,7 @@ static inline pgprot_t static_protections(pgprot_t prot, unsigned long address,
+@@ -260,7 +260,7 @@ static inline pgprot_t static_protections(pgprot_t prot, unsigned long address,
*/
#ifdef CONFIG_PCI_BIOS
if (pcibios_enabled && within(pfn, BIOS_BEGIN >> PAGE_SHIFT, BIOS_END >> PAGE_SHIFT))
#endif
/*
-@@ -270,9 +270,10 @@ static inline pgprot_t static_protections(pgprot_t prot, unsigned long address,
+@@ -268,9 +268,10 @@ static inline pgprot_t static_protections(pgprot_t prot, unsigned long address,
* Does not cover __inittext since that is gone later on. On
* 64bit we do not enforce !NX on the low mapping
*/
/*
* The .rodata section needs to be read-only. Using the pfn
* catches all aliases.
-@@ -280,6 +281,7 @@ static inline pgprot_t static_protections(pgprot_t prot, unsigned long address,
+@@ -278,6 +279,7 @@ static inline pgprot_t static_protections(pgprot_t prot, unsigned long address,
if (within(pfn, __pa_symbol(__start_rodata) >> PAGE_SHIFT,
__pa_symbol(__end_rodata) >> PAGE_SHIFT))
pgprot_val(forbidden) |= _PAGE_RW;
#if defined(CONFIG_X86_64) && defined(CONFIG_DEBUG_RODATA)
/*
-@@ -318,6 +320,13 @@ static inline pgprot_t static_protections(pgprot_t prot, unsigned long address,
+@@ -316,6 +318,13 @@ static inline pgprot_t static_protections(pgprot_t prot, unsigned long address,
}
#endif
prot = __pgprot(pgprot_val(prot) & ~pgprot_val(forbidden));
return prot;
-@@ -440,23 +449,37 @@ EXPORT_SYMBOL_GPL(slow_virt_to_phys);
+@@ -438,23 +447,37 @@ EXPORT_SYMBOL_GPL(slow_virt_to_phys);
static void __set_pmd_pte(pte_t *kpte, unsigned long address, pte_t pte)
{
/* change init_mm */
static int
diff --git a/arch/x86/mm/pat.c b/arch/x86/mm/pat.c
-index 7ac6869..c0ba541 100644
+index 35af677..e7bf11f 100644
--- a/arch/x86/mm/pat.c
+++ b/arch/x86/mm/pat.c
@@ -89,7 +89,7 @@ static inline enum page_cache_mode get_page_memtype(struct page *pg)
while (cursor < to) {
if (!devmem_is_allowed(pfn)) {
-- printk(KERN_INFO "Program %s tried to access /dev/mem between [mem %#010Lx-%#010Lx]\n",
-- current->comm, from, to - 1);
-+ printk(KERN_INFO "Program %s tried to access /dev/mem between [mem %#010Lx-%#010Lx] (%#010Lx)\n",
-+ current->comm, from, to - 1, cursor);
+- printk(KERN_INFO "Program %s tried to access /dev/mem between [mem %#010Lx-%#010Lx], PAT prevents it\n",
+- current->comm, from, to - 1);
++ printk(KERN_INFO "Program %s tried to access /dev/mem between [mem %#010Lx-%#010Lx] (%#010Lx), PAT prevents it\n",
++ current->comm, from, to - 1, cursor);
return 0;
}
cursor += PAGE_SIZE;
p += get_opcode(p, &opcode);
for (i = 0; i < ARRAY_SIZE(imm_wop); i++)
diff --git a/arch/x86/mm/pgtable.c b/arch/x86/mm/pgtable.c
-index 7b22ada..b11e66f 100644
+index 0b97d2c..597bb38 100644
--- a/arch/x86/mm/pgtable.c
+++ b/arch/x86/mm/pgtable.c
-@@ -97,10 +97,75 @@ static inline void pgd_list_del(pgd_t *pgd)
+@@ -98,10 +98,75 @@ static inline void pgd_list_del(pgd_t *pgd)
list_del(&page->lru);
}
static void pgd_set_mm(pgd_t *pgd, struct mm_struct *mm)
{
BUILD_BUG_ON(sizeof(virt_to_page(pgd)->index) < sizeof(mm));
-@@ -141,6 +206,7 @@ static void pgd_dtor(pgd_t *pgd)
+@@ -142,6 +207,7 @@ static void pgd_dtor(pgd_t *pgd)
pgd_list_del(pgd);
spin_unlock(&pgd_lock);
}
/*
* List of all pgd's needed for non-PAE so it can invalidate entries
-@@ -153,7 +219,7 @@ static void pgd_dtor(pgd_t *pgd)
+@@ -154,7 +220,7 @@ static void pgd_dtor(pgd_t *pgd)
* -- nyc
*/
/*
* In PAE mode, we need to do a cr3 reload (=tlb flush) when
* updating the top-level pagetable entries to guarantee the
-@@ -165,7 +231,7 @@ static void pgd_dtor(pgd_t *pgd)
+@@ -166,7 +232,7 @@ static void pgd_dtor(pgd_t *pgd)
* not shared between pagetables (!SHARED_KERNEL_PMDS), we allocate
* and initialize the kernel pmds here.
*/
void pud_populate(struct mm_struct *mm, pud_t *pudp, pmd_t *pmd)
{
-@@ -183,46 +249,48 @@ void pud_populate(struct mm_struct *mm, pud_t *pudp, pmd_t *pmd)
+@@ -184,46 +250,48 @@ void pud_populate(struct mm_struct *mm, pud_t *pudp, pmd_t *pmd)
*/
flush_tlb_mm(mm);
}
return -ENOMEM;
}
-@@ -235,50 +303,54 @@ static int preallocate_pmds(struct mm_struct *mm, pmd_t *pmds[])
+@@ -236,43 +304,47 @@ static int preallocate_pmds(struct mm_struct *mm, pmd_t *pmds[])
* preallocate which never got a corresponding vma will need to be
* freed manually.
*/
}
}
+@@ -354,7 +426,7 @@ static inline void _pgd_free(pgd_t *pgd)
pgd_t *pgd_alloc(struct mm_struct *mm)
{
pgd_t *pgd;
- pmd_t *pmds[PREALLOCATED_PMDS];
+ pxd_t *pxds[PREALLOCATED_PXDS];
- pgd = (pgd_t *)__get_free_page(PGALLOC_GFP);
+ pgd = _pgd_alloc();
-@@ -287,11 +359,11 @@ pgd_t *pgd_alloc(struct mm_struct *mm)
+@@ -363,11 +435,11 @@ pgd_t *pgd_alloc(struct mm_struct *mm)
mm->pgd = pgd;
/*
* Make sure that pre-populating the pmds is atomic with
-@@ -301,14 +373,14 @@ pgd_t *pgd_alloc(struct mm_struct *mm)
+@@ -377,14 +449,14 @@ pgd_t *pgd_alloc(struct mm_struct *mm)
spin_lock(&pgd_lock);
pgd_ctor(mm, pgd);
+out_free_pxds:
+ free_pxds(mm, pxds);
out_free_pgd:
- free_page((unsigned long)pgd);
+ _pgd_free(pgd);
out:
-@@ -317,7 +389,7 @@ out:
+@@ -393,7 +465,7 @@ out:
void pgd_free(struct mm_struct *mm, pgd_t *pgd)
{
+ pgd_mop_up_pxds(mm, pgd);
pgd_dtor(pgd);
paravirt_pgd_free(mm, pgd);
- free_page((unsigned long)pgd);
+ _pgd_free(pgd);
diff --git a/arch/x86/mm/pgtable_32.c b/arch/x86/mm/pgtable_32.c
index 75cc097..79a097f 100644
--- a/arch/x86/mm/pgtable_32.c
* functions differently. Tracing normally
diff --git a/arch/x86/mm/uderef_64.c b/arch/x86/mm/uderef_64.c
new file mode 100644
-index 0000000..dace51c
+index 0000000..3fda3f3
--- /dev/null
+++ b/arch/x86/mm/uderef_64.c
@@ -0,0 +1,37 @@
+ * - remain leaf functions under all configurations,
+ * - never be called directly, only dereferenced from the wrappers.
+ */
-+void __pax_open_userland(void)
++void __used __pax_open_userland(void)
+{
+ unsigned int cpu;
+
+
+ cpu = raw_get_cpu();
+ BUG_ON((read_cr3() & ~PAGE_MASK) != PCID_KERNEL);
-+ write_cr3(__pa(get_cpu_pgd(cpu, user)) | PCID_USER | PCID_NOFLUSH);
++ write_cr3(__pa_nodebug(get_cpu_pgd(cpu, user)) | PCID_USER | PCID_NOFLUSH);
+ raw_put_cpu_no_resched();
+}
+EXPORT_SYMBOL(__pax_open_userland);
+
-+void __pax_close_userland(void)
++void __used __pax_close_userland(void)
+{
+ unsigned int cpu;
+
+
+ cpu = raw_get_cpu();
+ BUG_ON((read_cr3() & ~PAGE_MASK) != PCID_USER);
-+ write_cr3(__pa(get_cpu_pgd(cpu, kernel)) | PCID_KERNEL | PCID_NOFLUSH);
++ write_cr3(__pa_nodebug(get_cpu_pgd(cpu, kernel)) | PCID_KERNEL | PCID_NOFLUSH);
+ raw_put_cpu_no_resched();
+}
+EXPORT_SYMBOL(__pax_close_userland);
+ pax_force_retaddr
ret
diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c
-index 9875143..36776ae 100644
+index ddeff48..877ead6 100644
--- a/arch/x86/net/bpf_jit_comp.c
+++ b/arch/x86/net/bpf_jit_comp.c
@@ -13,7 +13,11 @@
}
struct jit_context {
-@@ -559,6 +565,13 @@ static int do_jit(struct bpf_prog *bpf_prog, int *addrs, u8 *image,
- if (is_ereg(dst_reg))
- EMIT1(0x41);
- EMIT3(0xC1, add_1reg(0xC8, dst_reg), 8);
-+
-+ /* emit 'movzwl eax, ax' */
-+ if (is_ereg(dst_reg))
-+ EMIT3(0x45, 0x0F, 0xB7);
-+ else
-+ EMIT2(0x0F, 0xB7);
-+ EMIT1(add_2reg(0xC0, dst_reg, dst_reg));
- break;
- case 32:
- /* emit 'bswap eax' to swap lower 4 bytes */
-@@ -577,6 +590,27 @@ static int do_jit(struct bpf_prog *bpf_prog, int *addrs, u8 *image,
- break;
-
- case BPF_ALU | BPF_END | BPF_FROM_LE:
-+ switch (imm32) {
-+ case 16:
-+ /* emit 'movzwl eax, ax' to zero extend 16-bit
-+ * into 64 bit
-+ */
-+ if (is_ereg(dst_reg))
-+ EMIT3(0x45, 0x0F, 0xB7);
-+ else
-+ EMIT2(0x0F, 0xB7);
-+ EMIT1(add_2reg(0xC0, dst_reg, dst_reg));
-+ break;
-+ case 32:
-+ /* emit 'mov eax, eax' to clear upper 32-bits */
-+ if (is_ereg(dst_reg))
-+ EMIT1(0x45);
-+ EMIT2(0x89, add_2reg(0xC0, dst_reg, dst_reg));
-+ break;
-+ case 64:
-+ /* nop */
-+ break;
-+ }
- break;
-
- /* ST: *(u8*)(dst_reg + off) = imm */
-@@ -896,7 +930,9 @@ common_load:
+@@ -924,7 +930,9 @@ common_load:
pr_err("bpf_jit_compile fatal error\n");
return -EFAULT;
}
}
proglen += ilen;
addrs[i] = proglen;
-@@ -968,7 +1004,6 @@ void bpf_int_jit_compile(struct bpf_prog *prog)
+@@ -1001,7 +1009,6 @@ void bpf_int_jit_compile(struct bpf_prog *prog)
if (image) {
bpf_flush_icache(header, image + proglen);
prog->bpf_func = (void *)image;
prog->jited = true;
}
-@@ -981,12 +1016,8 @@ void bpf_jit_free(struct bpf_prog *fp)
+@@ -1014,12 +1021,8 @@ void bpf_jit_free(struct bpf_prog *fp)
unsigned long addr = (unsigned long)fp->bpf_func & PAGE_MASK;
struct bpf_binary_header *header = (void *)addr;
bpf_prog_unlock_free(fp);
}
diff --git a/arch/x86/oprofile/backtrace.c b/arch/x86/oprofile/backtrace.c
-index 5d04be5..2beeaa2 100644
+index 4e664bd..2beeaa2 100644
--- a/arch/x86/oprofile/backtrace.c
+++ b/arch/x86/oprofile/backtrace.c
@@ -46,11 +46,11 @@ dump_user_backtrace_32(struct stack_frame_ia32 *head)
if (bytes != 0)
return NULL;
-@@ -111,7 +111,7 @@ x86_backtrace(struct pt_regs * const regs, unsigned int depth)
- {
- struct stack_frame *head = (struct stack_frame *)frame_pointer(regs);
-
-- if (!user_mode_vm(regs)) {
-+ if (!user_mode(regs)) {
- unsigned long stack = kernel_stack_pointer(regs);
- if (depth)
- dump_trace(NULL, regs, (unsigned long *)stack, 0,
diff --git a/arch/x86/oprofile/nmi_int.c b/arch/x86/oprofile/nmi_int.c
index 1d2e639..f6ef82a 100644
--- a/arch/x86/oprofile/nmi_int.c
}
EXPORT_SYMBOL(pcibios_set_irq_routing);
diff --git a/arch/x86/platform/efi/efi_32.c b/arch/x86/platform/efi/efi_32.c
-index 40e7cda..c7e6672 100644
+index ed5b673..24d2d53 100644
--- a/arch/x86/platform/efi/efi_32.c
+++ b/arch/x86/platform/efi/efi_32.c
-@@ -61,11 +61,22 @@ void __init efi_call_phys_prolog(void)
- {
+@@ -61,11 +61,27 @@ pgd_t * __init efi_call_phys_prolog(void)
struct desc_ptr gdt_descr;
+ pgd_t *save_pgd;
+#ifdef CONFIG_PAX_KERNEXEC
+ struct desc_struct d;
+#endif
+
- local_irq_save(efi_rt_eflags);
-
+ /* Current pgd is swapper_pg_dir, we'll restore it later: */
++#ifdef CONFIG_PAX_PER_CPU_PGD
++ save_pgd = get_cpu_pgd(smp_processor_id(), kernel);
++#else
+ save_pgd = swapper_pg_dir;
++#endif
++
load_cr3(initial_page_table);
__flush_tlb_all();
gdt_descr.address = __pa(get_cpu_gdt_table(0));
gdt_descr.size = GDT_SIZE - 1;
load_gdt(&gdt_descr);
-@@ -75,11 +86,24 @@ void __init efi_call_phys_epilog(void)
+@@ -77,6 +93,14 @@ void __init efi_call_phys_epilog(pgd_t *save_pgd)
{
struct desc_ptr gdt_descr;
gdt_descr.address = (unsigned long)get_cpu_gdt_table(0);
gdt_descr.size = GDT_SIZE - 1;
load_gdt(&gdt_descr);
-
-+#ifdef CONFIG_PAX_PER_CPU_PGD
-+ load_cr3(get_cpu_pgd(smp_processor_id(), kernel));
-+#else
- load_cr3(swapper_pg_dir);
-+#endif
-+
- __flush_tlb_all();
-
- local_irq_restore(efi_rt_eflags);
diff --git a/arch/x86/platform/efi/efi_64.c b/arch/x86/platform/efi/efi_64.c
-index 17e80d8..9fa6e41 100644
+index a0ac0f9..f41d324 100644
--- a/arch/x86/platform/efi/efi_64.c
+++ b/arch/x86/platform/efi/efi_64.c
-@@ -98,6 +98,11 @@ void __init efi_call_phys_prolog(void)
+@@ -96,6 +96,11 @@ pgd_t * __init efi_call_phys_prolog(void)
vaddress = (unsigned long)__va(pgd * PGDIR_SIZE);
set_pgd(pgd_offset_k(pgd * PGDIR_SIZE), *pgd_offset_k(vaddress));
}
+#endif
+
__flush_tlb_all();
- }
-@@ -115,6 +120,11 @@ void __init efi_call_phys_epilog(void)
- for (pgd = 0; pgd < n_pgds; pgd++)
- set_pgd(pgd_offset_k(pgd * PGDIR_SIZE), save_pgd[pgd]);
+ return save_pgd;
+@@ -119,6 +124,10 @@ void __init efi_call_phys_epilog(pgd_t *save_pgd)
+
kfree(save_pgd);
-+
+
+#ifdef CONFIG_PAX_PER_CPU_PGD
+ load_cr3(get_cpu_pgd(smp_processor_id(), kernel));
+#endif
+
__flush_tlb_all();
- local_irq_restore(efi_flags);
early_code_mapping_set_exec(0);
-@@ -145,8 +155,23 @@ int __init efi_setup_page_tables(unsigned long pa_memmap, unsigned num_pages)
+ }
+@@ -148,8 +157,23 @@ int __init efi_setup_page_tables(unsigned long pa_memmap, unsigned num_pages)
unsigned npages;
pgd_t *pgd;
return &tangier_ops;
}
diff --git a/arch/x86/platform/intel-quark/imr_selftest.c b/arch/x86/platform/intel-quark/imr_selftest.c
-index c9a0838..fae0977 100644
+index 278e4da..55e8d8a 100644
--- a/arch/x86/platform/intel-quark/imr_selftest.c
+++ b/arch/x86/platform/intel-quark/imr_selftest.c
-@@ -54,7 +54,7 @@ static void __init imr_self_test_result(int res, const char *fmt, ...)
+@@ -55,7 +55,7 @@ static void __init imr_self_test_result(int res, const char *fmt, ...)
*/
static void __init imr_self_test(void)
{
.getproplen = olpc_dt_getproplen,
.getproperty = olpc_dt_getproperty,
diff --git a/arch/x86/power/cpu.c b/arch/x86/power/cpu.c
-index 3e32ed5..cc0adc5 100644
+index 757678f..9895d9b 100644
--- a/arch/x86/power/cpu.c
+++ b/arch/x86/power/cpu.c
@@ -134,11 +134,8 @@ static void do_fpu_end(void)
static void fix_processor_context(void)
{
int cpu = smp_processor_id();
-- struct tss_struct *t = &per_cpu(init_tss, cpu);
+- struct tss_struct *t = &per_cpu(cpu_tss, cpu);
-#ifdef CONFIG_X86_64
- struct desc_struct *desc = get_cpu_gdt_table(cpu);
- tss_desc tss;
-#endif
-+ struct tss_struct *t = init_tss + cpu;
++ struct tss_struct *t = cpu_tss + cpu;
+
set_tss_desc(cpu, t); /*
* This just modifies memory; should not be
return 0;
diff --git a/arch/x86/vdso/Makefile b/arch/x86/vdso/Makefile
-index 7b9be98..39bb57f 100644
+index e970320..c006fea 100644
--- a/arch/x86/vdso/Makefile
+++ b/arch/x86/vdso/Makefile
@@ -175,7 +175,7 @@ quiet_cmd_vdso = VDSO $@
This is the Linux Xen port. Enabling this will allow the
kernel to boot in a paravirtualized environment under the
diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
-index 5240f56..0c12163 100644
+index 46957ea..ef7b714 100644
--- a/arch/x86/xen/enlighten.c
+++ b/arch/x86/xen/enlighten.c
@@ -125,8 +125,6 @@ EXPORT_SYMBOL_GPL(xen_start_info);
BUG_ON(va & ~PAGE_MASK);
for (f = 0; va < dtr->address + size; va += PAGE_SIZE, f++) {
-@@ -991,7 +987,7 @@ static u32 xen_safe_apic_wait_icr_idle(void)
- return 0;
- }
-
--static void set_xen_basic_apic_ops(void)
-+static void __init set_xen_basic_apic_ops(void)
- {
- apic->read = xen_apic_read;
- apic->write = xen_apic_write;
-@@ -1308,30 +1304,30 @@ static const struct pv_apic_ops xen_apic_ops __initconst = {
+@@ -1223,30 +1219,30 @@ static const struct pv_apic_ops xen_apic_ops __initconst = {
#endif
};
{
if (pm_power_off)
pm_power_off();
-@@ -1484,8 +1480,11 @@ static void __ref xen_setup_gdt(int cpu)
+@@ -1399,8 +1395,11 @@ static void __ref xen_setup_gdt(int cpu)
pv_cpu_ops.write_gdt_entry = xen_write_gdt_entry_boot;
pv_cpu_ops.load_gdt = xen_load_gdt_boot;
pv_cpu_ops.write_gdt_entry = xen_write_gdt_entry;
pv_cpu_ops.load_gdt = xen_load_gdt;
-@@ -1600,7 +1599,17 @@ asmlinkage __visible void __init xen_start_kernel(void)
+@@ -1515,7 +1514,17 @@ asmlinkage __visible void __init xen_start_kernel(void)
__userpte_alloc_gfp &= ~__GFP_HIGHMEM;
/* Work out if we support NX */
/* Get mfn list */
xen_build_dynamic_phys_to_machine();
-@@ -1628,13 +1637,6 @@ asmlinkage __visible void __init xen_start_kernel(void)
+@@ -1543,13 +1552,6 @@ asmlinkage __visible void __init xen_start_kernel(void)
machine_ops = xen_machine_ops;
#ifdef CONFIG_ACPI_NUMA
diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c
-index adca9e2..cdba9d1 100644
+index dd151b2..d5ab952 100644
--- a/arch/x86/xen/mmu.c
+++ b/arch/x86/xen/mmu.c
@@ -379,7 +379,7 @@ static pteval_t pte_mfn_to_pfn(pteval_t val)
pin_pagetable_pfn(MMUEXT_PIN_L4_TABLE,
@@ -2048,6 +2059,7 @@ static void __init xen_post_allocator_init(void)
pv_mmu_ops.set_pud = xen_set_pud;
- #if PAGETABLE_LEVELS == 4
+ #if CONFIG_PGTABLE_LEVELS == 4
pv_mmu_ops.set_pgd = xen_set_pgd;
+ pv_mmu_ops.set_pgd_batched = xen_set_pgd;
#endif
.alloc_pud = xen_alloc_pmd_init,
.release_pud = xen_release_pmd_init,
diff --git a/arch/x86/xen/smp.c b/arch/x86/xen/smp.c
-index 08e8489..b1e182f 100644
+index 8648438..18bac20 100644
--- a/arch/x86/xen/smp.c
+++ b/arch/x86/xen/smp.c
-@@ -288,17 +288,13 @@ static void __init xen_smp_prepare_boot_cpu(void)
+@@ -284,17 +284,13 @@ static void __init xen_smp_prepare_boot_cpu(void)
if (xen_pv_domain()) {
if (!xen_feature(XENFEAT_writable_page_tables))
#endif
xen_filter_cpu_maps();
-@@ -379,7 +375,7 @@ cpu_initialize_context(unsigned int cpu, struct task_struct *idle)
+@@ -375,7 +371,7 @@ cpu_initialize_context(unsigned int cpu, struct task_struct *idle)
#ifdef CONFIG_X86_32
/* Note: PVH is not yet supported on x86_32. */
ctxt->user_regs.fs = __KERNEL_PERCPU;
#endif
memset(&ctxt->fpu_ctxt, 0, sizeof(ctxt->fpu_ctxt));
-@@ -387,8 +383,8 @@ cpu_initialize_context(unsigned int cpu, struct task_struct *idle)
+@@ -383,8 +379,8 @@ cpu_initialize_context(unsigned int cpu, struct task_struct *idle)
ctxt->user_regs.eip = (unsigned long)cpu_bringup_and_idle;
ctxt->flags = VGCF_IN_KERNEL;
ctxt->user_regs.eflags = 0x1000; /* IOPL_RING1 */
ctxt->user_regs.ss = __KERNEL_DS;
xen_copy_trap_info(ctxt->trap_ctxt);
-@@ -446,14 +442,13 @@ static int xen_cpu_up(unsigned int cpu, struct task_struct *idle)
- int rc;
-
- per_cpu(current_task, cpu) = idle;
-+ per_cpu(current_tinfo, cpu) = &idle->tinfo;
- #ifdef CONFIG_X86_32
- irq_ctx_init(cpu);
- #else
- clear_tsk_thread_flag(idle, TIF_FORK);
- #endif
-- per_cpu(kernel_stack, cpu) =
-- (unsigned long)task_stack_page(idle) -
-- KERNEL_STACK_OFFSET + THREAD_SIZE;
-+ per_cpu(kernel_stack, cpu) = (unsigned long)task_stack_page(idle) - 16 + THREAD_SIZE;
-
- xen_setup_runstate_info(cpu);
- xen_setup_timer(cpu);
-@@ -732,7 +727,7 @@ static const struct smp_ops xen_smp_ops __initconst = {
+@@ -720,7 +716,7 @@ static const struct smp_ops xen_smp_ops __initconst = {
void __init xen_smp_init(void)
{
#else
movl %ss:xen_vcpu, %eax
diff --git a/arch/x86/xen/xen-head.S b/arch/x86/xen/xen-head.S
-index 674b2225..f1f5dc1 100644
+index 8afdfcc..79239db 100644
--- a/arch/x86/xen/xen-head.S
+++ b/arch/x86/xen/xen-head.S
-@@ -39,6 +39,17 @@ ENTRY(startup_xen)
+@@ -41,6 +41,17 @@ ENTRY(startup_xen)
#ifdef CONFIG_X86_32
mov %esi,xen_start_info
mov $init_thread_union+THREAD_SIZE,%esp
struct list_head *list = this_cpu_ptr(&blk_cpu_iopoll);
int rearm = 0, budget = blk_iopoll_budget;
diff --git a/block/blk-map.c b/block/blk-map.c
-index b8d2725..08c52b0 100644
+index da310a1..213b5c9 100644
--- a/block/blk-map.c
+++ b/block/blk-map.c
@@ -192,7 +192,7 @@ int blk_rq_map_kern(struct request_queue *q, struct request *rq, void *kbuf,
if (do_copy)
bio = bio_copy_kern(q, kbuf, len, gfp_mask, reading);
else
+diff --git a/block/blk-mq.c b/block/blk-mq.c
+index 594eea0..2dc1fd6 100644
+--- a/block/blk-mq.c
++++ b/block/blk-mq.c
+@@ -1968,7 +1968,7 @@ struct request_queue *blk_mq_init_allocated_queue(struct blk_mq_tag_set *set,
+ goto err_hctxs;
+
+ setup_timer(&q->timeout, blk_mq_rq_timer, (unsigned long) q);
+- blk_queue_rq_timeout(q, set->timeout ? set->timeout : 30000);
++ blk_queue_rq_timeout(q, set->timeout ? set->timeout : 30 * HZ);
+
+ q->nr_queues = nr_cpu_ids;
+ q->nr_hw_queues = set->nr_hw_queues;
diff --git a/block/blk-softirq.c b/block/blk-softirq.c
index 53b1737..08177d2e 100644
--- a/block/blk-softirq.c
err = -EFAULT;
goto out;
diff --git a/block/genhd.c b/block/genhd.c
-index 0a536dc..b8f7aca 100644
+index ea982ea..86e0f9e 100644
--- a/block/genhd.c
+++ b/block/genhd.c
@@ -469,21 +469,24 @@ static char *bdevt_str(dev_t devt, char *buf)
(u8 *) pte, count) < count) {
kfree(pte);
diff --git a/block/scsi_ioctl.c b/block/scsi_ioctl.c
-index e1f71c3..02d295a 100644
+index 55b6f15..b602c9a 100644
--- a/block/scsi_ioctl.c
+++ b/block/scsi_ioctl.c
@@ -67,7 +67,7 @@ static int scsi_get_bus(struct request_queue *q, int __user *p)
if (blk_verify_command(rq->cmd, mode & FMODE_WRITE))
return -EPERM;
-@@ -422,6 +434,8 @@ int sg_scsi_ioctl(struct request_queue *q, struct gendisk *disk, fmode_t mode,
+@@ -420,6 +432,8 @@ int sg_scsi_ioctl(struct request_queue *q, struct gendisk *disk, fmode_t mode,
int err;
unsigned int in_len, out_len, bytes, opcode, cmdlen;
char *buffer = NULL, sense[SCSI_SENSE_BUFFERSIZE];
if (!sic)
return -EINVAL;
-@@ -460,9 +474,18 @@ int sg_scsi_ioctl(struct request_queue *q, struct gendisk *disk, fmode_t mode,
+@@ -458,9 +472,18 @@ int sg_scsi_ioctl(struct request_queue *q, struct gendisk *disk, fmode_t mode,
*/
err = -EFAULT;
rq->cmd_len = cmdlen;
goto error;
diff --git a/crypto/cryptd.c b/crypto/cryptd.c
-index 650afac1..f3307de 100644
+index b0602ba..fb71850 100644
--- a/crypto/cryptd.c
+++ b/crypto/cryptd.c
@@ -63,7 +63,7 @@ struct cryptd_blkcipher_ctx {
bgrt_kobj = kobject_create_and_add("bgrt", acpi_kobj);
if (!bgrt_kobj)
diff --git a/drivers/acpi/blacklist.c b/drivers/acpi/blacklist.c
-index 9b693d5..8953d54 100644
+index 1d17919..315e955 100644
--- a/drivers/acpi/blacklist.c
+++ b/drivers/acpi/blacklist.c
@@ -51,7 +51,7 @@ struct acpi_blacklist_item {
.callback = dmi_disable_osi_vista,
.ident = "Fujitsu Siemens",
diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c
-index 8b67bd0..b59593e 100644
+index 513e7230e..802015a 100644
--- a/drivers/acpi/bus.c
+++ b/drivers/acpi/bus.c
@@ -67,7 +67,7 @@ static int set_copy_dsdt(const struct dmi_system_id *id)
/* parse the table header to get the table length */
if (count <= sizeof(struct acpi_table_header))
diff --git a/drivers/acpi/device_pm.c b/drivers/acpi/device_pm.c
-index 735db11..91e07ff 100644
+index 8217e0b..3294cb6 100644
--- a/drivers/acpi/device_pm.c
+++ b/drivers/acpi/device_pm.c
-@@ -1025,6 +1025,8 @@ EXPORT_SYMBOL_GPL(acpi_subsys_freeze);
+@@ -1026,6 +1026,8 @@ EXPORT_SYMBOL_GPL(acpi_subsys_freeze);
#endif /* CONFIG_PM_SLEEP */
static struct dev_pm_domain acpi_general_pm_domain = {
.ops = {
.runtime_suspend = acpi_subsys_runtime_suspend,
-@@ -1041,6 +1043,7 @@ static struct dev_pm_domain acpi_general_pm_domain = {
+@@ -1042,6 +1044,7 @@ static struct dev_pm_domain acpi_general_pm_domain = {
.restore_early = acpi_subsys_resume_early,
#endif
},
};
/**
-@@ -1110,7 +1113,6 @@ int acpi_dev_pm_attach(struct device *dev, bool power_on)
+@@ -1111,7 +1114,6 @@ int acpi_dev_pm_attach(struct device *dev, bool power_on)
acpi_device_wakeup(adev, ACPI_STATE_S0, false);
}
}
EXPORT_SYMBOL_GPL(acpi_dev_pm_attach);
diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c
-index a8dd2f7..e15950e 100644
+index 5e8fed4..d9bb545 100644
--- a/drivers/acpi/ec.c
+++ b/drivers/acpi/ec.c
-@@ -1242,7 +1242,7 @@ static int ec_clear_on_resume(const struct dmi_system_id *id)
+@@ -1293,7 +1293,7 @@ static int ec_clear_on_resume(const struct dmi_system_id *id)
return 0;
}
};
diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c
-index f98db0b..8309c83 100644
+index 39e0c8e..b5ae20c 100644
--- a/drivers/acpi/processor_idle.c
+++ b/drivers/acpi/processor_idle.c
-@@ -912,7 +912,7 @@ static int acpi_processor_setup_cpuidle_states(struct acpi_processor *pr)
+@@ -910,7 +910,7 @@ static int acpi_processor_setup_cpuidle_states(struct acpi_processor *pr)
{
int i, count = CPUIDLE_DRIVER_STATE_START;
struct acpi_processor_cx *cx;
set_no_mwait, "Extensa 5220", {
DMI_MATCH(DMI_BIOS_VENDOR, "Phoenix Technologies LTD"),
diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c
-index 7f251dd..47b262c 100644
+index 2f0d4db..b9e9b15 100644
--- a/drivers/acpi/sleep.c
+++ b/drivers/acpi/sleep.c
@@ -148,7 +148,7 @@ static int __init init_nvs_nosave(const struct dmi_system_id *d)
.callback = init_old_suspend_ordering,
.ident = "Abit KN9 (nForce4 variant)",
diff --git a/drivers/acpi/sysfs.c b/drivers/acpi/sysfs.c
-index 13e577c..cef11ee 100644
+index 0876d77b..3ba0127 100644
--- a/drivers/acpi/sysfs.c
+++ b/drivers/acpi/sysfs.c
@@ -423,11 +423,11 @@ static u32 num_counters;
* Award BIOS on this AOpen makes thermal control almost worthless.
* http://bugzilla.kernel.org/show_bug.cgi?id=8842
diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c
-index 26eb70c..4d66ddf 100644
+index cc79d3f..28adb33 100644
--- a/drivers/acpi/video.c
+++ b/drivers/acpi/video.c
-@@ -418,7 +418,7 @@ static int __init video_disable_native_backlight(const struct dmi_system_id *d)
+@@ -431,7 +431,7 @@ static int __init video_enable_native_backlight(const struct dmi_system_id *d)
return 0;
}
* Broken _BQC workaround http://bugzilla.kernel.org/show_bug.cgi?id=13121
*/
diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c
-index 61a9c07..ea98fa1 100644
+index 287c4ba..6a600bc 100644
--- a/drivers/ata/libahci.c
+++ b/drivers/ata/libahci.c
@@ -1252,7 +1252,7 @@ int ahci_kick_engine(struct ata_port *ap)
unsigned long timeout_msec)
{
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
-index 23dac3b..89ada44 100644
+index 577849c..920847c 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
-@@ -99,7 +99,7 @@ static unsigned int ata_dev_set_xfermode(struct ata_device *dev);
+@@ -102,7 +102,7 @@ static unsigned int ata_dev_set_xfermode(struct ata_device *dev);
static void ata_dev_xfermask(struct ata_device *dev);
static unsigned long ata_dev_blacklisted(const struct ata_device *dev);
struct ata_force_param {
const char *name;
-@@ -4780,7 +4780,7 @@ void ata_qc_free(struct ata_queued_cmd *qc)
+@@ -4801,7 +4801,7 @@ void ata_qc_free(struct ata_queued_cmd *qc)
struct ata_port *ap;
unsigned int tag;
ap = qc->ap;
qc->flags = 0;
-@@ -4797,7 +4797,7 @@ void __ata_qc_complete(struct ata_queued_cmd *qc)
+@@ -4818,7 +4818,7 @@ void __ata_qc_complete(struct ata_queued_cmd *qc)
struct ata_port *ap;
struct ata_link *link;
WARN_ON_ONCE(!(qc->flags & ATA_QCFLAG_ACTIVE));
ap = qc->ap;
link = qc->dev->link;
-@@ -5901,6 +5901,7 @@ static void ata_finalize_port_ops(struct ata_port_operations *ops)
+@@ -5925,6 +5925,7 @@ static void ata_finalize_port_ops(struct ata_port_operations *ops)
return;
spin_lock(&lock);
for (cur = ops->inherits; cur; cur = cur->inherits) {
void **inherit = (void **)cur;
-@@ -5914,8 +5915,9 @@ static void ata_finalize_port_ops(struct ata_port_operations *ops)
+@@ -5938,8 +5939,9 @@ static void ata_finalize_port_ops(struct ata_port_operations *ops)
if (IS_ERR(*pp))
*pp = NULL;
spin_unlock(&lock);
}
-@@ -6111,7 +6113,7 @@ int ata_host_register(struct ata_host *host, struct scsi_host_template *sht)
+@@ -6135,7 +6137,7 @@ int ata_host_register(struct ata_host *host, struct scsi_host_template *sht)
/* give ports names and add SCSI hosts */
for (i = 0; i < host->n_ports; i++) {
}
diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c
-index b061ba2..fdcd85f 100644
+index 3131adc..93e7aa0 100644
--- a/drivers/ata/libata-scsi.c
+++ b/drivers/ata/libata-scsi.c
-@@ -4172,7 +4172,7 @@ int ata_sas_port_init(struct ata_port *ap)
+@@ -4209,7 +4209,7 @@ int ata_sas_port_init(struct ata_port *ap)
if (rc)
return rc;
}
EXPORT_SYMBOL_GPL(ata_sas_port_init);
diff --git a/drivers/ata/libata.h b/drivers/ata/libata.h
-index f840ca1..edd6ef3 100644
+index a998a17..8de4bf4 100644
--- a/drivers/ata/libata.h
+++ b/drivers/ata/libata.h
@@ -53,7 +53,7 @@ enum {
lvcc->rx.buf.ptr = &lvcc->rx.buf.start[SERVICE_GET_END(s) * 4];
cardvcc_write(lvcc, SERVICE_GET_END(s), vcc_rxreadptr);
diff --git a/drivers/atm/nicstar.c b/drivers/atm/nicstar.c
-index b7e1cc0..eb336bfe 100644
+index ddc4ceb..36e29aa 100644
--- a/drivers/atm/nicstar.c
+++ b/drivers/atm/nicstar.c
-@@ -1640,7 +1640,7 @@ static int ns_send(struct atm_vcc *vcc, struct sk_buff *skb)
+@@ -1632,7 +1632,7 @@ static int ns_send(struct atm_vcc *vcc, struct sk_buff *skb)
if ((vc = (vc_map *) vcc->dev_data) == NULL) {
printk("nicstar%d: vcc->dev_data == NULL on ns_send().\n",
card->index);
dev_kfree_skb_any(skb);
return -EINVAL;
}
-@@ -1648,7 +1648,7 @@ static int ns_send(struct atm_vcc *vcc, struct sk_buff *skb)
+@@ -1640,7 +1640,7 @@ static int ns_send(struct atm_vcc *vcc, struct sk_buff *skb)
if (!vc->tx) {
printk("nicstar%d: Trying to transmit on a non-tx VC.\n",
card->index);
dev_kfree_skb_any(skb);
return -EINVAL;
}
-@@ -1656,14 +1656,14 @@ static int ns_send(struct atm_vcc *vcc, struct sk_buff *skb)
+@@ -1648,14 +1648,14 @@ static int ns_send(struct atm_vcc *vcc, struct sk_buff *skb)
if (vcc->qos.aal != ATM_AAL5 && vcc->qos.aal != ATM_AAL0) {
printk("nicstar%d: Only AAL0 and AAL5 are supported.\n",
card->index);
dev_kfree_skb_any(skb);
return -EINVAL;
}
-@@ -1711,11 +1711,11 @@ static int ns_send(struct atm_vcc *vcc, struct sk_buff *skb)
+@@ -1703,11 +1703,11 @@ static int ns_send(struct atm_vcc *vcc, struct sk_buff *skb)
}
if (push_scqe(card, vc, scq, &scqe, skb) != 0) {
return 0;
}
-@@ -2032,14 +2032,14 @@ static void dequeue_rx(ns_dev * card, ns_rsqe * rsqe)
+@@ -2024,14 +2024,14 @@ static void dequeue_rx(ns_dev * card, ns_rsqe * rsqe)
printk
("nicstar%d: Can't allocate buffers for aal0.\n",
card->index);
dev_kfree_skb_any(sb);
break;
}
-@@ -2054,7 +2054,7 @@ static void dequeue_rx(ns_dev * card, ns_rsqe * rsqe)
+@@ -2046,7 +2046,7 @@ static void dequeue_rx(ns_dev * card, ns_rsqe * rsqe)
ATM_SKB(sb)->vcc = vcc;
__net_timestamp(sb);
vcc->push(vcc, sb);
cell += ATM_CELL_PAYLOAD;
}
-@@ -2071,7 +2071,7 @@ static void dequeue_rx(ns_dev * card, ns_rsqe * rsqe)
+@@ -2063,7 +2063,7 @@ static void dequeue_rx(ns_dev * card, ns_rsqe * rsqe)
if (iovb == NULL) {
printk("nicstar%d: Out of iovec buffers.\n",
card->index);
recycle_rx_buf(card, skb);
return;
}
-@@ -2095,7 +2095,7 @@ static void dequeue_rx(ns_dev * card, ns_rsqe * rsqe)
+@@ -2087,7 +2087,7 @@ static void dequeue_rx(ns_dev * card, ns_rsqe * rsqe)
small or large buffer itself. */
} else if (NS_PRV_IOVCNT(iovb) >= NS_MAX_IOVECS) {
printk("nicstar%d: received too big AAL5 SDU.\n", card->index);
recycle_iovec_rx_bufs(card, (struct iovec *)iovb->data,
NS_MAX_IOVECS);
NS_PRV_IOVCNT(iovb) = 0;
-@@ -2115,7 +2115,7 @@ static void dequeue_rx(ns_dev * card, ns_rsqe * rsqe)
+@@ -2107,7 +2107,7 @@ static void dequeue_rx(ns_dev * card, ns_rsqe * rsqe)
("nicstar%d: Expected a small buffer, and this is not one.\n",
card->index);
which_list(card, skb);
recycle_rx_buf(card, skb);
vc->rx_iov = NULL;
recycle_iov_buf(card, iovb);
-@@ -2128,7 +2128,7 @@ static void dequeue_rx(ns_dev * card, ns_rsqe * rsqe)
+@@ -2120,7 +2120,7 @@ static void dequeue_rx(ns_dev * card, ns_rsqe * rsqe)
("nicstar%d: Expected a large buffer, and this is not one.\n",
card->index);
which_list(card, skb);
recycle_iovec_rx_bufs(card, (struct iovec *)iovb->data,
NS_PRV_IOVCNT(iovb));
vc->rx_iov = NULL;
-@@ -2151,7 +2151,7 @@ static void dequeue_rx(ns_dev * card, ns_rsqe * rsqe)
+@@ -2143,7 +2143,7 @@ static void dequeue_rx(ns_dev * card, ns_rsqe * rsqe)
printk(" - PDU size mismatch.\n");
else
printk(".\n");
recycle_iovec_rx_bufs(card, (struct iovec *)iovb->data,
NS_PRV_IOVCNT(iovb));
vc->rx_iov = NULL;
-@@ -2165,7 +2165,7 @@ static void dequeue_rx(ns_dev * card, ns_rsqe * rsqe)
+@@ -2157,14 +2157,14 @@ static void dequeue_rx(ns_dev * card, ns_rsqe * rsqe)
/* skb points to a small buffer */
if (!atm_charge(vcc, skb->truesize)) {
push_rxbufs(card, skb);
} else {
skb_put(skb, len);
dequeue_sm_buf(card, skb);
-@@ -2175,7 +2175,7 @@ static void dequeue_rx(ns_dev * card, ns_rsqe * rsqe)
ATM_SKB(skb)->vcc = vcc;
__net_timestamp(skb);
vcc->push(vcc, skb);
}
} else if (NS_PRV_IOVCNT(iovb) == 2) { /* One small plus one large buffer */
struct sk_buff *sb;
-@@ -2186,7 +2186,7 @@ static void dequeue_rx(ns_dev * card, ns_rsqe * rsqe)
+@@ -2175,14 +2175,14 @@ static void dequeue_rx(ns_dev * card, ns_rsqe * rsqe)
if (len <= NS_SMBUFSIZE) {
if (!atm_charge(vcc, sb->truesize)) {
push_rxbufs(card, sb);
} else {
skb_put(sb, len);
dequeue_sm_buf(card, sb);
-@@ -2196,7 +2196,7 @@ static void dequeue_rx(ns_dev * card, ns_rsqe * rsqe)
ATM_SKB(sb)->vcc = vcc;
__net_timestamp(sb);
vcc->push(vcc, sb);
}
push_rxbufs(card, skb);
-@@ -2205,7 +2205,7 @@ static void dequeue_rx(ns_dev * card, ns_rsqe * rsqe)
+@@ -2191,7 +2191,7 @@ static void dequeue_rx(ns_dev * card, ns_rsqe * rsqe)
if (!atm_charge(vcc, skb->truesize)) {
push_rxbufs(card, skb);
+ atomic_inc_unchecked(&vcc->stats->rx_drop);
} else {
dequeue_lg_buf(card, skb);
- #ifdef NS_USE_DESTRUCTORS
-@@ -2218,7 +2218,7 @@ static void dequeue_rx(ns_dev * card, ns_rsqe * rsqe)
+ skb_push(skb, NS_SMBUFSIZE);
+@@ -2201,7 +2201,7 @@ static void dequeue_rx(ns_dev * card, ns_rsqe * rsqe)
ATM_SKB(skb)->vcc = vcc;
__net_timestamp(skb);
vcc->push(vcc, skb);
}
push_rxbufs(card, sb);
-@@ -2239,7 +2239,7 @@ static void dequeue_rx(ns_dev * card, ns_rsqe * rsqe)
+@@ -2222,7 +2222,7 @@ static void dequeue_rx(ns_dev * card, ns_rsqe * rsqe)
printk
("nicstar%d: Out of huge buffers.\n",
card->index);
recycle_iovec_rx_bufs(card,
(struct iovec *)
iovb->data,
-@@ -2290,7 +2290,7 @@ static void dequeue_rx(ns_dev * card, ns_rsqe * rsqe)
+@@ -2273,7 +2273,7 @@ static void dequeue_rx(ns_dev * card, ns_rsqe * rsqe)
card->hbpool.count++;
} else
dev_kfree_skb_any(hb);
} else {
/* Copy the small buffer to the huge buffer */
sb = (struct sk_buff *)iov->iov_base;
-@@ -2327,7 +2327,7 @@ static void dequeue_rx(ns_dev * card, ns_rsqe * rsqe)
- #endif /* NS_USE_DESTRUCTORS */
+@@ -2307,7 +2307,7 @@ static void dequeue_rx(ns_dev * card, ns_rsqe * rsqe)
+ ATM_SKB(hb)->vcc = vcc;
__net_timestamp(hb);
vcc->push(vcc, hb);
- atomic_inc(&vcc->stats->rx);
subsys_dev_iter_init(&iter, subsys, NULL, NULL);
while ((dev = subsys_dev_iter_next(&iter)))
diff --git a/drivers/base/devtmpfs.c b/drivers/base/devtmpfs.c
-index 25798db..15f130e 100644
+index 68f0314..ca2a609 100644
--- a/drivers/base/devtmpfs.c
+++ b/drivers/base/devtmpfs.c
@@ -354,7 +354,7 @@ int devtmpfs_mount(const char *mntdir)
while (1) {
spin_lock(&req_lock);
diff --git a/drivers/base/node.c b/drivers/base/node.c
-index 36fabe43..8cfc112 100644
+index a2aa65b..8831326 100644
--- a/drivers/base/node.c
+++ b/drivers/base/node.c
-@@ -615,7 +615,7 @@ static ssize_t print_nodes_state(enum node_states state, char *buf)
+@@ -613,7 +613,7 @@ static ssize_t print_nodes_state(enum node_states state, char *buf)
struct node_attr {
struct device_attribute attr;
enum node_states state;
static ssize_t show_node_state(struct device *dev,
struct device_attribute *attr, char *buf)
diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c
-index 45937f8..b9a342e 100644
+index 2327613..211d7f5 100644
--- a/drivers/base/power/domain.c
+++ b/drivers/base/power/domain.c
-@@ -1698,7 +1698,7 @@ int pm_genpd_attach_cpuidle(struct generic_pm_domain *genpd, int state)
+@@ -1725,7 +1725,7 @@ int pm_genpd_attach_cpuidle(struct generic_pm_domain *genpd, int state)
{
struct cpuidle_driver *cpuidle_drv;
struct gpd_cpuidle_data *cpuidle_data;
int ret = 0;
if (IS_ERR_OR_NULL(genpd) || state < 0)
-@@ -1766,7 +1766,7 @@ int pm_genpd_name_attach_cpuidle(const char *name, int state)
+@@ -1793,7 +1793,7 @@ int pm_genpd_name_attach_cpuidle(const char *name, int state)
int pm_genpd_detach_cpuidle(struct generic_pm_domain *genpd)
{
struct gpd_cpuidle_data *cpuidle_data;
int ret = 0;
if (IS_ERR_OR_NULL(genpd))
-@@ -2195,7 +2195,10 @@ int genpd_dev_pm_attach(struct device *dev)
+@@ -2222,8 +2222,11 @@ int genpd_dev_pm_attach(struct device *dev)
return ret;
}
- dev->pm_domain->detach = genpd_dev_pm_detach;
+- dev->pm_domain->sync = genpd_dev_pm_sync;
+ pax_open_kernel();
+ *(void **)&dev->pm_domain->detach = genpd_dev_pm_detach;
++ *(void **)&dev->pm_domain->sync = genpd_dev_pm_sync;
+ pax_close_kernel();
+
pm_genpd_poweron(pd);
static DEVICE_ATTR(runtime_status, 0444, rtpm_status_show, NULL);
diff --git a/drivers/base/power/wakeup.c b/drivers/base/power/wakeup.c
-index aab7158..b172db2 100644
+index 7726200..a417da7 100644
--- a/drivers/base/power/wakeup.c
+++ b/drivers/base/power/wakeup.c
@@ -32,14 +32,14 @@ static bool pm_abort_suspend __read_mostly;
struct board_type {
diff --git a/drivers/block/cpqarray.c b/drivers/block/cpqarray.c
-index 2b94403..fd6ad1f 100644
+index f749df9..5f8b9c4 100644
--- a/drivers/block/cpqarray.c
+++ b/drivers/block/cpqarray.c
@@ -404,7 +404,7 @@ static int cpqarray_register_ctlr(int i, struct pci_dev *pdev)
}
- hba[i]->access.set_intr_mask(hba[i], 0);
+ hba[i]->access->set_intr_mask(hba[i], 0);
- if (request_irq(hba[i]->intr, do_ida_intr,
- IRQF_DISABLED|IRQF_SHARED, hba[i]->devname, hba[i]))
+ if (request_irq(hba[i]->intr, do_ida_intr, IRQF_SHARED,
+ hba[i]->devname, hba[i]))
{
@@ -459,7 +459,7 @@ static int cpqarray_register_ctlr(int i, struct pci_dev *pdev)
add_timer(&hba[i]->timer);
int rs_last_events; /* counter of read or write "events" (unit sectors)
* on the lower level device when we last looked. */
diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c
-index 1fc8342..7e7742b 100644
+index 81fde9e..9948c05 100644
--- a/drivers/block/drbd/drbd_main.c
+++ b/drivers/block/drbd/drbd_main.c
@@ -1328,7 +1328,7 @@ static int _drbd_send_ack(struct drbd_peer_device *peer_device, enum drbd_packet
atomic_set(&device->ap_in_flight, 0);
atomic_set(&device->md_io.in_use, 0);
-@@ -2684,8 +2684,8 @@ void drbd_destroy_connection(struct kref *kref)
+@@ -2683,8 +2683,8 @@ void drbd_destroy_connection(struct kref *kref)
struct drbd_connection *connection = container_of(kref, struct drbd_connection, kref);
struct drbd_resource *resource = connection->resource;
device->rs_in_flight = 0;
device->rs_last_events =
(int)part_stat_read(&disk->part0, sectors[0]) +
-diff --git a/drivers/block/loop.c b/drivers/block/loop.c
-index 773e964..e85af00 100644
---- a/drivers/block/loop.c
-+++ b/drivers/block/loop.c
-@@ -234,7 +234,7 @@ static int __do_lo_send_write(struct file *file,
-
- file_start_write(file);
- set_fs(get_ds());
-- bw = file->f_op->write(file, buf, len, &pos);
-+ bw = file->f_op->write(file, (const char __force_user *)buf, len, &pos);
- set_fs(old_fs);
- file_end_write(file);
- if (likely(bw == len))
diff --git a/drivers/block/pktcdvd.c b/drivers/block/pktcdvd.c
index 09e628da..7607aaa 100644
--- a/drivers/block/pktcdvd.c
if (ti.nwa_v) {
pd->nwa = be32_to_cpu(ti.next_writable);
diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
-index b67066d..515b7f4 100644
+index ec6c5c6..820ee2abc 100644
--- a/drivers/block/rbd.c
+++ b/drivers/block/rbd.c
@@ -64,7 +64,7 @@
{
struct hpet_timer __iomem *timer;
diff --git a/drivers/char/i8k.c b/drivers/char/i8k.c
-index 24cc4ed..f9807cf 100644
+index a43048b..14724d5 100644
--- a/drivers/char/i8k.c
+++ b/drivers/char/i8k.c
-@@ -788,7 +788,7 @@ static const struct i8k_config_data i8k_config_data[] = {
+@@ -790,7 +790,7 @@ static const struct i8k_config_data i8k_config_data[] = {
},
};
.ident = "Dell Inspiron",
.matches = {
diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_msghandler.c
-index 9bb5928..57a7801 100644
+index bf75f63..359fa10 100644
--- a/drivers/char/ipmi/ipmi_msghandler.c
+++ b/drivers/char/ipmi/ipmi_msghandler.c
@@ -436,7 +436,7 @@ struct ipmi_smi {
intf->proc_dir = NULL;
diff --git a/drivers/char/ipmi/ipmi_si_intf.c b/drivers/char/ipmi/ipmi_si_intf.c
-index 518585c..6c985cef 100644
+index 8a45e92..e41b1c7 100644
--- a/drivers/char/ipmi/ipmi_si_intf.c
+++ b/drivers/char/ipmi/ipmi_si_intf.c
@@ -289,7 +289,7 @@ struct smi_info {
#define SI_MAX_PARMS 4
-@@ -3498,7 +3498,7 @@ static int try_smi_init(struct smi_info *new_smi)
+@@ -3500,7 +3500,7 @@ static int try_smi_init(struct smi_info *new_smi)
atomic_set(&new_smi->req_events, 0);
new_smi->run_to_completion = false;
for (i = 0; i < SI_NUM_STATS; i++)
new_smi->interrupt_disabled = true;
atomic_set(&new_smi->need_watch, 0);
diff --git a/drivers/char/mem.c b/drivers/char/mem.c
-index 297110c..3f69b43 100644
+index 6b1721f..fda9398 100644
--- a/drivers/char/mem.c
+++ b/drivers/char/mem.c
@@ -18,6 +18,7 @@
return -EFAULT;
buf += sz;
p += sz;
-@@ -804,6 +853,9 @@ static const struct memdev {
+@@ -802,6 +851,9 @@ static const struct memdev {
#ifdef CONFIG_PRINTK
[11] = { "kmsg", 0644, &kmsg_fops, 0 },
#endif
};
static int memory_open(struct inode *inode, struct file *filp)
-@@ -865,7 +917,7 @@ static int __init chr_dev_init(void)
+@@ -863,7 +915,7 @@ static int __init chr_dev_init(void)
continue;
device_create(mem_class, NULL, MKDEV(MEM_MAJOR, minor),
return 0;
}
diff --git a/drivers/char/virtio_console.c b/drivers/char/virtio_console.c
-index 72d7028..1586601 100644
+index 50754d20..9561cdc 100644
--- a/drivers/char/virtio_console.c
+++ b/drivers/char/virtio_console.c
@@ -685,7 +685,7 @@ static ssize_t fill_readbuf(struct port *port, char __user *out_buf,
composite = kzalloc(sizeof(*composite), GFP_KERNEL);
if (!composite) {
-diff --git a/drivers/clk/hisilicon/clk-hi3620.c b/drivers/clk/hisilicon/clk-hi3620.c
-index 2e4f6d4..b4cf487 100644
---- a/drivers/clk/hisilicon/clk-hi3620.c
-+++ b/drivers/clk/hisilicon/clk-hi3620.c
-@@ -38,44 +38,44 @@
- #include "clk.h"
-
- /* clock parent list */
--static const char *timer0_mux_p[] __initconst = { "osc32k", "timerclk01", };
--static const char *timer1_mux_p[] __initconst = { "osc32k", "timerclk01", };
--static const char *timer2_mux_p[] __initconst = { "osc32k", "timerclk23", };
--static const char *timer3_mux_p[] __initconst = { "osc32k", "timerclk23", };
--static const char *timer4_mux_p[] __initconst = { "osc32k", "timerclk45", };
--static const char *timer5_mux_p[] __initconst = { "osc32k", "timerclk45", };
--static const char *timer6_mux_p[] __initconst = { "osc32k", "timerclk67", };
--static const char *timer7_mux_p[] __initconst = { "osc32k", "timerclk67", };
--static const char *timer8_mux_p[] __initconst = { "osc32k", "timerclk89", };
--static const char *timer9_mux_p[] __initconst = { "osc32k", "timerclk89", };
--static const char *uart0_mux_p[] __initconst = { "osc26m", "pclk", };
--static const char *uart1_mux_p[] __initconst = { "osc26m", "pclk", };
--static const char *uart2_mux_p[] __initconst = { "osc26m", "pclk", };
--static const char *uart3_mux_p[] __initconst = { "osc26m", "pclk", };
--static const char *uart4_mux_p[] __initconst = { "osc26m", "pclk", };
--static const char *spi0_mux_p[] __initconst = { "osc26m", "rclk_cfgaxi", };
--static const char *spi1_mux_p[] __initconst = { "osc26m", "rclk_cfgaxi", };
--static const char *spi2_mux_p[] __initconst = { "osc26m", "rclk_cfgaxi", };
-+static const char * const timer0_mux_p[] __initconst = { "osc32k", "timerclk01", };
-+static const char * const timer1_mux_p[] __initconst = { "osc32k", "timerclk01", };
-+static const char * const timer2_mux_p[] __initconst = { "osc32k", "timerclk23", };
-+static const char * const timer3_mux_p[] __initconst = { "osc32k", "timerclk23", };
-+static const char * const timer4_mux_p[] __initconst = { "osc32k", "timerclk45", };
-+static const char * const timer5_mux_p[] __initconst = { "osc32k", "timerclk45", };
-+static const char * const timer6_mux_p[] __initconst = { "osc32k", "timerclk67", };
-+static const char * const timer7_mux_p[] __initconst = { "osc32k", "timerclk67", };
-+static const char * const timer8_mux_p[] __initconst = { "osc32k", "timerclk89", };
-+static const char * const timer9_mux_p[] __initconst = { "osc32k", "timerclk89", };
-+static const char * const uart0_mux_p[] __initconst = { "osc26m", "pclk", };
-+static const char * const uart1_mux_p[] __initconst = { "osc26m", "pclk", };
-+static const char * const uart2_mux_p[] __initconst = { "osc26m", "pclk", };
-+static const char * const uart3_mux_p[] __initconst = { "osc26m", "pclk", };
-+static const char * const uart4_mux_p[] __initconst = { "osc26m", "pclk", };
-+static const char * const spi0_mux_p[] __initconst = { "osc26m", "rclk_cfgaxi", };
-+static const char * const spi1_mux_p[] __initconst = { "osc26m", "rclk_cfgaxi", };
-+static const char * const spi2_mux_p[] __initconst = { "osc26m", "rclk_cfgaxi", };
- /* share axi parent */
--static const char *saxi_mux_p[] __initconst = { "armpll3", "armpll2", };
--static const char *pwm0_mux_p[] __initconst = { "osc32k", "osc26m", };
--static const char *pwm1_mux_p[] __initconst = { "osc32k", "osc26m", };
--static const char *sd_mux_p[] __initconst = { "armpll2", "armpll3", };
--static const char *mmc1_mux_p[] __initconst = { "armpll2", "armpll3", };
--static const char *mmc1_mux2_p[] __initconst = { "osc26m", "mmc1_div", };
--static const char *g2d_mux_p[] __initconst = { "armpll2", "armpll3", };
--static const char *venc_mux_p[] __initconst = { "armpll2", "armpll3", };
--static const char *vdec_mux_p[] __initconst = { "armpll2", "armpll3", };
--static const char *vpp_mux_p[] __initconst = { "armpll2", "armpll3", };
--static const char *edc0_mux_p[] __initconst = { "armpll2", "armpll3", };
--static const char *ldi0_mux_p[] __initconst = { "armpll2", "armpll4",
-+static const char * const saxi_mux_p[] __initconst = { "armpll3", "armpll2", };
-+static const char * const pwm0_mux_p[] __initconst = { "osc32k", "osc26m", };
-+static const char * const pwm1_mux_p[] __initconst = { "osc32k", "osc26m", };
-+static const char * const sd_mux_p[] __initconst = { "armpll2", "armpll3", };
-+static const char * const mmc1_mux_p[] __initconst = { "armpll2", "armpll3", };
-+static const char * const mmc1_mux2_p[] __initconst = { "osc26m", "mmc1_div", };
-+static const char * const g2d_mux_p[] __initconst = { "armpll2", "armpll3", };
-+static const char * const venc_mux_p[] __initconst = { "armpll2", "armpll3", };
-+static const char * const vdec_mux_p[] __initconst = { "armpll2", "armpll3", };
-+static const char * const vpp_mux_p[] __initconst = { "armpll2", "armpll3", };
-+static const char * const edc0_mux_p[] __initconst = { "armpll2", "armpll3", };
-+static const char * const ldi0_mux_p[] __initconst = { "armpll2", "armpll4",
- "armpll3", "armpll5", };
--static const char *edc1_mux_p[] __initconst = { "armpll2", "armpll3", };
--static const char *ldi1_mux_p[] __initconst = { "armpll2", "armpll4",
-+static const char * const edc1_mux_p[] __initconst = { "armpll2", "armpll3", };
-+static const char * const ldi1_mux_p[] __initconst = { "armpll2", "armpll4",
- "armpll3", "armpll5", };
--static const char *rclk_hsic_p[] __initconst = { "armpll3", "armpll2", };
--static const char *mmc2_mux_p[] __initconst = { "armpll2", "armpll3", };
--static const char *mmc3_mux_p[] __initconst = { "armpll2", "armpll3", };
-+static const char * const rclk_hsic_p[] __initconst = { "armpll3", "armpll2", };
-+static const char * const mmc2_mux_p[] __initconst = { "armpll2", "armpll3", };
-+static const char * const mmc3_mux_p[] __initconst = { "armpll2", "armpll3", };
-
-
- /* fixed rate clocks */
-diff --git a/drivers/clk/hisilicon/clk-hix5hd2.c b/drivers/clk/hisilicon/clk-hix5hd2.c
-index 3f369c6..05f9ffd 100644
---- a/drivers/clk/hisilicon/clk-hix5hd2.c
-+++ b/drivers/clk/hisilicon/clk-hix5hd2.c
-@@ -46,15 +46,15 @@ static struct hisi_fixed_rate_clock hix5hd2_fixed_rate_clks[] __initdata = {
- { HIX5HD2_FIXED_83M, "83m", NULL, CLK_IS_ROOT, 83333333, },
- };
-
--static const char *sfc_mux_p[] __initconst = {
-+static const char * const sfc_mux_p[] __initconst = {
- "24m", "150m", "200m", "100m", "75m", };
- static u32 sfc_mux_table[] = {0, 4, 5, 6, 7};
-
--static const char *sdio_mux_p[] __initconst = {
-+static const char * const sdio_mux_p[] __initconst = {
- "75m", "100m", "50m", "15m", };
- static u32 sdio_mux_table[] = {0, 1, 2, 3};
-
--static const char *fephy_mux_p[] __initconst = { "25m", "125m"};
-+static const char * const fephy_mux_p[] __initconst = { "25m", "125m"};
- static u32 fephy_mux_table[] = {0, 1};
-
-
-diff --git a/drivers/clk/rockchip/clk-rk3188.c b/drivers/clk/rockchip/clk-rk3188.c
-index 7eb684c..147c6fc 100644
---- a/drivers/clk/rockchip/clk-rk3188.c
-+++ b/drivers/clk/rockchip/clk-rk3188.c
-@@ -704,7 +704,7 @@ static struct rockchip_clk_branch rk3188_clk_branches[] __initdata = {
- GATE(ACLK_GPS, "aclk_gps", "aclk_peri", 0, RK2928_CLKGATE_CON(8), 13, GFLAGS),
- };
-
--static const char *rk3188_critical_clocks[] __initconst = {
-+static const char * const rk3188_critical_clocks[] __initconst = {
- "aclk_cpu",
- "aclk_peri",
- "hclk_peri",
-diff --git a/drivers/clk/rockchip/clk-rk3288.c b/drivers/clk/rockchip/clk-rk3288.c
-index 05d7a0b..4fc131c 100644
---- a/drivers/clk/rockchip/clk-rk3288.c
-+++ b/drivers/clk/rockchip/clk-rk3288.c
-@@ -771,7 +771,7 @@ static struct rockchip_clk_branch rk3288_clk_branches[] __initdata = {
- GATE(0, "pclk_isp_in", "ext_isp", 0, RK3288_CLKGATE_CON(16), 3, GFLAGS),
- };
-
--static const char *rk3288_critical_clocks[] __initconst = {
-+static const char * const rk3288_critical_clocks[] __initconst = {
- "aclk_cpu",
- "aclk_peri",
- "hclk_peri",
-diff --git a/drivers/clk/rockchip/clk.h b/drivers/clk/rockchip/clk.h
-index 58d2e3b..0c21b0d 100644
---- a/drivers/clk/rockchip/clk.h
-+++ b/drivers/clk/rockchip/clk.h
-@@ -182,7 +182,7 @@ struct clk *rockchip_clk_register_mmc(const char *name,
- const char **parent_names, u8 num_parents,
- void __iomem *reg, int shift);
-
--#define PNAME(x) static const char *x[] __initconst
-+#define PNAME(x) static const char * const x[] __initconst
-
- enum rockchip_clk_branch_type {
- branch_composite,
+diff --git a/drivers/clk/clk-mux.c b/drivers/clk/clk-mux.c
+index 69a094c..1fa2a8d 100644
+--- a/drivers/clk/clk-mux.c
++++ b/drivers/clk/clk-mux.c
+@@ -114,7 +114,7 @@ const struct clk_ops clk_mux_ro_ops = {
+ EXPORT_SYMBOL_GPL(clk_mux_ro_ops);
+
+ struct clk *clk_register_mux_table(struct device *dev, const char *name,
+- const char **parent_names, u8 num_parents, unsigned long flags,
++ const char * const *parent_names, u8 num_parents, unsigned long flags,
+ void __iomem *reg, u8 shift, u32 mask,
+ u8 clk_mux_flags, u32 *table, spinlock_t *lock)
+ {
+@@ -166,7 +166,7 @@ struct clk *clk_register_mux_table(struct device *dev, const char *name,
+ EXPORT_SYMBOL_GPL(clk_register_mux_table);
+
+ struct clk *clk_register_mux(struct device *dev, const char *name,
+- const char **parent_names, u8 num_parents, unsigned long flags,
++ const char * const *parent_names, u8 num_parents, unsigned long flags,
+ void __iomem *reg, u8 shift, u8 width,
+ u8 clk_mux_flags, spinlock_t *lock)
+ {
diff --git a/drivers/clk/samsung/clk.h b/drivers/clk/samsung/clk.h
-index e4c7538..99c50cd 100644
+index e4c7538..9d5c18a 100644
--- a/drivers/clk/samsung/clk.h
+++ b/drivers/clk/samsung/clk.h
+@@ -121,7 +121,7 @@ struct samsung_mux_clock {
+ unsigned int id;
+ const char *dev_name;
+ const char *name;
+- const char **parent_names;
++ const char * const *parent_names;
+ u8 num_parents;
+ unsigned long flags;
+ unsigned long offset;
@@ -260,7 +260,7 @@ struct samsung_gate_clock {
#define GATE_DA(_id, dname, cname, pname, o, b, f, gf, a) \
__GATE(_id, dname, cname, pname, o, b, f, gf, a)
clk = clk_register(NULL, &pll_clk->hw.hw);
if (WARN_ON(IS_ERR(clk))) {
-diff --git a/drivers/clk/ti/composite.c b/drivers/clk/ti/composite.c
-index 3654f61..81abe81 100644
---- a/drivers/clk/ti/composite.c
-+++ b/drivers/clk/ti/composite.c
-@@ -69,7 +69,7 @@ struct component_clk {
- struct list_head link;
- };
-
--static const char * __initconst component_clk_types[] = {
-+static const char * const __initconst component_clk_types[] = {
- "gate", "divider", "mux"
- };
-
-diff --git a/drivers/clk/zynq/clkc.c b/drivers/clk/zynq/clkc.c
-index f870aad..04ba1e4 100644
---- a/drivers/clk/zynq/clkc.c
-+++ b/drivers/clk/zynq/clkc.c
-@@ -85,22 +85,22 @@ static DEFINE_SPINLOCK(canmioclk_lock);
- static DEFINE_SPINLOCK(dbgclk_lock);
- static DEFINE_SPINLOCK(aperclk_lock);
-
--static const char *armpll_parents[] __initconst = {"armpll_int", "ps_clk"};
--static const char *ddrpll_parents[] __initconst = {"ddrpll_int", "ps_clk"};
--static const char *iopll_parents[] __initconst = {"iopll_int", "ps_clk"};
--static const char *gem0_mux_parents[] __initconst = {"gem0_div1", "dummy_name"};
--static const char *gem1_mux_parents[] __initconst = {"gem1_div1", "dummy_name"};
--static const char *can0_mio_mux2_parents[] __initconst = {"can0_gate",
-+static const char * const armpll_parents[] __initconst = {"armpll_int", "ps_clk"};
-+static const char * const ddrpll_parents[] __initconst = {"ddrpll_int", "ps_clk"};
-+static const char * const iopll_parents[] __initconst = {"iopll_int", "ps_clk"};
-+static const char * gem0_mux_parents[] __initdata = {"gem0_div1", "dummy_name"};
-+static const char * gem1_mux_parents[] __initdata = {"gem1_div1", "dummy_name"};
-+static const char * const can0_mio_mux2_parents[] __initconst = {"can0_gate",
- "can0_mio_mux"};
--static const char *can1_mio_mux2_parents[] __initconst = {"can1_gate",
-+static const char * const can1_mio_mux2_parents[] __initconst = {"can1_gate",
- "can1_mio_mux"};
--static const char *dbg_emio_mux_parents[] __initconst = {"dbg_div",
-+static const char * dbg_emio_mux_parents[] __initdata = {"dbg_div",
- "dummy_name"};
-
--static const char *dbgtrc_emio_input_names[] __initconst = {"trace_emio_clk"};
--static const char *gem0_emio_input_names[] __initconst = {"gem0_emio_clk"};
--static const char *gem1_emio_input_names[] __initconst = {"gem1_emio_clk"};
--static const char *swdt_ext_clk_input_names[] __initconst = {"swdt_ext_clk"};
-+static const char * const dbgtrc_emio_input_names[] __initconst = {"trace_emio_clk"};
-+static const char * const gem0_emio_input_names[] __initconst = {"gem0_emio_clk"};
-+static const char * const gem1_emio_input_names[] __initconst = {"gem1_emio_clk"};
-+static const char * const swdt_ext_clk_input_names[] __initconst = {"swdt_ext_clk"};
-
- static void __init zynq_clk_register_fclk(enum zynq_clk fclk,
- const char *clk_name, void __iomem *fclk_ctrl_reg,
diff --git a/drivers/cpufreq/acpi-cpufreq.c b/drivers/cpufreq/acpi-cpufreq.c
index b0c18ed..1713a80 100644
--- a/drivers/cpufreq/acpi-cpufreq.c
}
EXPORT_SYMBOL_GPL(od_unregister_powersave_bias_handler);
diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c
-index 872c577..5fb3c20 100644
+index c45d274..0f469f7 100644
--- a/drivers/cpufreq/intel_pstate.c
+++ b/drivers/cpufreq/intel_pstate.c
-@@ -133,10 +133,10 @@ struct pstate_funcs {
+@@ -134,10 +134,10 @@ struct pstate_funcs {
struct cpu_defaults {
struct pstate_adjust_policy pid_policy;
struct pstate_funcs funcs;
static int hwp_active;
struct perf_limits {
-@@ -690,18 +690,18 @@ static void intel_pstate_set_pstate(struct cpudata *cpu, int pstate)
+@@ -721,18 +721,18 @@ static void intel_pstate_set_pstate(struct cpudata *cpu, int pstate)
cpu->pstate.current_pstate = pstate;
intel_pstate_set_pstate(cpu, cpu->pstate.min_pstate);
}
-@@ -1030,9 +1030,9 @@ static int intel_pstate_msrs_not_valid(void)
- rdmsrl(MSR_IA32_APERF, aperf);
- rdmsrl(MSR_IA32_MPERF, mperf);
+@@ -1056,15 +1056,15 @@ static unsigned int force_load;
+ static int intel_pstate_msrs_not_valid(void)
+ {
- if (!pstate_funcs.get_max() ||
- !pstate_funcs.get_min() ||
- !pstate_funcs.get_turbo())
+ !pstate_funcs->get_turbo())
return -ENODEV;
- rdmsrl(MSR_IA32_APERF, tmp);
-@@ -1046,7 +1046,7 @@ static int intel_pstate_msrs_not_valid(void)
return 0;
}
{
pid_params.sample_rate_ms = policy->sample_rate_ms;
pid_params.p_gain_pct = policy->p_gain_pct;
-@@ -1058,12 +1058,7 @@ static void copy_pid_params(struct pstate_adjust_policy *policy)
+@@ -1076,12 +1076,7 @@ static void copy_pid_params(struct pstate_adjust_policy *policy)
static void copy_cpu_funcs(struct pstate_funcs *funcs)
{
if (policy->cpu != 0)
return -ENODEV;
diff --git a/drivers/cpuidle/driver.c b/drivers/cpuidle/driver.c
-index 2697e87..c32476c 100644
+index 5db1478..e90e25e 100644
--- a/drivers/cpuidle/driver.c
+++ b/drivers/cpuidle/driver.c
-@@ -194,7 +194,7 @@ static int poll_idle(struct cpuidle_device *dev,
+@@ -193,7 +193,7 @@ static int poll_idle(struct cpuidle_device *dev,
static void poll_idle_init(struct cpuidle_driver *drv)
{
err = pci_request_regions(pdev, name);
if (err)
+diff --git a/drivers/crypto/omap-des.c b/drivers/crypto/omap-des.c
+index 4630709..0a70e46 100644
+--- a/drivers/crypto/omap-des.c
++++ b/drivers/crypto/omap-des.c
+@@ -536,9 +536,6 @@ static int omap_des_crypt_dma_stop(struct omap_des_dev *dd)
+ dmaengine_terminate_all(dd->dma_lch_in);
+ dmaengine_terminate_all(dd->dma_lch_out);
+
+- dma_unmap_sg(dd->dev, dd->in_sg, dd->in_sg_len, DMA_TO_DEVICE);
+- dma_unmap_sg(dd->dev, dd->out_sg, dd->out_sg_len, DMA_FROM_DEVICE);
+-
+ return err;
+ }
+
diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c
-index 30b538d8..1610d75 100644
+index ca1b362..01cae6a 100644
--- a/drivers/devfreq/devfreq.c
+++ b/drivers/devfreq/devfreq.c
-@@ -673,7 +673,7 @@ int devfreq_add_governor(struct devfreq_governor *governor)
+@@ -672,7 +672,7 @@ int devfreq_add_governor(struct devfreq_governor *governor)
goto err_out;
}
list_for_each_entry(devfreq, &devfreq_list, node) {
int ret = 0;
-@@ -761,7 +761,7 @@ int devfreq_remove_governor(struct devfreq_governor *governor)
+@@ -760,7 +760,7 @@ int devfreq_remove_governor(struct devfreq_governor *governor)
}
}
mutex_unlock(&devfreq_list_lock);
diff --git a/drivers/dma/sh/shdma-base.c b/drivers/dma/sh/shdma-base.c
-index 8ee383d..736b5de 100644
+index 10fcaba..326f709 100644
--- a/drivers/dma/sh/shdma-base.c
+++ b/drivers/dma/sh/shdma-base.c
-@@ -228,8 +228,8 @@ static int shdma_alloc_chan_resources(struct dma_chan *chan)
+@@ -227,8 +227,8 @@ static int shdma_alloc_chan_resources(struct dma_chan *chan)
schan->slave_id = -EINVAL;
}
ret = -ENOMEM;
goto edescalloc;
diff --git a/drivers/dma/sh/shdmac.c b/drivers/dma/sh/shdmac.c
-index 9f1d4c7..fceff78 100644
+index 11707df..2ea96f7 100644
--- a/drivers/dma/sh/shdmac.c
+++ b/drivers/dma/sh/shdmac.c
@@ -513,7 +513,7 @@ static int sh_dmae_nmi_handler(struct notifier_block *self,
EXPORT_SYMBOL_GPL(edac_device_alloc_index);
diff --git a/drivers/edac/edac_mc_sysfs.c b/drivers/edac/edac_mc_sysfs.c
-index c84eecb..4d7381d 100644
+index 112d63a..5443a61 100644
--- a/drivers/edac/edac_mc_sysfs.c
+++ b/drivers/edac/edac_mc_sysfs.c
@@ -154,7 +154,7 @@ static const char * const edac_caps[] = {
#define DEVICE_CHANNEL(_name, _mode, _show, _store, _var) \
static struct dev_ch_attribute dev_attr_legacy_##_name = \
-@@ -1009,15 +1009,17 @@ int edac_create_sysfs_mci_device(struct mem_ctl_info *mci)
- }
-
- if (mci->set_sdram_scrub_rate || mci->get_sdram_scrub_rate) {
-+ pax_open_kernel();
- if (mci->get_sdram_scrub_rate) {
-- dev_attr_sdram_scrub_rate.attr.mode |= S_IRUGO;
-- dev_attr_sdram_scrub_rate.show = &mci_sdram_scrub_rate_show;
-+ *(umode_t *)&dev_attr_sdram_scrub_rate.attr.mode |= S_IRUGO;
-+ *(void **)&dev_attr_sdram_scrub_rate.show = &mci_sdram_scrub_rate_show;
- }
-
- if (mci->set_sdram_scrub_rate) {
-- dev_attr_sdram_scrub_rate.attr.mode |= S_IWUSR;
-- dev_attr_sdram_scrub_rate.store = &mci_sdram_scrub_rate_store;
-+ *(umode_t *)&dev_attr_sdram_scrub_rate.attr.mode |= S_IWUSR;
-+ *(void **)&dev_attr_sdram_scrub_rate.store = &mci_sdram_scrub_rate_store;
- }
-+ pax_close_kernel();
-
- err = device_create_file(&mci->dev, &dev_attr_sdram_scrub_rate);
- if (err) {
diff --git a/drivers/edac/edac_pci.c b/drivers/edac/edac_pci.c
index 2cf44b4d..6dd2dc7 100644
--- a/drivers/edac/edac_pci.c
#define to_dmi_dev_attr(_dev_attr) \
container_of(_dev_attr, struct dmi_device_attribute, dev_attr)
-diff --git a/drivers/firmware/dmi_scan.c b/drivers/firmware/dmi_scan.c
-index 2eebd28b..4261350 100644
---- a/drivers/firmware/dmi_scan.c
-+++ b/drivers/firmware/dmi_scan.c
-@@ -893,7 +893,7 @@ int dmi_walk(void (*decode)(const struct dmi_header *, void *),
- if (buf == NULL)
- return -1;
-
-- dmi_table(buf, dmi_len, dmi_num, decode, private_data);
-+ dmi_table((char __force_kernel *)buf, dmi_len, dmi_num, decode, private_data);
-
- dmi_unmap(buf);
- return 0;
diff --git a/drivers/firmware/efi/cper.c b/drivers/firmware/efi/cper.c
index 4fd9961..52d60ce 100644
--- a/drivers/firmware/efi/cper.c
EXPORT_SYMBOL_GPL(cper_next_record_id);
diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c
-index 3061bb8..92b5fcc 100644
+index e14363d..c3d5d84 100644
--- a/drivers/firmware/efi/efi.c
+++ b/drivers/firmware/efi/efi.c
-@@ -160,14 +160,16 @@ static struct attribute_group efi_subsys_attr_group = {
+@@ -159,14 +159,16 @@ static struct attribute_group efi_subsys_attr_group = {
};
static struct efivars generic_efivars;
/* new_var */
diff --git a/drivers/firmware/efi/runtime-map.c b/drivers/firmware/efi/runtime-map.c
-index 87b8e3b..c4afb35 100644
+index 5c55227..97f4978 100644
--- a/drivers/firmware/efi/runtime-map.c
+++ b/drivers/firmware/efi/runtime-map.c
@@ -97,7 +97,7 @@ static void map_release(struct kobject *kobj)
int ret;
diff --git a/drivers/gpio/gpio-ich.c b/drivers/gpio/gpio-ich.c
-index 7818cd1..1be40e5 100644
+index 4ba7ed5..1536b5d 100644
--- a/drivers/gpio/gpio-ich.c
+++ b/drivers/gpio/gpio-ich.c
@@ -94,7 +94,7 @@ struct ichx_desc {
static struct {
spinlock_t lock;
diff --git a/drivers/gpio/gpio-omap.c b/drivers/gpio/gpio-omap.c
-index f476ae2..05e1bdd 100644
+index b232397..ce8c4dc 100644
--- a/drivers/gpio/gpio-omap.c
+++ b/drivers/gpio/gpio-omap.c
-@@ -1188,7 +1188,7 @@ static int omap_gpio_probe(struct platform_device *pdev)
+@@ -1054,7 +1054,7 @@ static void omap_gpio_mod_init(struct gpio_bank *bank)
+ dev_err(bank->dev, "Could not get gpio dbck\n");
+ }
+
+-static int omap_gpio_chip_init(struct gpio_bank *bank, struct irq_chip *irqc)
++static int omap_gpio_chip_init(struct gpio_bank *bank, irq_chip_no_const *irqc)
+ {
+ static int gpio;
+ int irq_base = 0;
+@@ -1137,7 +1137,7 @@ static int omap_gpio_probe(struct platform_device *pdev)
const struct omap_gpio_platform_data *pdata;
struct resource *res;
struct gpio_bank *bank;
match = of_match_device(of_match_ptr(omap_gpio_match), dev);
diff --git a/drivers/gpio/gpio-rcar.c b/drivers/gpio/gpio-rcar.c
-index c49522e..9a7ee54 100644
+index 1e14a6c..0442450 100644
--- a/drivers/gpio/gpio-rcar.c
+++ b/drivers/gpio/gpio-rcar.c
-@@ -348,7 +348,7 @@ static int gpio_rcar_probe(struct platform_device *pdev)
+@@ -379,7 +379,7 @@ static int gpio_rcar_probe(struct platform_device *pdev)
struct gpio_rcar_priv *p;
struct resource *io, *irq;
struct gpio_chip *gpio_chip;
return -EINVAL;
}
diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
-index 1ca9295..9f3d481 100644
+index 6bc612b..3932464 100644
--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
-@@ -554,8 +554,10 @@ static void gpiochip_irqchip_remove(struct gpio_chip *gpiochip)
+@@ -558,8 +558,10 @@ static void gpiochip_irqchip_remove(struct gpio_chip *gpiochip)
}
if (gpiochip->irqchip) {
gpiochip->irqchip = NULL;
}
}
-@@ -621,8 +623,11 @@ int gpiochip_irqchip_add(struct gpio_chip *gpiochip,
+@@ -625,8 +627,11 @@ int gpiochip_irqchip_add(struct gpio_chip *gpiochip,
gpiochip->irqchip = NULL;
return -EINVAL;
}
dev->driver->context_dtor(dev, ctx->handle);
drm_legacy_ctxbitmap_free(dev, ctx->handle);
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
-index b6f076b..2918de2 100644
+index 3007b44..420b4a3 100644
--- a/drivers/gpu/drm/drm_crtc.c
+++ b/drivers/gpu/drm/drm_crtc.c
-@@ -4118,7 +4118,7 @@ int drm_mode_getproperty_ioctl(struct drm_device *dev,
+@@ -4176,7 +4176,7 @@ int drm_mode_getproperty_ioctl(struct drm_device *dev,
goto done;
}
ret = -EFAULT;
goto done;
diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c
-index d512134..a80a8e4 100644
+index 48f7359..8c3b594 100644
--- a/drivers/gpu/drm/drm_drv.c
+++ b/drivers/gpu/drm/drm_drv.c
@@ -448,7 +448,7 @@ void drm_unplug_dev(struct drm_device *dev)
item->object = NULL;
}
diff --git a/drivers/gpu/drm/drm_info.c b/drivers/gpu/drm/drm_info.c
-index f1b32f9..394f791 100644
+index cbb4fc0..5c756cb9 100644
--- a/drivers/gpu/drm/drm_info.c
+++ b/drivers/gpu/drm/drm_info.c
-@@ -76,10 +76,13 @@ int drm_vm_info(struct seq_file *m, void *data)
+@@ -77,10 +77,13 @@ int drm_vm_info(struct seq_file *m, void *data)
struct drm_local_map *map;
struct drm_map_list *r_list;
const char *type;
int i;
-@@ -90,7 +93,7 @@ int drm_vm_info(struct seq_file *m, void *data)
+@@ -91,7 +94,7 @@ int drm_vm_info(struct seq_file *m, void *data)
map = r_list->map;
if (!map)
continue;
else
type = types[map->type];
diff --git a/drivers/gpu/drm/drm_ioc32.c b/drivers/gpu/drm/drm_ioc32.c
-index 2f4c4343..dd12cd2 100644
+index aa8bbb4..0f62630 100644
--- a/drivers/gpu/drm/drm_ioc32.c
+++ b/drivers/gpu/drm/drm_ioc32.c
@@ -457,7 +457,7 @@ static int compat_drm_infobufs(struct file *file, unsigned int cmd,
return 0;
}
--drm_ioctl_compat_t *drm_compat_ioctls[] = {
-+drm_ioctl_compat_t drm_compat_ioctls[] = {
+-static drm_ioctl_compat_t *drm_compat_ioctls[] = {
++static drm_ioctl_compat_t drm_compat_ioctls[] = {
[DRM_IOCTL_NR(DRM_IOCTL_VERSION32)] = compat_drm_version,
[DRM_IOCTL_NR(DRM_IOCTL_GET_UNIQUE32)] = compat_drm_getunique,
[DRM_IOCTL_NR(DRM_IOCTL_GET_MAP32)] = compat_drm_getmap,
-@@ -1062,7 +1062,6 @@ drm_ioctl_compat_t *drm_compat_ioctls[] = {
+@@ -1062,7 +1062,6 @@ static drm_ioctl_compat_t *drm_compat_ioctls[] = {
long drm_compat_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
{
unsigned int nr = DRM_IOCTL_NR(cmd);
ret = drm_ioctl(filp, cmd, arg);
diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c
-index 3785d66..1c489ef 100644
+index 266dcd6..d0194d9 100644
--- a/drivers/gpu/drm/drm_ioctl.c
+++ b/drivers/gpu/drm/drm_ioctl.c
-@@ -655,7 +655,7 @@ long drm_ioctl(struct file *filp,
+@@ -663,7 +663,7 @@ long drm_ioctl(struct file *filp,
struct drm_file *file_priv = filp->private_data;
struct drm_device *dev;
const struct drm_ioctl_desc *ioctl = NULL;
int front_offset;
} drm_i810_private_t;
diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
-index 1a46787..7fb387c 100644
+index 68e0c85..3303192 100644
--- a/drivers/gpu/drm/i915/i915_dma.c
+++ b/drivers/gpu/drm/i915/i915_dma.c
-@@ -149,6 +149,9 @@ static int i915_getparam(struct drm_device *dev, void *data,
- case I915_PARAM_MMAP_VERSION:
- value = 1;
- break;
+@@ -162,6 +162,8 @@ static int i915_getparam(struct drm_device *dev, void *data,
+ value = INTEL_INFO(dev)->eu_total;
+ if (!value)
+ return -ENODEV;
+ case I915_PARAM_HAS_LEGACY_CONTEXT:
+ value = drm_core_check_feature(dev, DRIVER_KMS_LEGACY_CONTEXT);
-+ break;
+ break;
default:
DRM_DEBUG("Unknown parameter %d\n", param->param);
- return -EINVAL;
-@@ -362,7 +365,7 @@ static bool i915_switcheroo_can_switch(struct pci_dev *pdev)
+@@ -376,7 +378,7 @@ static bool i915_switcheroo_can_switch(struct pci_dev *pdev)
* locking inversion with the driver load path. And the access here is
* completely racy anyway. So don't bother with locking for now.
*/
static const struct vga_switcheroo_client_ops i915_switcheroo_ops = {
diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
-index 38a7425..5322b16 100644
+index a3190e79..86b06cb 100644
--- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
+++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
-@@ -872,12 +872,12 @@ i915_gem_check_execbuffer(struct drm_i915_gem_execbuffer2 *exec)
+@@ -936,12 +936,12 @@ i915_gem_check_execbuffer(struct drm_i915_gem_execbuffer2 *exec)
static int
validate_exec_list(struct drm_device *dev,
struct drm_i915_gem_exec_object2 *exec,
ret = drm_ioctl(filp, cmd, arg);
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
-index f75173c..f283e45 100644
+index d0f3cbc..f3ab4cc 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
-@@ -13056,13 +13056,13 @@ struct intel_quirk {
+@@ -13604,13 +13604,13 @@ struct intel_quirk {
int subsystem_vendor;
int subsystem_device;
void (*hook)(struct drm_device *dev);
static int intel_dmi_reverse_brightness(const struct dmi_system_id *id)
{
-@@ -13070,18 +13070,20 @@ static int intel_dmi_reverse_brightness(const struct dmi_system_id *id)
+@@ -13618,18 +13618,20 @@ static int intel_dmi_reverse_brightness(const struct dmi_system_id *id)
return 1;
}
},
};
diff --git a/drivers/gpu/drm/imx/imx-drm-core.c b/drivers/gpu/drm/imx/imx-drm-core.c
-index a002f53..0d60514 100644
+index 74f505b..21f6914 100644
--- a/drivers/gpu/drm/imx/imx-drm-core.c
+++ b/drivers/gpu/drm/imx/imx-drm-core.c
@@ -355,7 +355,7 @@ int imx_drm_add_crtc(struct drm_device *drm, struct drm_crtc *crtc,
#define BIT_TABLE(id, funcid) ((struct bit_table){ id, parse_bit_##funcid##_tbl_entry })
diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c
-index 8763deb..936b423 100644
+index 8904933..9624b38 100644
--- a/drivers/gpu/drm/nouveau/nouveau_drm.c
+++ b/drivers/gpu/drm/nouveau/nouveau_drm.c
-@@ -940,7 +940,8 @@ static struct drm_driver
+@@ -941,7 +941,8 @@ static struct drm_driver
driver_stub = {
.driver_features =
DRIVER_USE_AGP |
.load = nouveau_drm_load,
.unload = nouveau_drm_unload,
diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.h b/drivers/gpu/drm/nouveau/nouveau_drm.h
-index fc68f09..0511d71 100644
+index dd72652..1fd2368 100644
--- a/drivers/gpu/drm/nouveau/nouveau_drm.h
+++ b/drivers/gpu/drm/nouveau/nouveau_drm.h
-@@ -121,7 +121,6 @@ struct nouveau_drm {
+@@ -123,7 +123,6 @@ struct nouveau_drm {
struct drm_global_reference mem_global_ref;
struct ttm_bo_global_ref bo_global_ref;
struct ttm_bo_device bdev;
if (nr < DRM_COMMAND_BASE)
diff --git a/drivers/gpu/drm/nouveau/nouveau_ttm.c b/drivers/gpu/drm/nouveau/nouveau_ttm.c
-index 273e501..3b6c0a2 100644
+index 18f4497..10f6025 100644
--- a/drivers/gpu/drm/nouveau/nouveau_ttm.c
+++ b/drivers/gpu/drm/nouveau/nouveau_ttm.c
-@@ -127,11 +127,11 @@ nouveau_vram_manager_debug(struct ttm_mem_type_manager *man, const char *prefix)
+@@ -130,11 +130,11 @@ nouveau_vram_manager_debug(struct ttm_mem_type_manager *man, const char *prefix)
}
const struct ttm_mem_type_manager_func nouveau_vram_manager = {
};
static int
-@@ -195,11 +195,11 @@ nouveau_gart_manager_debug(struct ttm_mem_type_manager *man, const char *prefix)
+@@ -198,11 +198,11 @@ nouveau_gart_manager_debug(struct ttm_mem_type_manager *man, const char *prefix)
}
const struct ttm_mem_type_manager_func nouveau_gart_manager = {
};
/*XXX*/
-@@ -268,11 +268,11 @@ nv04_gart_manager_debug(struct ttm_mem_type_manager *man, const char *prefix)
+@@ -271,11 +271,11 @@ nv04_gart_manager_debug(struct ttm_mem_type_manager *man, const char *prefix)
}
const struct ttm_mem_type_manager_func nv04_gart_manager = {
if (regcomp
(&mask_rex, "(0x[0-9a-fA-F]*) *([_a-zA-Z0-9]*)", REG_EXTENDED)) {
diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
-index bd7519f..e1c2cd95 100644
+index a7fdfa4..04a3964 100644
--- a/drivers/gpu/drm/radeon/radeon_device.c
+++ b/drivers/gpu/drm/radeon/radeon_device.c
@@ -1247,7 +1247,7 @@ static bool radeon_switcheroo_can_switch(struct pci_dev *pdev)
vma->vm_ops = &radeon_ttm_vm_ops;
return 0;
diff --git a/drivers/gpu/drm/tegra/dc.c b/drivers/gpu/drm/tegra/dc.c
-index 1a52522..8e78043 100644
+index a287e4f..df1d5dd 100644
--- a/drivers/gpu/drm/tegra/dc.c
+++ b/drivers/gpu/drm/tegra/dc.c
-@@ -1585,7 +1585,7 @@ static int tegra_dc_debugfs_init(struct tegra_dc *dc, struct drm_minor *minor)
+@@ -1594,7 +1594,7 @@ static int tegra_dc_debugfs_init(struct tegra_dc *dc, struct drm_minor *minor)
}
for (i = 0; i < ARRAY_SIZE(debugfs_files); i++)
struct dentry *debugfs;
diff --git a/drivers/gpu/drm/tegra/hdmi.c b/drivers/gpu/drm/tegra/hdmi.c
-index 7eaaee74..cc2bc04 100644
+index 06ab178..b5324e4 100644
--- a/drivers/gpu/drm/tegra/hdmi.c
+++ b/drivers/gpu/drm/tegra/hdmi.c
@@ -64,7 +64,7 @@ struct tegra_hdmi {
struct drm_minor *minor;
struct dentry *debugfs;
};
+diff --git a/drivers/gpu/drm/tegra/sor.c b/drivers/gpu/drm/tegra/sor.c
+index 7591d89..463e2b6 100644
+--- a/drivers/gpu/drm/tegra/sor.c
++++ b/drivers/gpu/drm/tegra/sor.c
+@@ -826,8 +826,11 @@ static int tegra_sor_debugfs_init(struct tegra_sor *sor,
+ goto remove;
+ }
+
+- for (i = 0; i < ARRAY_SIZE(debugfs_files); i++)
+- sor->debugfs_files[i].data = sor;
++ for (i = 0; i < ARRAY_SIZE(debugfs_files); i++) {
++ pax_open_kernel();
++ *(void **)&sor->debugfs_files[i].data = sor;
++ pax_close_kernel();
++ }
+
+ err = drm_debugfs_create_files(sor->debugfs_files,
+ ARRAY_SIZE(debugfs_files),
diff --git a/drivers/gpu/drm/ttm/ttm_bo_manager.c b/drivers/gpu/drm/ttm/ttm_bo_manager.c
index aa0bd054..aea6a01 100644
--- a/drivers/gpu/drm/ttm/ttm_bo_manager.c
/* copy over all the bus versions */
if (dev->bus && dev->bus->pm) {
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
-index 56ce8c2..32ce524 100644
+index 722a925..594c312 100644
--- a/drivers/hid/hid-core.c
+++ b/drivers/hid/hid-core.c
-@@ -2531,7 +2531,7 @@ EXPORT_SYMBOL_GPL(hid_ignore);
+@@ -2552,7 +2552,7 @@ EXPORT_SYMBOL_GPL(hid_ignore);
int hid_add_device(struct hid_device *hdev)
{
int ret;
if (WARN_ON(hdev->status & HID_STAT_ADDED))
-@@ -2574,7 +2574,7 @@ int hid_add_device(struct hid_device *hdev)
+@@ -2595,7 +2595,7 @@ int hid_add_device(struct hid_device *hdev)
/* XXX hack, any other cleaner solution after the driver core
* is converted to allow more than 20 bytes as the device name? */
dev_set_name(&hdev->dev, "%04X:%04X:%04X.%04X", hdev->bus,
hid_debug_register(hdev, dev_name(&hdev->dev));
ret = device_add(&hdev->dev);
+diff --git a/drivers/hid/hid-sensor-custom.c b/drivers/hid/hid-sensor-custom.c
+index 5614fee..8301fbf 100644
+--- a/drivers/hid/hid-sensor-custom.c
++++ b/drivers/hid/hid-sensor-custom.c
+@@ -34,7 +34,7 @@ struct hid_sensor_custom_field {
+ int report_id;
+ char group_name[HID_CUSTOM_NAME_LENGTH];
+ struct hid_sensor_hub_attribute_info attribute;
+- struct device_attribute sd_attrs[HID_CUSTOM_MAX_CORE_ATTRS];
++ device_attribute_no_const sd_attrs[HID_CUSTOM_MAX_CORE_ATTRS];
+ char attr_name[HID_CUSTOM_TOTAL_ATTRS][HID_CUSTOM_NAME_LENGTH];
+ struct attribute *attrs[HID_CUSTOM_TOTAL_ATTRS];
+ struct attribute_group hid_custom_attribute_group;
+@@ -590,7 +590,7 @@ static int hid_sensor_custom_add_attributes(struct hid_sensor_custom
+ j = 0;
+ while (j < HID_CUSTOM_TOTAL_ATTRS &&
+ hid_custom_attrs[j].name) {
+- struct device_attribute *device_attr;
++ device_attribute_no_const *device_attr;
+
+ device_attr = &sensor_inst->fields[i].sd_attrs[j];
+
diff --git a/drivers/hid/hid-wiimote-debug.c b/drivers/hid/hid-wiimote-debug.c
index c13fb5b..55a3802 100644
--- a/drivers/hid/hid-wiimote-debug.c
*off += size;
diff --git a/drivers/hv/channel.c b/drivers/hv/channel.c
-index 00bc30e..d8e5097 100644
+index 54da66d..aa3a3d7 100644
--- a/drivers/hv/channel.c
+++ b/drivers/hv/channel.c
-@@ -370,7 +370,7 @@ int vmbus_establish_gpadl(struct vmbus_channel *channel, void *kbuffer,
+@@ -373,7 +373,7 @@ int vmbus_establish_gpadl(struct vmbus_channel *channel, void *kbuffer,
int ret = 0;
next_gpadl_handle =
ret = create_gpadl_header(kbuffer, size, &msginfo, &msgcount);
if (ret)
diff --git a/drivers/hv/hv.c b/drivers/hv/hv.c
-index 50e51a5..b0bfd78 100644
+index d3943bc..3de28a9 100644
--- a/drivers/hv/hv.c
+++ b/drivers/hv/hv.c
@@ -118,7 +118,7 @@ static u64 do_hypercall(u64 control, void *input, void *output)
if (!virtaddr)
goto cleanup;
diff --git a/drivers/hv/hv_balloon.c b/drivers/hv/hv_balloon.c
-index ff16938..e60879c 100644
+index cb5b7dc..6052f22 100644
--- a/drivers/hv/hv_balloon.c
+++ b/drivers/hv/hv_balloon.c
-@@ -470,7 +470,7 @@ MODULE_PARM_DESC(hot_add, "If set attempt memory hot_add");
+@@ -469,7 +469,7 @@ MODULE_PARM_DESC(hot_add, "If set attempt memory hot_add");
module_param(pressure_report_delay, uint, (S_IRUGO | S_IWUSR));
MODULE_PARM_DESC(pressure_report_delay, "Delay in secs in reporting pressure");
static int dm_ring_size = (5 * PAGE_SIZE);
-@@ -947,7 +947,7 @@ static void hot_add_req(struct work_struct *dummy)
+@@ -941,7 +941,7 @@ static void hot_add_req(struct work_struct *dummy)
pr_info("Memory hot add failed\n");
dm->state = DM_INITIALIZED;
vmbus_sendpacket(dm->dev->channel, &resp,
sizeof(struct dm_hot_add_response),
(unsigned long)NULL,
-@@ -1028,7 +1028,7 @@ static void post_status(struct hv_dynmem_device *dm)
+@@ -1022,7 +1022,7 @@ static void post_status(struct hv_dynmem_device *dm)
memset(&status, 0, sizeof(struct dm_status));
status.hdr.type = DM_STATUS_REPORT;
status.hdr.size = sizeof(struct dm_status);
+ status.hdr.trans_id = atomic_inc_return_unchecked(&trans_id);
/*
- * The host expects the guest to report free memory.
-@@ -1048,7 +1048,7 @@ static void post_status(struct hv_dynmem_device *dm)
+ * The host expects the guest to report free and committed memory.
+@@ -1046,7 +1046,7 @@ static void post_status(struct hv_dynmem_device *dm)
* send the status. This can happen if we were interrupted
* after we picked our transaction ID.
*/
return;
/*
-@@ -1188,7 +1188,7 @@ static void balloon_up(struct work_struct *dummy)
+@@ -1191,7 +1191,7 @@ static void balloon_up(struct work_struct *dummy)
*/
do {
ret = vmbus_sendpacket(dm_device.dev->channel,
bl_resp,
bl_resp->hdr.size,
-@@ -1234,7 +1234,7 @@ static void balloon_down(struct hv_dynmem_device *dm,
+@@ -1237,7 +1237,7 @@ static void balloon_down(struct hv_dynmem_device *dm,
memset(&resp, 0, sizeof(struct dm_unballoon_response));
resp.hdr.type = DM_UNBALLOON_RESPONSE;
resp.hdr.size = sizeof(struct dm_unballoon_response);
vmbus_sendpacket(dm_device.dev->channel, &resp,
-@@ -1295,7 +1295,7 @@ static void version_resp(struct hv_dynmem_device *dm,
+@@ -1298,7 +1298,7 @@ static void version_resp(struct hv_dynmem_device *dm,
memset(&version_req, 0, sizeof(struct dm_version_request));
version_req.hdr.type = DM_VERSION_REQUEST;
version_req.hdr.size = sizeof(struct dm_version_request);
version_req.version.version = DYNMEM_PROTOCOL_VERSION_WIN7;
version_req.is_last_attempt = 1;
-@@ -1468,7 +1468,7 @@ static int balloon_probe(struct hv_device *dev,
+@@ -1471,7 +1471,7 @@ static int balloon_probe(struct hv_device *dev,
memset(&version_req, 0, sizeof(struct dm_version_request));
version_req.hdr.type = DM_VERSION_REQUEST;
version_req.hdr.size = sizeof(struct dm_version_request);
version_req.version.version = DYNMEM_PROTOCOL_VERSION_WIN8;
version_req.is_last_attempt = 0;
-@@ -1499,7 +1499,7 @@ static int balloon_probe(struct hv_device *dev,
+@@ -1502,7 +1502,7 @@ static int balloon_probe(struct hv_device *dev,
memset(&cap_msg, 0, sizeof(struct dm_capabilities));
cap_msg.hdr.type = DM_CAPABILITIES_REPORT;
cap_msg.hdr.size = sizeof(struct dm_capabilities);
cap_msg.caps.cap_bits.balloon = 1;
cap_msg.caps.cap_bits.hot_add = 1;
diff --git a/drivers/hv/hyperv_vmbus.h b/drivers/hv/hyperv_vmbus.h
-index 44b1c94..6dccc2c 100644
+index 887287a..238a626 100644
--- a/drivers/hv/hyperv_vmbus.h
+++ b/drivers/hv/hyperv_vmbus.h
-@@ -632,7 +632,7 @@ enum vmbus_connect_state {
+@@ -645,7 +645,7 @@ enum vmbus_connect_state {
struct vmbus_connection {
enum vmbus_connect_state conn_state;
/*
* Represents channel interrupts. Each bit position represents a
-diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c
-index f518b8d7..4bc0b64 100644
---- a/drivers/hv/vmbus_drv.c
-+++ b/drivers/hv/vmbus_drv.c
-@@ -840,10 +840,10 @@ int vmbus_device_register(struct hv_device *child_device_obj)
- {
- int ret = 0;
-
-- static atomic_t device_num = ATOMIC_INIT(0);
-+ static atomic_unchecked_t device_num = ATOMIC_INIT(0);
-
- dev_set_name(&child_device_obj->device, "vmbus_0_%d",
-- atomic_inc_return(&device_num));
-+ atomic_inc_return_unchecked(&device_num));
-
- child_device_obj->device.bus = &hv_bus;
- child_device_obj->device.parent = &hv_acpi_dev->dev;
diff --git a/drivers/hwmon/acpi_power_meter.c b/drivers/hwmon/acpi_power_meter.c
index 579bdf9..0dac21d5 100644
--- a/drivers/hwmon/acpi_power_meter.c
{
sysfs_attr_init(&attr->attr);
diff --git a/drivers/hwmon/coretemp.c b/drivers/hwmon/coretemp.c
-index 5b7fec8..05c957a 100644
+index ed303ba..e24bd26f 100644
--- a/drivers/hwmon/coretemp.c
+++ b/drivers/hwmon/coretemp.c
-@@ -783,7 +783,7 @@ static int coretemp_cpu_callback(struct notifier_block *nfb,
+@@ -782,7 +782,7 @@ static int coretemp_cpu_callback(struct notifier_block *nfb,
return NOTIFY_OK;
}
int in_i = 1, temp_i = 1, curr_i = 1, humidity_i = 1;
enum iio_chan_type type;
diff --git a/drivers/hwmon/nct6683.c b/drivers/hwmon/nct6683.c
-index f3830db..9f4d6d5 100644
+index 37f0170..414ec2c 100644
--- a/drivers/hwmon/nct6683.c
+++ b/drivers/hwmon/nct6683.c
@@ -397,11 +397,11 @@ static struct attribute_group *
int i, j, count;
diff --git a/drivers/hwmon/nct6775.c b/drivers/hwmon/nct6775.c
-index 1be4117..88ae1e1 100644
+index bd1c99d..2fa55ad 100644
--- a/drivers/hwmon/nct6775.c
+++ b/drivers/hwmon/nct6775.c
-@@ -952,10 +952,10 @@ static struct attribute_group *
+@@ -953,10 +953,10 @@ static struct attribute_group *
nct6775_create_attr_group(struct device *dev, struct sensor_template_group *tg,
int repeat)
{
struct iio_chan_spec const *chan,
ssize_t (*readfunc)(struct device *dev,
diff --git a/drivers/infiniband/core/cm.c b/drivers/infiniband/core/cm.c
-index e28a494..f7c2671 100644
+index 0271608..81998c5 100644
--- a/drivers/infiniband/core/cm.c
+++ b/drivers/infiniband/core/cm.c
@@ -115,7 +115,7 @@ static char const counter_group_names[CM_COUNTER_GROUPS]
};
struct cm_counter_attribute {
-@@ -1398,7 +1398,7 @@ static void cm_dup_req_handler(struct cm_work *work,
+@@ -1397,7 +1397,7 @@ static void cm_dup_req_handler(struct cm_work *work,
struct ib_mad_send_buf *msg = NULL;
int ret;
counter[CM_REQ_COUNTER]);
/* Quick state check to discard duplicate REQs. */
-@@ -1785,7 +1785,7 @@ static void cm_dup_rep_handler(struct cm_work *work)
+@@ -1784,7 +1784,7 @@ static void cm_dup_rep_handler(struct cm_work *work)
if (!cm_id_priv)
return;
counter[CM_REP_COUNTER]);
ret = cm_alloc_response_msg(work->port, work->mad_recv_wc, &msg);
if (ret)
-@@ -1952,7 +1952,7 @@ static int cm_rtu_handler(struct cm_work *work)
+@@ -1951,7 +1951,7 @@ static int cm_rtu_handler(struct cm_work *work)
if (cm_id_priv->id.state != IB_CM_REP_SENT &&
cm_id_priv->id.state != IB_CM_MRA_REP_RCVD) {
spin_unlock_irq(&cm_id_priv->lock);
counter[CM_RTU_COUNTER]);
goto out;
}
-@@ -2135,7 +2135,7 @@ static int cm_dreq_handler(struct cm_work *work)
+@@ -2134,7 +2134,7 @@ static int cm_dreq_handler(struct cm_work *work)
cm_id_priv = cm_acquire_id(dreq_msg->remote_comm_id,
dreq_msg->local_comm_id);
if (!cm_id_priv) {
counter[CM_DREQ_COUNTER]);
cm_issue_drep(work->port, work->mad_recv_wc);
return -EINVAL;
-@@ -2160,7 +2160,7 @@ static int cm_dreq_handler(struct cm_work *work)
+@@ -2159,7 +2159,7 @@ static int cm_dreq_handler(struct cm_work *work)
case IB_CM_MRA_REP_RCVD:
break;
case IB_CM_TIMEWAIT:
counter[CM_DREQ_COUNTER]);
if (cm_alloc_response_msg(work->port, work->mad_recv_wc, &msg))
goto unlock;
-@@ -2174,7 +2174,7 @@ static int cm_dreq_handler(struct cm_work *work)
+@@ -2173,7 +2173,7 @@ static int cm_dreq_handler(struct cm_work *work)
cm_free_msg(msg);
goto deref;
case IB_CM_DREQ_RCVD:
counter[CM_DREQ_COUNTER]);
goto unlock;
default:
-@@ -2541,7 +2541,7 @@ static int cm_mra_handler(struct cm_work *work)
+@@ -2540,7 +2540,7 @@ static int cm_mra_handler(struct cm_work *work)
ib_modify_mad(cm_id_priv->av.port->mad_agent,
cm_id_priv->msg, timeout)) {
if (cm_id_priv->id.lap_state == IB_CM_MRA_LAP_RCVD)
counter_group[CM_RECV_DUPLICATES].
counter[CM_MRA_COUNTER]);
goto out;
-@@ -2550,7 +2550,7 @@ static int cm_mra_handler(struct cm_work *work)
+@@ -2549,7 +2549,7 @@ static int cm_mra_handler(struct cm_work *work)
break;
case IB_CM_MRA_REQ_RCVD:
case IB_CM_MRA_REP_RCVD:
counter[CM_MRA_COUNTER]);
/* fall through */
default:
-@@ -2712,7 +2712,7 @@ static int cm_lap_handler(struct cm_work *work)
+@@ -2711,7 +2711,7 @@ static int cm_lap_handler(struct cm_work *work)
case IB_CM_LAP_IDLE:
break;
case IB_CM_MRA_LAP_SENT:
counter[CM_LAP_COUNTER]);
if (cm_alloc_response_msg(work->port, work->mad_recv_wc, &msg))
goto unlock;
-@@ -2728,7 +2728,7 @@ static int cm_lap_handler(struct cm_work *work)
+@@ -2727,7 +2727,7 @@ static int cm_lap_handler(struct cm_work *work)
cm_free_msg(msg);
goto deref;
case IB_CM_LAP_RCVD:
counter[CM_LAP_COUNTER]);
goto unlock;
default:
-@@ -3012,7 +3012,7 @@ static int cm_sidr_req_handler(struct cm_work *work)
+@@ -3011,7 +3011,7 @@ static int cm_sidr_req_handler(struct cm_work *work)
cur_cm_id_priv = cm_insert_remote_sidr(cm_id_priv);
if (cur_cm_id_priv) {
spin_unlock_irq(&cm.lock);
counter[CM_SIDR_REQ_COUNTER]);
goto out; /* Duplicate message. */
}
-@@ -3224,10 +3224,10 @@ static void cm_send_handler(struct ib_mad_agent *mad_agent,
+@@ -3223,10 +3223,10 @@ static void cm_send_handler(struct ib_mad_agent *mad_agent,
if (!msg->context[0] && (attr_index != CM_REJ_COUNTER))
msg->retries = 1;
&port->counter_group[CM_XMIT_RETRIES].
counter[attr_index]);
-@@ -3437,7 +3437,7 @@ static void cm_recv_handler(struct ib_mad_agent *mad_agent,
+@@ -3436,7 +3436,7 @@ static void cm_recv_handler(struct ib_mad_agent *mad_agent,
}
attr_id = be16_to_cpu(mad_recv_wc->recv_buf.mad->mad_hdr.attr_id);
counter[attr_id - CM_ATTR_ID_OFFSET]);
work = kmalloc(sizeof *work + sizeof(struct ib_sa_path_rec) * paths,
-@@ -3668,7 +3668,7 @@ static ssize_t cm_show_counter(struct kobject *obj, struct attribute *attr,
+@@ -3667,7 +3667,7 @@ static ssize_t cm_show_counter(struct kobject *obj, struct attribute *attr,
cm_attr = container_of(attr, struct cm_counter_attribute, attr);
return sprintf(buf, "%ld\n",
(unsigned long) cmd.response + sizeof resp,
in_len - sizeof cmd, out_len - sizeof resp);
diff --git a/drivers/infiniband/hw/cxgb4/mem.c b/drivers/infiniband/hw/cxgb4/mem.c
-index 6791fd1..78bdcdf 100644
+index cff815b..75576dd 100644
--- a/drivers/infiniband/hw/cxgb4/mem.c
+++ b/drivers/infiniband/hw/cxgb4/mem.c
@@ -256,7 +256,7 @@ static int write_tpt_entry(struct c4iw_rdev *rdev, u32 reset_tpt_entry,
sdata, wqe->wr.wr.atomic.swap);
goto send_comp;
diff --git a/drivers/infiniband/hw/mlx4/mad.c b/drivers/infiniband/hw/mlx4/mad.c
-index 5904026..f1c30e5 100644
+index 9cd2b00..7486df4 100644
--- a/drivers/infiniband/hw/mlx4/mad.c
+++ b/drivers/infiniband/hw/mlx4/mad.c
@@ -106,7 +106,7 @@ __be64 mlx4_ib_gen_node_guid(void)
ctx->mcg_wq = create_singlethread_workqueue(name);
if (!ctx->mcg_wq)
diff --git a/drivers/infiniband/hw/mlx4/mlx4_ib.h b/drivers/infiniband/hw/mlx4/mlx4_ib.h
-index f829fd9..1a8d436 100644
+index fce39343..9d8fdff 100644
--- a/drivers/infiniband/hw/mlx4/mlx4_ib.h
+++ b/drivers/infiniband/hw/mlx4/mlx4_ib.h
-@@ -439,7 +439,7 @@ struct mlx4_ib_demux_ctx {
+@@ -435,7 +435,7 @@ struct mlx4_ib_demux_ctx {
struct list_head mcg_mgid0_list;
struct workqueue_struct *mcg_wq;
struct mlx4_ib_demux_pv_ctx **tun;
struct mthca_dev *dev = to_mdev(ibcq->device);
struct mthca_cq *cq = to_mcq(ibcq);
diff --git a/drivers/infiniband/hw/nes/nes.c b/drivers/infiniband/hw/nes/nes.c
-index 3b2a6dc..bce26ff 100644
+index 9f9d5c5..3c19aac 100644
--- a/drivers/infiniband/hw/nes/nes.c
+++ b/drivers/infiniband/hw/nes/nes.c
@@ -97,7 +97,7 @@ MODULE_PARM_DESC(limit_maxrdreqsz, "Limit max read request size to 256 Bytes");
static unsigned int ee_flsh_adapter;
static unsigned int sysfs_nonidx_addr;
-@@ -278,7 +278,7 @@ static void nes_cqp_rem_ref_callback(struct nes_device *nesdev, struct nes_cqp_r
+@@ -279,7 +279,7 @@ static void nes_cqp_rem_ref_callback(struct nes_device *nesdev, struct nes_cqp_r
struct nes_qp *nesqp = cqp_request->cqp_callback_pointer;
struct nes_adapter *nesadapter = nesdev->nesadapter;
extern u32 int_mod_timer_init;
extern u32 int_mod_cq_depth_256;
diff --git a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c
-index 6f09a72..cf4399d 100644
+index 72b4341..2600332 100644
--- a/drivers/infiniband/hw/nes/nes_cm.c
+++ b/drivers/infiniband/hw/nes/nes_cm.c
@@ -69,14 +69,14 @@ u32 cm_packets_dropped;
int nes_add_ref_cm_node(struct nes_cm_node *cm_node)
{
-@@ -1436,7 +1436,7 @@ static int mini_cm_dec_refcnt_listen(struct nes_cm_core *cm_core,
+@@ -1461,7 +1461,7 @@ static int mini_cm_dec_refcnt_listen(struct nes_cm_core *cm_core,
kfree(listener);
listener = NULL;
ret = 0;
} else {
spin_unlock_irqrestore(&cm_core->listen_list_lock, flags);
}
-@@ -1637,7 +1637,7 @@ static struct nes_cm_node *make_cm_node(struct nes_cm_core *cm_core,
+@@ -1667,7 +1667,7 @@ static struct nes_cm_node *make_cm_node(struct nes_cm_core *cm_core,
cm_node->rem_mac);
add_hte_node(cm_core, cm_node);
return cm_node;
}
-@@ -1698,7 +1698,7 @@ static int rem_ref_cm_node(struct nes_cm_core *cm_core,
+@@ -1728,7 +1728,7 @@ static int rem_ref_cm_node(struct nes_cm_core *cm_core,
}
atomic_dec(&cm_core->node_cnt);
nesqp = cm_node->nesqp;
if (nesqp) {
nesqp->cm_node = NULL;
-@@ -1762,7 +1762,7 @@ static int process_options(struct nes_cm_node *cm_node, u8 *optionsloc,
+@@ -1792,7 +1792,7 @@ static int process_options(struct nes_cm_node *cm_node, u8 *optionsloc,
static void drop_packet(struct sk_buff *skb)
{
dev_kfree_skb_any(skb);
}
-@@ -1825,7 +1825,7 @@ static void handle_rst_pkt(struct nes_cm_node *cm_node, struct sk_buff *skb,
+@@ -1855,7 +1855,7 @@ static void handle_rst_pkt(struct nes_cm_node *cm_node, struct sk_buff *skb,
{
int reset = 0; /* whether to send reset in case of err.. */
nes_debug(NES_DBG_CM, "Received Reset, cm_node = %p, state = %u."
" refcnt=%d\n", cm_node, cm_node->state,
atomic_read(&cm_node->ref_count));
-@@ -2492,7 +2492,7 @@ static struct nes_cm_node *mini_cm_connect(struct nes_cm_core *cm_core,
+@@ -2523,7 +2523,7 @@ static struct nes_cm_node *mini_cm_connect(struct nes_cm_core *cm_core,
rem_ref_cm_node(cm_node->cm_core, cm_node);
return NULL;
}
loopbackremotenode->loopbackpartner = cm_node;
loopbackremotenode->tcp_cntxt.rcv_wscale =
NES_CM_DEFAULT_RCV_WND_SCALE;
-@@ -2773,7 +2773,7 @@ static int mini_cm_recv_pkt(struct nes_cm_core *cm_core,
+@@ -2804,7 +2804,7 @@ static int mini_cm_recv_pkt(struct nes_cm_core *cm_core,
nes_queue_mgt_skbs(skb, nesvnic, cm_node->nesqp);
else {
rem_ref_cm_node(cm_core, cm_node);
dev_kfree_skb_any(skb);
}
break;
-@@ -3081,7 +3081,7 @@ static int nes_cm_disconn_true(struct nes_qp *nesqp)
+@@ -3112,7 +3112,7 @@ static int nes_cm_disconn_true(struct nes_qp *nesqp)
if ((cm_id) && (cm_id->event_handler)) {
if (issue_disconn) {
cm_event.event = IW_CM_EVENT_DISCONNECT;
cm_event.status = disconn_status;
cm_event.local_addr = cm_id->local_addr;
-@@ -3103,7 +3103,7 @@ static int nes_cm_disconn_true(struct nes_qp *nesqp)
+@@ -3134,7 +3134,7 @@ static int nes_cm_disconn_true(struct nes_qp *nesqp)
}
if (issue_close) {
nes_disconnect(nesqp, 1);
cm_id->provider_data = nesqp;
-@@ -3241,7 +3241,7 @@ int nes_accept(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
+@@ -3272,7 +3272,7 @@ int nes_accept(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
nes_debug(NES_DBG_CM, "QP%u, cm_node=%p, jiffies = %lu listener = %p\n",
nesqp->hwqp.qp_id, cm_node, jiffies, cm_node->listener);
nes_debug(NES_DBG_CM, "netdev refcnt = %u.\n",
netdev_refcnt_read(nesvnic->netdev));
-@@ -3439,7 +3439,7 @@ int nes_reject(struct iw_cm_id *cm_id, const void *pdata, u8 pdata_len)
+@@ -3470,7 +3470,7 @@ int nes_reject(struct iw_cm_id *cm_id, const void *pdata, u8 pdata_len)
struct nes_cm_core *cm_core;
u8 *start_buff;
cm_node = (struct nes_cm_node *)cm_id->provider_data;
loopback = cm_node->loopbackpartner;
cm_core = cm_node->cm_core;
-@@ -3504,7 +3504,7 @@ int nes_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
+@@ -3535,7 +3535,7 @@ int nes_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
ntohs(raddr->sin_port), ntohl(laddr->sin_addr.s_addr),
ntohs(laddr->sin_port));
nesqp->active_conn = 1;
/* cache the cm_id in the qp */
-@@ -3649,7 +3649,7 @@ int nes_create_listen(struct iw_cm_id *cm_id, int backlog)
+@@ -3680,7 +3680,7 @@ int nes_create_listen(struct iw_cm_id *cm_id, int backlog)
g_cm_core->api->stop_listener(g_cm_core, (void *)cm_node);
return err;
}
}
cm_id->add_ref(cm_id);
-@@ -3756,7 +3756,7 @@ static void cm_event_connected(struct nes_cm_event *event)
+@@ -3787,7 +3787,7 @@ static void cm_event_connected(struct nes_cm_event *event)
if (nesqp->destroyed)
return;
nes_debug(NES_DBG_CM, "QP%u attempting to connect to 0x%08X:0x%04X on"
" local port 0x%04X. jiffies = %lu.\n",
nesqp->hwqp.qp_id, ntohl(raddr->sin_addr.s_addr),
-@@ -3941,7 +3941,7 @@ static void cm_event_reset(struct nes_cm_event *event)
+@@ -3972,7 +3972,7 @@ static void cm_event_reset(struct nes_cm_event *event)
cm_id->add_ref(cm_id);
ret = cm_id->event_handler(cm_id, &cm_event);
cm_event.event = IW_CM_EVENT_CLOSE;
cm_event.status = 0;
cm_event.provider_data = cm_id->provider_data;
-@@ -3981,7 +3981,7 @@ static void cm_event_mpa_req(struct nes_cm_event *event)
+@@ -4012,7 +4012,7 @@ static void cm_event_mpa_req(struct nes_cm_event *event)
return;
cm_id = cm_node->cm_id;
nes_debug(NES_DBG_CM, "cm_node = %p - cm_id = %p, jiffies = %lu\n",
cm_node, cm_id, jiffies);
-@@ -4030,7 +4030,7 @@ static void cm_event_mpa_reject(struct nes_cm_event *event)
+@@ -4061,7 +4061,7 @@ static void cm_event_mpa_reject(struct nes_cm_event *event)
return;
cm_id = cm_node->cm_id;
/* Blow away the connection if it exists. */
diff --git a/drivers/infiniband/hw/qib/qib.h b/drivers/infiniband/hw/qib/qib.h
-index ffd48bf..83cdb56 100644
+index 7df16f7..7e1b21e 100644
--- a/drivers/infiniband/hw/qib/qib.h
+++ b/drivers/infiniband/hw/qib/qib.h
@@ -52,6 +52,7 @@
#include <linux/gameport.h>
#include <linux/jiffies.h>
diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c
-index 3aa2f3f..53c00ea 100644
+index 61c7611..e1bfa38 100644
--- a/drivers/input/joystick/xpad.c
+++ b/drivers/input/joystick/xpad.c
-@@ -886,7 +886,7 @@ static void xpad_led_set(struct led_classdev *led_cdev,
+@@ -905,7 +905,7 @@ static void xpad_led_set(struct led_classdev *led_cdev,
static int xpad_led_probe(struct usb_xpad *xpad)
{
unsigned long led_no;
struct xpad_led *led;
struct led_classdev *led_cdev;
-@@ -899,7 +899,7 @@ static int xpad_led_probe(struct usb_xpad *xpad)
+@@ -918,7 +918,7 @@ static int xpad_led_probe(struct usb_xpad *xpad)
if (!led)
return -ENOMEM;
/*
* PCU-B devices, both GEN_1 and GEN_2 do not have OFN sensor
diff --git a/drivers/input/mouse/psmouse.h b/drivers/input/mouse/psmouse.h
-index d02e1bd..d719719 100644
+index ad5a5a1..5eac214 100644
--- a/drivers/input/mouse/psmouse.h
+++ b/drivers/input/mouse/psmouse.h
-@@ -124,7 +124,7 @@ struct psmouse_attribute {
+@@ -125,7 +125,7 @@ struct psmouse_attribute {
ssize_t (*set)(struct psmouse *psmouse, void *data,
const char *buf, size_t count);
bool protect;
.ident = "Shift",
.matches = {
diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c
-index 48882c1..93e0987 100644
+index ca9f4ed..b860ff1 100644
--- a/drivers/iommu/amd_iommu.c
+++ b/drivers/iommu/amd_iommu.c
-@@ -823,11 +823,21 @@ static void copy_cmd_to_buffer(struct amd_iommu *iommu,
+@@ -829,11 +829,21 @@ static void copy_cmd_to_buffer(struct amd_iommu *iommu,
static void build_completion_wait(struct iommu_cmd *cmd, u64 address)
{
CMD_SET_TYPE(cmd, CMD_COMPL_WAIT);
}
diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c
-index a3adde6..988ee96 100644
+index 65075ef..53823f9 100644
--- a/drivers/iommu/arm-smmu.c
+++ b/drivers/iommu/arm-smmu.c
-@@ -338,7 +338,7 @@ enum arm_smmu_domain_stage {
+@@ -331,7 +331,7 @@ enum arm_smmu_domain_stage {
struct arm_smmu_domain {
struct arm_smmu_device *smmu;
spinlock_t pgtbl_lock;
struct arm_smmu_cfg cfg;
enum arm_smmu_domain_stage stage;
-@@ -833,7 +833,7 @@ static int arm_smmu_init_domain_context(struct iommu_domain *domain,
+@@ -817,7 +817,7 @@ static int arm_smmu_init_domain_context(struct iommu_domain *domain,
{
int irq, start, ret = 0;
unsigned long ias, oas;
+ struct io_pgtable *pgtbl;
struct io_pgtable_cfg pgtbl_cfg;
enum io_pgtable_fmt fmt;
- struct arm_smmu_domain *smmu_domain = domain->priv;
-@@ -918,14 +918,16 @@ static int arm_smmu_init_domain_context(struct iommu_domain *domain,
+ struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
+@@ -902,14 +902,16 @@ static int arm_smmu_init_domain_context(struct iommu_domain *domain,
};
smmu_domain->smmu = smmu;
/* Initialise the context bank with our page table cfg */
arm_smmu_init_context_bank(smmu_domain, &pgtbl_cfg);
-@@ -946,7 +948,7 @@ static int arm_smmu_init_domain_context(struct iommu_domain *domain,
+@@ -930,7 +932,7 @@ static int arm_smmu_init_domain_context(struct iommu_domain *domain,
mutex_unlock(&smmu_domain->init_mutex);
/* Publish page table ops for map/unmap */
return 0;
out_clear_smmu:
-@@ -979,8 +981,7 @@ static void arm_smmu_destroy_domain_context(struct iommu_domain *domain)
+@@ -963,8 +965,7 @@ static void arm_smmu_destroy_domain_context(struct iommu_domain *domain)
free_irq(irq, domain);
}
__arm_smmu_free_bitmap(smmu->context_map, cfg->cbndx);
}
-@@ -1204,13 +1205,13 @@ static int arm_smmu_map(struct iommu_domain *domain, unsigned long iova,
+@@ -1190,13 +1191,13 @@ static int arm_smmu_map(struct iommu_domain *domain, unsigned long iova,
int ret;
unsigned long flags;
- struct arm_smmu_domain *smmu_domain = domain->priv;
+ struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
- struct io_pgtable_ops *ops= smmu_domain->pgtbl_ops;
+ struct io_pgtable *iop = smmu_domain->pgtbl;
spin_unlock_irqrestore(&smmu_domain->pgtbl_lock, flags);
return ret;
}
-@@ -1221,13 +1222,13 @@ static size_t arm_smmu_unmap(struct iommu_domain *domain, unsigned long iova,
+@@ -1207,13 +1208,13 @@ static size_t arm_smmu_unmap(struct iommu_domain *domain, unsigned long iova,
size_t ret;
unsigned long flags;
- struct arm_smmu_domain *smmu_domain = domain->priv;
+ struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
- struct io_pgtable_ops *ops= smmu_domain->pgtbl_ops;
+ struct io_pgtable *iop = smmu_domain->pgtbl;
spin_unlock_irqrestore(&smmu_domain->pgtbl_lock, flags);
return ret;
}
-@@ -1238,7 +1239,7 @@ static phys_addr_t arm_smmu_iova_to_phys_hard(struct iommu_domain *domain,
- struct arm_smmu_domain *smmu_domain = domain->priv;
+@@ -1224,7 +1225,7 @@ static phys_addr_t arm_smmu_iova_to_phys_hard(struct iommu_domain *domain,
+ struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
struct arm_smmu_device *smmu = smmu_domain->smmu;
struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
- struct io_pgtable_ops *ops= smmu_domain->pgtbl_ops;
struct device *dev = smmu->dev;
void __iomem *cb_base;
u32 tmp;
-@@ -1261,7 +1262,7 @@ static phys_addr_t arm_smmu_iova_to_phys_hard(struct iommu_domain *domain,
+@@ -1247,7 +1248,7 @@ static phys_addr_t arm_smmu_iova_to_phys_hard(struct iommu_domain *domain,
dev_err(dev,
"iova to phys timed out on 0x%pad. Falling back to software table walk.\n",
&iova);
}
phys = readl_relaxed(cb_base + ARM_SMMU_CB_PAR_LO);
-@@ -1282,9 +1283,9 @@ static phys_addr_t arm_smmu_iova_to_phys(struct iommu_domain *domain,
+@@ -1268,9 +1269,9 @@ static phys_addr_t arm_smmu_iova_to_phys(struct iommu_domain *domain,
phys_addr_t ret;
unsigned long flags;
- struct arm_smmu_domain *smmu_domain = domain->priv;
+ struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
- struct io_pgtable_ops *ops= smmu_domain->pgtbl_ops;
+ struct io_pgtable *iop = smmu_domain->pgtbl;
return 0;
spin_lock_irqsave(&smmu_domain->pgtbl_lock, flags);
-@@ -1292,7 +1293,7 @@ static phys_addr_t arm_smmu_iova_to_phys(struct iommu_domain *domain,
+@@ -1278,7 +1279,7 @@ static phys_addr_t arm_smmu_iova_to_phys(struct iommu_domain *domain,
smmu_domain->stage == ARM_SMMU_DOMAIN_S1) {
ret = arm_smmu_iova_to_phys_hard(domain, iova);
} else {
}
spin_unlock_irqrestore(&smmu_domain->pgtbl_lock, flags);
-@@ -1651,7 +1652,9 @@ static int arm_smmu_device_cfg_probe(struct arm_smmu_device *smmu)
+@@ -1668,7 +1669,9 @@ static int arm_smmu_device_cfg_probe(struct arm_smmu_device *smmu)
size |= SZ_64K | SZ_512M;
}
dev_notice(smmu->dev, "\tSupported page sizes: 0x%08lx\n", size);
if (smmu->features & ARM_SMMU_FEAT_TRANS_S1)
+diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
+index 5ecfaf2..c87c4b1 100644
+--- a/drivers/iommu/intel-iommu.c
++++ b/drivers/iommu/intel-iommu.c
+@@ -1756,8 +1756,9 @@ static int domain_init(struct dmar_domain *domain, int guest_width)
+
+ static void domain_exit(struct dmar_domain *domain)
+ {
++ struct dmar_drhd_unit *drhd;
++ struct intel_iommu *iommu;
+ struct page *freelist = NULL;
+- int i;
+
+ /* Domain 0 is reserved, so dont process it */
+ if (!domain)
+@@ -1777,8 +1778,10 @@ static void domain_exit(struct dmar_domain *domain)
+
+ /* clear attached or cached domains */
+ rcu_read_lock();
+- for_each_set_bit(i, domain->iommu_bmp, g_num_of_iommus)
+- iommu_detach_domain(domain, g_iommus[i]);
++ for_each_active_iommu(iommu, drhd)
++ if (domain_type_is_vm(domain) ||
++ test_bit(iommu->seq_id, domain->iommu_bmp))
++ iommu_detach_domain(domain, iommu);
+ rcu_read_unlock();
+
+ dma_free_pagelist(freelist);
diff --git a/drivers/iommu/io-pgtable-arm.c b/drivers/iommu/io-pgtable-arm.c
-index b610a8d..08eb879 100644
+index 4e46021..f0a24fef 100644
--- a/drivers/iommu/io-pgtable-arm.c
+++ b/drivers/iommu/io-pgtable-arm.c
@@ -36,12 +36,6 @@
/*
* For consistency with the architecture, we always consider
* ARM_LPAE_MAX_LEVELS levels, with the walk starting at level n >=0
-@@ -302,10 +296,10 @@ static arm_lpae_iopte arm_lpae_prot_to_pte(struct arm_lpae_io_pgtable *data,
+@@ -304,10 +298,10 @@ static arm_lpae_iopte arm_lpae_prot_to_pte(struct arm_lpae_io_pgtable *data,
return pte;
}
arm_lpae_iopte *ptep = data->pgd;
int lvl = ARM_LPAE_START_LVL(data);
arm_lpae_iopte prot;
-@@ -445,12 +439,11 @@ static int __arm_lpae_unmap(struct arm_lpae_io_pgtable *data,
+@@ -447,12 +441,11 @@ static int __arm_lpae_unmap(struct arm_lpae_io_pgtable *data,
return __arm_lpae_unmap(data, iova, size, lvl + 1, ptep);
}
arm_lpae_iopte *ptep = data->pgd;
int lvl = ARM_LPAE_START_LVL(data);
-@@ -461,10 +454,10 @@ static int arm_lpae_unmap(struct io_pgtable_ops *ops, unsigned long iova,
+@@ -463,10 +456,10 @@ static int arm_lpae_unmap(struct io_pgtable_ops *ops, unsigned long iova,
return unmapped;
}
arm_lpae_iopte pte, *ptep = data->pgd;
int lvl = ARM_LPAE_START_LVL(data);
-@@ -531,6 +524,12 @@ static void arm_lpae_restrict_pgsizes(struct io_pgtable_cfg *cfg)
+@@ -533,6 +526,12 @@ static void arm_lpae_restrict_pgsizes(struct io_pgtable_cfg *cfg)
}
}
static struct arm_lpae_io_pgtable *
arm_lpae_alloc_pgtable(struct io_pgtable_cfg *cfg)
{
-@@ -562,11 +561,7 @@ arm_lpae_alloc_pgtable(struct io_pgtable_cfg *cfg)
+@@ -564,11 +563,7 @@ arm_lpae_alloc_pgtable(struct io_pgtable_cfg *cfg)
pgd_bits = va_bits - (data->bits_per_level * (data->levels - 1));
data->pgd_size = 1UL << (pgd_bits + ilog2(sizeof(arm_lpae_iopte)));
return data;
}
-@@ -825,9 +820,9 @@ static struct iommu_gather_ops dummy_tlb_ops __initdata = {
+@@ -830,9 +825,9 @@ static struct iommu_gather_ops dummy_tlb_ops __initdata = {
.flush_pgtable = dummy_flush_pgtable,
};
struct io_pgtable_cfg *cfg = &data->iop.cfg;
pr_err("cfg: pgsize_bitmap 0x%lx, ias %u-bit\n",
-@@ -837,9 +832,9 @@ static void __init arm_lpae_dump_ops(struct io_pgtable_ops *ops)
+@@ -842,9 +837,9 @@ static void __init arm_lpae_dump_ops(struct io_pgtable_ops *ops)
data->bits_per_level, data->pgd);
}
selftest_running = false; \
-EFAULT; \
})
-@@ -854,30 +849,32 @@ static int __init arm_lpae_run_tests(struct io_pgtable_cfg *cfg)
+@@ -859,30 +854,32 @@ static int __init arm_lpae_run_tests(struct io_pgtable_cfg *cfg)
int i, j;
unsigned long iova;
size_t size;
/*
* Distinct mappings of different granule sizes.
-@@ -887,19 +884,19 @@ static int __init arm_lpae_run_tests(struct io_pgtable_cfg *cfg)
+@@ -892,19 +889,19 @@ static int __init arm_lpae_run_tests(struct io_pgtable_cfg *cfg)
while (j != BITS_PER_LONG) {
size = 1UL << j;
iova += SZ_1G;
j++;
-@@ -908,15 +905,15 @@ static int __init arm_lpae_run_tests(struct io_pgtable_cfg *cfg)
+@@ -913,15 +910,15 @@ static int __init arm_lpae_run_tests(struct io_pgtable_cfg *cfg)
/* Partial unmap */
size = 1UL << __ffs(cfg->pgsize_bitmap);
/* Full unmap */
iova = 0;
-@@ -924,25 +921,25 @@ static int __init arm_lpae_run_tests(struct io_pgtable_cfg *cfg)
+@@ -929,25 +926,25 @@ static int __init arm_lpae_run_tests(struct io_pgtable_cfg *cfg)
while (j != BITS_PER_LONG) {
size = 1UL << j;
/**
diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
-index 72e683d..c9db262 100644
+index d4f527e..8e4a4fd 100644
--- a/drivers/iommu/iommu.c
+++ b/drivers/iommu/iommu.c
@@ -802,7 +802,7 @@ static int iommu_bus_notifier(struct notifier_block *nb,
.ops = ops,
};
diff --git a/drivers/iommu/ipmmu-vmsa.c b/drivers/iommu/ipmmu-vmsa.c
-index bc39bdf..e2de272 100644
+index 1a67c53..23181d8 100644
--- a/drivers/iommu/ipmmu-vmsa.c
+++ b/drivers/iommu/ipmmu-vmsa.c
@@ -41,7 +41,7 @@ struct ipmmu_vmsa_domain {
- struct iommu_domain *io_domain;
+ struct iommu_domain io_domain;
struct io_pgtable_cfg cfg;
- struct io_pgtable_ops *iop;
unsigned int context_id;
spinlock_t lock; /* Protects mappings */
-@@ -323,8 +323,7 @@ static int ipmmu_domain_init_context(struct ipmmu_vmsa_domain *domain)
+@@ -328,8 +328,7 @@ static int ipmmu_domain_init_context(struct ipmmu_vmsa_domain *domain)
domain->cfg.oas = 40;
domain->cfg.tlb = &ipmmu_gather_ops;
if (!domain->iop)
return -EINVAL;
-@@ -482,7 +481,7 @@ static void ipmmu_domain_destroy(struct iommu_domain *io_domain)
+@@ -487,7 +486,7 @@ static void ipmmu_domain_free(struct iommu_domain *io_domain)
* been detached.
*/
ipmmu_domain_destroy_context(domain);
kfree(domain);
}
-@@ -551,7 +550,7 @@ static int ipmmu_map(struct iommu_domain *io_domain, unsigned long iova,
+@@ -556,7 +555,7 @@ static int ipmmu_map(struct iommu_domain *io_domain, unsigned long iova,
if (!domain)
return -ENODEV;
}
static size_t ipmmu_unmap(struct iommu_domain *io_domain, unsigned long iova,
-@@ -559,7 +558,7 @@ static size_t ipmmu_unmap(struct iommu_domain *io_domain, unsigned long iova,
+@@ -564,7 +563,7 @@ static size_t ipmmu_unmap(struct iommu_domain *io_domain, unsigned long iova,
{
- struct ipmmu_vmsa_domain *domain = io_domain->priv;
+ struct ipmmu_vmsa_domain *domain = to_vmsa_domain(io_domain);
- return domain->iop->unmap(domain->iop, iova, size);
+ return domain->iop->ops->unmap(domain->iop, iova, size);
}
static phys_addr_t ipmmu_iova_to_phys(struct iommu_domain *io_domain,
-@@ -569,7 +568,7 @@ static phys_addr_t ipmmu_iova_to_phys(struct iommu_domain *io_domain,
+@@ -574,7 +573,7 @@ static phys_addr_t ipmmu_iova_to_phys(struct iommu_domain *io_domain,
/* TODO: Is locking needed ? */
bool setup_remapped_irq(int irq, struct irq_cfg *cfg, struct irq_chip *chip)
diff --git a/drivers/irqchip/irq-gic.c b/drivers/irqchip/irq-gic.c
-index 471e1cd..b53b870 100644
+index 01999d7..4f14bb7 100644
--- a/drivers/irqchip/irq-gic.c
+++ b/drivers/irqchip/irq-gic.c
-@@ -84,7 +84,7 @@ static u8 gic_cpu_map[NR_GIC_CPU_IF] __read_mostly;
- * Supported arch specific GIC irq extension.
- * Default make them NULL.
- */
--struct irq_chip gic_arch_extn = {
-+irq_chip_no_const gic_arch_extn = {
- .irq_eoi = NULL,
- .irq_mask = NULL,
- .irq_unmask = NULL,
-@@ -318,7 +318,7 @@ static void gic_handle_cascade_irq(unsigned int irq, struct irq_desc *desc)
+@@ -313,7 +313,7 @@ static void gic_handle_cascade_irq(unsigned int irq, struct irq_desc *desc)
chained_irq_exit(chip, desc);
}
void (*disable_fn)(struct irq_data *d);
const char *name = dev_name(dev);
diff --git a/drivers/irqchip/irq-renesas-irqc.c b/drivers/irqchip/irq-renesas-irqc.c
-index 384e6ed..7a771b2 100644
+index cdf80b7..e5c3ade 100644
--- a/drivers/irqchip/irq-renesas-irqc.c
+++ b/drivers/irqchip/irq-renesas-irqc.c
-@@ -151,7 +151,7 @@ static int irqc_probe(struct platform_device *pdev)
+@@ -179,7 +179,7 @@ static int irqc_probe(struct platform_device *pdev)
struct irqc_priv *p;
struct resource *io;
struct resource *irq;
} else
memcpy(msg, buf, count);
diff --git a/drivers/isdn/mISDN/dsp_cmx.c b/drivers/isdn/mISDN/dsp_cmx.c
-index 87f7dff..7300125 100644
+index 52c4382..09e0c7c 100644
--- a/drivers/isdn/mISDN/dsp_cmx.c
+++ b/drivers/isdn/mISDN/dsp_cmx.c
@@ -1625,7 +1625,7 @@ unsigned long dsp_spl_jiffies; /* calculate the next time to fire */
{
struct dsp_conf *conf;
diff --git a/drivers/lguest/core.c b/drivers/lguest/core.c
-index 7dc93aa..8272379 100644
+index 312ffd3..9263d05 100644
--- a/drivers/lguest/core.c
+++ b/drivers/lguest/core.c
@@ -96,9 +96,17 @@ static __init int map_switcher(void)
cl->fn = fn;
cl->wq = wq;
diff --git a/drivers/md/bitmap.c b/drivers/md/bitmap.c
-index 3a57679..c58cdaf 100644
+index 135a090..f7872f6 100644
--- a/drivers/md/bitmap.c
+++ b/drivers/md/bitmap.c
-@@ -1786,7 +1786,7 @@ void bitmap_status(struct seq_file *seq, struct bitmap *bitmap)
+@@ -1927,7 +1927,7 @@ void bitmap_status(struct seq_file *seq, struct bitmap *bitmap)
chunk_kb ? "KB" : "B");
if (bitmap->storage.file) {
seq_printf(seq, ", file: ");
seq_printf(seq, "\n");
diff --git a/drivers/md/dm-ioctl.c b/drivers/md/dm-ioctl.c
-index c8a18e4..0ab43e5 100644
+index 720ceeb..030f1d4 100644
--- a/drivers/md/dm-ioctl.c
+++ b/drivers/md/dm-ioctl.c
-@@ -1772,7 +1772,7 @@ static int validate_params(uint cmd, struct dm_ioctl *param)
+@@ -1773,7 +1773,7 @@ static int validate_params(uint cmd, struct dm_ioctl *param)
cmd == DM_LIST_VERSIONS_CMD)
return 0;
schedule_work(&sc->trigger_event);
}
diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c
-index 6554d91..b0221c2 100644
+index 16ba55a..31af906 100644
--- a/drivers/md/dm-table.c
+++ b/drivers/md/dm-table.c
-@@ -303,7 +303,7 @@ static int device_area_is_invalid(struct dm_target *ti, struct dm_dev *dev,
+@@ -305,7 +305,7 @@ static int device_area_is_invalid(struct dm_target *ti, struct dm_dev *dev,
if (!dev_size)
return 0;
pmd->bl_info.value_type.inc = data_block_inc;
pmd->bl_info.value_type.dec = data_block_dec;
diff --git a/drivers/md/dm.c b/drivers/md/dm.c
-index 8001fe9..abdd0d0 100644
+index 2caf492..0c0dcac 100644
--- a/drivers/md/dm.c
+++ b/drivers/md/dm.c
-@@ -188,9 +188,9 @@ struct mapped_device {
+@@ -191,9 +191,9 @@ struct mapped_device {
/*
* Event handling.
*/
struct list_head uevent_list;
spinlock_t uevent_lock; /* Protect access to uevent_list */
-@@ -2163,8 +2163,8 @@ static struct mapped_device *alloc_dev(int minor)
+@@ -2298,8 +2298,8 @@ static struct mapped_device *alloc_dev(int minor)
spin_lock_init(&md->deferred_lock);
atomic_set(&md->holders, 1);
atomic_set(&md->open_count, 0);
INIT_LIST_HEAD(&md->uevent_list);
INIT_LIST_HEAD(&md->table_devices);
spin_lock_init(&md->uevent_lock);
-@@ -2329,7 +2329,7 @@ static void event_callback(void *context)
+@@ -2466,7 +2466,7 @@ static void event_callback(void *context)
dm_send_uevents(&uevents, &disk_to_dev(md->disk)->kobj);
wake_up(&md->eventq);
}
-@@ -3175,18 +3175,18 @@ int dm_kobject_uevent(struct mapped_device *md, enum kobject_action action,
+@@ -3465,18 +3465,18 @@ int dm_kobject_uevent(struct mapped_device *md, enum kobject_action action,
uint32_t dm_next_uevent_seq(struct mapped_device *md)
{
void dm_uevent_add(struct mapped_device *md, struct list_head *elist)
diff --git a/drivers/md/md.c b/drivers/md/md.c
-index e47d1dd..ebc3480 100644
+index 4dbed4a..bed2a6a 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
-@@ -191,10 +191,10 @@ EXPORT_SYMBOL_GPL(bio_clone_mddev);
+@@ -197,10 +197,10 @@ EXPORT_SYMBOL_GPL(bio_clone_mddev);
* start build, activate spare
*/
static DECLARE_WAIT_QUEUE_HEAD(md_event_waiters);
wake_up(&md_event_waiters);
}
EXPORT_SYMBOL_GPL(md_new_event);
-@@ -204,7 +204,7 @@ EXPORT_SYMBOL_GPL(md_new_event);
+@@ -210,7 +210,7 @@ EXPORT_SYMBOL_GPL(md_new_event);
*/
static void md_new_event_inintr(struct mddev *mddev)
{
wake_up(&md_event_waiters);
}
-@@ -1442,7 +1442,7 @@ static int super_1_load(struct md_rdev *rdev, struct md_rdev *refdev, int minor_
+@@ -1449,7 +1449,7 @@ static int super_1_load(struct md_rdev *rdev, struct md_rdev *refdev, int minor_
if ((le32_to_cpu(sb->feature_map) & MD_FEATURE_RESHAPE_ACTIVE) &&
(le32_to_cpu(sb->feature_map) & MD_FEATURE_NEW_OFFSET))
rdev->new_data_offset += (s32)le32_to_cpu(sb->new_offset);
rdev->sb_size = le32_to_cpu(sb->max_dev) * 2 + 256;
bmask = queue_logical_block_size(rdev->bdev->bd_disk->queue)-1;
-@@ -1693,7 +1693,7 @@ static void super_1_sync(struct mddev *mddev, struct md_rdev *rdev)
+@@ -1700,7 +1700,7 @@ static void super_1_sync(struct mddev *mddev, struct md_rdev *rdev)
else
sb->resync_offset = cpu_to_le64(0);
sb->raid_disks = cpu_to_le32(mddev->raid_disks);
sb->size = cpu_to_le64(mddev->dev_sectors);
-@@ -2564,7 +2564,7 @@ __ATTR_PREALLOC(state, S_IRUGO|S_IWUSR, state_show, state_store);
+@@ -2624,7 +2624,7 @@ __ATTR_PREALLOC(state, S_IRUGO|S_IWUSR, state_show, state_store);
static ssize_t
errors_show(struct md_rdev *rdev, char *page)
{
}
static ssize_t
-@@ -2573,7 +2573,7 @@ errors_store(struct md_rdev *rdev, const char *buf, size_t len)
+@@ -2633,7 +2633,7 @@ errors_store(struct md_rdev *rdev, const char *buf, size_t len)
char *e;
unsigned long n = simple_strtoul(buf, &e, 10);
if (*buf && (*e == 0 || *e == '\n')) {
return len;
}
return -EINVAL;
-@@ -3009,8 +3009,8 @@ int md_rdev_init(struct md_rdev *rdev)
+@@ -3069,8 +3069,8 @@ int md_rdev_init(struct md_rdev *rdev)
rdev->sb_loaded = 0;
rdev->bb_page = NULL;
atomic_set(&rdev->nr_pending, 0);
INIT_LIST_HEAD(&rdev->same_set);
init_waitqueue_head(&rdev->blocked_wait);
-@@ -7083,7 +7083,7 @@ static int md_seq_show(struct seq_file *seq, void *v)
+@@ -7232,7 +7232,7 @@ static int md_seq_show(struct seq_file *seq, void *v)
spin_unlock(&pers_lock);
seq_printf(seq, "\n");
return 0;
}
if (v == (void*)2) {
-@@ -7186,7 +7186,7 @@ static int md_seq_open(struct inode *inode, struct file *file)
+@@ -7335,7 +7335,7 @@ static int md_seq_open(struct inode *inode, struct file *file)
return error;
seq = file->private_data;
return error;
}
-@@ -7203,7 +7203,7 @@ static unsigned int mdstat_poll(struct file *filp, poll_table *wait)
+@@ -7352,7 +7352,7 @@ static unsigned int mdstat_poll(struct file *filp, poll_table *wait)
/* always allow read */
mask = POLLIN | POLLRDNORM;
mask |= POLLERR | POLLPRI;
return mask;
}
-@@ -7250,7 +7250,7 @@ static int is_mddev_idle(struct mddev *mddev, int init)
+@@ -7448,7 +7448,7 @@ static int is_mddev_idle(struct mddev *mddev, int init)
struct gendisk *disk = rdev->bdev->bd_contains->bd_disk;
curr_events = (int)part_stat_read(&disk->part0, sectors[0]) +
(int)part_stat_read(&disk->part0, sectors[1]) -
* as sync_io is counted when a request starts, and
* disk_stats is counted when it completes.
diff --git a/drivers/md/md.h b/drivers/md/md.h
-index 318ca8f..31e4478 100644
+index 4046a6c..e2f2997 100644
--- a/drivers/md/md.h
+++ b/drivers/md/md.h
-@@ -94,13 +94,13 @@ struct md_rdev {
+@@ -95,13 +95,13 @@ struct md_rdev {
* only maintained for arrays that
* support hot removal
*/
* for reporting to userspace and storing
* in superblock.
*/
-@@ -476,7 +476,7 @@ extern void mddev_unlock(struct mddev *mddev);
+@@ -486,7 +486,7 @@ extern void mddev_unlock(struct mddev *mddev);
static inline void md_sync_acct(struct block_device *bdev, unsigned long nr_sectors)
{
/*----------------------------------------------------------------*/
-diff --git a/drivers/md/raid0.c b/drivers/md/raid0.c
-index 3b5d7f7..903391c 100644
---- a/drivers/md/raid0.c
-+++ b/drivers/md/raid0.c
-@@ -517,6 +517,9 @@ static void raid0_make_request(struct mddev *mddev, struct bio *bio)
- ? (sector & (chunk_sects-1))
- : sector_div(sector, chunk_sects));
-
-+ /* Restore due to sector_div */
-+ sector = bio->bi_iter.bi_sector;
-+
- if (sectors < bio_sectors(bio)) {
- split = bio_split(bio, sectors, GFP_NOIO, fs_bio_set);
- bio_chain(split, bio);
-@@ -524,7 +527,6 @@ static void raid0_make_request(struct mddev *mddev, struct bio *bio)
- split = bio;
- }
-
-- sector = bio->bi_iter.bi_sector;
- zone = find_zone(mddev->private, §or);
- tmp_dev = map_sector(mddev, zone, sector, §or);
- split->bi_bdev = tmp_dev->bdev;
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
-index d34e238..34f8d98 100644
+index 9157a29..0d462f0 100644
--- a/drivers/md/raid1.c
+++ b/drivers/md/raid1.c
-@@ -1922,7 +1922,7 @@ static int fix_sync_read_error(struct r1bio *r1_bio)
+@@ -1934,7 +1934,7 @@ static int fix_sync_read_error(struct r1bio *r1_bio)
if (r1_sync_page_io(rdev, sect, s,
bio->bi_io_vec[idx].bv_page,
READ) != 0)
}
sectors -= s;
sect += s;
-@@ -2155,7 +2155,7 @@ static void fix_read_error(struct r1conf *conf, int read_disk,
+@@ -2167,7 +2167,7 @@ static void fix_read_error(struct r1conf *conf, int read_disk,
!test_bit(Faulty, &rdev->flags)) {
if (r1_sync_page_io(rdev, sect, s,
conf->tmppage, READ)) {
"md/raid1:%s: read error corrected "
"(%d sectors at %llu on %s)\n",
diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
-index a7196c4..439f012 100644
+index f55c3f3..4cca8c8 100644
--- a/drivers/md/raid10.c
+++ b/drivers/md/raid10.c
@@ -1934,7 +1934,7 @@ static void end_sync_read(struct bio *bio, int error)
rdev_dec_pending(rdev, mddev);
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
-index cd2f96b..3876e63 100644
+index b6793d2..92be2bc 100644
--- a/drivers/md/raid5.c
+++ b/drivers/md/raid5.c
-@@ -947,23 +947,23 @@ async_copy_data(int frombio, struct bio *bio, struct page **page,
+@@ -1108,23 +1108,23 @@ async_copy_data(int frombio, struct bio *bio, struct page **page,
struct bio_vec bvl;
struct bvec_iter iter;
struct page *bio_page;
if (page_offset < 0) {
b_offset = -page_offset;
-@@ -1727,6 +1727,10 @@ static int grow_one_stripe(struct r5conf *conf, int hash)
+@@ -2017,6 +2017,10 @@ static int grow_one_stripe(struct r5conf *conf, gfp_t gfp)
return 1;
}
static int grow_stripes(struct r5conf *conf, int num)
{
struct kmem_cache *sc;
-@@ -1738,7 +1742,11 @@ static int grow_stripes(struct r5conf *conf, int num)
+@@ -2027,7 +2031,11 @@ static int grow_stripes(struct r5conf *conf, int num)
"raid%d-%s", conf->level, mdname(conf->mddev));
else
sprintf(conf->cache_name[0],
sprintf(conf->cache_name[1], "%s-alt", conf->cache_name[0]);
conf->active_name = 0;
-@@ -2014,21 +2022,21 @@ static void raid5_end_read_request(struct bio * bi, int error)
+@@ -2315,21 +2323,21 @@ static void raid5_end_read_request(struct bio * bi, int error)
mdname(conf->mddev), STRIPE_SECTORS,
(unsigned long long)s,
bdevname(rdev->bdev, b));
if (test_bit(R5_ReadRepl, &sh->dev[i].flags))
printk_ratelimited(
KERN_WARNING
-@@ -2056,7 +2064,7 @@ static void raid5_end_read_request(struct bio * bi, int error)
+@@ -2357,7 +2365,7 @@ static void raid5_end_read_request(struct bio * bi, int error)
mdname(conf->mddev),
(unsigned long long)s,
bdn);
printk(KERN_WARNING
"md/raid:%s: Too many read errors, failing device %s.\n",
diff --git a/drivers/media/dvb-core/dvbdev.c b/drivers/media/dvb-core/dvbdev.c
-index 983db75..ef9248c 100644
+index 13bb57f..0ca21b2 100644
--- a/drivers/media/dvb-core/dvbdev.c
+++ b/drivers/media/dvb-core/dvbdev.c
-@@ -185,7 +185,7 @@ int dvb_register_device(struct dvb_adapter *adap, struct dvb_device **pdvbdev,
+@@ -272,7 +272,7 @@ int dvb_register_device(struct dvb_adapter *adap, struct dvb_device **pdvbdev,
const struct dvb_device *template, void *priv, int type)
{
struct dvb_device *dvbdev;
#endif /* AF9033_H */
diff --git a/drivers/media/dvb-frontends/dib3000.h b/drivers/media/dvb-frontends/dib3000.h
-index 9b6c3bb..baeb5c7 100644
+index 6ae9899..07d8543 100644
--- a/drivers/media/dvb-frontends/dib3000.h
+++ b/drivers/media/dvb-frontends/dib3000.h
@@ -39,7 +39,7 @@ struct dib_fe_xfer_ops
-};
+} __no_const;
- #if IS_ENABLED(CONFIG_DVB_DIB3000MB)
+ #if IS_REACHABLE(CONFIG_DVB_DIB3000MB)
extern struct dvb_frontend* dib3000mb_attach(const struct dib3000_config* config,
diff --git a/drivers/media/dvb-frontends/dib7000p.h b/drivers/media/dvb-frontends/dib7000p.h
-index 1fea0e9..321ce8f 100644
+index baa2789..c8de7fe 100644
--- a/drivers/media/dvb-frontends/dib7000p.h
+++ b/drivers/media/dvb-frontends/dib7000p.h
@@ -64,7 +64,7 @@ struct dib7000p_ops {
-};
+} __no_const;
- #if IS_ENABLED(CONFIG_DVB_DIB7000P)
+ #if IS_REACHABLE(CONFIG_DVB_DIB7000P)
void *dib7000p_attach(struct dib7000p_ops *ops);
diff --git a/drivers/media/dvb-frontends/dib8000.h b/drivers/media/dvb-frontends/dib8000.h
-index 84cc103..5780c54 100644
+index 780c37b..50e2620 100644
--- a/drivers/media/dvb-frontends/dib8000.h
+++ b/drivers/media/dvb-frontends/dib8000.h
@@ -61,7 +61,7 @@ struct dib8000_ops {
-};
+} __no_const;
- #if IS_ENABLED(CONFIG_DVB_DIB8000)
+ #if IS_REACHABLE(CONFIG_DVB_DIB8000)
void *dib8000_attach(struct dib8000_ops *ops);
diff --git a/drivers/media/pci/cx88/cx88-video.c b/drivers/media/pci/cx88/cx88-video.c
-index 860c98fc..497fa25 100644
+index c9decd8..7849cec 100644
--- a/drivers/media/pci/cx88/cx88-video.c
+++ b/drivers/media/pci/cx88/cx88-video.c
@@ -50,9 +50,9 @@ MODULE_VERSION(CX88_VERSION);
module_param_array(video_nr, int, NULL, 0444);
module_param_array(vbi_nr, int, NULL, 0444);
diff --git a/drivers/media/pci/ivtv/ivtv-driver.c b/drivers/media/pci/ivtv/ivtv-driver.c
-index 802642d..5534900 100644
+index c2e60b4..5eeccc0 100644
--- a/drivers/media/pci/ivtv/ivtv-driver.c
+++ b/drivers/media/pci/ivtv/ivtv-driver.c
@@ -83,7 +83,7 @@ static struct pci_device_id ivtv_pci_tbl[] = {
/* ------------------------------------------------------------------ */
diff --git a/drivers/media/platform/omap/omap_vout.c b/drivers/media/platform/omap/omap_vout.c
-index ba2d8f9..1566684 100644
+index 17b189a..b78aa6b 100644
--- a/drivers/media/platform/omap/omap_vout.c
+++ b/drivers/media/platform/omap/omap_vout.c
@@ -63,7 +63,6 @@ enum omap_vout_channels {
if (done && done != layer->shadow_buf)
vb2_buffer_done(&done->vb, VB2_BUF_STATE_DONE);
diff --git a/drivers/media/platform/s5p-tv/mixer_video.c b/drivers/media/platform/s5p-tv/mixer_video.c
-index 72d4f2e..4b2ea0d 100644
+index 751f3b6..d829203 100644
--- a/drivers/media/platform/s5p-tv/mixer_video.c
+++ b/drivers/media/platform/s5p-tv/mixer_video.c
@@ -210,7 +210,7 @@ static void mxr_layer_default_geo(struct mxr_layer *layer)
return ret;
}
EXPORT_SYMBOL(usb_cypress_load_firmware);
-diff --git a/drivers/media/usb/dvb-usb/dw2102.c b/drivers/media/usb/dvb-usb/dw2102.c
-index 1a3df10..57997a5 100644
---- a/drivers/media/usb/dvb-usb/dw2102.c
-+++ b/drivers/media/usb/dvb-usb/dw2102.c
-@@ -118,7 +118,7 @@ struct su3000_state {
-
- struct s6x0_state {
- int (*old_set_voltage)(struct dvb_frontend *f, fe_sec_voltage_t v);
--};
-+} __no_const;
-
- /* debug */
- static int dvb_usb_dw2102_debug;
diff --git a/drivers/media/usb/dvb-usb/technisat-usb2.c b/drivers/media/usb/dvb-usb/technisat-usb2.c
index 5801ae7..83f71fa 100644
--- a/drivers/media/usb/dvb-usb/technisat-usb2.c
}
diff --git a/drivers/media/v4l2-core/v4l2-device.c b/drivers/media/v4l2-core/v4l2-device.c
-index 015f92a..59e311e 100644
+index 5b0a30b..1974b38 100644
--- a/drivers/media/v4l2-core/v4l2-device.c
+++ b/drivers/media/v4l2-core/v4l2-device.c
-@@ -75,9 +75,9 @@ int v4l2_device_put(struct v4l2_device *v4l2_dev)
+@@ -74,9 +74,9 @@ int v4l2_device_put(struct v4l2_device *v4l2_dev)
EXPORT_SYMBOL_GPL(v4l2_device_put);
int v4l2_device_set_name(struct v4l2_device *v4l2_dev, const char *basename,
if (basename[len - 1] >= '0' && basename[len - 1] <= '9')
diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
-index b084072..36706d7 100644
+index aa407cb..ee847d4 100644
--- a/drivers/media/v4l2-core/v4l2-ioctl.c
+++ b/drivers/media/v4l2-core/v4l2-ioctl.c
@@ -2151,7 +2151,8 @@ struct v4l2_ioctl_info {
err = -EFAULT;
goto out_array_args;
diff --git a/drivers/memory/omap-gpmc.c b/drivers/memory/omap-gpmc.c
-index 24696f5..3637780 100644
+index c94ea0d..b8a9f88 100644
--- a/drivers/memory/omap-gpmc.c
+++ b/drivers/memory/omap-gpmc.c
-@@ -211,7 +211,6 @@ struct omap3_gpmc_regs {
+@@ -232,7 +232,6 @@ struct omap3_gpmc_regs {
};
static struct gpmc_client_irq gpmc_client_irq[GPMC_NR_IRQ];
static int gpmc_irq_start;
static struct resource gpmc_mem_root;
-@@ -939,6 +938,17 @@ static void gpmc_irq_noop(struct irq_data *data) { }
+@@ -1146,6 +1145,17 @@ static void gpmc_irq_noop(struct irq_data *data) { }
static unsigned int gpmc_irq_noop_ret(struct irq_data *data) { return 0; }
static int gpmc_setup_irq(void)
{
int i;
-@@ -953,15 +963,6 @@ static int gpmc_setup_irq(void)
+@@ -1160,15 +1170,6 @@ static int gpmc_setup_irq(void)
return gpmc_irq_start;
}
mptsas_get_port(struct mptsas_phyinfo *phy_info)
{
diff --git a/drivers/mfd/ab8500-debugfs.c b/drivers/mfd/ab8500-debugfs.c
-index 9a8e185..27ff17d 100644
+index cdd6f3d..1907a98 100644
--- a/drivers/mfd/ab8500-debugfs.c
+++ b/drivers/mfd/ab8500-debugfs.c
@@ -100,7 +100,7 @@ static int irq_last;
static u8 avg_sample = SAMPLE_16;
diff --git a/drivers/mfd/kempld-core.c b/drivers/mfd/kempld-core.c
-index 5615522..1eb6f3dc 100644
+index 8057849..0550fdf 100644
--- a/drivers/mfd/kempld-core.c
+++ b/drivers/mfd/kempld-core.c
@@ -499,7 +499,7 @@ static struct platform_driver kempld_driver = {
if (memcmp(before, after, BREAK_INSTR_SIZE)) {
printk(KERN_CRIT "kgdbts: ERROR kgdb corrupted memory\n");
diff --git a/drivers/misc/lis3lv02d/lis3lv02d.c b/drivers/misc/lis3lv02d/lis3lv02d.c
-index 3ef4627..8d00486 100644
+index 4739689..8a52950 100644
--- a/drivers/misc/lis3lv02d/lis3lv02d.c
+++ b/drivers/misc/lis3lv02d/lis3lv02d.c
@@ -497,7 +497,7 @@ static irqreturn_t lis302dl_interrupt(int irq, void *data)
extern int xpc_disengage_timedout;
extern int xpc_activate_IRQ_rcvd;
diff --git a/drivers/misc/sgi-xp/xpc_main.c b/drivers/misc/sgi-xp/xpc_main.c
-index 82dc574..8539ab2 100644
+index 7f32712..8539ab2 100644
--- a/drivers/misc/sgi-xp/xpc_main.c
+++ b/drivers/misc/sgi-xp/xpc_main.c
@@ -166,7 +166,7 @@ static struct notifier_block xpc_die_notifier = {
/*
* Timer function to enforce the timelimit on the partition disengage.
-@@ -1210,7 +1210,7 @@ xpc_system_die(struct notifier_block *nb, unsigned long event, void *_die_args)
-
- if (((die_args->trapnr == X86_TRAP_MF) ||
- (die_args->trapnr == X86_TRAP_XF)) &&
-- !user_mode_vm(die_args->regs))
-+ !user_mode(die_args->regs))
- xpc_die_deactivate();
-
- break;
diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c
-index ed2e71a..54c498e 100644
+index 60f7141..ba97c1a 100644
--- a/drivers/mmc/card/block.c
+++ b/drivers/mmc/card/block.c
@@ -577,7 +577,7 @@ static int mmc_blk_ioctl_cmd(struct block_device *bdev,
goto cmd_rel_host;
}
diff --git a/drivers/mmc/host/dw_mmc.h b/drivers/mmc/host/dw_mmc.h
-index 18c4afe..43be71e 100644
+index f45ab91..9f50d8f 100644
--- a/drivers/mmc/host/dw_mmc.h
+++ b/drivers/mmc/host/dw_mmc.h
-@@ -271,5 +271,5 @@ struct dw_mci_drv_data {
- void (*set_ios)(struct dw_mci *host, struct mmc_ios *ios);
- int (*parse_dt)(struct dw_mci *host);
+@@ -287,5 +287,5 @@ struct dw_mci_drv_data {
int (*execute_tuning)(struct dw_mci_slot *slot);
+ int (*prepare_hs400_tuning)(struct dw_mci *host,
+ struct mmc_ios *ios);
-};
+} __do_const;
#endif /* _DW_MMC_H_ */
diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c
-index 7fe1619..ae0781b 100644
+index fb26674..3172c2b 100644
--- a/drivers/mmc/host/mmci.c
+++ b/drivers/mmc/host/mmci.c
-@@ -1630,7 +1630,9 @@ static int mmci_probe(struct amba_device *dev,
+@@ -1633,7 +1633,9 @@ static int mmci_probe(struct amba_device *dev,
mmc->caps |= MMC_CAP_CMD23;
if (variant->busy_detect) {
mmc->caps |= MMC_CAP_WAIT_WHILE_BUSY;
mmc->max_busy_timeout = 0;
diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c
-index f84cfb0..aebe5d6 100644
+index 9df2b68..6d5ed1a 100644
--- a/drivers/mmc/host/omap_hsmmc.c
+++ b/drivers/mmc/host/omap_hsmmc.c
-@@ -2054,7 +2054,9 @@ static int omap_hsmmc_probe(struct platform_device *pdev)
+@@ -2004,7 +2004,9 @@ static int omap_hsmmc_probe(struct platform_device *pdev)
if (host->pdata->controller_flags & OMAP_HSMMC_BROKEN_MULTIBLOCK_READ) {
dev_info(&pdev->dev, "multiblock reads disabled due to 35xx erratum 2.1.1.128; MMC read performance may suffer\n");
pm_runtime_enable(host->dev);
diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c b/drivers/mmc/host/sdhci-esdhc-imx.c
-index 10ef824..88461a2 100644
+index 82f512d..5a228bb 100644
--- a/drivers/mmc/host/sdhci-esdhc-imx.c
+++ b/drivers/mmc/host/sdhci-esdhc-imx.c
-@@ -989,9 +989,12 @@ static int sdhci_esdhc_imx_probe(struct platform_device *pdev)
+@@ -993,9 +993,12 @@ static int sdhci_esdhc_imx_probe(struct platform_device *pdev)
host->mmc->caps |= MMC_CAP_1_8V_DDR;
}
/* It supports additional host capabilities if needed */
diff --git a/drivers/mtd/chips/cfi_cmdset_0020.c b/drivers/mtd/chips/cfi_cmdset_0020.c
-index 423666b..81ff5eb 100644
+index 9a1a6ff..b8f1a57 100644
--- a/drivers/mtd/chips/cfi_cmdset_0020.c
+++ b/drivers/mtd/chips/cfi_cmdset_0020.c
@@ -666,7 +666,7 @@ cfi_staa_writev(struct mtd_info *mtd, const struct kvec *vecs,
if (!ECCBUF_SIZE) {
/* We should fall back to a general writev implementation.
diff --git a/drivers/mtd/nand/denali.c b/drivers/mtd/nand/denali.c
-index f44c606..aa4e804 100644
+index 870c7fc..c7d6440 100644
--- a/drivers/mtd/nand/denali.c
+++ b/drivers/mtd/nand/denali.c
@@ -24,6 +24,7 @@
#include "denali.h"
diff --git a/drivers/mtd/nand/gpmi-nand/gpmi-nand.c b/drivers/mtd/nand/gpmi-nand/gpmi-nand.c
-index 33f3c3c..d6bbe6a 100644
+index 1b8f350..990f2e9 100644
--- a/drivers/mtd/nand/gpmi-nand/gpmi-nand.c
+++ b/drivers/mtd/nand/gpmi-nand/gpmi-nand.c
@@ -386,7 +386,7 @@ void prepare_data_dma(struct gpmi_nand_data *this, enum dma_data_direction dr)
.priv_size = sizeof(struct cfhsi),
.setup = cfhsi_setup,
diff --git a/drivers/net/can/Kconfig b/drivers/net/can/Kconfig
-index 58808f65..0bdc7b3 100644
+index e8c96b8..516a96c 100644
--- a/drivers/net/can/Kconfig
+++ b/drivers/net/can/Kconfig
@@ -98,7 +98,7 @@ config CAN_JANZ_ICAN3
Say Y here if you want to support for Freescale FlexCAN.
diff --git a/drivers/net/can/dev.c b/drivers/net/can/dev.c
-index b0f6924..59e9640 100644
+index e9b1810..5c2f3f9 100644
--- a/drivers/net/can/dev.c
+++ b/drivers/net/can/dev.c
-@@ -959,7 +959,7 @@ static int can_newlink(struct net *src_net, struct net_device *dev,
+@@ -964,7 +964,7 @@ static int can_newlink(struct net *src_net, struct net_device *dev,
return -EOPNOTSUPP;
}
.maxtype = IFLA_CAN_MAX,
.policy = can_policy,
diff --git a/drivers/net/can/vcan.c b/drivers/net/can/vcan.c
-index 674f367..ec3a31f 100644
+index 0ce868d..e5dc8bd 100644
--- a/drivers/net/can/vcan.c
+++ b/drivers/net/can/vcan.c
-@@ -163,7 +163,7 @@ static void vcan_setup(struct net_device *dev)
+@@ -166,7 +166,7 @@ static void vcan_setup(struct net_device *dev)
dev->destructor = free_netdev;
}
if (!request_mem_region(mem->start, mem_size, pdev->name)) {
diff --git a/drivers/net/ethernet/altera/altera_tse_main.c b/drivers/net/ethernet/altera/altera_tse_main.c
-index 6725dc0..163549c 100644
+index da48e66..2dbec80 100644
--- a/drivers/net/ethernet/altera/altera_tse_main.c
+++ b/drivers/net/ethernet/altera/altera_tse_main.c
-@@ -1216,7 +1216,7 @@ static int tse_shutdown(struct net_device *dev)
+@@ -1256,7 +1256,7 @@ static int tse_shutdown(struct net_device *dev)
return 0;
}
.ndo_open = tse_open,
.ndo_stop = tse_shutdown,
.ndo_start_xmit = tse_start_xmit,
-@@ -1453,11 +1453,13 @@ static int altera_tse_probe(struct platform_device *pdev)
+@@ -1493,11 +1493,13 @@ static int altera_tse_probe(struct platform_device *pdev)
ndev->netdev_ops = &altera_tse_netdev_ops;
altera_tse_set_ethtool_ops(ndev);
/* Scatter/gather IO is not supported,
* so it is turned off
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-common.h b/drivers/net/ethernet/amd/xgbe/xgbe-common.h
-index 29a0927..5a348e24 100644
+index 34c28aa..5e06567 100644
--- a/drivers/net/ethernet/amd/xgbe/xgbe-common.h
+++ b/drivers/net/ethernet/amd/xgbe/xgbe-common.h
-@@ -1122,14 +1122,14 @@ do { \
+@@ -1124,14 +1124,14 @@ do { \
* operations, everything works on mask values.
*/
#define XMDIO_READ(_pdata, _mmd, _reg) \
return 0;
}
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-desc.c b/drivers/net/ethernet/amd/xgbe/xgbe-desc.c
-index d81fc6b..6f8ab25 100644
+index 5c92fb7..08be735 100644
--- a/drivers/net/ethernet/amd/xgbe/xgbe-desc.c
+++ b/drivers/net/ethernet/amd/xgbe/xgbe-desc.c
@@ -347,7 +347,7 @@ static int xgbe_map_rx_buffer(struct xgbe_prv_data *pdata,
-
- DBGPR("<--xgbe_init_function_ptrs_desc\n");
-}
-+const struct xgbe_desc_if default_xgbe_desc_if = {
++struct xgbe_desc_if default_xgbe_desc_if = {
+ .alloc_ring_resources = xgbe_alloc_ring_resources,
+ .free_ring_resources = xgbe_free_ring_resources,
+ .map_tx_skb = xgbe_map_tx_skb,
+ .wrapper_rx_desc_init = xgbe_wrapper_rx_descriptor_init,
+};
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-dev.c b/drivers/net/ethernet/amd/xgbe/xgbe-dev.c
-index 400757b..d8c53f6 100644
+index 21d9497..c74b40f 100644
--- a/drivers/net/ethernet/amd/xgbe/xgbe-dev.c
+++ b/drivers/net/ethernet/amd/xgbe/xgbe-dev.c
-@@ -2748,7 +2748,7 @@ static void xgbe_powerdown_rx(struct xgbe_prv_data *pdata)
+@@ -2772,7 +2772,7 @@ static void xgbe_powerdown_rx(struct xgbe_prv_data *pdata)
static int xgbe_init(struct xgbe_prv_data *pdata)
{
int ret;
DBGPR("-->xgbe_init\n");
-@@ -2813,108 +2813,103 @@ static int xgbe_init(struct xgbe_prv_data *pdata)
+@@ -2838,106 +2838,101 @@ static int xgbe_init(struct xgbe_prv_data *pdata)
return 0;
}
-
- hw_if->tx_complete = xgbe_tx_complete;
-
-- hw_if->set_promiscuous_mode = xgbe_set_promiscuous_mode;
-- hw_if->set_all_multicast_mode = xgbe_set_all_multicast_mode;
-- hw_if->add_mac_addresses = xgbe_add_mac_addresses;
- hw_if->set_mac_address = xgbe_set_mac_address;
+- hw_if->config_rx_mode = xgbe_config_rx_mode;
-
- hw_if->enable_rx_csum = xgbe_enable_rx_csum;
- hw_if->disable_rx_csum = xgbe_disable_rx_csum;
- hw_if->disable_int = xgbe_disable_int;
- hw_if->init = xgbe_init;
- hw_if->exit = xgbe_exit;
-+const struct xgbe_hw_if default_xgbe_hw_if = {
++struct xgbe_hw_if default_xgbe_hw_if = {
+ .tx_complete = xgbe_tx_complete,
+
-+ .set_promiscuous_mode = xgbe_set_promiscuous_mode,
-+ .set_all_multicast_mode = xgbe_set_all_multicast_mode,
-+ .add_mac_addresses = xgbe_add_mac_addresses,
+ .set_mac_address = xgbe_set_mac_address,
++ .config_rx_mode = xgbe_config_rx_mode,
+
+ .enable_rx_csum = xgbe_enable_rx_csum,
+ .disable_rx_csum = xgbe_disable_rx_csum,
+ .set_rss_lookup_table = xgbe_set_rss_lookup_table,
+};
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c
-index 885b02b..4b31a4c 100644
+index 9fd6c69..588ff02 100644
--- a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c
+++ b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c
-@@ -244,7 +244,7 @@ static int xgbe_maybe_stop_tx_queue(struct xgbe_channel *channel,
+@@ -243,7 +243,7 @@ static int xgbe_maybe_stop_tx_queue(struct xgbe_channel *channel,
* support, tell it now
*/
if (ring->tx.xmit_more)
return NETDEV_TX_BUSY;
}
-@@ -272,7 +272,7 @@ static int xgbe_calc_rx_buf_size(struct net_device *netdev, unsigned int mtu)
+@@ -271,7 +271,7 @@ static int xgbe_calc_rx_buf_size(struct net_device *netdev, unsigned int mtu)
static void xgbe_enable_rx_tx_ints(struct xgbe_prv_data *pdata)
{
struct xgbe_channel *channel;
enum xgbe_int int_id;
unsigned int i;
-@@ -294,7 +294,7 @@ static void xgbe_enable_rx_tx_ints(struct xgbe_prv_data *pdata)
+@@ -293,7 +293,7 @@ static void xgbe_enable_rx_tx_ints(struct xgbe_prv_data *pdata)
static void xgbe_disable_rx_tx_ints(struct xgbe_prv_data *pdata)
{
struct xgbe_channel *channel;
enum xgbe_int int_id;
unsigned int i;
-@@ -317,7 +317,7 @@ static void xgbe_disable_rx_tx_ints(struct xgbe_prv_data *pdata)
+@@ -316,7 +316,7 @@ static void xgbe_disable_rx_tx_ints(struct xgbe_prv_data *pdata)
static irqreturn_t xgbe_isr(int irq, void *data)
{
struct xgbe_prv_data *pdata = data;
struct xgbe_channel *channel;
unsigned int dma_isr, dma_ch_isr;
unsigned int mac_isr, mac_tssr;
-@@ -673,7 +673,7 @@ static void xgbe_free_irqs(struct xgbe_prv_data *pdata)
+@@ -682,7 +682,7 @@ static void xgbe_free_irqs(struct xgbe_prv_data *pdata)
void xgbe_init_tx_coalesce(struct xgbe_prv_data *pdata)
{
DBGPR("-->xgbe_init_tx_coalesce\n");
-@@ -687,7 +687,7 @@ void xgbe_init_tx_coalesce(struct xgbe_prv_data *pdata)
+@@ -696,7 +696,7 @@ void xgbe_init_tx_coalesce(struct xgbe_prv_data *pdata)
void xgbe_init_rx_coalesce(struct xgbe_prv_data *pdata)
{
DBGPR("-->xgbe_init_rx_coalesce\n");
-@@ -701,7 +701,7 @@ void xgbe_init_rx_coalesce(struct xgbe_prv_data *pdata)
+@@ -711,7 +711,7 @@ void xgbe_init_rx_coalesce(struct xgbe_prv_data *pdata)
static void xgbe_free_tx_data(struct xgbe_prv_data *pdata)
{
struct xgbe_channel *channel;
struct xgbe_ring *ring;
struct xgbe_ring_data *rdata;
-@@ -726,7 +726,7 @@ static void xgbe_free_tx_data(struct xgbe_prv_data *pdata)
+@@ -736,7 +736,7 @@ static void xgbe_free_tx_data(struct xgbe_prv_data *pdata)
static void xgbe_free_rx_data(struct xgbe_prv_data *pdata)
{
struct xgbe_channel *channel;
struct xgbe_ring *ring;
struct xgbe_ring_data *rdata;
-@@ -752,7 +752,7 @@ static void xgbe_free_rx_data(struct xgbe_prv_data *pdata)
+@@ -762,7 +762,7 @@ static void xgbe_free_rx_data(struct xgbe_prv_data *pdata)
static void xgbe_adjust_link(struct net_device *netdev)
{
struct xgbe_prv_data *pdata = netdev_priv(netdev);
struct phy_device *phydev = pdata->phydev;
int new_state = 0;
-@@ -860,7 +860,7 @@ static void xgbe_phy_exit(struct xgbe_prv_data *pdata)
+@@ -870,7 +870,7 @@ static void xgbe_phy_exit(struct xgbe_prv_data *pdata)
int xgbe_powerdown(struct net_device *netdev, unsigned int caller)
{
struct xgbe_prv_data *pdata = netdev_priv(netdev);
unsigned long flags;
DBGPR("-->xgbe_powerdown\n");
-@@ -898,7 +898,7 @@ int xgbe_powerdown(struct net_device *netdev, unsigned int caller)
+@@ -908,7 +908,7 @@ int xgbe_powerdown(struct net_device *netdev, unsigned int caller)
int xgbe_powerup(struct net_device *netdev, unsigned int caller)
{
struct xgbe_prv_data *pdata = netdev_priv(netdev);
unsigned long flags;
DBGPR("-->xgbe_powerup\n");
-@@ -935,7 +935,7 @@ int xgbe_powerup(struct net_device *netdev, unsigned int caller)
+@@ -945,7 +945,7 @@ int xgbe_powerup(struct net_device *netdev, unsigned int caller)
static int xgbe_start(struct xgbe_prv_data *pdata)
{
struct net_device *netdev = pdata->netdev;
int ret;
-@@ -976,7 +976,7 @@ err_napi:
+@@ -984,7 +984,7 @@ err_napi:
static void xgbe_stop(struct xgbe_prv_data *pdata)
{
struct xgbe_channel *channel;
struct net_device *netdev = pdata->netdev;
struct netdev_queue *txq;
-@@ -1203,7 +1203,7 @@ static int xgbe_set_hwtstamp_settings(struct xgbe_prv_data *pdata,
+@@ -1211,7 +1211,7 @@ static int xgbe_set_hwtstamp_settings(struct xgbe_prv_data *pdata,
return -ERANGE;
}
memcpy(&pdata->tstamp_config, &config, sizeof(config));
-@@ -1352,7 +1352,7 @@ static void xgbe_packet_info(struct xgbe_prv_data *pdata,
+@@ -1360,7 +1360,7 @@ static void xgbe_packet_info(struct xgbe_prv_data *pdata,
static int xgbe_open(struct net_device *netdev)
{
struct xgbe_prv_data *pdata = netdev_priv(netdev);
int ret;
DBGPR("-->xgbe_open\n");
-@@ -1424,7 +1424,7 @@ err_phy_init:
+@@ -1432,7 +1432,7 @@ err_phy_init:
static int xgbe_close(struct net_device *netdev)
{
struct xgbe_prv_data *pdata = netdev_priv(netdev);
DBGPR("-->xgbe_close\n");
-@@ -1452,8 +1452,8 @@ static int xgbe_close(struct net_device *netdev)
+@@ -1460,8 +1460,8 @@ static int xgbe_close(struct net_device *netdev)
static int xgbe_xmit(struct sk_buff *skb, struct net_device *netdev)
{
struct xgbe_prv_data *pdata = netdev_priv(netdev);
struct xgbe_channel *channel;
struct xgbe_ring *ring;
struct xgbe_packet_data *packet;
-@@ -1521,7 +1521,7 @@ tx_netdev_return:
+@@ -1529,7 +1529,7 @@ tx_netdev_return:
static void xgbe_set_rx_mode(struct net_device *netdev)
{
struct xgbe_prv_data *pdata = netdev_priv(netdev);
- struct xgbe_hw_if *hw_if = &pdata->hw_if;
+ struct xgbe_hw_if *hw_if = pdata->hw_if;
- unsigned int pr_mode, am_mode;
DBGPR("-->xgbe_set_rx_mode\n");
-@@ -1540,7 +1540,7 @@ static void xgbe_set_rx_mode(struct net_device *netdev)
+
+@@ -1541,7 +1541,7 @@ static void xgbe_set_rx_mode(struct net_device *netdev)
static int xgbe_set_mac_address(struct net_device *netdev, void *addr)
{
struct xgbe_prv_data *pdata = netdev_priv(netdev);
struct sockaddr *saddr = addr;
DBGPR("-->xgbe_set_mac_address\n");
-@@ -1607,7 +1607,7 @@ static struct rtnl_link_stats64 *xgbe_get_stats64(struct net_device *netdev,
+@@ -1616,7 +1616,7 @@ static struct rtnl_link_stats64 *xgbe_get_stats64(struct net_device *netdev,
DBGPR("-->%s\n", __func__);
s->rx_packets = pstats->rxframecount_gb;
s->rx_bytes = pstats->rxoctetcount_gb;
-@@ -1634,7 +1634,7 @@ static int xgbe_vlan_rx_add_vid(struct net_device *netdev, __be16 proto,
+@@ -1643,7 +1643,7 @@ static int xgbe_vlan_rx_add_vid(struct net_device *netdev, __be16 proto,
u16 vid)
{
struct xgbe_prv_data *pdata = netdev_priv(netdev);
DBGPR("-->%s\n", __func__);
-@@ -1650,7 +1650,7 @@ static int xgbe_vlan_rx_kill_vid(struct net_device *netdev, __be16 proto,
+@@ -1659,7 +1659,7 @@ static int xgbe_vlan_rx_kill_vid(struct net_device *netdev, __be16 proto,
u16 vid)
{
struct xgbe_prv_data *pdata = netdev_priv(netdev);
DBGPR("-->%s\n", __func__);
-@@ -1716,7 +1716,7 @@ static int xgbe_set_features(struct net_device *netdev,
+@@ -1725,7 +1725,7 @@ static int xgbe_set_features(struct net_device *netdev,
netdev_features_t features)
{
struct xgbe_prv_data *pdata = netdev_priv(netdev);
netdev_features_t rxhash, rxcsum, rxvlan, rxvlan_filter;
int ret = 0;
-@@ -1781,8 +1781,8 @@ struct net_device_ops *xgbe_get_netdev_ops(void)
+@@ -1791,8 +1791,8 @@ struct net_device_ops *xgbe_get_netdev_ops(void)
static void xgbe_rx_refresh(struct xgbe_channel *channel)
{
struct xgbe_prv_data *pdata = channel->pdata;
struct xgbe_ring *ring = channel->rx_ring;
struct xgbe_ring_data *rdata;
-@@ -1835,8 +1835,8 @@ static struct sk_buff *xgbe_create_skb(struct xgbe_prv_data *pdata,
+@@ -1847,8 +1847,8 @@ static struct sk_buff *xgbe_create_skb(struct napi_struct *napi,
static int xgbe_tx_poll(struct xgbe_channel *channel)
{
struct xgbe_prv_data *pdata = channel->pdata;
struct xgbe_ring *ring = channel->tx_ring;
struct xgbe_ring_data *rdata;
struct xgbe_ring_desc *rdesc;
-@@ -1901,7 +1901,7 @@ static int xgbe_tx_poll(struct xgbe_channel *channel)
+@@ -1913,7 +1913,7 @@ static int xgbe_tx_poll(struct xgbe_channel *channel)
static int xgbe_rx_poll(struct xgbe_channel *channel, int budget)
{
struct xgbe_prv_data *pdata = channel->pdata;
struct xgbe_ring_data *rdata;
struct xgbe_packet_data *packet;
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c b/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c
-index ebf4893..a8f51c6 100644
+index 5f149e8..6736bf4 100644
--- a/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c
+++ b/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c
@@ -203,7 +203,7 @@ static void xgbe_get_ethtool_stats(struct net_device *netdev,
for (i = 0; i < XGBE_STATS_COUNT; i++) {
stat = (u8 *)pdata + xgbe_gstring_stats[i].stat_offset;
*data++ = *(u64 *)stat;
-@@ -378,7 +378,7 @@ static int xgbe_get_coalesce(struct net_device *netdev,
- struct ethtool_coalesce *ec)
- {
- struct xgbe_prv_data *pdata = netdev_priv(netdev);
-- struct xgbe_hw_if *hw_if = &pdata->hw_if;
-+ struct xgbe_hw_if *hw_if = pdata->hw_if;
- unsigned int riwt;
-
- DBGPR("-->xgbe_get_coalesce\n");
-@@ -401,7 +401,7 @@ static int xgbe_set_coalesce(struct net_device *netdev,
+@@ -396,7 +396,7 @@ static int xgbe_set_coalesce(struct net_device *netdev,
struct ethtool_coalesce *ec)
{
struct xgbe_prv_data *pdata = netdev_priv(netdev);
- struct xgbe_hw_if *hw_if = &pdata->hw_if;
+ struct xgbe_hw_if *hw_if = pdata->hw_if;
unsigned int rx_frames, rx_riwt, rx_usecs;
- unsigned int tx_frames, tx_usecs;
+ unsigned int tx_frames;
-@@ -536,7 +536,7 @@ static int xgbe_set_rxfh(struct net_device *netdev, const u32 *indir,
+@@ -521,7 +521,7 @@ static int xgbe_set_rxfh(struct net_device *netdev, const u32 *indir,
const u8 *key, const u8 hfunc)
{
struct xgbe_prv_data *pdata = netdev_priv(netdev);
if (hfunc != ETH_RSS_HASH_NO_CHANGE && hfunc != ETH_RSS_HASH_TOP)
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-main.c b/drivers/net/ethernet/amd/xgbe/xgbe-main.c
-index 32dd651..225cca3 100644
+index 7149053..889c5492 100644
--- a/drivers/net/ethernet/amd/xgbe/xgbe-main.c
+++ b/drivers/net/ethernet/amd/xgbe/xgbe-main.c
@@ -159,12 +159,6 @@ static void xgbe_default_config(struct xgbe_prv_data *pdata)
#ifdef CONFIG_ACPI
static int xgbe_acpi_support(struct xgbe_prv_data *pdata)
{
-@@ -396,9 +390,8 @@ static int xgbe_probe(struct platform_device *pdev)
+@@ -387,9 +381,8 @@ static int xgbe_probe(struct platform_device *pdev)
memcpy(netdev->dev_addr, pdata->mac_addr, netdev->addr_len);
/* Set all the function pointers */
DBGPR_MDIO("-->xgbe_mdio_write: prtad=%#x mmd_reg=%#x mmd_data=%#x\n",
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-ptp.c b/drivers/net/ethernet/amd/xgbe/xgbe-ptp.c
-index f326178..8bd7daf 100644
+index b03e4f5..78e4cc4 100644
--- a/drivers/net/ethernet/amd/xgbe/xgbe-ptp.c
+++ b/drivers/net/ethernet/amd/xgbe/xgbe-ptp.c
@@ -129,7 +129,7 @@ static cycle_t xgbe_cc_read(const struct cyclecounter *cc)
spin_unlock_irqrestore(&pdata->tstamp_lock, flags);
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe.h b/drivers/net/ethernet/amd/xgbe/xgbe.h
-index 13e8f95..1d8beef 100644
+index e62dfa2..7df28d5 100644
--- a/drivers/net/ethernet/amd/xgbe/xgbe.h
+++ b/drivers/net/ethernet/amd/xgbe/xgbe.h
-@@ -675,8 +675,8 @@ struct xgbe_prv_data {
+@@ -673,8 +673,8 @@ struct xgbe_prv_data {
int dev_irq;
unsigned int per_channel_irq;
/* AXI DMA settings */
unsigned int coherent;
-@@ -798,6 +798,9 @@ struct xgbe_prv_data {
+@@ -797,6 +797,9 @@ struct xgbe_prv_data {
#endif
};
-+extern const struct xgbe_hw_if default_xgbe_hw_if;
-+extern const struct xgbe_desc_if default_xgbe_desc_if;
++extern struct xgbe_hw_if default_xgbe_hw_if;
++extern struct xgbe_desc_if default_xgbe_desc_if;
+
/* Function prototypes*/
void xgbe_init_function_ptrs_dev(struct xgbe_hw_if *);
+diff --git a/drivers/net/ethernet/broadcom/bcmsysport.c b/drivers/net/ethernet/broadcom/bcmsysport.c
+index 783543a..a472348 100644
+--- a/drivers/net/ethernet/broadcom/bcmsysport.c
++++ b/drivers/net/ethernet/broadcom/bcmsysport.c
+@@ -1721,7 +1721,7 @@ static int bcm_sysport_probe(struct platform_device *pdev)
+ macaddr = of_get_mac_address(dn);
+ if (!macaddr || !is_valid_ether_addr(macaddr)) {
+ dev_warn(&pdev->dev, "using random Ethernet MAC\n");
+- random_ether_addr(dev->dev_addr);
++ eth_hw_addr_random(dev);
+ } else {
+ ether_addr_copy(dev->dev_addr, macaddr);
+ }
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h
-index adcacda..fa6e0ae 100644
+index d7a7175..7011194 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h
@@ -1065,7 +1065,7 @@ static inline u8 bnx2x_get_path_func_num(struct bnx2x *bp)
#define CHIPREV_ID_5752_A0_HW 0x5000
#define CHIPREV_ID_5752_A0 0x6000
diff --git a/drivers/net/ethernet/brocade/bna/bna_enet.c b/drivers/net/ethernet/brocade/bna/bna_enet.c
-index 903466e..b285864 100644
+index deb8da6..45d473b 100644
--- a/drivers/net/ethernet/brocade/bna/bna_enet.c
+++ b/drivers/net/ethernet/brocade/bna/bna_enet.c
-@@ -1693,10 +1693,10 @@ bna_cb_ioceth_reset(void *arg)
+@@ -1694,10 +1694,10 @@ bna_cb_ioceth_reset(void *arg)
}
static struct bfa_ioc_cbfn bna_ioceth_cbfn = {
#define L2T_SKB_CB(skb) ((struct l2t_skb_cb *)(skb)->cb)
-diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
-index d929951..a2c23f5 100644
---- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
-+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
-@@ -2215,7 +2215,7 @@ static void get_regs(struct net_device *dev, struct ethtool_regs *regs,
-
- int i;
- struct adapter *ap = netdev2adap(dev);
-- static const unsigned int *reg_ranges;
-+ const unsigned int *reg_ranges;
- int arr_size = 0, buf_size = 0;
-
- if (is_t4(ap->params.chip)) {
diff --git a/drivers/net/ethernet/dec/tulip/de4x5.c b/drivers/net/ethernet/dec/tulip/de4x5.c
index badff18..e15c4ec 100644
--- a/drivers/net/ethernet/dec/tulip/de4x5.c
break;
}
diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
-index e6b790f..051ba2d 100644
+index e43cc8a..f1cf67c 100644
--- a/drivers/net/ethernet/emulex/benet/be_main.c
+++ b/drivers/net/ethernet/emulex/benet/be_main.c
-@@ -536,7 +536,7 @@ static void accumulate_16bit_val(u32 *acc, u16 val)
+@@ -539,7 +539,7 @@ static void accumulate_16bit_val(u32 *acc, u16 val)
if (wrapped)
newacc += 65536;
#include "ftmac100.h"
diff --git a/drivers/net/ethernet/intel/i40e/i40e_ptp.c b/drivers/net/ethernet/intel/i40e/i40e_ptp.c
-index fabcfa1..188fd22 100644
+index a92b772..250fe69 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_ptp.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_ptp.c
@@ -419,7 +419,7 @@ void i40e_ptp_set_increment(struct i40e_pf *pf)
}
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c
-index 79c00f5..8da39f6 100644
+index e5ba040..d47531c 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c
-@@ -785,7 +785,7 @@ void ixgbe_ptp_start_cyclecounter(struct ixgbe_adapter *adapter)
+@@ -782,7 +782,7 @@ void ixgbe_ptp_start_cyclecounter(struct ixgbe_adapter *adapter)
}
/* update the base incval used to calculate frequency adjustment */
smp_mb();
/* need lock to prevent incorrect read while modifying cyclecounter */
+diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/marvell/mvneta.c
+index 74d0389..086ac03 100644
+--- a/drivers/net/ethernet/marvell/mvneta.c
++++ b/drivers/net/ethernet/marvell/mvneta.c
+@@ -1462,7 +1462,7 @@ static int mvneta_rx(struct mvneta_port *pp, int rx_todo,
+ struct mvneta_rx_queue *rxq)
+ {
+ struct net_device *dev = pp->dev;
+- int rx_done, rx_filled;
++ int rx_done;
+ u32 rcvd_pkts = 0;
+ u32 rcvd_bytes = 0;
+
+@@ -1473,7 +1473,6 @@ static int mvneta_rx(struct mvneta_port *pp, int rx_todo,
+ rx_todo = rx_done;
+
+ rx_done = 0;
+- rx_filled = 0;
+
+ /* Fairness NAPI loop */
+ while (rx_done < rx_todo) {
+@@ -1484,7 +1483,6 @@ static int mvneta_rx(struct mvneta_port *pp, int rx_todo,
+ int rx_bytes, err;
+
+ rx_done++;
+- rx_filled++;
+ rx_status = rx_desc->status;
+ rx_bytes = rx_desc->data_size - (ETH_FCS_LEN + MVNETA_MH_SIZE);
+ data = (unsigned char *)rx_desc->buf_cookie;
+@@ -1524,6 +1522,14 @@ static int mvneta_rx(struct mvneta_port *pp, int rx_todo,
+ continue;
+ }
+
++ /* Refill processing */
++ err = mvneta_rx_refill(pp, rx_desc);
++ if (err) {
++ netdev_err(dev, "Linux processing - Can't refill\n");
++ rxq->missed++;
++ goto err_drop_frame;
++ }
++
+ skb = build_skb(data, pp->frag_size > PAGE_SIZE ? 0 : pp->frag_size);
+ if (!skb)
+ goto err_drop_frame;
+@@ -1543,14 +1549,6 @@ static int mvneta_rx(struct mvneta_port *pp, int rx_todo,
+ mvneta_rx_csum(pp, rx_status, skb);
+
+ napi_gro_receive(&pp->napi, skb);
+-
+- /* Refill processing */
+- err = mvneta_rx_refill(pp, rx_desc);
+- if (err) {
+- netdev_err(dev, "Linux processing - Can't refill\n");
+- rxq->missed++;
+- rx_filled--;
+- }
+ }
+
+ if (rcvd_pkts) {
+@@ -1563,7 +1561,7 @@ static int mvneta_rx(struct mvneta_port *pp, int rx_todo,
+ }
+
+ /* Update rxq management counters */
+- mvneta_rxq_desc_num_update(pp, rxq, rx_done, rx_filled);
++ mvneta_rxq_desc_num_update(pp, rxq, rx_done, rx_done);
+
+ return rx_done;
+ }
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_tx.c b/drivers/net/ethernet/mellanox/mlx4/en_tx.c
-index 8c234ec..757331f 100644
+index c10d98f..72914c6 100644
--- a/drivers/net/ethernet/mellanox/mlx4/en_tx.c
+++ b/drivers/net/ethernet/mellanox/mlx4/en_tx.c
-@@ -468,8 +468,8 @@ static bool mlx4_en_process_tx_cq(struct net_device *dev,
+@@ -475,8 +475,8 @@ static bool mlx4_en_process_tx_cq(struct net_device *dev,
wmb();
/* we want to dirty this cache line once */
__vxge_hw_mempool_create(vpath->hldev,
fifo->config->memblock_size,
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c
-index 2bb48d5..d1a865d 100644
+index 33669c2..a29c75e 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c
@@ -2324,7 +2324,9 @@ int qlcnic_83xx_configure_opmode(struct qlcnic_adapter *adapter)
u32 entry_offset, dump, no_entries, buf_offset = 0;
int i, k, ops_cnt, ops_index, dump_size = 0;
diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c
-index c70ab40..00b28e0 100644
+index 3df51fa..e9b517f 100644
--- a/drivers/net/ethernet/realtek/r8169.c
+++ b/drivers/net/ethernet/realtek/r8169.c
@@ -788,22 +788,22 @@ struct rtl8169_private {
int (*set_speed)(struct net_device *, u8 aneg, u16 sp, u8 dpx, u32 adv);
int (*get_settings)(struct net_device *, struct ethtool_cmd *);
diff --git a/drivers/net/ethernet/sfc/ptp.c b/drivers/net/ethernet/sfc/ptp.c
-index 6b861e3..204ac86 100644
+index a2e9aee..af41a0e 100644
--- a/drivers/net/ethernet/sfc/ptp.c
+++ b/drivers/net/ethernet/sfc/ptp.c
@@ -822,7 +822,7 @@ static int efx_ptp_synchronize(struct efx_nic *efx, unsigned int num_readings)
rc = efx_mcdi_rpc_start(efx, MC_CMD_PTP, synch_buf,
MC_CMD_PTP_IN_SYNCHRONIZE_LEN);
EFX_BUG_ON_PARANOID(rc);
-diff --git a/drivers/net/ethernet/sfc/selftest.c b/drivers/net/ethernet/sfc/selftest.c
-index 10b6173..b605dfd5 100644
---- a/drivers/net/ethernet/sfc/selftest.c
-+++ b/drivers/net/ethernet/sfc/selftest.c
-@@ -46,7 +46,7 @@ struct efx_loopback_payload {
- struct iphdr ip;
- struct udphdr udp;
- __be16 iteration;
-- const char msg[64];
-+ char msg[64];
- } __packed;
-
- /* Loopback test source MAC address */
diff --git a/drivers/net/ethernet/stmicro/stmmac/mmc_core.c b/drivers/net/ethernet/stmicro/stmmac/mmc_core.c
index 08c483b..2c4a553 100644
--- a/drivers/net/ethernet/stmicro/stmmac/mmc_core.c
/* To mask all all interrupts.*/
diff --git a/drivers/net/ethernet/via/via-rhine.c b/drivers/net/ethernet/via/via-rhine.c
-index 17e2766..c332f1e 100644
+index de28504..7f1c1cd 100644
--- a/drivers/net/ethernet/via/via-rhine.c
+++ b/drivers/net/ethernet/via/via-rhine.c
-@@ -2514,7 +2514,7 @@ static struct platform_driver rhine_driver_platform = {
+@@ -2525,7 +2525,7 @@ static struct platform_driver rhine_driver_platform = {
}
};
.ident = "EPIA-M",
.matches = {
diff --git a/drivers/net/hyperv/hyperv_net.h b/drivers/net/hyperv/hyperv_net.h
-index 384ca4f..dd7d4f9 100644
+index 41071d3..6e362e1 100644
--- a/drivers/net/hyperv/hyperv_net.h
+++ b/drivers/net/hyperv/hyperv_net.h
-@@ -171,7 +171,7 @@ struct rndis_device {
+@@ -176,7 +176,7 @@ struct rndis_device {
enum rndis_device_state state;
bool link_state;
bool link_change;
spinlock_t request_lock;
struct list_head req_list;
diff --git a/drivers/net/hyperv/rndis_filter.c b/drivers/net/hyperv/rndis_filter.c
-index 7816d98..7890614 100644
+index 9118cea..1a8e06a 100644
--- a/drivers/net/hyperv/rndis_filter.c
+++ b/drivers/net/hyperv/rndis_filter.c
-@@ -102,7 +102,7 @@ static struct rndis_request *get_rndis_request(struct rndis_device *dev,
+@@ -100,7 +100,7 @@ static struct rndis_request *get_rndis_request(struct rndis_device *dev,
* template
*/
set = &rndis_msg->msg.set_req;
/* Add to the request list */
spin_lock_irqsave(&dev->request_lock, flags);
-@@ -918,7 +918,7 @@ static void rndis_filter_halt_device(struct rndis_device *dev)
+@@ -923,7 +923,7 @@ static void rndis_filter_halt_device(struct rndis_device *dev)
/* Setup the rndis set */
halt = &request->request_msg.msg.halt_req;
/* Ignore return since this msg is optional. */
rndis_filter_send_request(dev, request);
diff --git a/drivers/net/ifb.c b/drivers/net/ifb.c
-index 34f846b..4a0d5b1 100644
+index 94570aa..1a798e1 100644
--- a/drivers/net/ifb.c
+++ b/drivers/net/ifb.c
@@ -253,7 +253,7 @@ static int ifb_validate(struct nlattr *tb[], struct nlattr *data[])
.kind = "ifb",
.priv_size = sizeof(struct ifb_private),
.setup = ifb_setup,
+diff --git a/drivers/net/ipvlan/ipvlan.h b/drivers/net/ipvlan/ipvlan.h
+index 54549a6..0799442 100644
+--- a/drivers/net/ipvlan/ipvlan.h
++++ b/drivers/net/ipvlan/ipvlan.h
+@@ -102,6 +102,11 @@ static inline struct ipvl_port *ipvlan_port_get_rcu(const struct net_device *d)
+ return rcu_dereference(d->rx_handler_data);
+ }
+
++static inline struct ipvl_port *ipvlan_port_get_rcu_bh(const struct net_device *d)
++{
++ return rcu_dereference_bh(d->rx_handler_data);
++}
++
+ static inline struct ipvl_port *ipvlan_port_get_rtnl(const struct net_device *d)
+ {
+ return rtnl_dereference(d->rx_handler_data);
+diff --git a/drivers/net/ipvlan/ipvlan_core.c b/drivers/net/ipvlan/ipvlan_core.c
+index c30b5c3..b349dad 100644
+--- a/drivers/net/ipvlan/ipvlan_core.c
++++ b/drivers/net/ipvlan/ipvlan_core.c
+@@ -507,7 +507,7 @@ static int ipvlan_xmit_mode_l2(struct sk_buff *skb, struct net_device *dev)
+ int ipvlan_queue_xmit(struct sk_buff *skb, struct net_device *dev)
+ {
+ struct ipvl_dev *ipvlan = netdev_priv(dev);
+- struct ipvl_port *port = ipvlan_port_get_rcu(ipvlan->phy_dev);
++ struct ipvl_port *port = ipvlan_port_get_rcu_bh(ipvlan->phy_dev);
+
+ if (!port)
+ goto out;
diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c
-index 1df38bd..4bc20b0 100644
+index 9f59f17..52cb38f 100644
--- a/drivers/net/macvlan.c
+++ b/drivers/net/macvlan.c
@@ -335,7 +335,7 @@ static void macvlan_broadcast_enqueue(struct macvlan_port *port,
}
static void macvlan_flush_sources(struct macvlan_port *port,
-@@ -1459,13 +1459,15 @@ static const struct nla_policy macvlan_policy[IFLA_MACVLAN_MAX + 1] = {
+@@ -1480,13 +1480,15 @@ static const struct nla_policy macvlan_policy[IFLA_MACVLAN_MAX + 1] = {
int macvlan_link_register(struct rtnl_link_ops *ops)
{
/* common fields */
return rtnl_link_register(ops);
};
-@@ -1551,7 +1553,7 @@ static int macvlan_device_event(struct notifier_block *unused,
+@@ -1572,7 +1574,7 @@ static int macvlan_device_event(struct notifier_block *unused,
return NOTIFY_DONE;
}
};
diff --git a/drivers/net/macvtap.c b/drivers/net/macvtap.c
-index 27ecc5c..f636328 100644
+index 8c350c5..30fdc98 100644
--- a/drivers/net/macvtap.c
+++ b/drivers/net/macvtap.c
@@ -436,7 +436,7 @@ static void macvtap_setup(struct net_device *dev)
put_user(u, &ifr->ifr_flags))
ret = -EFAULT;
macvtap_put_vlan(vlan);
-@@ -1217,7 +1217,7 @@ static int macvtap_device_event(struct notifier_block *unused,
+@@ -1214,7 +1214,7 @@ static int macvtap_device_event(struct notifier_block *unused,
return NOTIFY_DONE;
}
.notifier_call = macvtap_device_event,
};
+@@ -1268,6 +1268,7 @@ static void macvtap_exit(void)
+ class_unregister(macvtap_class);
+ cdev_del(&macvtap_cdev);
+ unregister_chrdev_region(macvtap_major, MACVTAP_NUM_DEVS);
++ idr_destroy(&minor_idr);
+ }
+ module_exit(macvtap_exit);
+
diff --git a/drivers/net/nlmon.c b/drivers/net/nlmon.c
index 34924df..a747360 100644
--- a/drivers/net/nlmon.c
.priv_size = sizeof(struct nlmon),
.setup = nlmon_setup,
diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
-index bdfe51f..e7845c7 100644
+index d551df6..fa4c2df 100644
--- a/drivers/net/phy/phy_device.c
+++ b/drivers/net/phy/phy_device.c
@@ -218,7 +218,7 @@ EXPORT_SYMBOL(phy_device_create);
/* We've got a compressed packet; read the change byte */
diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c
-index 7d39484..d58499d 100644
+index 6928448..e30c57f 100644
--- a/drivers/net/team/team.c
+++ b/drivers/net/team/team.c
-@@ -2099,7 +2099,7 @@ static unsigned int team_get_num_rx_queues(void)
+@@ -2103,7 +2103,7 @@ static unsigned int team_get_num_rx_queues(void)
return TEAM_DEFAULT_NUM_RX_QUEUES;
}
.kind = DRV_NAME,
.priv_size = sizeof(struct team),
.setup = team_setup,
-@@ -2889,7 +2889,7 @@ static int team_device_event(struct notifier_block *unused,
+@@ -2893,7 +2893,7 @@ static int team_device_event(struct notifier_block *unused,
return NOTIFY_DONE;
}
};
diff --git a/drivers/net/tun.c b/drivers/net/tun.c
-index 857dca4..642f532 100644
+index e470ae5..e812f5e 100644
--- a/drivers/net/tun.c
+++ b/drivers/net/tun.c
@@ -1421,7 +1421,7 @@ static int tun_validate(struct nlattr *tb[], struct nlattr *data[])
.kind = DRV_NAME,
.priv_size = sizeof(struct tun_struct),
.setup = tun_setup,
-@@ -1830,7 +1830,7 @@ unlock:
+@@ -1828,7 +1828,7 @@ unlock:
}
static long __tun_chr_ioctl(struct file *file, unsigned int cmd,
{
struct tun_file *tfile = file->private_data;
struct tun_struct *tun;
-@@ -1844,6 +1844,9 @@ static long __tun_chr_ioctl(struct file *file, unsigned int cmd,
+@@ -1842,6 +1842,9 @@ static long __tun_chr_ioctl(struct file *file, unsigned int cmd,
int le;
int ret;
if (copy_from_user(&ifr, argp, ifreq_len))
return -EFAULT;
diff --git a/drivers/net/usb/hso.c b/drivers/net/usb/hso.c
-index 778e915..58c4d95 100644
+index 111d907..1ee643e 100644
--- a/drivers/net/usb/hso.c
+++ b/drivers/net/usb/hso.c
@@ -70,7 +70,7 @@
_hso_serial_set_termios(tty, old);
else
tty->termios = *old;
-@@ -1886,7 +1885,7 @@ static void intr_callback(struct urb *urb)
+@@ -1891,7 +1890,7 @@ static void intr_callback(struct urb *urb)
D1("Pending read interrupt on port %d\n", i);
spin_lock(&serial->serial_lock);
if (serial->rx_state == RX_IDLE &&
/* Setup and send a ctrl req read on
* port i */
if (!serial->rx_urb_filled[0]) {
-@@ -3053,7 +3052,7 @@ static int hso_resume(struct usb_interface *iface)
+@@ -3058,7 +3057,7 @@ static int hso_resume(struct usb_interface *iface)
/* Start all serial ports */
for (i = 0; i < HSO_SERIAL_TTY_MINORS; i++) {
if (serial_table[i] && (serial_table[i]->interface == iface)) {
hso_start_serial_device(serial_table[i], GFP_NOIO);
hso_kick_transmit(dev2ser(serial_table[i]));
diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c
-index 9f7c0ab..1577b4a 100644
+index aafa1a1..f59c651 100644
--- a/drivers/net/usb/r8152.c
+++ b/drivers/net/usb/r8152.c
-@@ -601,7 +601,7 @@ struct r8152 {
+@@ -602,7 +602,7 @@ struct r8152 {
void (*unload)(struct r8152 *);
int (*eee_get)(struct r8152 *, struct ethtool_eee *);
int (*eee_set)(struct r8152 *, struct ethtool_eee *);
dev->net->dev_addr[ETH_ALEN-1] = ifacenum;
/* we will have to manufacture ethernet headers, prepare template */
-diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c
-index 777757a..395a767 100644
---- a/drivers/net/usb/usbnet.c
-+++ b/drivers/net/usb/usbnet.c
-@@ -1285,7 +1285,7 @@ netdev_tx_t usbnet_start_xmit (struct sk_buff *skb,
- struct net_device *net)
- {
- struct usbnet *dev = netdev_priv(net);
-- int length;
-+ unsigned int length;
- struct urb *urb = NULL;
- struct skb_data *entry;
- struct driver_info *info = dev->driver_info;
-@@ -1413,7 +1413,7 @@ not_drop:
- }
- } else
- netif_dbg(dev, tx_queued, dev->net,
-- "> tx, len %d, type 0x%x\n", length, skb->protocol);
-+ "> tx, len %u, type 0x%x\n", length, skb->protocol);
- #ifdef CONFIG_PM
- deferred:
- #endif
diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
-index 59b0e97..a6ed579 100644
+index 63c7810..4ad33aa 100644
--- a/drivers/net/virtio_net.c
+++ b/drivers/net/virtio_net.c
@@ -48,7 +48,7 @@ module_param(gso, bool, 0444);
#define VIRTNET_DRIVER_VERSION "1.0.0"
+diff --git a/drivers/net/vmxnet3/vmxnet3_drv.c b/drivers/net/vmxnet3/vmxnet3_drv.c
+index 61c0840..92e7f7e 100644
+--- a/drivers/net/vmxnet3/vmxnet3_drv.c
++++ b/drivers/net/vmxnet3/vmxnet3_drv.c
+@@ -1167,7 +1167,7 @@ vmxnet3_rq_rx_complete(struct vmxnet3_rx_queue *rq,
+ static const u32 rxprod_reg[2] = {
+ VMXNET3_REG_RXPROD, VMXNET3_REG_RXPROD2
+ };
+- u32 num_rxd = 0;
++ u32 num_pkts = 0;
+ bool skip_page_frags = false;
+ struct Vmxnet3_RxCompDesc *rcd;
+ struct vmxnet3_rx_ctx *ctx = &rq->rx_ctx;
+@@ -1185,13 +1185,12 @@ vmxnet3_rq_rx_complete(struct vmxnet3_rx_queue *rq,
+ struct Vmxnet3_RxDesc *rxd;
+ u32 idx, ring_idx;
+ struct vmxnet3_cmd_ring *ring = NULL;
+- if (num_rxd >= quota) {
++ if (num_pkts >= quota) {
+ /* we may stop even before we see the EOP desc of
+ * the current pkt
+ */
+ break;
+ }
+- num_rxd++;
+ BUG_ON(rcd->rqID != rq->qid && rcd->rqID != rq->qid2);
+ idx = rcd->rxdIdx;
+ ring_idx = rcd->rqID < adapter->num_rx_queues ? 0 : 1;
+@@ -1323,6 +1322,7 @@ vmxnet3_rq_rx_complete(struct vmxnet3_rx_queue *rq,
+ napi_gro_receive(&rq->napi, skb);
+
+ ctx->skb = NULL;
++ num_pkts++;
+ }
+
+ rcd_done:
+@@ -1353,7 +1353,7 @@ rcd_done:
+ &rq->comp_ring.base[rq->comp_ring.next2proc].rcd, &rxComp);
+ }
+
+- return num_rxd;
++ return num_pkts;
+ }
+
+
diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
-index fceb637..37c70fd 100644
+index 21a0fbf..055b54f 100644
--- a/drivers/net/vxlan.c
+++ b/drivers/net/vxlan.c
-@@ -2935,7 +2935,7 @@ static struct net *vxlan_get_link_net(const struct net_device *dev)
+@@ -2878,7 +2878,7 @@ static struct net *vxlan_get_link_net(const struct net_device *dev)
return vxlan->net;
}
.kind = "vxlan",
.maxtype = IFLA_VXLAN_MAX,
.policy = vxlan_policy,
-@@ -2983,7 +2983,7 @@ static int vxlan_lowerdev_event(struct notifier_block *unused,
+@@ -2926,7 +2926,7 @@ static int vxlan_lowerdev_event(struct notifier_block *unused,
return NOTIFY_DONE;
}
if (rd == NULL) {
result = -ENOMEM;
diff --git a/drivers/net/wireless/airo.c b/drivers/net/wireless/airo.c
-index e71a2ce..2268d61 100644
+index d0c97c2..108f59b 100644
--- a/drivers/net/wireless/airo.c
+++ b/drivers/net/wireless/airo.c
@@ -7846,7 +7846,7 @@ static int writerids(struct net_device *dev, aironet_ioctl *comp) {
/* Only super-user can write RIDs */
diff --git a/drivers/net/wireless/at76c50x-usb.c b/drivers/net/wireless/at76c50x-usb.c
-index da92bfa..5a9001a 100644
+index 49219c5..3625441 100644
--- a/drivers/net/wireless/at76c50x-usb.c
+++ b/drivers/net/wireless/at76c50x-usb.c
@@ -353,7 +353,7 @@ static int at76_dfu_get_state(struct usb_device *udev, u8 *state)
static u16 ar9003_calc_ptr_chksum(struct ar9003_txc *ads)
diff --git a/drivers/net/wireless/ath/ath9k/hw.h b/drivers/net/wireless/ath/ath9k/hw.h
-index e82e570..8c3cf90 100644
+index c1d2d03..08352db 100644
--- a/drivers/net/wireless/ath/ath9k/hw.h
+++ b/drivers/net/wireless/ath/ath9k/hw.h
-@@ -646,7 +646,7 @@ struct ath_hw_private_ops {
-
- /* ANI */
- void (*ani_cache_ini_regs)(struct ath_hw *ah);
+@@ -671,7 +671,7 @@ struct ath_hw_private_ops {
+ #ifdef CONFIG_ATH9K_BTCOEX_SUPPORT
+ bool (*is_aic_enabled)(struct ath_hw *ah);
+ #endif /* CONFIG_ATH9K_BTCOEX_SUPPORT */
-};
+} __no_const;
/**
* struct ath_spec_scan - parameters for Atheros spectral scan
-@@ -722,7 +722,7 @@ struct ath_hw_ops {
+@@ -747,7 +747,7 @@ struct ath_hw_ops {
#ifdef CONFIG_ATH9K_BTCOEX_SUPPORT
void (*set_bt_ant_diversity)(struct ath_hw *hw, bool enable);
#endif
struct ath_nf_limits {
s16 max;
diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
-index 9ede991..a8f08fb 100644
+index b0badef..3e3464c 100644
--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
-@@ -2537,16 +2537,18 @@ void ath9k_fill_chanctx_ops(void)
+@@ -2573,16 +2573,18 @@ void ath9k_fill_chanctx_ops(void)
if (!ath9k_is_chanctx_enabled())
return;
memset(buf, 0, sizeof(buf));
buf_size = min(count, sizeof(buf) - 1);
diff --git a/drivers/net/wireless/iwlwifi/pcie/trans.c b/drivers/net/wireless/iwlwifi/pcie/trans.c
-index 69935aa..c1ca128 100644
+index dc17909..989c9fb 100644
--- a/drivers/net/wireless/iwlwifi/pcie/trans.c
+++ b/drivers/net/wireless/iwlwifi/pcie/trans.c
-@@ -1836,7 +1836,7 @@ static ssize_t iwl_dbgfs_interrupt_write(struct file *file,
+@@ -1919,7 +1919,7 @@ static ssize_t iwl_dbgfs_interrupt_write(struct file *file,
struct isr_statistics *isr_stats = &trans_pcie->isr_stats;
char buf[8];
u32 reset_flag;
memset(buf, 0, sizeof(buf));
-@@ -1857,7 +1857,7 @@ static ssize_t iwl_dbgfs_csr_write(struct file *file,
+@@ -1940,7 +1940,7 @@ static ssize_t iwl_dbgfs_csr_write(struct file *file,
{
struct iwl_trans *trans = file->private_data;
char buf[8];
memset(buf, 0, sizeof(buf));
diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c
-index 8908be6..fe97ddd 100644
+index d5c0a1a..d056b20 100644
--- a/drivers/net/wireless/mac80211_hwsim.c
+++ b/drivers/net/wireless/mac80211_hwsim.c
-@@ -3070,20 +3070,20 @@ static int __init init_mac80211_hwsim(void)
+@@ -3149,20 +3149,20 @@ static int __init init_mac80211_hwsim(void)
if (channels < 1)
return -EINVAL;
spin_lock_init(&hwsim_radio_lock);
INIT_LIST_HEAD(&hwsim_radios);
diff --git a/drivers/net/wireless/rndis_wlan.c b/drivers/net/wireless/rndis_wlan.c
-index 60d44ce..884dd1c 100644
+index d72ff8e..c209a45 100644
--- a/drivers/net/wireless/rndis_wlan.c
+++ b/drivers/net/wireless/rndis_wlan.c
@@ -1236,7 +1236,7 @@ static int set_rts_threshold(struct usbnet *usbdev, u32 rts_threshold)
wl1251_info("using SDIO interrupt");
}
diff --git a/drivers/net/wireless/ti/wl12xx/main.c b/drivers/net/wireless/ti/wl12xx/main.c
-index 144d1f8..7030936 100644
+index af0fe2e..d04986b 100644
--- a/drivers/net/wireless/ti/wl12xx/main.c
+++ b/drivers/net/wireless/ti/wl12xx/main.c
-@@ -657,7 +657,9 @@ static int wl12xx_identify_chip(struct wl1271 *wl)
+@@ -655,7 +655,9 @@ static int wl12xx_identify_chip(struct wl1271 *wl)
sizeof(wl->conf.mem));
/* read data preparation is only needed by wl127x */
wlcore_set_min_fw_ver(wl, WL127X_CHIP_VER,
WL127X_IFTYPE_SR_VER, WL127X_MAJOR_SR_VER,
-@@ -682,7 +684,9 @@ static int wl12xx_identify_chip(struct wl1271 *wl)
+@@ -680,7 +682,9 @@ static int wl12xx_identify_chip(struct wl1271 *wl)
sizeof(wl->conf.mem));
/* read data preparation is only needed by wl127x */
u16 int_num;
ZD_ASSERT(in_interrupt());
+diff --git a/drivers/net/xen-netback/netback.c b/drivers/net/xen-netback/netback.c
+index 0d25943..0866c5d 100644
+--- a/drivers/net/xen-netback/netback.c
++++ b/drivers/net/xen-netback/netback.c
+@@ -1571,13 +1571,13 @@ static inline void xenvif_tx_dealloc_action(struct xenvif_queue *queue)
+ smp_rmb();
+
+ while (dc != dp) {
+- BUG_ON(gop - queue->tx_unmap_ops > MAX_PENDING_REQS);
++ BUG_ON(gop - queue->tx_unmap_ops >= MAX_PENDING_REQS);
+ pending_idx =
+ queue->dealloc_ring[pending_index(dc++)];
+
+- pending_idx_release[gop-queue->tx_unmap_ops] =
++ pending_idx_release[gop - queue->tx_unmap_ops] =
+ pending_idx;
+- queue->pages_to_unmap[gop-queue->tx_unmap_ops] =
++ queue->pages_to_unmap[gop - queue->tx_unmap_ops] =
+ queue->mmap_pages[pending_idx];
+ gnttab_set_unmap_op(gop,
+ idx_to_kaddr(queue, pending_idx),
diff --git a/drivers/nfc/nfcwilink.c b/drivers/nfc/nfcwilink.c
index ce2e2cf..f81e500 100644
--- a/drivers/nfc/nfcwilink.c
__u32 protocols;
diff --git a/drivers/nfc/st21nfca/st21nfca.c b/drivers/nfc/st21nfca/st21nfca.c
-index 24d3d24..ff70d28 100644
+index d251f72..0512865 100644
--- a/drivers/nfc/st21nfca/st21nfca.c
+++ b/drivers/nfc/st21nfca/st21nfca.c
-@@ -588,7 +588,7 @@ static int st21nfca_get_iso14443_3_uid(struct nfc_hci_dev *hdev, u8 *gate,
- goto exit;
+@@ -148,14 +148,14 @@ static int st21nfca_hci_load_session(struct nfc_hci_dev *hdev)
+ ST21NFCA_DEVICE_MGNT_GATE,
+ ST21NFCA_DEVICE_MGNT_PIPE);
+ if (r < 0)
+- goto free_info;
++ return r;
+
+ /* Get pipe list */
+ r = nfc_hci_send_cmd(hdev, ST21NFCA_DEVICE_MGNT_GATE,
+ ST21NFCA_DM_GETINFO, pipe_list, sizeof(pipe_list),
+ &skb_pipe_list);
+ if (r < 0)
+- goto free_info;
++ return r;
+
+ /* Complete the existing gate_pipe table */
+ for (i = 0; i < skb_pipe_list->len; i++) {
+@@ -181,6 +181,7 @@ static int st21nfca_hci_load_session(struct nfc_hci_dev *hdev)
+ info->src_host_id != ST21NFCA_ESE_HOST_ID) {
+ pr_err("Unexpected apdu_reader pipe on host %x\n",
+ info->src_host_id);
++ kfree_skb(skb_pipe_info);
+ continue;
+ }
+
+@@ -200,6 +201,7 @@ static int st21nfca_hci_load_session(struct nfc_hci_dev *hdev)
+ hdev->pipes[st21nfca_gates[j].pipe].dest_host =
+ info->src_host_id;
+ }
++ kfree_skb(skb_pipe_info);
+ }
+
+ /*
+@@ -214,13 +216,12 @@ static int st21nfca_hci_load_session(struct nfc_hci_dev *hdev)
+ st21nfca_gates[i].gate,
+ st21nfca_gates[i].pipe);
+ if (r < 0)
+- goto free_info;
++ goto free_list;
+ }
}
-- gate = uid_skb->data;
-+ memcpy(gate, uid_skb->data, uid_skb->len);
- *len = uid_skb->len;
- exit:
- kfree_skb(uid_skb);
+ memcpy(hdev->init_data.gates, st21nfca_gates, sizeof(st21nfca_gates));
+-free_info:
+- kfree_skb(skb_pipe_info);
++free_list:
+ kfree_skb(skb_pipe_list);
+ return r;
+ }
diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c
-index 3a896c9..ac7b1c8 100644
+index cde35c5d01..2dbfdbbf 100644
--- a/drivers/of/fdt.c
+++ b/drivers/of/fdt.c
-@@ -1118,7 +1118,9 @@ static int __init of_fdt_raw_init(void)
+@@ -1136,7 +1136,9 @@ static int __init of_fdt_raw_init(void)
pr_warn("fdt: not creating '/sys/firmware/fdt': CRC check failed\n");
return 0;
}
}
late_initcall(of_fdt_raw_init);
diff --git a/drivers/oprofile/buffer_sync.c b/drivers/oprofile/buffer_sync.c
-index d93b2b6..ae50401 100644
+index 82f7000..d6d0447 100644
--- a/drivers/oprofile/buffer_sync.c
+++ b/drivers/oprofile/buffer_sync.c
-@@ -332,7 +332,7 @@ static void add_data(struct op_entry *entry, struct mm_struct *mm)
+@@ -345,7 +345,7 @@ static void add_data(struct op_entry *entry, struct mm_struct *mm)
if (cookie == NO_COOKIE)
offset = pc;
if (cookie == INVALID_COOKIE) {
offset = pc;
}
if (cookie != last_cookie) {
-@@ -376,14 +376,14 @@ add_sample(struct mm_struct *mm, struct op_sample *s, int in_kernel)
+@@ -389,14 +389,14 @@ add_sample(struct mm_struct *mm, struct op_sample *s, int in_kernel)
/* add userspace sample */
if (!mm) {
return 0;
}
-@@ -552,7 +552,7 @@ void sync_buffer(int cpu)
+@@ -554,7 +554,7 @@ void sync_buffer(int cpu)
/* ignore backtraces if failed to add a sample */
if (state == sb_bt_start) {
state = sb_bt_ignore;
extern struct oprofile_stat_struct oprofile_stats;
diff --git a/drivers/oprofile/oprofilefs.c b/drivers/oprofile/oprofilefs.c
-index 3f49345..c750d0b 100644
+index dd92c5e..dfc04b5 100644
--- a/drivers/oprofile/oprofilefs.c
+++ b/drivers/oprofile/oprofilefs.c
@@ -176,8 +176,8 @@ int oprofilefs_create_ro_ulong(struct dentry *root,
if (!sysfs_initialized)
return -EACCES;
diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h
-index 4091f82..7d98eef 100644
+index 9bd762c2..6fb9504 100644
--- a/drivers/pci/pci.h
+++ b/drivers/pci/pci.h
@@ -99,7 +99,7 @@ struct pci_vpd_ops {
int pci_vpd_pci22_init(struct pci_dev *dev);
diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c
-index 820740a..8b1c673 100644
+index 7d4fcdc..2f6d8f8 100644
--- a/drivers/pci/pcie/aspm.c
+++ b/drivers/pci/pcie/aspm.c
@@ -27,9 +27,9 @@
* Boxes that should not use MSI for PCIe PME signaling.
*/
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
-index 8d2f400..c97cc91 100644
+index c911857..56f3f9d 100644
--- a/drivers/pci/probe.c
+++ b/drivers/pci/probe.c
-@@ -175,7 +175,7 @@ int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type,
+@@ -176,7 +176,7 @@ int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type,
u16 orig_cmd;
struct pci_bus_region region, inverted_region;
1, asus->debug.method_id,
&input, &output);
diff --git a/drivers/platform/x86/compal-laptop.c b/drivers/platform/x86/compal-laptop.c
-index bceb30b..bf063d4 100644
+index b4e9447..9dc6ec34 100644
--- a/drivers/platform/x86/compal-laptop.c
+++ b/drivers/platform/x86/compal-laptop.c
-@@ -766,7 +766,7 @@ static int dmi_check_cb_extra(const struct dmi_system_id *id)
+@@ -765,7 +765,7 @@ static int dmi_check_cb_extra(const struct dmi_system_id *id)
return 1;
}
.matches = { \
DMI_MATCH(DMI_SYS_VENDOR, "IBM"), \
diff --git a/drivers/platform/x86/intel_oaktrail.c b/drivers/platform/x86/intel_oaktrail.c
-index a4a4258..a58a04c 100644
+index 8037c8b..f88445c 100644
--- a/drivers/platform/x86/intel_oaktrail.c
+++ b/drivers/platform/x86/intel_oaktrail.c
@@ -298,7 +298,7 @@ static int dmi_check_cb(const struct dmi_system_id *id)
.ident = "Sony Vaio",
.matches = {
diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
-index 3b8ceee..e18652c 100644
+index 28f3281..171d8c3 100644
--- a/drivers/platform/x86/thinkpad_acpi.c
+++ b/drivers/platform/x86/thinkpad_acpi.c
-@@ -2093,7 +2093,7 @@ static int hotkey_mask_get(void)
- return 0;
- }
-
--void static hotkey_mask_warn_incomplete_mask(void)
-+static void hotkey_mask_warn_incomplete_mask(void)
- {
- /* log only what the user can fix... */
- const u32 wantedmask = hotkey_driver_mask &
-@@ -2437,10 +2437,10 @@ static void hotkey_compare_and_issue_event(struct tp_nvram_state *oldn,
+@@ -2459,10 +2459,10 @@ static void hotkey_compare_and_issue_event(struct tp_nvram_state *oldn,
&& !tp_features.bright_unkfw)
TPACPI_MAY_SEND_KEY(TP_ACPI_HOTKEYSCAN_FNHOME);
}
.callback = exploding_pnp_bios,
.ident = "Higraded P14H",
diff --git a/drivers/power/pda_power.c b/drivers/power/pda_power.c
-index 0c52e2a..3421ab7 100644
+index dfe1ee8..67e820c 100644
--- a/drivers/power/pda_power.c
+++ b/drivers/power/pda_power.c
-@@ -37,7 +37,11 @@ static int polling;
+@@ -38,7 +38,11 @@ static struct power_supply *pda_psy_ac, *pda_psy_usb;
#if IS_ENABLED(CONFIG_USB_PHY)
static struct usb_phy *transceiver;
#endif
static struct regulator *ac_draw;
-@@ -369,7 +373,6 @@ static int pda_power_probe(struct platform_device *pdev)
+@@ -373,7 +377,6 @@ static int pda_power_probe(struct platform_device *pdev)
#if IS_ENABLED(CONFIG_USB_PHY)
if (!IS_ERR_OR_NULL(transceiver) && pdata->use_otg_notifier) {
#endif /* CONFIG_SYSFS */
diff --git a/drivers/power/power_supply_core.c b/drivers/power/power_supply_core.c
-index 694e8cd..9f03483 100644
+index 4bc0c7f..198c99d 100644
--- a/drivers/power/power_supply_core.c
+++ b/drivers/power/power_supply_core.c
@@ -28,7 +28,10 @@ EXPORT_SYMBOL_GPL(power_supply_class);
+ .groups = power_supply_attr_groups,
+};
- static bool __power_supply_is_supplied_by(struct power_supply *supplier,
- struct power_supply *supply)
-@@ -637,7 +640,7 @@ static int __init power_supply_class_init(void)
+ #define POWER_SUPPLY_DEFERRED_REGISTER_TIME msecs_to_jiffies(10)
+
+@@ -921,7 +924,7 @@ static int __init power_supply_class_init(void)
return PTR_ERR(power_supply_class);
power_supply_class->dev_uevent = power_supply_uevent;
return 0;
}
diff --git a/drivers/power/power_supply_sysfs.c b/drivers/power/power_supply_sysfs.c
-index 62653f5..d0bb485 100644
+index 9134e3d..45eee1e 100644
--- a/drivers/power/power_supply_sysfs.c
+++ b/drivers/power/power_supply_sysfs.c
@@ -238,17 +238,15 @@ static struct attribute_group power_supply_attr_group = {
da->attr.name = info->pin_config[i].name;
da->attr.mode = 0644;
diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
-index a4a8a6d..a3456f4 100644
+index 8a28116..05b0ad5 100644
--- a/drivers/regulator/core.c
+++ b/drivers/regulator/core.c
-@@ -3529,7 +3529,7 @@ regulator_register(const struct regulator_desc *regulator_desc,
+@@ -3603,7 +3603,7 @@ regulator_register(const struct regulator_desc *regulator_desc,
const struct regulation_constraints *constraints = NULL;
const struct regulator_init_data *init_data;
struct regulator_config *config = NULL;
struct regulator_dev *rdev;
struct device *dev;
int ret, i;
-@@ -3613,7 +3613,7 @@ regulator_register(const struct regulator_desc *regulator_desc,
+@@ -3686,7 +3686,7 @@ regulator_register(const struct regulator_desc *regulator_desc,
rdev->dev.class = ®ulator_class;
rdev->dev.parent = dev;
dev_set_name(&rdev->dev, "regulator.%lu",
if (ret != 0) {
put_device(&rdev->dev);
diff --git a/drivers/regulator/max8660.c b/drivers/regulator/max8660.c
-index 7eee2ca..4024513 100644
+index 4071d74..260b15a 100644
--- a/drivers/regulator/max8660.c
+++ b/drivers/regulator/max8660.c
-@@ -424,8 +424,10 @@ static int max8660_probe(struct i2c_client *client,
+@@ -423,8 +423,10 @@ static int max8660_probe(struct i2c_client *client,
max8660->shadow_regs[MAX8660_OVER1] = 5;
} else {
/* Otherwise devices can be toggled via software */
mc13xxx_data = mc13xxx_parse_regulators_dt(pdev, mc13892_regulators,
diff --git a/drivers/rtc/rtc-cmos.c b/drivers/rtc/rtc-cmos.c
-index 5b2e761..c8c8a4a 100644
+index a82556a0..e842923 100644
--- a/drivers/rtc/rtc-cmos.c
+++ b/drivers/rtc/rtc-cmos.c
-@@ -789,7 +789,9 @@ cmos_do_probe(struct device *dev, struct resource *ports, int rtc_irq)
+@@ -793,7 +793,9 @@ cmos_do_probe(struct device *dev, struct resource *ports, int rtc_irq)
hpet_rtc_timer_init();
/* export at least the first block of NVRAM */
ret = sysfs_create_bin_file(&pdev->dev.kobj, &m48t59_nvram_attr);
if (ret)
+diff --git a/drivers/rtc/rtc-test.c b/drivers/rtc/rtc-test.c
+index 3a2da4c..e88493c 100644
+--- a/drivers/rtc/rtc-test.c
++++ b/drivers/rtc/rtc-test.c
+@@ -112,8 +112,10 @@ static int test_probe(struct platform_device *plat_dev)
+ struct rtc_device *rtc;
+
+ if (test_mmss64) {
+- test_rtc_ops.set_mmss64 = test_rtc_set_mmss64;
+- test_rtc_ops.set_mmss = NULL;
++ pax_open_kernel();
++ *(void **)&test_rtc_ops.set_mmss64 = test_rtc_set_mmss64;
++ *(void **)&test_rtc_ops.set_mmss = NULL;
++ pax_close_kernel();
+ }
+
+ rtc = devm_rtc_device_register(&plat_dev->dev, "test",
+diff --git a/drivers/scsi/be2iscsi/be_main.c b/drivers/scsi/be2iscsi/be_main.c
+index 1f74760..8e00a89 100644
+--- a/drivers/scsi/be2iscsi/be_main.c
++++ b/drivers/scsi/be2iscsi/be_main.c
+@@ -3165,7 +3165,7 @@ be_sgl_create_contiguous(void *virtual_address,
+ {
+ WARN_ON(!virtual_address);
+ WARN_ON(!physical_address);
+- WARN_ON(!length > 0);
++ WARN_ON(!length);
+ WARN_ON(!sgl);
+
+ sgl->va = virtual_address;
diff --git a/drivers/scsi/bfa/bfa_fcpim.h b/drivers/scsi/bfa/bfa_fcpim.h
index e693af6..2e525b6 100644
--- a/drivers/scsi/bfa/bfa_fcpim.h
/* These three are default values which can be overridden */
diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c
-index a1cfbd3..d7f8ebc 100644
+index 8eab107..599cd79 100644
--- a/drivers/scsi/hpsa.c
+++ b/drivers/scsi/hpsa.c
@@ -697,10 +697,10 @@ static inline u32 next_command(struct ctlr_info *h, u8 q)
pci_disable_link_state(h->pdev, PCIE_LINK_STATE_L0S |
PCIE_LINK_STATE_L1 | PCIE_LINK_STATE_CLKPM);
-@@ -6649,7 +6649,7 @@ static void controller_lockup_detected(struct ctlr_info *h)
+@@ -6647,7 +6647,7 @@ static void controller_lockup_detected(struct ctlr_info *h)
unsigned long flags;
u32 lockup_detected;
spin_lock_irqsave(&h->lock, flags);
lockup_detected = readl(h->vaddr + SA5_SCRATCHPAD_OFFSET);
if (!lockup_detected) {
-@@ -6924,7 +6924,7 @@ reinit_after_soft_reset:
+@@ -6922,7 +6922,7 @@ reinit_after_soft_reset:
}
/* make sure the board interrupts are off */
if (hpsa_request_irqs(h, do_hpsa_intr_msi, do_hpsa_intr_intx))
goto clean2;
-@@ -6960,7 +6960,7 @@ reinit_after_soft_reset:
+@@ -6958,7 +6958,7 @@ reinit_after_soft_reset:
* fake ones to scoop up any residual completions.
*/
spin_lock_irqsave(&h->lock, flags);
spin_unlock_irqrestore(&h->lock, flags);
hpsa_free_irqs(h);
rc = hpsa_request_irqs(h, hpsa_msix_discard_completions,
-@@ -6979,9 +6979,9 @@ reinit_after_soft_reset:
+@@ -6977,9 +6977,9 @@ reinit_after_soft_reset:
dev_info(&h->pdev->dev, "Board READY.\n");
dev_info(&h->pdev->dev,
"Waiting for stale completions to drain.\n");
rc = controller_reset_failed(h->cfgtable);
if (rc)
-@@ -7006,7 +7006,7 @@ reinit_after_soft_reset:
+@@ -7004,7 +7004,7 @@ reinit_after_soft_reset:
/* Turn the interrupts on so we can service requests */
hpsa_hba_inquiry(h);
hpsa_register_scsi(h); /* hook ourselves into SCSI subsystem */
-@@ -7079,7 +7079,7 @@ static void hpsa_shutdown(struct pci_dev *pdev)
+@@ -7077,7 +7077,7 @@ static void hpsa_shutdown(struct pci_dev *pdev)
* To write all data in the battery backed cache to disks
*/
hpsa_flush_cache(h);
hpsa_free_irqs_and_disable_msix(h);
}
-@@ -7200,7 +7200,7 @@ static int hpsa_enter_performant_mode(struct ctlr_info *h, u32 trans_support)
+@@ -7198,7 +7198,7 @@ static int hpsa_enter_performant_mode(struct ctlr_info *h, u32 trans_support)
CFGTBL_Trans_enable_directed_msix |
(trans_support & (CFGTBL_Trans_io_accel1 |
CFGTBL_Trans_io_accel2));
/* This is a bit complicated. There are 8 registers on
* the controller which we write to to tell it 8 different
-@@ -7242,7 +7242,7 @@ static int hpsa_enter_performant_mode(struct ctlr_info *h, u32 trans_support)
+@@ -7240,7 +7240,7 @@ static int hpsa_enter_performant_mode(struct ctlr_info *h, u32 trans_support)
* perform the superfluous readl() after each command submission.
*/
if (trans_support & (CFGTBL_Trans_io_accel1 | CFGTBL_Trans_io_accel2))
/* Controller spec: zero out this buffer. */
for (i = 0; i < h->nreply_queues; i++)
-@@ -7272,12 +7272,12 @@ static int hpsa_enter_performant_mode(struct ctlr_info *h, u32 trans_support)
+@@ -7270,12 +7270,12 @@ static int hpsa_enter_performant_mode(struct ctlr_info *h, u32 trans_support)
* enable outbound interrupt coalescing in accelerator mode;
*/
if (trans_support & CFGTBL_Trans_io_accel1) {
.qc_issue = sas_ata_qc_issue,
.qc_fill_rtf = sas_ata_qc_fill_rtf,
diff --git a/drivers/scsi/lpfc/lpfc.h b/drivers/scsi/lpfc/lpfc.h
-index 434e903..5a4a79b 100644
+index 9b81a34..a9b7b8c 100644
--- a/drivers/scsi/lpfc/lpfc.h
+++ b/drivers/scsi/lpfc/lpfc.h
-@@ -430,7 +430,7 @@ struct lpfc_vport {
+@@ -433,7 +433,7 @@ struct lpfc_vport {
struct dentry *debug_nodelist;
struct dentry *vport_debugfs_root;
struct lpfc_debugfs_trc *disc_trc;
#endif
uint8_t stat_data_enabled;
uint8_t stat_data_blocked;
-@@ -880,8 +880,8 @@ struct lpfc_hba {
+@@ -883,8 +883,8 @@ struct lpfc_hba {
struct timer_list fabric_block_timer;
unsigned long bit_flags;
#define FABRIC_COMANDS_BLOCKED 0
unsigned long last_rsrc_error_time;
unsigned long last_ramp_down_time;
#ifdef CONFIG_SCSI_LPFC_DEBUG_FS
-@@ -916,7 +916,7 @@ struct lpfc_hba {
+@@ -919,7 +919,7 @@ struct lpfc_hba {
struct dentry *debug_slow_ring_trc;
struct lpfc_debugfs_trc *slow_ring_trc;
struct dentry *idiag_root;
struct dentry *idiag_pci_cfg;
diff --git a/drivers/scsi/lpfc/lpfc_debugfs.c b/drivers/scsi/lpfc/lpfc_debugfs.c
-index 5633e7d..8272114 100644
+index 513edcb..805c6a8 100644
--- a/drivers/scsi/lpfc/lpfc_debugfs.c
+++ b/drivers/scsi/lpfc/lpfc_debugfs.c
@@ -106,7 +106,7 @@ MODULE_PARM_DESC(lpfc_debugfs_mask_disc_trc,
snprintf(name, sizeof(name), "discovery_trace");
vport->debug_disc_trc =
diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c
-index 0b2c53a..aec2b45 100644
+index e8c8c1e..5f2e11c 100644
--- a/drivers/scsi/lpfc/lpfc_init.c
+++ b/drivers/scsi/lpfc/lpfc_init.c
-@@ -11290,8 +11290,10 @@ lpfc_init(void)
+@@ -11406,8 +11406,10 @@ lpfc_init(void)
"misc_register returned with status %d", error);
if (lpfc_enable_npiv) {
lpfc_transport_template =
fc_attach_transport(&lpfc_transport_functions);
diff --git a/drivers/scsi/lpfc/lpfc_scsi.c b/drivers/scsi/lpfc/lpfc_scsi.c
-index 4f9222e..f1850e3 100644
+index c140f99..11b2505 100644
--- a/drivers/scsi/lpfc/lpfc_scsi.c
+++ b/drivers/scsi/lpfc/lpfc_scsi.c
@@ -261,7 +261,7 @@ lpfc_rampdown_queue_depth(struct lpfc_hba *phba)
extern void qla2x00_free_sysfs_attr(scsi_qla_host_t *, bool);
extern void qla2x00_init_host_attr(scsi_qla_host_t *);
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
-index cce1cbc..5b9f0fe 100644
+index 7462dd7..5b64c24 100644
--- a/drivers/scsi/qla2xxx/qla_os.c
+++ b/drivers/scsi/qla2xxx/qla_os.c
@@ -1435,8 +1435,10 @@ qla2x00_config_dma_addressing(struct qla_hw_data *ha)
def_timeout = le16_to_cpu(ddb_entry->fw_ddb_entry.def_timeout);
ddb_entry->default_relogin_timeout =
(def_timeout > LOGIN_TOV) && (def_timeout < LOGIN_TOV * 10) ?
+diff --git a/drivers/scsi/scsi.c b/drivers/scsi/scsi.c
+index 3833bf5..95feaf1 100644
+--- a/drivers/scsi/scsi.c
++++ b/drivers/scsi/scsi.c
+@@ -637,7 +637,7 @@ void scsi_finish_command(struct scsi_cmnd *cmd)
+
+ good_bytes = scsi_bufflen(cmd);
+ if (cmd->request->cmd_type != REQ_TYPE_BLOCK_PC) {
+- int old_good_bytes = good_bytes;
++ unsigned int old_good_bytes = good_bytes;
+ drv = scsi_cmd_to_driver(cmd);
+ if (drv->done)
+ good_bytes = drv->done(cmd);
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index b1a2631..5bcd9c8 100644
--- a/drivers/scsi/scsi_lib.c
} \
static DEVICE_ATTR(field, S_IRUGO, show_iostat_##field, NULL)
diff --git a/drivers/scsi/scsi_transport_fc.c b/drivers/scsi/scsi_transport_fc.c
-index 5d6f348..18778a6b 100644
+index 24eaaf6..de30ec9 100644
--- a/drivers/scsi/scsi_transport_fc.c
+++ b/drivers/scsi/scsi_transport_fc.c
-@@ -501,7 +501,7 @@ static DECLARE_TRANSPORT_CLASS(fc_vport_class,
+@@ -502,7 +502,7 @@ static DECLARE_TRANSPORT_CLASS(fc_vport_class,
* Netlink Infrastructure
*/
/**
* fc_get_event_number - Obtain the next sequential FC event number
-@@ -514,7 +514,7 @@ static atomic_t fc_event_seq;
+@@ -515,7 +515,7 @@ static atomic_t fc_event_seq;
u32
fc_get_event_number(void)
{
}
EXPORT_SYMBOL(fc_get_event_number);
-@@ -658,7 +658,7 @@ static __init int fc_transport_init(void)
+@@ -659,7 +659,7 @@ static __init int fc_transport_init(void)
{
int error;
error = transport_class_register(&fc_host_class);
if (error)
-@@ -848,7 +848,7 @@ static int fc_str_to_dev_loss(const char *buf, unsigned long *val)
+@@ -849,7 +849,7 @@ static int fc_str_to_dev_loss(const char *buf, unsigned long *val)
char *cp;
*val = simple_strtoul(buf, &cp, 0);
err = class_register(&iscsi_transport_class);
if (err)
diff --git a/drivers/scsi/scsi_transport_srp.c b/drivers/scsi/scsi_transport_srp.c
-index ae45bd9..c32a586 100644
+index f115f67..b80b2c1 100644
--- a/drivers/scsi/scsi_transport_srp.c
+++ b/drivers/scsi/scsi_transport_srp.c
@@ -35,7 +35,7 @@
return 0;
}
-@@ -734,7 +734,7 @@ struct srp_rport *srp_rport_add(struct Scsi_Host *shost,
+@@ -744,7 +744,7 @@ struct srp_rport *srp_rport_add(struct Scsi_Host *shost,
rport_fast_io_fail_timedout);
INIT_DELAYED_WORK(&rport->dev_loss_work, rport_dev_loss_timedout);
transport_setup_device(&rport->dev);
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
-index 3290a3e..d65ac1c 100644
+index 7f9d65f..e856438 100644
--- a/drivers/scsi/sd.c
+++ b/drivers/scsi/sd.c
-@@ -3006,7 +3006,7 @@ static int sd_probe(struct device *dev)
+@@ -111,7 +111,7 @@ static int sd_resume(struct device *);
+ static void sd_rescan(struct device *);
+ static int sd_init_command(struct scsi_cmnd *SCpnt);
+ static void sd_uninit_command(struct scsi_cmnd *SCpnt);
+-static int sd_done(struct scsi_cmnd *);
++static unsigned int sd_done(struct scsi_cmnd *);
+ static int sd_eh_action(struct scsi_cmnd *, int);
+ static void sd_read_capacity(struct scsi_disk *sdkp, unsigned char *buffer);
+ static void scsi_disk_release(struct device *cdev);
+@@ -1646,7 +1646,7 @@ static unsigned int sd_completed_bytes(struct scsi_cmnd *scmd)
+ *
+ * Note: potentially run from within an ISR. Must not block.
+ **/
+-static int sd_done(struct scsi_cmnd *SCpnt)
++static unsigned int sd_done(struct scsi_cmnd *SCpnt)
+ {
+ int result = SCpnt->result;
+ unsigned int good_bytes = result ? 0 : scsi_bufflen(SCpnt);
+@@ -2973,7 +2973,7 @@ static int sd_probe(struct device *dev)
sdkp->disk = gd;
sdkp->index = index;
atomic_set(&sdkp->openers, 0);
if (!sdp->request_queue->rq_timeout) {
if (sdp->type != TYPE_MOD)
diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c
-index 2270bd5..98408a5 100644
+index 9d7b7db..33ecc51 100644
--- a/drivers/scsi/sg.c
+++ b/drivers/scsi/sg.c
@@ -1083,7 +1083,7 @@ sg_ioctl(struct file *filp, unsigned int cmd_in, unsigned long arg)
case BLKTRACESTART:
return blk_trace_startstop(sdp->device->request_queue, 1);
case BLKTRACESTOP:
+diff --git a/drivers/scsi/sr.c b/drivers/scsi/sr.c
+index 8bd54a6..dd037a5 100644
+--- a/drivers/scsi/sr.c
++++ b/drivers/scsi/sr.c
+@@ -80,7 +80,7 @@ static DEFINE_MUTEX(sr_mutex);
+ static int sr_probe(struct device *);
+ static int sr_remove(struct device *);
+ static int sr_init_command(struct scsi_cmnd *SCpnt);
+-static int sr_done(struct scsi_cmnd *);
++static unsigned int sr_done(struct scsi_cmnd *);
+ static int sr_runtime_suspend(struct device *dev);
+
+ static struct dev_pm_ops sr_pm_ops = {
+@@ -312,11 +312,11 @@ do_tur:
+ * It will be notified on the end of a SCSI read / write, and will take one
+ * of several actions based on success or failure.
+ */
+-static int sr_done(struct scsi_cmnd *SCpnt)
++static unsigned int sr_done(struct scsi_cmnd *SCpnt)
+ {
+ int result = SCpnt->result;
+- int this_count = scsi_bufflen(SCpnt);
+- int good_bytes = (result == 0 ? this_count : 0);
++ unsigned int this_count = scsi_bufflen(SCpnt);
++ unsigned int good_bytes = (result == 0 ? this_count : 0);
+ int block_sectors = 0;
+ long error_sector;
+ struct scsi_cd *cd = scsi_cd(SCpnt->request->rq_disk);
+diff --git a/drivers/scsi/st.c b/drivers/scsi/st.c
+index 9a1c342..525ab4c 100644
+--- a/drivers/scsi/st.c
++++ b/drivers/scsi/st.c
+@@ -1274,9 +1274,9 @@ static int st_open(struct inode *inode, struct file *filp)
+ spin_lock(&st_use_lock);
+ STp->in_use = 0;
+ spin_unlock(&st_use_lock);
+- scsi_tape_put(STp);
+ if (resumed)
+ scsi_autopm_put_device(STp->device);
++ scsi_tape_put(STp);
+ return retval;
+
+ }
diff --git a/drivers/soc/tegra/fuse/fuse-tegra.c b/drivers/soc/tegra/fuse/fuse-tegra.c
index c0d660f..24a5854 100644
--- a/drivers/soc/tegra/fuse/fuse-tegra.c
.read = fuse_read,
};
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
-index 57a1950..ae54e21 100644
+index d35c1a1..eda08dc 100644
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
-@@ -2307,7 +2307,7 @@ int spi_bus_unlock(struct spi_master *master)
+@@ -2206,7 +2206,7 @@ int spi_bus_unlock(struct spi_master *master)
EXPORT_SYMBOL_GPL(spi_bus_unlock);
/* portable code must never pass more than 32 bytes */
MKDEV(0, tdev->index), NULL, "%s", tdev->name);
if (IS_ERR(tdev->dev))
diff --git a/drivers/staging/comedi/comedi_fops.c b/drivers/staging/comedi/comedi_fops.c
-index 727640e..55bf61c 100644
+index e78ddbe..ac437c0 100644
--- a/drivers/staging/comedi/comedi_fops.c
+++ b/drivers/staging/comedi/comedi_fops.c
@@ -297,8 +297,8 @@ static void comedi_file_reset(struct file *file)
}
static void comedi_file_check(struct file *file)
-@@ -1924,7 +1924,7 @@ static int do_setrsubd_ioctl(struct comedi_device *dev, unsigned long arg,
+@@ -1951,7 +1951,7 @@ static int do_setrsubd_ioctl(struct comedi_device *dev, unsigned long arg,
!(s_old->async->cmd.flags & CMDF_WRITE))
return -EBUSY;
return 0;
}
-@@ -1966,7 +1966,7 @@ static int do_setwsubd_ioctl(struct comedi_device *dev, unsigned long arg,
+@@ -1993,7 +1993,7 @@ static int do_setwsubd_ioctl(struct comedi_device *dev, unsigned long arg,
(s_old->async->cmd.flags & CMDF_WRITE))
return -EBUSY;
}
diff --git a/drivers/staging/fbtft/fbtft-core.c b/drivers/staging/fbtft/fbtft-core.c
-index 37dcf7e..f3c2016 100644
+index 53b748b..a5ae0b3 100644
--- a/drivers/staging/fbtft/fbtft-core.c
+++ b/drivers/staging/fbtft/fbtft-core.c
-@@ -689,7 +689,7 @@ struct fb_info *fbtft_framebuffer_alloc(struct fbtft_display *display,
+@@ -680,7 +680,7 @@ struct fb_info *fbtft_framebuffer_alloc(struct fbtft_display *display,
{
struct fb_info *info;
struct fbtft_par *par;
struct fbtft_platform_data *pdata = dev->platform_data;
u8 *vmem = NULL;
diff --git a/drivers/staging/fbtft/fbtft.h b/drivers/staging/fbtft/fbtft.h
-index 0dbf3f9..fed0063 100644
+index 9fd98cb..a9cf912 100644
--- a/drivers/staging/fbtft/fbtft.h
+++ b/drivers/staging/fbtft/fbtft.h
@@ -106,7 +106,7 @@ struct fbtft_ops {
and pointers */
#endif
diff --git a/drivers/staging/i2o/i2o_proc.c b/drivers/staging/i2o/i2o_proc.c
-index ad84f33..c5bdf65 100644
+index 780fee3..ca9dcae 100644
--- a/drivers/staging/i2o/i2o_proc.c
+++ b/drivers/staging/i2o/i2o_proc.c
-@@ -255,12 +255,6 @@ static char *scsi_devices[] = {
+@@ -253,12 +253,6 @@ static char *scsi_devices[] = {
"Array Controller Device"
};
static int i2o_report_query_status(struct seq_file *seq, int block_status,
char *group)
{
-@@ -707,9 +701,9 @@ static int i2o_seq_show_status(struct seq_file *seq, void *v)
+@@ -711,9 +705,9 @@ static int i2o_seq_show_status(struct seq_file *seq, void *v)
static int i2o_seq_show_hw(struct seq_file *seq, void *v)
{
struct i2o_controller *c = (struct i2o_controller *)seq->private;
int token;
u32 hwcap;
-@@ -790,7 +784,6 @@ static int i2o_seq_show_ddm_table(struct seq_file *seq, void *v)
+@@ -794,7 +788,6 @@ static int i2o_seq_show_ddm_table(struct seq_file *seq, void *v)
} *result;
i2o_exec_execute_ddm_table ddm_table;
result = kmalloc(sizeof(*result), GFP_KERNEL);
if (!result)
-@@ -825,8 +818,7 @@ static int i2o_seq_show_ddm_table(struct seq_file *seq, void *v)
+@@ -829,8 +822,7 @@ static int i2o_seq_show_ddm_table(struct seq_file *seq, void *v)
seq_printf(seq, "%-#7x", ddm_table.i2o_vendor_id);
seq_printf(seq, "%-#8x", ddm_table.module_id);
seq_printf(seq, "%9d ", ddm_table.data_size);
seq_printf(seq, "%8d", ddm_table.code_size);
-@@ -893,7 +885,6 @@ static int i2o_seq_show_drivers_stored(struct seq_file *seq, void *v)
+@@ -897,7 +889,6 @@ static int i2o_seq_show_drivers_stored(struct seq_file *seq, void *v)
i2o_driver_result_table *result;
i2o_driver_store_table *dst;
result = kmalloc(sizeof(i2o_driver_result_table), GFP_KERNEL);
if (result == NULL)
-@@ -928,9 +919,8 @@ static int i2o_seq_show_drivers_stored(struct seq_file *seq, void *v)
+@@ -932,9 +923,8 @@ static int i2o_seq_show_drivers_stored(struct seq_file *seq, void *v)
seq_printf(seq, "%-#7x", dst->i2o_vendor_id);
seq_printf(seq, "%-#8x", dst->module_id);
seq_printf(seq, "%8d ", dst->module_size);
seq_printf(seq, "%8d ", dst->mpb_size);
seq_printf(seq, "0x%04x", dst->module_flags);
-@@ -1246,11 +1236,10 @@ static int i2o_seq_show_authorized_users(struct seq_file *seq, void *v)
+@@ -1250,11 +1240,10 @@ static int i2o_seq_show_authorized_users(struct seq_file *seq, void *v)
static int i2o_seq_show_dev_identity(struct seq_file *seq, void *v)
{
struct i2o_device *d = (struct i2o_device *)seq->private;
token = i2o_parm_field_get(d, 0xF100, -1, &work32, sizeof(work32));
-@@ -1262,14 +1251,10 @@ static int i2o_seq_show_dev_identity(struct seq_file *seq, void *v)
+@@ -1266,14 +1255,10 @@ static int i2o_seq_show_dev_identity(struct seq_file *seq, void *v)
seq_printf(seq, "Device Class : %s\n", i2o_get_class_name(work16[0]));
seq_printf(seq, "Owner TID : %0#5x\n", work16[2]);
seq_printf(seq, "Parent TID : %0#5x\n", work16[3]);
seq_printf(seq, "Serial number : ");
print_serial_number(seq, (u8 *) (work32 + 16),
-@@ -1306,8 +1291,6 @@ static int i2o_seq_show_ddm_identity(struct seq_file *seq, void *v)
+@@ -1310,8 +1295,6 @@ static int i2o_seq_show_ddm_identity(struct seq_file *seq, void *v)
u8 pad[256]; // allow up to 256 byte (max) serial number
} result;
token = i2o_parm_field_get(d, 0xF101, -1, &result, sizeof(result));
if (token < 0) {
-@@ -1316,10 +1299,8 @@ static int i2o_seq_show_ddm_identity(struct seq_file *seq, void *v)
+@@ -1320,10 +1303,8 @@ static int i2o_seq_show_ddm_identity(struct seq_file *seq, void *v)
}
seq_printf(seq, "Registering DDM TID : 0x%03x\n", result.ddm_tid);
seq_printf(seq, "Serial number : ");
print_serial_number(seq, result.serial_number, sizeof(result) - 36);
-@@ -1343,8 +1324,6 @@ static int i2o_seq_show_uinfo(struct seq_file *seq, void *v)
+@@ -1347,8 +1328,6 @@ static int i2o_seq_show_uinfo(struct seq_file *seq, void *v)
u8 instance_number[4];
} result;
token = i2o_parm_field_get(d, 0xF102, -1, &result, sizeof(result));
if (token < 0) {
-@@ -1352,14 +1331,10 @@ static int i2o_seq_show_uinfo(struct seq_file *seq, void *v)
+@@ -1356,14 +1335,10 @@ static int i2o_seq_show_uinfo(struct seq_file *seq, void *v)
return 0;
}
return 0;
}
-@@ -1368,9 +1343,9 @@ static int i2o_seq_show_uinfo(struct seq_file *seq, void *v)
+@@ -1372,9 +1347,9 @@ static int i2o_seq_show_uinfo(struct seq_file *seq, void *v)
static int i2o_seq_show_sgl_limits(struct seq_file *seq, void *v)
{
struct i2o_device *d = (struct i2o_device *)seq->private;
token = i2o_parm_field_get(d, 0xF103, -1, &work32, sizeof(work32));
diff --git a/drivers/staging/i2o/iop.c b/drivers/staging/i2o/iop.c
-index 52334fc..d7f40b3 100644
+index 23bdbe4..4e1f340 100644
--- a/drivers/staging/i2o/iop.c
+++ b/drivers/staging/i2o/iop.c
@@ -111,10 +111,10 @@ u32 i2o_cntxt_list_add(struct i2o_controller * c, void *ptr)
INIT_LIST_HEAD(&c->context_list);
#endif
+diff --git a/drivers/staging/iio/accel/lis3l02dq_ring.c b/drivers/staging/iio/accel/lis3l02dq_ring.c
+index b892f2c..9b4898a 100644
+--- a/drivers/staging/iio/accel/lis3l02dq_ring.c
++++ b/drivers/staging/iio/accel/lis3l02dq_ring.c
+@@ -118,7 +118,7 @@ static int lis3l02dq_get_buffer_element(struct iio_dev *indio_dev,
+ int scan_count = bitmap_weight(indio_dev->active_scan_mask,
+ indio_dev->masklength);
+
+- rx_array = kcalloc(4, scan_count, GFP_KERNEL);
++ rx_array = kcalloc(scan_count, 4, GFP_KERNEL);
+ if (!rx_array)
+ return -ENOMEM;
+ ret = lis3l02dq_read_all(indio_dev, rx_array);
+diff --git a/drivers/staging/iio/adc/ad7280a.c b/drivers/staging/iio/adc/ad7280a.c
+index d98e229..9c59bc2 100644
+--- a/drivers/staging/iio/adc/ad7280a.c
++++ b/drivers/staging/iio/adc/ad7280a.c
+@@ -547,8 +547,8 @@ static int ad7280_attr_init(struct ad7280_state *st)
+ {
+ int dev, ch, cnt;
+
+- st->iio_attr = kcalloc(2, sizeof(*st->iio_attr) *
+- (st->slave_num + 1) * AD7280A_CELLS_PER_DEV,
++ st->iio_attr = kcalloc(sizeof(*st->iio_attr) *
++ (st->slave_num + 1) * AD7280A_CELLS_PER_DEV, 2,
+ GFP_KERNEL);
+ if (st->iio_attr == NULL)
+ return -ENOMEM;
diff --git a/drivers/staging/lustre/lnet/selftest/brw_test.c b/drivers/staging/lustre/lnet/selftest/brw_test.c
-index 463da07..e791ce9 100644
+index 658f458..0564216 100644
--- a/drivers/staging/lustre/lnet/selftest/brw_test.c
+++ b/drivers/staging/lustre/lnet/selftest/brw_test.c
-@@ -488,13 +488,11 @@ brw_server_handle(struct srpc_server_rpc *rpc)
+@@ -487,13 +487,11 @@ brw_server_handle(struct srpc_server_rpc *rpc)
return 0;
}
srpc_service_t brw_test_service;
diff --git a/drivers/staging/lustre/lnet/selftest/framework.c b/drivers/staging/lustre/lnet/selftest/framework.c
-index 5709148..ccd9e0d 100644
+index a93a90d..c51dde6 100644
--- a/drivers/staging/lustre/lnet/selftest/framework.c
+++ b/drivers/staging/lustre/lnet/selftest/framework.c
@@ -1628,12 +1628,10 @@ static srpc_service_t sfw_services[] = {
extern void brw_init_test_service(void);
-@@ -1675,12 +1673,10 @@ sfw_startup (void)
+@@ -1675,12 +1673,10 @@ sfw_startup(void)
INIT_LIST_HEAD(&sfw_data.fw_zombie_rpcs);
INIT_LIST_HEAD(&sfw_data.fw_zombie_sessions);
- brw_init_test_client();
brw_init_test_service();
rc = sfw_register_test(&brw_test_service, &brw_test_client);
- LASSERT (rc == 0);
+ LASSERT(rc == 0);
- ping_init_test_client();
ping_init_test_service();
rc = sfw_register_test(&ping_test_service, &ping_test_client);
- LASSERT (rc == 0);
+ LASSERT(rc == 0);
diff --git a/drivers/staging/lustre/lnet/selftest/ping_test.c b/drivers/staging/lustre/lnet/selftest/ping_test.c
-index d8c0df6..5041cbb 100644
+index 644069a..83cbd26 100644
--- a/drivers/staging/lustre/lnet/selftest/ping_test.c
+++ b/drivers/staging/lustre/lnet/selftest/ping_test.c
@@ -211,14 +211,12 @@ ping_server_handle(struct srpc_server_rpc *rpc)
srpc_service_t ping_test_service;
void ping_init_test_service(void)
diff --git a/drivers/staging/lustre/lustre/include/lustre_dlm.h b/drivers/staging/lustre/lustre/include/lustre_dlm.h
-index 83bc0a9..12ba00a 100644
+index bac9902..0225fe1 100644
--- a/drivers/staging/lustre/lustre/include/lustre_dlm.h
+++ b/drivers/staging/lustre/lustre/include/lustre_dlm.h
@@ -1139,7 +1139,7 @@ struct ldlm_callback_suite {
CDEBUG(D_DLMTRACE,
"flags %#llx owner %llu pid %u mode %u start %llu end %llu\n",
-diff --git a/drivers/staging/lustre/lustre/libcfs/linux/linux-proc.c b/drivers/staging/lustre/lustre/libcfs/linux/linux-proc.c
-index c539e37..743b213 100644
---- a/drivers/staging/lustre/lustre/libcfs/linux/linux-proc.c
-+++ b/drivers/staging/lustre/lustre/libcfs/linux/linux-proc.c
-@@ -237,7 +237,7 @@ static int proc_console_max_delay_cs(struct ctl_table *table, int write,
+diff --git a/drivers/staging/lustre/lustre/libcfs/module.c b/drivers/staging/lustre/lustre/libcfs/module.c
+index f0ee76a..1d01af9 100644
+--- a/drivers/staging/lustre/lustre/libcfs/module.c
++++ b/drivers/staging/lustre/lustre/libcfs/module.c
+@@ -380,11 +380,11 @@ out:
+
+
+ struct cfs_psdev_ops libcfs_psdev_ops = {
+- libcfs_psdev_open,
+- libcfs_psdev_release,
+- NULL,
+- NULL,
+- libcfs_ioctl
++ .p_open = libcfs_psdev_open,
++ .p_close = libcfs_psdev_release,
++ .p_read = NULL,
++ .p_write = NULL,
++ .p_ioctl = libcfs_ioctl
+ };
+
+ static int init_libcfs_module(void)
+@@ -631,7 +631,7 @@ static int proc_console_max_delay_cs(struct ctl_table *table, int write,
loff_t *ppos)
{
int rc, max_delay_cs;
long d;
dummy.data = &max_delay_cs;
-@@ -270,7 +270,7 @@ static int proc_console_min_delay_cs(struct ctl_table *table, int write,
+@@ -664,7 +664,7 @@ static int proc_console_min_delay_cs(struct ctl_table *table, int write,
loff_t *ppos)
{
int rc, min_delay_cs;
long d;
dummy.data = &min_delay_cs;
-@@ -302,7 +302,7 @@ static int proc_console_backoff(struct ctl_table *table, int write,
+@@ -696,7 +696,7 @@ static int proc_console_backoff(struct ctl_table *table, int write,
void __user *buffer, size_t *lenp, loff_t *ppos)
{
int rc, backoff;
dummy.data = &backoff;
dummy.proc_handler = &proc_dointvec;
-diff --git a/drivers/staging/lustre/lustre/libcfs/module.c b/drivers/staging/lustre/lustre/libcfs/module.c
-index 7dc77dd..289d03e 100644
---- a/drivers/staging/lustre/lustre/libcfs/module.c
-+++ b/drivers/staging/lustre/lustre/libcfs/module.c
-@@ -313,11 +313,11 @@ out:
-
-
- struct cfs_psdev_ops libcfs_psdev_ops = {
-- libcfs_psdev_open,
-- libcfs_psdev_release,
-- NULL,
-- NULL,
-- libcfs_ioctl
-+ .p_open = libcfs_psdev_open,
-+ .p_close = libcfs_psdev_release,
-+ .p_read = NULL,
-+ .p_write = NULL,
-+ .p_ioctl = libcfs_ioctl
- };
-
- extern int insert_proc(void);
diff --git a/drivers/staging/octeon/ethernet-rx.c b/drivers/staging/octeon/ethernet-rx.c
index 22667db..8b703b6 100644
--- a/drivers/staging/octeon/ethernet-rx.c
#endif
dev_kfree_skb_irq(skb);
diff --git a/drivers/staging/octeon/ethernet.c b/drivers/staging/octeon/ethernet.c
-index 460e854..f926452 100644
+index fbbe866..2943243 100644
--- a/drivers/staging/octeon/ethernet.c
+++ b/drivers/staging/octeon/ethernet.c
-@@ -241,11 +241,11 @@ static struct net_device_stats *cvm_oct_common_get_stats(struct net_device *dev)
+@@ -251,11 +251,11 @@ static struct net_device_stats *cvm_oct_common_get_stats(struct net_device *dev)
* since the RX tasklet also increments it.
*/
#ifdef CONFIG_64BIT
struct io_req {
struct list_head list;
+diff --git a/drivers/staging/sm750fb/sm750.c b/drivers/staging/sm750fb/sm750.c
+index dbbb2f8..5232114 100644
+--- a/drivers/staging/sm750fb/sm750.c
++++ b/drivers/staging/sm750fb/sm750.c
+@@ -780,6 +780,7 @@ static struct fb_ops lynxfb_ops = {
+ .fb_set_par = lynxfb_ops_set_par,
+ .fb_setcolreg = lynxfb_ops_setcolreg,
+ .fb_blank = lynxfb_ops_blank,
++ .fb_pan_display = lynxfb_ops_pan_display,
+ .fb_fillrect = cfb_fillrect,
+ .fb_imageblit = cfb_imageblit,
+ .fb_copyarea = cfb_copyarea,
+@@ -827,8 +828,10 @@ static int lynxfb_set_fbinfo(struct fb_info *info, int index)
+ par->index = index;
+ output->channel = &crtc->channel;
+ sm750fb_set_drv(par);
+- lynxfb_ops.fb_pan_display = lynxfb_ops_pan_display;
+
++ pax_open_kernel();
++ *(void **)&lynxfb_ops.fb_pan_display = lynxfb_ops_pan_display;
++ pax_close_kernel();
+
+ /* set current cursor variable and proc pointer,
+ * must be set after crtc member initialized */
+@@ -850,7 +853,9 @@ static int lynxfb_set_fbinfo(struct fb_info *info, int index)
+ crtc->cursor.share = share;
+ memset_io(crtc->cursor.vstart, 0, crtc->cursor.size);
+ if (!g_hwcursor) {
+- lynxfb_ops.fb_cursor = NULL;
++ pax_open_kernel();
++ *(void **)&lynxfb_ops.fb_cursor = NULL;
++ pax_close_kernel();
+ crtc->cursor.disable(&crtc->cursor);
+ }
+
+@@ -858,9 +863,11 @@ static int lynxfb_set_fbinfo(struct fb_info *info, int index)
+ /* set info->fbops, must be set before fb_find_mode */
+ if (!share->accel_off) {
+ /* use 2d acceleration */
+- lynxfb_ops.fb_fillrect = lynxfb_ops_fillrect;
+- lynxfb_ops.fb_copyarea = lynxfb_ops_copyarea;
+- lynxfb_ops.fb_imageblit = lynxfb_ops_imageblit;
++ pax_open_kernel();
++ *(void **)&lynxfb_ops.fb_fillrect = lynxfb_ops_fillrect;
++ *(void **)&lynxfb_ops.fb_copyarea = lynxfb_ops_copyarea;
++ *(void **)&lynxfb_ops.fb_imageblit = lynxfb_ops_imageblit;
++ pax_close_kernel();
+ }
+ info->fbops = &lynxfb_ops;
+
diff --git a/drivers/staging/unisys/visorchipset/visorchipset.h b/drivers/staging/unisys/visorchipset/visorchipset.h
-index 98f3ba4..c6a7fce 100644
+index bd46df9..a0a5274 100644
--- a/drivers/staging/unisys/visorchipset/visorchipset.h
+++ b/drivers/staging/unisys/visorchipset/visorchipset.h
-@@ -171,7 +171,7 @@ struct visorchipset_busdev_notifiers {
+@@ -170,7 +170,7 @@ struct visorchipset_busdev_notifiers {
void (*device_resume)(ulong bus_no, ulong dev_no);
int (*get_channel_info)(uuid_le type_uuid, ulong *min_size,
ulong *max_size);
/* These functions live inside visorchipset, and will be called to indicate
* responses to specific events (by code outside of visorchipset).
-@@ -186,7 +186,7 @@ struct visorchipset_busdev_responders {
+@@ -185,7 +185,7 @@ struct visorchipset_busdev_responders {
void (*device_destroy)(ulong bus_no, ulong dev_no, int response);
void (*device_pause)(ulong bus_no, ulong dev_no, int response);
void (*device_resume)(ulong bus_no, ulong dev_no, int response);
/** Register functions (in the bus driver) to get called by visorchipset
* whenever a bus or device appears for which this service partition is
diff --git a/drivers/target/sbp/sbp_target.c b/drivers/target/sbp/sbp_target.c
-index 9512af6..045bf5a 100644
+index 18b0f97..9c7716e 100644
--- a/drivers/target/sbp/sbp_target.c
+++ b/drivers/target/sbp/sbp_target.c
-@@ -62,7 +62,7 @@ static const u32 sbp_unit_directory_template[] = {
+@@ -61,7 +61,7 @@ static const u32 sbp_unit_directory_template[] = {
#define SESSION_MAINTENANCE_INTERVAL HZ
static void session_maintenance_work(struct work_struct *);
static int sbp_run_transaction(struct fw_card *, int, int, int, int,
-@@ -444,7 +444,7 @@ static void sbp_management_request_login(
+@@ -443,7 +443,7 @@ static void sbp_management_request_login(
login->lun = se_lun;
login->status_fifo_addr = sbp2_pointer_to_addr(&req->orb.status_fifo);
login->exclusive = LOGIN_ORB_EXCLUSIVE(be32_to_cpu(req->orb.misc));
login->tgt_agt = sbp_target_agent_register(login);
if (IS_ERR(login->tgt_agt)) {
diff --git a/drivers/target/target_core_device.c b/drivers/target/target_core_device.c
-index 7faa6ae..ae6c410 100644
+index ce5f768..a4f884a 100644
--- a/drivers/target/target_core_device.c
+++ b/drivers/target/target_core_device.c
-@@ -1495,7 +1495,7 @@ struct se_device *target_alloc_device(struct se_hba *hba, const char *name)
+@@ -1496,7 +1496,7 @@ struct se_device *target_alloc_device(struct se_hba *hba, const char *name)
spin_lock_init(&dev->se_tmr_lock);
spin_lock_init(&dev->qf_cmd_lock);
sema_init(&dev->caw_sem, 1);
spin_lock_init(&dev->t10_wwn.t10_vpd_lock);
INIT_LIST_HEAD(&dev->t10_pr.registration_list);
diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c
-index f786de0..04b643e 100644
+index 675f2d9..1389429 100644
--- a/drivers/target/target_core_transport.c
+++ b/drivers/target/target_core_transport.c
-@@ -1168,7 +1168,7 @@ transport_check_alloc_task_attr(struct se_cmd *cmd)
+@@ -1208,7 +1208,7 @@ transport_check_alloc_task_attr(struct se_cmd *cmd)
* Used to determine when ORDERED commands should go from
* Dormant to Active status.
*/
tty_port_tty_set(&ch->port, tty);
mutex_lock(&ch->port.mutex);
diff --git a/drivers/tty/n_gsm.c b/drivers/tty/n_gsm.c
-index c434376..114ce13 100644
+index 2c34c32..81d10e1 100644
--- a/drivers/tty/n_gsm.c
+++ b/drivers/tty/n_gsm.c
@@ -1644,7 +1644,7 @@ static struct gsm_dlci *gsm_dlci_alloc(struct gsm_mux *gsm, int addr)
dlci->modem_rx = 0;
diff --git a/drivers/tty/n_tty.c b/drivers/tty/n_tty.c
-index cf6e0f2..4283167 100644
+index 396344c..875c1d6 100644
--- a/drivers/tty/n_tty.c
+++ b/drivers/tty/n_tty.c
@@ -116,7 +116,7 @@ struct n_tty_data {
size_t line_start;
/* protected by output lock */
-@@ -2547,6 +2547,7 @@ void n_tty_inherit_ops(struct tty_ldisc_ops *ops)
+@@ -2572,6 +2572,7 @@ void n_tty_inherit_ops(struct tty_ldisc_ops *ops)
{
*ops = tty_ldisc_N_TTY;
ops->owner = NULL;
}
EXPORT_SYMBOL_GPL(n_tty_inherit_ops);
diff --git a/drivers/tty/pty.c b/drivers/tty/pty.c
-index e72ee62..d977ad9 100644
+index 4d5e840..a2340a6 100644
--- a/drivers/tty/pty.c
+++ b/drivers/tty/pty.c
-@@ -848,8 +848,10 @@ static void __init unix98_pty_init(void)
+@@ -849,8 +849,10 @@ static void __init unix98_pty_init(void)
panic("Couldn't register Unix98 pts driver");
/* Now create the /dev/ptmx special device */
atomic_dec(&rp_num_ports_open);
clear_bit((info->aiop * 8) + info->chan, (void *) &xmit_flags[info->board]);
spin_unlock_irqrestore(&info->port.lock, flags);
+diff --git a/drivers/tty/serial/8250/8250_core.c b/drivers/tty/serial/8250/8250_core.c
+index 4506e40..ac0b470 100644
+--- a/drivers/tty/serial/8250/8250_core.c
++++ b/drivers/tty/serial/8250/8250_core.c
+@@ -3241,9 +3241,9 @@ static void univ8250_release_port(struct uart_port *port)
+
+ static void univ8250_rsa_support(struct uart_ops *ops)
+ {
+- ops->config_port = univ8250_config_port;
+- ops->request_port = univ8250_request_port;
+- ops->release_port = univ8250_release_port;
++ *(void **)&ops->config_port = univ8250_config_port;
++ *(void **)&ops->request_port = univ8250_request_port;
++ *(void **)&ops->release_port = univ8250_release_port;
+ }
+
+ #else
+@@ -3286,8 +3286,10 @@ static void __init serial8250_isa_init_ports(void)
+ }
+
+ /* chain base port ops to support Remote Supervisor Adapter */
+- univ8250_port_ops = *base_ops;
++ pax_open_kernel();
++ memcpy((void *)&univ8250_port_ops, base_ops, sizeof univ8250_port_ops);
+ univ8250_rsa_support(&univ8250_port_ops);
++ pax_close_kernel();
+
+ if (share_irqs)
+ irqflag = IRQF_SHARED;
diff --git a/drivers/tty/serial/ioc4_serial.c b/drivers/tty/serial/ioc4_serial.c
index aa28209..e08fb85 100644
--- a/drivers/tty/serial/ioc4_serial.c
if (unlikely(line < 0 || line >= UART_NR))
return -ENXIO;
diff --git a/drivers/tty/serial/samsung.c b/drivers/tty/serial/samsung.c
-index cf08876..711e0bf 100644
+index a0ae942..befa48d 100644
--- a/drivers/tty/serial/samsung.c
+++ b/drivers/tty/serial/samsung.c
@@ -987,11 +987,16 @@ static void s3c24xx_serial_shutdown(struct uart_port *port)
dbg("s3c24xx_serial_startup: port=%p (%08llx,%p)\n",
port, (unsigned long long)port->mapbase, port->membase);
-@@ -1697,10 +1702,6 @@ static int s3c24xx_serial_init_port(struct s3c24xx_uart_port *ourport,
+@@ -1698,10 +1703,6 @@ static int s3c24xx_serial_init_port(struct s3c24xx_uart_port *ourport,
/* setup info for port */
port->dev = &platdev->dev;
if (cfg->uart_flags & UPF_CONS_FLOW) {
diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c
-index 6a1055a..5ca9ad9 100644
+index 0b7bb12..ebe191a 100644
--- a/drivers/tty/serial/serial_core.c
+++ b/drivers/tty/serial/serial_core.c
-@@ -1377,7 +1377,7 @@ static void uart_close(struct tty_struct *tty, struct file *filp)
+@@ -1376,7 +1376,7 @@ static void uart_close(struct tty_struct *tty, struct file *filp)
state = drv->state + tty->index;
port = &state->port;
spin_lock_irq(&port->lock);
spin_unlock_irq(&port->lock);
return;
}
-@@ -1387,7 +1387,7 @@ static void uart_close(struct tty_struct *tty, struct file *filp)
+@@ -1386,7 +1386,7 @@ static void uart_close(struct tty_struct *tty, struct file *filp)
pr_debug("uart_close(%d) called\n", uport ? uport->line : -1);
return;
/*
-@@ -1511,7 +1511,7 @@ static void uart_hangup(struct tty_struct *tty)
+@@ -1510,7 +1510,7 @@ static void uart_hangup(struct tty_struct *tty)
uart_flush_buffer(tty);
uart_shutdown(tty, state);
spin_lock_irqsave(&port->lock, flags);
clear_bit(ASYNCB_NORMAL_ACTIVE, &port->flags);
spin_unlock_irqrestore(&port->lock, flags);
tty_port_tty_set(port, NULL);
-@@ -1598,7 +1598,7 @@ static int uart_open(struct tty_struct *tty, struct file *filp)
+@@ -1597,7 +1597,7 @@ static int uart_open(struct tty_struct *tty, struct file *filp)
pr_debug("uart_open(%d) called\n", line);
spin_lock_irq(&port->lock);
spin_unlock_irq(&port->lock);
/*
+diff --git a/drivers/tty/serial/uartlite.c b/drivers/tty/serial/uartlite.c
+index b1c6bd3..5f038e2 100644
+--- a/drivers/tty/serial/uartlite.c
++++ b/drivers/tty/serial/uartlite.c
+@@ -341,13 +341,13 @@ static int ulite_request_port(struct uart_port *port)
+ return -EBUSY;
+ }
+
+- port->private_data = &uartlite_be;
++ port->private_data = (void *)&uartlite_be;
+ ret = uart_in32(ULITE_CONTROL, port);
+ uart_out32(ULITE_CONTROL_RST_TX, ULITE_CONTROL, port);
+ ret = uart_in32(ULITE_STATUS, port);
+ /* Endianess detection */
+ if ((ret & ULITE_STATUS_TXEMPTY) != ULITE_STATUS_TXEMPTY)
+- port->private_data = &uartlite_le;
++ port->private_data = (void *)&uartlite_le;
+
+ return 0;
+ }
diff --git a/drivers/tty/synclink.c b/drivers/tty/synclink.c
index b799170..87dafd5 100644
--- a/drivers/tty/synclink.c
if (!retval)
port->flags |= ASYNC_NORMAL_ACTIVE;
diff --git a/drivers/tty/sysrq.c b/drivers/tty/sysrq.c
-index 259a4d5..9b0c9e7 100644
+index 843f2cd..7d530a6 100644
--- a/drivers/tty/sysrq.c
+++ b/drivers/tty/sysrq.c
-@@ -1085,7 +1085,7 @@ EXPORT_SYMBOL(unregister_sysrq_key);
+@@ -1086,7 +1086,7 @@ EXPORT_SYMBOL(unregister_sysrq_key);
static ssize_t write_sysrq_trigger(struct file *file, const char __user *buf,
size_t count, loff_t *ppos)
{
if (get_user(c, buf))
diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c
-index 2bb4dfc..a7f6e86 100644
+index e569546..fbce20c 100644
--- a/drivers/tty/tty_io.c
+++ b/drivers/tty/tty_io.c
-@@ -3503,7 +3503,7 @@ EXPORT_SYMBOL(tty_devnum);
+@@ -3509,7 +3509,7 @@ EXPORT_SYMBOL(tty_devnum);
void tty_default_fops(struct file_operations *fops)
{
ret = -EPERM;
goto reterr;
diff --git a/drivers/uio/uio.c b/drivers/uio/uio.c
-index 6276f13..84f2449 100644
+index 65bf067..b3b2e13 100644
--- a/drivers/uio/uio.c
+++ b/drivers/uio/uio.c
@@ -25,6 +25,7 @@
file->f_version = event_count;
return POLLIN | POLLRDNORM;
diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c
-index 1163553..f292679 100644
+index 4b0448c..fc84bec 100644
--- a/drivers/usb/core/devio.c
+++ b/drivers/usb/core/devio.c
@@ -187,7 +187,7 @@ static ssize_t usbdev_read(struct file *file, char __user *buf, size_t nbytes,
static DEVICE_ATTR_RO(urbnum);
diff --git a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c
-index b1fb9ae..4224885 100644
+index 8d5b2f4..3896940 100644
--- a/drivers/usb/core/usb.c
+++ b/drivers/usb/core/usb.c
-@@ -431,7 +431,7 @@ struct usb_device *usb_alloc_dev(struct usb_device *parent,
+@@ -447,7 +447,7 @@ struct usb_device *usb_alloc_dev(struct usb_device *parent,
set_dev_node(&dev->dev, dev_to_node(bus->controller));
dev->state = USB_STATE_ATTACHED;
dev->lpm_disable_count = 1;
return 0;
}
+diff --git a/drivers/usb/gadget/configfs.c b/drivers/usb/gadget/configfs.c
+index 0495c94..289e201 100644
+--- a/drivers/usb/gadget/configfs.c
++++ b/drivers/usb/gadget/configfs.c
+@@ -571,7 +571,7 @@ static struct config_group *function_make(
+ if (IS_ERR(fi))
+ return ERR_CAST(fi);
+
+- ret = config_item_set_name(&fi->group.cg_item, name);
++ ret = config_item_set_name(&fi->group.cg_item, "%s", name);
+ if (ret) {
+ usb_put_function_instance(fi);
+ return ERR_PTR(ret);
diff --git a/drivers/usb/gadget/function/f_uac1.c b/drivers/usb/gadget/function/f_uac1.c
-index 9719abf..789d5d9 100644
+index 7856b33..8b7fe09 100644
--- a/drivers/usb/gadget/function/f_uac1.c
+++ b/drivers/usb/gadget/function/f_uac1.c
@@ -14,6 +14,7 @@
#include "u_uac1.h"
diff --git a/drivers/usb/gadget/function/u_serial.c b/drivers/usb/gadget/function/u_serial.c
-index 491082a..dfd7d17 100644
+index 7ee05793..2e31e99 100644
--- a/drivers/usb/gadget/function/u_serial.c
+++ b/drivers/usb/gadget/function/u_serial.c
-@@ -729,9 +729,9 @@ static int gs_open(struct tty_struct *tty, struct file *file)
+@@ -732,9 +732,9 @@ static int gs_open(struct tty_struct *tty, struct file *file)
spin_lock_irq(&port->port_lock);
/* already open? Great. */
/* currently opening/closing? wait ... */
} else if (port->openclose) {
-@@ -790,7 +790,7 @@ static int gs_open(struct tty_struct *tty, struct file *file)
+@@ -793,7 +793,7 @@ static int gs_open(struct tty_struct *tty, struct file *file)
tty->driver_data = port;
port->port.tty = tty;
port->openclose = false;
/* if connected, start the I/O stream */
-@@ -832,11 +832,11 @@ static void gs_close(struct tty_struct *tty, struct file *file)
+@@ -835,11 +835,11 @@ static void gs_close(struct tty_struct *tty, struct file *file)
spin_lock_irq(&port->port_lock);
goto exit;
}
-@@ -846,7 +846,7 @@ static void gs_close(struct tty_struct *tty, struct file *file)
+@@ -849,7 +849,7 @@ static void gs_close(struct tty_struct *tty, struct file *file)
* and sleep if necessary
*/
port->openclose = true;
gser = port->port_usb;
if (gser && gser->disconnect)
-@@ -1062,7 +1062,7 @@ static int gs_closed(struct gs_port *port)
+@@ -1065,7 +1065,7 @@ static int gs_closed(struct gs_port *port)
int cond;
spin_lock_irq(&port->port_lock);
spin_unlock_irq(&port->port_lock);
return cond;
}
-@@ -1205,7 +1205,7 @@ int gserial_connect(struct gserial *gser, u8 port_num)
+@@ -1208,7 +1208,7 @@ int gserial_connect(struct gserial *gser, u8 port_num)
/* if it's already open, start I/O ... and notify the serial
* protocol about open/close status (connect/disconnect).
*/
pr_debug("gserial_connect: start ttyGS%d\n", port->port_num);
gs_start_io(port);
if (gser->connect)
-@@ -1252,7 +1252,7 @@ void gserial_disconnect(struct gserial *gser)
+@@ -1255,7 +1255,7 @@ void gserial_disconnect(struct gserial *gser)
port->port_usb = NULL;
gser->ioport = NULL;
wake_up_interruptible(&port->drain_wait);
if (port->port.tty)
tty_hangup(port->port.tty);
-@@ -1268,7 +1268,7 @@ void gserial_disconnect(struct gserial *gser)
+@@ -1271,7 +1271,7 @@ void gserial_disconnect(struct gserial *gser)
/* finally, free any unused/unusable I/O buffers */
spin_lock_irqsave(&port->port_lock, flags);
#include "u_uac1.h"
diff --git a/drivers/usb/host/ehci-hub.c b/drivers/usb/host/ehci-hub.c
-index 7354d01..299478e 100644
+index 6920844..480bb7e 100644
--- a/drivers/usb/host/ehci-hub.c
+++ b/drivers/usb/host/ehci-hub.c
@@ -772,7 +772,7 @@ static struct urb *request_single_step_set_feature_urb(
}
diff --git a/drivers/usb/misc/appledisplay.c b/drivers/usb/misc/appledisplay.c
-index b3d245e..99549ed 100644
+index a0a3827..d7ec10b 100644
--- a/drivers/usb/misc/appledisplay.c
+++ b/drivers/usb/misc/appledisplay.c
@@ -84,7 +84,7 @@ struct appledisplay {
/*
* NOTE:
diff --git a/drivers/usb/usbip/vhci_hcd.c b/drivers/usb/usbip/vhci_hcd.c
-index 11f6f61..1087910 100644
+index e9ef1ec..c3a0b04 100644
--- a/drivers/usb/usbip/vhci_hcd.c
+++ b/drivers/usb/usbip/vhci_hcd.c
@@ -440,7 +440,7 @@ static void vhci_tx_urb(struct urb *urb)
/* Return the xfer's ID. */
diff --git a/drivers/vfio/vfio.c b/drivers/vfio/vfio.c
-index 837d177..170724af 100644
+index e1278fe..7fdeac4 100644
--- a/drivers/vfio/vfio.c
+++ b/drivers/vfio/vfio.c
-@@ -518,7 +518,7 @@ static int vfio_group_nb_add_dev(struct vfio_group *group, struct device *dev)
+@@ -517,7 +517,7 @@ static int vfio_group_nb_add_dev(struct vfio_group *group, struct device *dev)
return 0;
/* TODO Prevent device auto probing */
err = -ENOSPC;
}
diff --git a/drivers/video/fbdev/aty/aty128fb.c b/drivers/video/fbdev/aty/aty128fb.c
-index aedf2fb..47c9aca 100644
+index 0156954..c07d4e0 100644
--- a/drivers/video/fbdev/aty/aty128fb.c
+++ b/drivers/video/fbdev/aty/aty128fb.c
@@ -149,7 +149,7 @@ enum {
data = (__u32) (unsigned long) fix->smem_start;
err |= put_user(data, &fix32->smem_start);
diff --git a/drivers/video/fbdev/hyperv_fb.c b/drivers/video/fbdev/hyperv_fb.c
-index 4254336..282567e 100644
+index 807ee22..7814cd6 100644
--- a/drivers/video/fbdev/hyperv_fb.c
+++ b/drivers/video/fbdev/hyperv_fb.c
@@ -240,7 +240,7 @@ static uint screen_fb_size;
outreg(draw, GDC_REG_DRAW_BASE, 0);
outreg(draw, GDC_REG_MODE_MISC, 0x8000);
diff --git a/drivers/video/fbdev/nvidia/nvidia.c b/drivers/video/fbdev/nvidia/nvidia.c
-index def0412..fed6529 100644
+index 4273c6e..b413013 100644
--- a/drivers/video/fbdev/nvidia/nvidia.c
+++ b/drivers/video/fbdev/nvidia/nvidia.c
-@@ -669,19 +669,23 @@ static int nvidiafb_set_par(struct fb_info *info)
+@@ -665,19 +665,23 @@ static int nvidiafb_set_par(struct fb_info *info)
info->fix.line_length = (info->var.xres_virtual *
info->var.bits_per_pixel) >> 3;
if (info->var.accel_flags) {
info->pixmap.scan_align = 1;
info->flags |= FBINFO_HWACCEL_DISABLED;
info->flags &= ~FBINFO_READS_FAST;
-@@ -1173,8 +1177,11 @@ static int nvidia_set_fbinfo(struct fb_info *info)
+@@ -1169,8 +1173,11 @@ static int nvidia_set_fbinfo(struct fb_info *info)
info->pixmap.size = 8 * 1024;
info->pixmap.flags = FB_PIXMAP_SYSTEM;
info->var.accel_flags = (!noaccel);
diff --git a/drivers/video/fbdev/omap2/dss/display.c b/drivers/video/fbdev/omap2/dss/display.c
-index 2412a0d..294215b 100644
+index ef5b902..47cf7f5 100644
--- a/drivers/video/fbdev/omap2/dss/display.c
+++ b/drivers/video/fbdev/omap2/dss/display.c
@@ -161,12 +161,14 @@ int omapdss_register_display(struct omap_dss_device *dssdev)
FBINFO_HWACCEL_FILLRECT | FBINFO_HWACCEL_COPYAREA;
break;
diff --git a/drivers/video/fbdev/sh_mobile_lcdcfb.c b/drivers/video/fbdev/sh_mobile_lcdcfb.c
-index d3013cd..95b8285 100644
+index 82c0a8c..42499a1 100644
--- a/drivers/video/fbdev/sh_mobile_lcdcfb.c
+++ b/drivers/video/fbdev/sh_mobile_lcdcfb.c
@@ -439,9 +439,9 @@ static unsigned long lcdc_sys_read_data(void *handle)
+4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
+4 4 4 4 4 4
diff --git a/drivers/xen/events/events_base.c b/drivers/xen/events/events_base.c
-index 2b8553b..e1a482b 100644
+index 3838795..0d48d61 100644
--- a/drivers/xen/events/events_base.c
+++ b/drivers/xen/events/events_base.c
-@@ -1564,7 +1564,7 @@ void xen_irq_resume(void)
+@@ -1568,7 +1568,7 @@ void xen_irq_resume(void)
restore_pirqs();
}
.name = "xen-dyn",
.irq_disable = disable_dynirq,
-@@ -1578,7 +1578,7 @@ static struct irq_chip xen_dynamic_chip __read_mostly = {
+@@ -1582,7 +1582,7 @@ static struct irq_chip xen_dynamic_chip __read_mostly = {
.irq_retrigger = retrigger_dynirq,
};
.name = "xen-pirq",
.irq_startup = startup_pirq,
-@@ -1598,7 +1598,7 @@ static struct irq_chip xen_pirq_chip __read_mostly = {
+@@ -1602,7 +1602,7 @@ static struct irq_chip xen_pirq_chip __read_mostly = {
.irq_retrigger = retrigger_dynirq,
};
.name = "xen-percpu",
.irq_disable = disable_dynirq,
+diff --git a/drivers/xen/evtchn.c b/drivers/xen/evtchn.c
+index 00f40f0..e3c0b15 100644
+--- a/drivers/xen/evtchn.c
++++ b/drivers/xen/evtchn.c
+@@ -201,8 +201,8 @@ static ssize_t evtchn_read(struct file *file, char __user *buf,
+
+ /* Byte lengths of two chunks. Chunk split (if any) is at ring wrap. */
+ if (((c ^ p) & EVTCHN_RING_SIZE) != 0) {
+- bytes1 = (EVTCHN_RING_SIZE - EVTCHN_RING_MASK(c)) *
+- sizeof(evtchn_port_t);
++ bytes1 = EVTCHN_RING_SIZE - EVTCHN_RING_MASK(c);
++ bytes1 *= sizeof(evtchn_port_t);
+ bytes2 = EVTCHN_RING_MASK(p) * sizeof(evtchn_port_t);
+ } else {
+ bytes1 = (p - c) * sizeof(evtchn_port_t);
diff --git a/drivers/xen/xenfs/xenstored.c b/drivers/xen/xenfs/xenstored.c
index fef20db..d28b1ab 100644
--- a/drivers/xen/xenfs/xenstored.c
return -ENOMEM;
return 0;
diff --git a/firmware/Makefile b/firmware/Makefile
-index e297e1b..6900c31 100644
+index e297e1b..aeb0982 100644
--- a/firmware/Makefile
+++ b/firmware/Makefile
-@@ -35,6 +35,7 @@ fw-shipped-$(CONFIG_BNX2X) += bnx2x/bnx2x-e1-6.2.9.0.fw \
+@@ -35,9 +35,11 @@ fw-shipped-$(CONFIG_BNX2X) += bnx2x/bnx2x-e1-6.2.9.0.fw \
bnx2x/bnx2x-e1h-6.2.9.0.fw \
bnx2x/bnx2x-e2-6.2.9.0.fw
fw-shipped-$(CONFIG_BNX2) += bnx2/bnx2-mips-09-6.2.1a.fw \
bnx2/bnx2-rv2p-09-6.0.17.fw \
bnx2/bnx2-rv2p-09ax-6.0.17.fw \
bnx2/bnx2-mips-06-6.2.1.fw \
++ bnx2/bnx2-mips-06-6.2.3.fw \
+ bnx2/bnx2-rv2p-06-6.0.15.fw
+ fw-shipped-$(CONFIG_CASSINI) += sun/cassini.bin
+ fw-shipped-$(CONFIG_CHELSIO_T3) += cxgb3/t3b_psram-1.1.0.bin \
diff --git a/firmware/WHENCE b/firmware/WHENCE
-index 0c4d96d..7563083 100644
+index 0c4d96d..b17700f 100644
--- a/firmware/WHENCE
+++ b/firmware/WHENCE
-@@ -655,19 +655,20 @@ Driver: BNX2 - Broadcom NetXtremeII
+@@ -653,21 +653,23 @@ Found in hex form in kernel source.
+ Driver: BNX2 - Broadcom NetXtremeII
+
File: bnx2/bnx2-mips-06-6.2.1.fw
++File: bnx2/bnx2-mips-06-6.2.3.fw
File: bnx2/bnx2-rv2p-06-6.0.15.fw
File: bnx2/bnx2-mips-09-6.2.1a.fw
+File: bnx2/bnx2-mips-09-6.2.1b.fw
--------------------------------------------------------------------------
+diff --git a/firmware/bnx2/bnx2-mips-06-6.2.3.fw.ihex b/firmware/bnx2/bnx2-mips-06-6.2.3.fw.ihex
+new file mode 100644
+index 0000000..da72bf1
+--- /dev/null
++++ b/firmware/bnx2/bnx2-mips-06-6.2.3.fw.ihex
+@@ -0,0 +1,5804 @@
++:10000000080001180800000000004A68000000C84D
++:1000100000000000000000000000000008004A6826
++:100020000000001400004B30080000A00800000091
++:100030000000569400004B44080058200000008443
++:100040000000A1D808005694000001580000A25CEE
++:100050000800321008000000000072F00000A3B495
++:10006000000000000000000000000000080072F026
++:1000700000000024000116A40800049008000400F9
++:10008000000017D4000116C80000000000000000A6
++:100090000000000000000000000000000000000060
++:1000A000080000A80800000000003BFC00012E9C96
++:1000B0000000000000000000000000000000000040
++:1000C00000000000000000000A00004600000000E0
++:1000D000000000000000000D636F6D362E322E33DD
++:1000E0000000000006020302000000000000000300
++:1000F000000000C800000032000000030000000003
++:1001000000000000000000000000000000000000EF
++:1001100000000010000001360000EA600000000549
++:1001200000000000000000000000000000000008C7
++:1001300000000000000000000000000000000000BF
++:1001400000000000000000000000000000000000AF
++:10015000000000000000000000000000000000009F
++:10016000000000020000000000000000000000008D
++:10017000000000000000000000000000000000007F
++:10018000000000000000000000000010000000005F
++:10019000000000000000000000000000000000005F
++:1001A000000000000000000000000000000000004F
++:1001B000000000000000000000000000000000003F
++:1001C000000000000000000000000000000000002F
++:1001D000000000000000000000000000000000001F
++:1001E0000000000010000003000000000000000DEF
++:1001F0000000000D3C02080024424AA03C03080015
++:1002000024634B9CAC4000000043202B1480FFFD76
++:10021000244200043C1D080037BD7FFC03A0F021F0
++:100220003C100800261001183C1C0800279C4AA01E
++:100230000E000168000000000000000D27470100CB
++:1002400090E3000B2402001A94E5000814620028D1
++:10025000000020218CE200003C0308008C63004475
++:1002600094E60014000211C20002104030A4000203
++:10027000005A10212463000130A50004A446008028
++:100280003C010800AC23004410A000190004202BFE
++:100290008F4202B804410008240400013C02080017
++:1002A0008C420060244200013C010800AC22006046
++:1002B00003E00008008010218CE2002094E3001687
++:1002C00000002021AF4202808CE20004A743028498
++:1002D000AF4202883C021000AF4202B83C02080064
++:1002E0008C42005C244200013C010800AC22005C0E
++:1002F00003E00008008010212747010090E3000B75
++:100300002402000394E50008146200280000202164
++:100310008CE200003C0308008C63004494E6001467
++:10032000000211C20002104030A40002005A102145
++:100330002463000130A50004A44600803C010800AD
++:10034000AC23004410A000190004202B8F4202B8F7
++:1003500004410008240400013C0208008C420060B3
++:10036000244200013C010800AC22006003E00008C8
++:10037000008010218CE2002094E300160000202170
++:10038000AF4202808CE20004A7430284AF4202889D
++:100390003C021000AF4202B83C0208008C42005CF4
++:1003A000244200013C010800AC22005C03E000088C
++:1003B000008010218F4301002402010050620003DD
++:1003C000000311C20000000D000311C20002104022
++:1003D000005A1021A440008003E000080000102112
++:1003E0009362000003E00008AF80000003E0000813
++:1003F0000000102103E00008000010212402010089
++:1004000014820008000000003C0208008C4200FC3E
++:10041000244200013C010800AC2200FC0A0000DD7F
++:1004200030A200203C0208008C42008424420001DB
++:100430003C010800AC22008430A2002010400008DB
++:1004400030A300103C0208008C4201082442000145
++:100450003C010800AC22010803E000080000000095
++:1004600010600008000000003C0208008C420104FB
++:10047000244200013C010800AC22010403E0000812
++:10048000000000003C0208008C42010024420001F0
++:100490003C010800AC22010003E00008000000005D
++:1004A00027BDFFE8AFBF0010274401009483000878
++:1004B000306200041040001B306600028F4202B818
++:1004C00004410008240500013C0208008C42006041
++:1004D000244200013C010800AC2200600A0001290E
++:1004E0008FBF00108C82002094830016000028210A
++:1004F000AF4202808C820004A7430284AF4202888C
++:100500003C021000AF4202B83C0208008C42005C82
++:10051000244200013C010800AC22005C0A000129D1
++:100520008FBF001010C00006006028218F4401001A
++:100530000E0000CD000000000A0001282405000183
++:100540008F8200088F4301045043000700002821D8
++:100550008F4401000E0000CD000000008F42010416
++:10056000AF820008000028218FBF001000A01021DA
++:1005700003E0000827BD001827BDFFE8AFBF001447
++:10058000AFB00010974201083043700024022000F1
++:100590001062000B286220011440002F000010217F
++:1005A00024024000106200250000000024026000C8
++:1005B00010620026000010210A0001658FBF0014A0
++:1005C00027500100920200091040001A2403000184
++:1005D0003C0208008C420020104000160000182148
++:1005E0000E00049300000000960300083C0608007B
++:1005F00094C64B5E8E0400188F8200209605000C76
++:1006000000031C0000661825AC440000AC45000443
++:1006100024040001AC400008AC40000CAC400010C9
++:10062000AC400014AC4000180E0004B8AC43001CF1
++:10063000000018210A000164006010210E0003254B
++:10064000000000000A000164000010210E000EE905
++:1006500000000000000010218FBF00148FB00010B8
++:1006600003E0000827BD001827BDFFE0AFB2001867
++:100670003C036010AFBF001CAFB10014AFB000105E
++:100680008C6450002402FF7F3C1A800000822024EA
++:100690003484380C24020037AC6450003C1208004B
++:1006A00026524AD8AF42000824020C80AF420024F0
++:1006B0003C1B80083C06080024C60324024010218D
++:1006C0002404001D2484FFFFAC4600000481FFFDCC
++:1006D000244200043C020800244204B03C0108000B
++:1006E000AC224AE03C020800244202303C010800EF
++:1006F000AC224AE43C020800244201743C03080096
++:100700002463032C3C040800248403D83C0508001F
++:1007100024A538F03C010800AC224B403C02080004
++:10072000244202EC3C010800AC264B243C010800AA
++:10073000AC254B343C010800AC234B3C3C01080089
++:10074000AC244B443C010800AC224B483C0108005F
++:10075000AC234ADC3C010800AC204AE83C0108001C
++:10076000AC204AEC3C010800AC204AF03C010800F7
++:10077000AC204AF43C010800AC204AF83C010800D7
++:10078000AC204AFC3C010800AC204B003C010800B6
++:10079000AC244B043C010800AC204B083C01080091
++:1007A000AC204B0C3C010800AC204B103C01080075
++:1007B000AC204B143C010800AC204B183C01080055
++:1007C000AC264B1C3C010800AC264B203C01080029
++:1007D000AC254B303C010800AC234B380E000623FF
++:1007E000000000003C028000344200708C42000097
++:1007F000AF8200143C0308008C6300208F82000449
++:10080000104300043C0280000E00045BAF83000430
++:100810003C028000344600703C0308008C6300A05A
++:100820003C0208008C4200A4104300048F84001492
++:100830003C010800AC2300A4A743009E8CCA000022
++:100840003C0308008C6300BC3C0208008C4200B8EA
++:100850000144202300641821000040210064202B63
++:1008600000481021004410213C010800AC2300BCCA
++:100870003C010800AC2200B88F5100003222000772
++:100880001040FFDCAF8A00148CC600003C05080055
++:100890008CA500BC3C0408008C8400B800CA30233E
++:1008A00000A628210000102100A6302B0082202164
++:1008B00000862021322700013C010800AC2500BC45
++:1008C0003C010800AC2400B810E0001F32220002F6
++:1008D0008F420100AF4200208F420104AF4200A8C6
++:1008E0009342010B0E0000C6305000FF2E02001E86
++:1008F00054400004001010800E0000C90A000213CA
++:1009000000000000005210218C4200000040F80955
++:1009100000000000104000053C0240008F4301042D
++:100920003C026020AC4300143C024000AF4201385E
++:100930003C0208008C420034244200013C010800C3
++:10094000AC220034322200021040000E3222000499
++:100950008F4201400E0000C6AF4200200E000295FB
++:10096000000000003C024000AF4201783C02080059
++:100970008C420038244200013C010800AC220038BF
++:10098000322200041040FF983C0280008F42018018
++:100990000E0000C6AF4200208F43018024020F00EA
++:1009A00014620005000000008F420188A742009CED
++:1009B0000A0002483C0240009362000024030050F9
++:1009C000304200FF144300083C0240000E00027B4E
++:1009D00000000000544000043C0240000E000D7571
++:1009E000000000003C024000AF4201B83C02080099
++:1009F0008C42003C244200013C010800AC22003C37
++:100A00000A0001C83C0280003C0290003442000110
++:100A100000822025AF4400208F4200200440FFFECA
++:100A20000000000003E00008000000003C0280001D
++:100A3000344200010082202503E00008AF4400207A
++:100A400027BDFFE0AFB10014AFB0001000808821D7
++:100A5000AFBF00180E00025030B000FF9362007D5F
++:100A60000220202102028025A370007D8F70007477
++:100A70003C0280000E000259020280241600000988
++:100A80008FBF00188F4201F80440FFFE24020002CD
++:100A9000AF5101C0A34201C43C021000AF4201F8B3
++:100AA0008FBF00188FB100148FB0001003E0000852
++:100AB00027BD002027BDFFE8AFBF0010974201848B
++:100AC0008F440188304202001040000500002821B8
++:100AD0000E000FAA000000000A00028D240500018C
++:100AE0003C02FF0004800005008218243C02040040
++:100AF000506200019362003E240500018FBF001088
++:100B000000A0102103E0000827BD0018A360002208
++:100B10008F4401400A00025E2405000127BDFFE862
++:100B2000AFBF0014AFB0001093620000304400FF6C
++:100B300038830020388200300003182B0002102B6D
++:100B40000062182410600003240200501482008008
++:100B50008FBF001493620005304200011040007CFA
++:100B60008FBF0014934201482443FFFF2C6200050D
++:100B7000104000788FB00010000310803C03080084
++:100B800024634A68004310218C42000000400008A2
++:100B9000000000000E0002508F4401408F70000CD6
++:100BA0008F4201441602000224020001AF62000CD1
++:100BB0000E0002598F4401408F420144145000043A
++:100BC0008FBF00148FB000100A000F2027BD00183F
++:100BD0008F62000C0A0003040000000097620010FE
++:100BE0008F4301443042FFFF1462001A00000000EE
++:100BF00024020001A76200108F4202380443001053
++:100C00008F4201403C02003F3446F0003C0560004A
++:100C10003C04FFC08CA22BBC0044182400461024C6
++:100C20000002130200031D82106200390000000060
++:100C30008F4202380440FFF7000000008F4201405D
++:100C4000AF4202003C021000AF4202380A00032209
++:100C50008FBF0014976200100A0003040000000018
++:100C60000E0002508F440140976200128F430144EE
++:100C70003050FFFF1603000224020001A762001299
++:100C80000E0002598F4401408F42014416020004B5
++:100C90008FBF00148FB000100A00029127BD00180A
++:100CA000976200120A00030400000000976200141B
++:100CB0008F4301443042FFFF14620006240200010A
++:100CC0008FBF00148FB00010A76200140A00124AF0
++:100CD00027BD0018976200141440001D8FBF001438
++:100CE0000A00031C00000000976200168F430144B5
++:100CF0003042FFFF1462000B240200018FBF00147A
++:100D00008FB00010A76200160A000B1227BD001852
++:100D10009742007824420004A76200100A000322D0
++:100D20008FBF001497620016240300013042FFFFBA
++:100D3000144300078FBF00143C0208008C4200706F
++:100D4000244200013C010800AC2200708FBF001457
++:100D50008FB0001003E0000827BD001827BDFFE892
++:100D6000AFBF0014AFB000108F50010093620000BD
++:100D700093430109304400FF2402001F106200A5C4
++:100D80002862002010400018240200382862000A5F
++:100D90001040000C2402000B286200081040002CB8
++:100DA00000000000046000E52862000214400028F2
++:100DB00024020006106200268FBF00140A00041FE0
++:100DC0008FB000101062005E2862000B144000DC3F
++:100DD0008FBF00142402000E106200738FB0001049
++:100DE0000A00041F00000000106200C028620039E1
++:100DF0001040000A2402008024020036106200CA5B
++:100E000028620037104000B424020035106200C18F
++:100E10008FBF00140A00041F8FB000101062002B57
++:100E20002862008110400006240200C82402003914
++:100E3000106200B48FBF00140A00041F8FB00010AE
++:100E4000106200998FBF00140A00041F8FB00010B9
++:100E50003C0208008C420020104000B98FBF0014F3
++:100E60000E000493000000008F4201008F830020D9
++:100E70009745010C97460108AC6200008F420104BF
++:100E80003C04080094844B5E00052C00AC62000416
++:100E90008F4201180006340000C43025AC620008FF
++:100EA0008F42011C24040001AC62000C9342010A31
++:100EB00000A22825AC650010AC600014AC600018DE
++:100EC000AC66001C0A0003F58FBF00143C0208004A
++:100ED0008C4200201040009A8FBF00140E00049333
++:100EE00000000000974401083C03080094634B5E37
++:100EF0009745010C000422029746010E8F820020C4
++:100F0000000426000083202500052C003C030080FF
++:100F100000A6282500832025AC400000AC4000043A
++:100F2000AC400008AC40000CAC450010AC400014D4
++:100F3000AC400018AC44001C0A0003F42404000177
++:100F40009742010C14400015000000009362000558
++:100F50003042001014400011000000000E0002504A
++:100F6000020020219362000502002021344200107B
++:100F70000E000259A36200059362000024030020C2
++:100F8000304200FF1043006D020020218FBF00148B
++:100F90008FB000100A000FC027BD00180000000D20
++:100FA0000A00041E8FBF00143C0208008C4200207F
++:100FB000104000638FBF00140E0004930000000077
++:100FC0008F4201048F8300209744010C3C050800E8
++:100FD00094A54B5EAC6200009762002C00042400D4
++:100FE0003042FFFF008220253C02400E00A228254F
++:100FF000AC640004AC600008AC60000CAC60001095
++:10100000AC600014AC600018AC65001C0A0003F46E
++:10101000240400010E00025002002021A7600008F5
++:101020000E00025902002021020020210E00025E63
++:10103000240500013C0208008C42002010400040C2
++:101040008FBF00140E000493000000009742010CB3
++:101050008F8300203C05080094A54B5E000214001D
++:10106000AC700000AC620004AC6000088F64004CFF
++:101070003C02401F00A22825AC64000C8F62005087
++:1010800024040001AC6200108F620054AC620014B2
++:10109000AC600018AC65001C8FBF00148FB000104E
++:1010A0000A0004B827BD0018240200205082002541
++:1010B0008FB000100E000F0A020020211040002007
++:1010C0008FBF0014020020218FB0001000002821E3
++:1010D0000A00025E27BD0018020020218FBF001405
++:1010E0008FB000100A00058027BD00189745010C3D
++:1010F000020020218FBF00148FB000100A0005A04D
++:1011000027BD0018020020218FB000100A0005C57D
++:1011100027BD00189345010D020020218FB000105B
++:101120000A00060F27BD0018020020218FBF0014FF
++:101130008FB000100A0005EB27BD00188FBF001408
++:101140008FB0001003E0000827BD00188F4202781E
++:101150000440FFFE2402000234840080AF440240B9
++:10116000A34202443C02100003E00008AF420278B0
++:101170003C04080094844B6A3C0208008C424B7487
++:101180003083FFFF000318C000431021AF42003C32
++:101190003C0208008C424B70AF4200383C020050C9
++:1011A00034420008AF4200300000000000000000A0
++:1011B000000000008F420000304200201040FFFD80
++:1011C000000000008F4204003C010800AC224B608C
++:1011D0008F4204043C010800AC224B643C02002016
++:1011E000AF420030000000003C02080094424B680F
++:1011F0003C03080094634B6C3C05080094A54B6EBF
++:1012000024840001004310213083FFFF3C010800CB
++:10121000A4224B683C010800A4244B6A1465000317
++:10122000000000003C010800A4204B6A03E0000815
++:10123000000000003C05000A27BDFFE80345282107
++:101240003C04080024844B50AFBF00100E00051D65
++:101250002406000A3C02080094424B523C0308005A
++:1012600094634B6E3042000F244200030043180485
++:1012700024027FFF0043102B10400002AF83001CAC
++:101280000000000D0E00042A000000003C020800CF
++:1012900094424B5A8FBF001027BD001803E000088E
++:1012A000A74200A23C02000A034210219443000618
++:1012B0003C02080094424B5A3C010800A4234B56C0
++:1012C000004310238F83001C00021400000214034B
++:1012D0000043102B03E000083842000127BDFFE85F
++:1012E000AFBF00103C02000A0342102194420006E6
++:1012F0003C010800A4224B560E00047700000000B9
++:101300005440FFF93C02000A8FBF001003E00008C0
++:1013100027BD001827BDFFE8AFBF00100E000477FF
++:101320000000000010400003000000000E000485D3
++:10133000000000003C0208008C424B608FBF001090
++:1013400027430400AF4200383C0208008C424B6443
++:1013500027BD0018AF830020AF42003C3C020005CF
++:10136000AF42003003E00008AF8000188F82001801
++:101370003C0300060002114000431025AF4200303C
++:101380000000000000000000000000008F4200008C
++:10139000304200101040FFFD27420400AF820020C1
++:1013A00003E00008AF8000183C0608008CC64B64C0
++:1013B0008F8500188F8300203C02080094424B5A0E
++:1013C00027BDFFE024A50001246300202442000182
++:1013D00024C70020AFB10014AFB00010AFBF001899
++:1013E000AF850018AF8300203C010800A4224B5AAF
++:1013F000309000FF3C010800AC274B6404C100089A
++:101400000000882104E00006000000003C02080003
++:101410008C424B60244200013C010800AC224B602E
++:101420003C02080094424B5A3C03080094634B680A
++:101430000010202B004310262C42000100441025F0
++:10144000144000048F830018240200101462000F5F
++:10145000000000000E0004A9241100013C03080054
++:1014600094634B5A3C02080094424B681462000398
++:10147000000000000E00042A000000001600000317
++:10148000000000000E000493000000003C03080070
++:1014900094634B5E3C02080094424B5C2463000161
++:1014A0003064FFFF3C010800A4234B5E148200035C
++:1014B000000000003C010800A4204B5E1200000662
++:1014C000000000003C02080094424B5AA74200A2D0
++:1014D0000A00050B022010210E0004770000000016
++:1014E00010400004022010210E00048500000000BE
++:1014F000022010218FBF00188FB100148FB0001090
++:1015000003E0000827BD00203084FFFF30A5FFFF67
++:101510000000182110800007000000003082000148
++:101520001040000200042042006518210A00051343
++:101530000005284003E000080060102110C00006EC
++:1015400024C6FFFF8CA2000024A50004AC8200008A
++:101550000A00051D2484000403E0000800000000C8
++:1015600010A0000824A3FFFFAC86000000000000CC
++:10157000000000002402FFFF2463FFFF1462FFFA53
++:101580002484000403E0000800000000240200019D
++:10159000AF62000CA7620010A7620012A7620014DD
++:1015A00003E00008A76200163082007F034210218A
++:1015B0003C08000E004818213C0208008C42002024
++:1015C00027BDFFD82407FF80AFB3001CAFB20018BF
++:1015D000AFB10014AFB00010AFBF00200080802179
++:1015E00030B100FF0087202430D200FF1040002FD0
++:1015F00000009821AF44002C9062000024030050AA
++:10160000304200FF1443000E000000003C020800BE
++:101610008C4200E00202102100471024AF42002C4F
++:101620003C0208008C4200E0020210213042007FA0
++:101630000342102100481021944200D43053FFFF90
++:101640000E000493000000003C02080094424B5E30
++:101650008F8300200011340000C2302500122C00BE
++:101660003C02400000C2302534A50001AC700000EF
++:101670008FBF0020AC6000048FB20018AC7300086C
++:101680008FB10014AC60000C8FB3001CAC6500106F
++:101690008FB00010AC60001424040001AC6000188E
++:1016A00027BD00280A0004B8AC66001C8FBF0020CC
++:1016B0008FB3001C8FB200188FB100148FB00010D0
++:1016C00003E0000827BD00289343010F2402001007
++:1016D0001062000E2865001110A0000724020012FD
++:1016E000240200082405003A1062000600003021A0
++:1016F00003E0000800000000240500351462FFFC30
++:10170000000030210A000538000000008F420074FC
++:1017100024420FA003E00008AF62000C27BDFFE8E1
++:10172000AFBF00100E00025E240500018FBF001045
++:1017300024020001A762001227BD00182402000144
++:1017400003E00008A360002227BDFFE0AFB1001452
++:10175000AFB00010AFBF001830B1FFFF0E00025055
++:10176000008080219362003F24030004304200FF88
++:101770001443000C02002021122000082402000A59
++:101780000E00053100000000936200052403FFFEF7
++:1017900000431024A362000524020012A362003F4C
++:1017A000020020210E000259A360008116200003D0
++:1017B000020020210E0005950000000002002021FB
++:1017C000322600FF8FBF00188FB100148FB00010B9
++:1017D000240500380A00053827BD002027BDFFE09A
++:1017E000AFBF001CAFB20018AFB10014AFB0001013
++:1017F0000E000250008080210E0005310000000024
++:101800009362003F24120018305100FF123200038F
++:101810000200202124020012A362003F936200050F
++:101820002403FFFE004310240E000259A3620005AA
++:10183000020020212405002016320007000030217C
++:101840008FBF001C8FB200188FB100148FB0001032
++:101850000A00025E27BD00208FBF001C8FB2001857
++:101860008FB100148FB00010240500390A0005382C
++:1018700027BD002027BDFFE8AFB00010AFBF0014A8
++:101880009742010C2405003600808021144000108E
++:10189000304600FF0E00025000000000240200123B
++:1018A000A362003F93620005344200100E00053130
++:1018B000A36200050E00025902002021020020212F
++:1018C0000E00025E240500200A000604000000004D
++:1018D0000E000538000000000E000250020020211A
++:1018E000936200232403FF9F020020210043102461
++:1018F0008FBF00148FB00010A36200230A000259AA
++:1019000027BD001827BDFFE0AFBF0018AFB100141E
++:10191000AFB0001030B100FF0E00025000808021F7
++:10192000240200120E000531A362003F0E0002598E
++:101930000200202102002021022030218FBF001848
++:101940008FB100148FB00010240500350A0005384F
++:1019500027BD0020A380002C03E00008A380002DF9
++:101960008F4202780440FFFE8F820034AF42024073
++:1019700024020002A34202443C02100003E00008DB
++:10198000AF4202783C0360008C6254003042000891
++:101990001440FFFD000000008C625408AF82000C70
++:1019A00024020052AC605408AC645430AC6254342D
++:1019B0002402000803E00008AC6254003C0260000E
++:1019C0008C42540030420008104000053C03600087
++:1019D0008C625400304200081440FFFD00000000FB
++:1019E0008F83000C3C02600003E00008AC43540805
++:1019F00090A3000024020005008040213063003FD6
++:101A000000004821146200050000502190A2001C33
++:101A100094A3001E304900FF306AFFFFAD00000CA8
++:101A2000AD000010AD000024950200148D05001CCF
++:101A30008D0400183042FFFF0049102300021100FE
++:101A4000000237C3004038210086202300A2102B5B
++:101A50000082202300A72823AD05001CAD04001838
++:101A6000A5090014A5090020A50A001603E0000836
++:101A7000A50A00228F4201F80440FFFE2402000262
++:101A8000AF4401C0A34201C43C02100003E00008BF
++:101A9000AF4201F83C0208008C4200B427BDFFE8C9
++:101AA000AFBF001424420001AFB000103C01080099
++:101AB000AC2200B48F4300243C02001F30AA00FF78
++:101AC0003442FF8030D800FF006280240080F8217B
++:101AD00030EF00FF1158003B01405821240CFF80DB
++:101AE0003C19000A3163007F000310C00003194055
++:101AF000006218213C0208008C4200DC25680001CD
++:101B0000310D007F03E21021004310213043007F9C
++:101B100003431821004C102400794821AF420024CF
++:101B20008D220024016C1824006C7026AD22000C5C
++:101B30008D220024310800FFAD22001095220014F0
++:101B4000952300208D27001C3042FFFF3063FFFFEC
++:101B50008D2600180043102300021100000227C345
++:101B60000040282100C4302300E2102B00C23023A3
++:101B700000E53823AD27001CAD2600189522002073
++:101B8000A522001495220022154B000AA52200165A
++:101B90008D2300248D220008254600013145008058
++:101BA0001462000430C4007F108F000238AA008045
++:101BB00000C0502151AF000131C800FF1518FFC906
++:101BC000010058218F8400343082007F03421821A5
++:101BD0003C02000A006218212402FF8000822024B7
++:101BE000AF440024A06A0079A06A00838C62005090
++:101BF0008F840034AC6200708C6500743C027FFFFF
++:101C00003442FFFF00A228240E00066BAC6500746E
++:101C1000AF5000248FBF00148FB0001003E0000805
++:101C200027BD001827BDFFC0AFBE0038AFB70034D6
++:101C3000AFB5002CAFB20020AFB1001CAFB00018A0
++:101C4000AFBF003CAFB60030AFB40028AFB3002444
++:101C50008F4500248F4600288F43002C3C02001F34
++:101C60003442FF800062182400C230240080A82182
++:101C7000AFA3001400A2F0240E00062FAFA60010A0
++:101C80003C0208008C4200E02410FF8003608821A1
++:101C900002A2102100501024AF4200243C02080090
++:101CA0008C4200E002A210213042007F0342182142
++:101CB0003C02000A00629021924200D293630084A9
++:101CC000305700FF306300FF24020001106200342F
++:101CD000036020212402000214620036000000008C
++:101CE0000E001216024028219223008392220083C4
++:101CF0003063007F3042007F000210C000031940B3
++:101D0000006218213C0208008C4200DC02A2102173
++:101D10000043382100F01024AF42002892250078BB
++:101D20009224008330E2007F034218213C02000C21
++:101D300014850007006280212402FFFFA24200F107
++:101D40002402FFFFA64200F20A0007272402FFFF39
++:101D500096020020A24200F196020022A64200F262
++:101D60008E020024AE4200F492220083A24200F0D0
++:101D70008E4200C8AE4200FC8E4200C4AE4200F863
++:101D80008E220050AE4201008E4200CCAE420104D1
++:101D9000922200853042003F0A0007823442004010
++:101DA0000E00123902402821922200850A00078283
++:101DB0003042003F936200852403FFDF3042003F42
++:101DC000A36200859362008500431024A36200850E
++:101DD0009363008393620078307400FF304200FF09
++:101DE00010540036240AFF803C0C000C3283007F24
++:101DF000000310C000031940006218213C020800D3
++:101E00008C4200DC268800013109007F02A21021EB
++:101E10000043382130E2007F0342182100EA1024F9
++:101E2000AF420028006C80218E020024028A182410
++:101E3000006A5826AE02000C8E020024310800FF12
++:101E4000AE02001096020014960300208E07001CBC
++:101E50003042FFFF3063FFFF8E060018004310235F
++:101E600000021100000227C30040282100C43023D3
++:101E700000E2102B00C2302300E53823AE07001C1F
++:101E8000AE06001896020020A60200149602002258
++:101E9000A602001692220079304200FF105400077B
++:101EA0000000000051370001316800FF92220078E5
++:101EB000304200FF1448FFCD0100A0219222008390
++:101EC000A22200798E2200500A0007E2AE220070A2
++:101ED000A22200858E22004C2405FF80AE42010C18
++:101EE0009222008534420020A2220085924200D135
++:101EF0003C0308008C6300DC305400FF3C02080007
++:101F00008C4200E400143140001420C002A31821C8
++:101F100000C4202102A210210064382100461021B3
++:101F20000045182400E52824AF450028AF43002CC5
++:101F30003042007F924400D030E3007F03422821EA
++:101F4000034318213C02000C006280213C02000E79
++:101F5000309600FF00A298211296002A000000008F
++:101F60008E02000C02002021026028211040002572
++:101F7000261000280E00064A000000009262000DA4
++:101F800026830001307400FF3042007FA262000D02
++:101F90002404FF801697FFF0267300203C020800FF
++:101FA0008C4200DC0000A02102A210210044102479
++:101FB000AF4200283C0208008C4200E43C030800C9
++:101FC0008C6300DC02A2102100441024AF42002CDC
++:101FD0003C0208008C4200E402A318213063007F19
++:101FE00002A210213042007F034220210343182126
++:101FF0003C02000C006280213C02000E0A0007A493
++:10200000008298218E4200D8AE2200508E4200D825
++:10201000AE22007092250083924600D19223008365
++:10202000924400D12402FF8000A228243063007F64
++:10203000308400FF00A628250064182A10600002E2
++:1020400030A500FF38A50080A2250083A2250079D5
++:102050000E00063D000000009222007E02A020211A
++:10206000A222007A8E2300743C027FFF3442FFFFDD
++:10207000006218240E00066BAE2300748FA20010BD
++:10208000AF5E00248FBF003CAF4200288FBE0038F7
++:102090008FA200148FB700348FB600308FB5002C9C
++:1020A0008FB400288FB300248FB200208FB1001CA2
++:1020B0008FB0001827BD004003E00008AF42002C9D
++:1020C00090A2000024420001A0A200003C030800EE
++:1020D0008C6300F4304200FF1443000F0080302175
++:1020E000A0A000003C0208008C4200E48F84003471
++:1020F000008220213082007F034218213C02000C24
++:10210000006218212402FF8000822024ACC300005A
++:1021100003E00008AF4400288C8200002442002025
++:1021200003E00008AC82000094C200003C080800F4
++:10213000950800CA30E7FFFF008048210102102106
++:10214000A4C2000094C200003042FFFF00E2102B46
++:1021500054400001A4C7000094A200003C03080002
++:102160008C6300CC24420001A4A2000094A20000D1
++:102170003042FFFF544300078F8600280107102BD1
++:10218000A4A000005440000101003821A4C70000B1
++:102190008F8600288CC4001CAF44003C94A2000031
++:1021A0008F43003C3042FFFF000210C00062182144
++:1021B000AF43003C8F42003C008220231880000483
++:1021C000000000008CC200180A00084324420001ED
++:1021D0008CC20018AF4200383C020050344200105C
++:1021E000AF420030000000000000000000000000CE
++:1021F0008F420000304200201040FFFD0000000030
++:102200008F420404AD2200048F420400AD2200007E
++:102210003C020020AF42003003E000080000000054
++:1022200027BDFFE0AFB20018AFB10014AFB000108F
++:10223000AFBF001C94C2000000C080213C12080007
++:10224000965200C624420001A60200009603000038
++:1022500094E2000000E03021144300058FB100300B
++:102260000E000818024038210A000875000000001E
++:102270008C8300048C820004244200400461000727
++:10228000AC8200048C8200040440000400000000C2
++:102290008C82000024420001AC8200009602000003
++:1022A0003042FFFF50520001A600000096220000BD
++:1022B00024420001A62200008F82002896230000FD
++:1022C00094420016144300048FBF001C2402000136
++:1022D000A62200008FBF001C8FB200188FB100141F
++:1022E0008FB0001003E0000827BD00208F89002870
++:1022F00027BDFFE0AFBF00188D220028274804004B
++:1023000030E700FFAF4200388D22002CAF8800304C
++:10231000AF42003C3C020005AF420030000000002C
++:1023200000000000000000000000000000000000AD
++:10233000000000008C82000C8C82000CAD020000BA
++:102340008C820010AD0200048C820018AD020008DF
++:102350008C82001CAD02000C8CA20014AD02001097
++:102360008C820020AD02001490820005304200FFF4
++:1023700000021200AD0200188CA20018AD02001C71
++:102380008CA2000CAD0200208CA20010AD02002433
++:102390008CA2001CAD0200288CA20020AD02002CF3
++:1023A000AD060030AD000034978300263402FFFFF5
++:1023B00014620002006020213404FFFF10E00011CD
++:1023C000AD04003895230036952400362402000120
++:1023D0003063FFFF000318C20069182190650040B8
++:1023E000308400070082100400451025A0620040E0
++:1023F0008F820028944200563042FFFF0A0008DC1A
++:10240000AD02003C952300369524003624020001DD
++:102410003063FFFF000318C2006918219065004077
++:1024200030840007008210040002102700451024A9
++:10243000A0620040AD00003C000000000000000071
++:10244000000000003C02000634420040AF42003071
++:102450000000000000000000000000008F420000AB
++:10246000304200101040FFFD8F860028AF880030FA
++:1024700024C2005624C7003C24C4002824C50032CE
++:1024800024C600360E000856AFA200108FBF0018F9
++:1024900003E0000827BD00208F8300243C060800CD
++:1024A0008CC600E88F82003430633FFF0003198040
++:1024B00000461021004310212403FF803046007F96
++:1024C00000431024AF420028034618213C02000CB0
++:1024D0000062302190C2000D30A500FF00003821BD
++:1024E00034420010A0C2000D8F8900288F8A00247A
++:1024F00095230036000A13823048000324020001AD
++:10250000A4C3000E1102000B2902000210400005B6
++:10251000240200021100000C240300010A0009201B
++:102520000000182111020006000000000A00092026
++:10253000000018218CC2002C0A000920244300014D
++:102540008CC20014244300018CC200180043102BDD
++:1025500050400009240700012402002714A20003B0
++:10256000000000000A00092C240700019522003E0B
++:1025700024420001A522003E000A138230430003DA
++:102580002C62000210400009008028211460000421
++:102590000000000094C200360A00093C3046FFFFEC
++:1025A0008CC600380A00093C008028210000302138
++:1025B0003C04080024844B780A00088900000000CD
++:1025C000274901008D22000C9523000601202021BF
++:1025D000000216023046003F3063FFFF240200274E
++:1025E00000C0282128C7002810C2000EAF83002495
++:1025F00010E00008240200312402002110C200096A
++:102600002402002510C200079382002D0A00095BF6
++:102610000000000010C200059382002D0A00095B33
++:10262000000000000A0008F4000000000A0006266E
++:102630000000000095230006912400058D25000C64
++:102640008D2600108D2700188D28001C8D29002054
++:10265000244200013C010800A4234B7E3C010800F9
++:10266000A0244B7D3C010800AC254B843C010800B4
++:10267000AC264B883C010800AC274B903C0108007D
++:10268000AC284B943C010800AC294B9803E00008AF
++:10269000A382002D8F87002827BDFFC0AFB3003471
++:1026A000AFB20030AFB1002CAFB00028AFBF0038E0
++:1026B0003C0208008C4200D094E3003030B0FFFFB1
++:1026C000005010073045FFFF3063FFFF00C0982126
++:1026D000A7A200103C110800963100C614A3000602
++:1026E0003092FFFF8CE2002424420030AF42003CD5
++:1026F0000A0009948CE2002094E200323042FFFF8D
++:1027000054A2000827A400188CE2002C24420030B8
++:10271000AF42003C8CE20028AF4200380A0009A218
++:102720008F84002827A5001027A60020022038212A
++:102730000E000818A7A000208FA200182442003025
++:10274000AF4200388FA2001CAF42003C8F840028AB
++:102750003C020005AF42003094820034274304005D
++:102760003042FFFF0202102B14400007AF830030FD
++:1027700094820054948300340202102100431023F9
++:102780000A0009B63043FFFF94830054948200345A
++:102790000223182100501023006218233063FFFF2A
++:1027A000948200163042FFFF144300030000000033
++:1027B0000A0009C424030001948200163042FFFF7E
++:1027C0000043102B104000058F82003094820016C9
++:1027D000006210233043FFFF8F820030AC530000B3
++:1027E000AC400004AC520008AC43000C3C020006B4
++:1027F00034420010AF420030000000000000000032
++:10280000000000008F420000304200101040FFFD29
++:10281000001018C2006418219065004032040007BF
++:10282000240200018FBF00388FB300348FB2003014
++:102830008FB1002C8FB000280082100400451025B5
++:1028400027BD004003E00008A062004027BDFFA8AC
++:10285000AFB60050AFB5004CAFB40048AFB30044C2
++:10286000AFB1003CAFBF0054AFB20040AFB00038D2
++:102870008C9000003C0208008C4200E88F860034F7
++:10288000960300022413FF8000C2302130633FFF13
++:102890000003198000C3382100F3102490B2000017
++:1028A000AF42002C9203000230E2007F034230214D
++:1028B0003C02000E00C28821306300C024020040A8
++:1028C0000080A82100A0B021146200260000A021F1
++:1028D0008E3400388E2200181440000224020001B9
++:1028E000AE2200189202000D304200201440001564
++:1028F0008F8200343C0308008C6300DC001238C077
++:10290000001231400043102100C730210046382119
++:1029100030E300073C02008030E6007800C230253A
++:102920000343182100F31024AF4208002463090078
++:10293000AF4608108E2200188C6300080043102157
++:10294000AE2200188E22002C8E2300182442000193
++:102950000062182B1060003D000000000A000A7899
++:1029600000000000920300022402FFC00043102474
++:10297000304200FF1440000524020001AE2200187E
++:10298000962200360A000A613054FFFF8E2200149E
++:1029900024420001AE22001892020000000216003C
++:1029A0000002160304410029000000009602000204
++:1029B00027A4001000802821A7A20016960200027A
++:1029C00024070001000030213042FFFFAF820024C5
++:1029D0000E000889AFA0001C960300023C0408000A
++:1029E0008C8400E88F82003430633FFF000319803D
++:1029F00000441021004310213043007F3C05000CAF
++:102A00000053102403431821AF4200280065182109
++:102A10009062000D001221403042007FA062000D44
++:102A20003C0308008C6300E48F82003400431021D3
++:102A30000044382130E2007F03421021004510217C
++:102A400000F31824AF430028AEA200009222000D2C
++:102A5000304200101040001302A020218F83002874
++:102A60008EA40000028030219462003E2442FFFFC9
++:102A7000A462003E948400029625000E3084FFFF7D
++:102A80000E00097330A5FFFF8F82002894430034A5
++:102A90009622000E1443000302A02021240200010C
++:102AA000A382002C02C028210E0007FE00000000B7
++:102AB0008FBF00548FB600508FB5004C8FB40048C4
++:102AC0008FB300448FB200408FB1003C8FB000380C
++:102AD00003E0000827BD00588F82002827BDFFD0E3
++:102AE000AFB40028AFB20020AFBF002CAFB30024BA
++:102AF000AFB1001CAFB00018904400D0904300D19B
++:102B00000000A021309200FFA3A30010306300FF5B
++:102B10008C5100D88C5300DC1072002B2402000171
++:102B20003C0308008C6300E493A400108F820034FF
++:102B30002406FF800004214000431021004410219E
++:102B40003043007F00461024AF4200280343182181
++:102B50003C02000C006218218C62000427A40014BF
++:102B600027A50010022280210270102304400015C6
++:102B7000AFA300149062000D00C21024304200FF89
++:102B800014400007020088219062000D344200408A
++:102B90000E0007FEA062000D0A000ABD93A20010FD
++:102BA0000E0009E1241400018F830028AC7000D8C6
++:102BB00093A20010A06200D193A200101452FFD87B
++:102BC0000000000024020001168200048FBF002CC8
++:102BD0000E000626000000008FBF002C8FB40028D6
++:102BE0008FB300248FB200208FB1001C8FB000186B
++:102BF00003E0000827BD003027BDFFD8AFB3001C9D
++:102C0000AFB20018AFB10014AFB00010AFBF0020DA
++:102C10000080982100E0802130B1FFFF0E00049376
++:102C200030D200FF000000000000000000000000A3
++:102C30008F820020AC510000AC520004AC5300085D
++:102C4000AC40000CAC400010AC400014AC4000188C
++:102C50003C03080094634B5E02038025AC50001CCB
++:102C6000000000000000000000000000240400013B
++:102C70008FBF00208FB3001C8FB200188FB10014DB
++:102C80008FB000100A0004B827BD002827BDFFE858
++:102C9000AFB00010AFBF001430A5FFFF30C600FF7B
++:102CA0000080802124020C80AF420024000000003C
++:102CB0000000000000000000000000000000000014
++:102CC0000E000ACC000000003C040800248400E050
++:102CD0008C8200002403FF808FBF001402021021A9
++:102CE00000431024AF4200248C8200003C03000A01
++:102CF000020280213210007F035010218FB000109B
++:102D00000043102127BD001803E00008AF8200280F
++:102D100027BDFFE8AFBF00108F4401403C0308000F
++:102D20008C6300E02402FF80AF840034008318210C
++:102D300000621024AF4200243C02000803424021FC
++:102D4000950500023063007F3C02000A034318210E
++:102D50000062182130A5FFFF3402FFFF0000302180
++:102D60003C07602010A20006AF8300282402FFFF6A
++:102D7000A5020002946500D40E000AF130A5FFFF01
++:102D80008FBF001024020C8027BD001803E000084C
++:102D9000AF4200243C020008034240219502000299
++:102DA0003C0A0800954A00C63046FFFF14C00007E1
++:102DB0003402FFFF8F8200288F8400343C0760209C
++:102DC000944500D40A000B5A30A5FFFF10C200241E
++:102DD0008F87002894E2005494E400163045FFFFEA
++:102DE00000A6102300A6182B3089FFFF10600004F6
++:102DF0003044FFFF00C51023012210233044FFFFA1
++:102E0000008A102B1040000C012A1023240200011C
++:102E1000A50200162402FFFFA502000294E500D4DB
++:102E20008F8400340000302130A5FFFF3C07602074
++:102E30000A000AF1000000000044102A10400008B7
++:102E4000000000009502001630420001104000040E
++:102E5000000000009742007E24420014A5020016E4
++:102E600003E00008000000008F84002827BDFFE079
++:102E7000AFBF0018948200349483003E1060001AA3
++:102E80003048FFFF9383002C2402000114620027C6
++:102E90008FBF00188F820028000818C23108000771
++:102EA000006218212447003A244900542444002099
++:102EB000244500302446003490620040304200FF38
++:102EC0000102100730420001104000168FBF0018A9
++:102ED0000E000856AFA900108F82002894420034DB
++:102EE0000A000B733048FFFF94830036948200344D
++:102EF0001043000E8FBF001894820036A482003465
++:102F000094820056A48200548C82002CAC8200244F
++:102F100094820032A48200309482003CA482003A61
++:102F20008FBF00180A000B3327BD002003E0000804
++:102F300027BD002027BDFFE8AFBF00108F4A01006A
++:102F40003C0508008CA500E03C02080090424B8440
++:102F50003C0C0800958C4B7E01452821304B003FEE
++:102F600030A2007F03424021396900323C02000A4E
++:102F70003963003F2C630001010240212D2900012B
++:102F80002402FF8000A2282401234825AF8A0034B0
++:102F900000801821AF450024000030210080282146
++:102FA00024070001AF8800283C04080024844B78E3
++:102FB000AF8C002415200007A380002D24020020E0
++:102FC0005562000F006020213402FFFF5582000C83
++:102FD000006020212402002015620005000000008E
++:102FE0008C6300142402FFFF106200070000000041
++:102FF0000E000889000000000A000BD0000000004D
++:103000000E0008F4016028210E000B68000000008B
++:103010008FBF001024020C8027BD001803E00008B9
++:10302000AF4200243C0208008C4200E027BDFFA014
++:10303000AFB1003C008210212411FF80AFBE0058C8
++:10304000AFB70054AFB20040AFB00038AFBF005CC4
++:10305000AFB60050AFB5004CAFB40048AFB30044BA
++:10306000005110248F4800248F4900288F470028E2
++:10307000AF4200243C0208008C4200E00080902116
++:1030800024060006008210213042007F03421821EE
++:103090003C02000A006280213C02001F3442FF8093
++:1030A00000E2382427A40010260500F00122F024B5
++:1030B0000102B8240E00051DAFA700308FA2001832
++:1030C000AE0200C48FA2001CAE0200C88FA2002472
++:1030D000AE0200CC93A40010920300D12402FF8022
++:1030E0000082102400431025304900FF3083007F08
++:1030F0003122007F0062102A10400004000310C03B
++:1031000001311026304900FF000310C000031940B0
++:10311000006218213C0208008C4200DC920400D2BC
++:10312000024210210043102100511024AF42002818
++:1031300093A300103063007F000310C00003194008
++:10314000006218213C0208008C4200DC024210217F
++:10315000004310213042007F034218213C02000C42
++:10316000006240218FA300142402FFFF1062003090
++:10317000309500FF93A2001195030014304400FF26
++:103180003063FFFF0064182B1060000D000000008A
++:10319000950400148D07001C8D0600183084FFFF75
++:1031A00000442023000421000000102100E4382105
++:1031B00000E4202B00C230210A000C4A00C4302158
++:1031C000950400148D07001C8D0600183084FFFF45
++:1031D000008220230004210000001021008018211B
++:1031E00000C2302300E4202B00C4302300E3382346
++:1031F000AD07001CAD06001893A20011A502001433
++:1032000097A20012A50200168FA20014AD020010B2
++:103210008FA20014AD02000C93A20011A5020020A1
++:1032200097A20012A50200228FA20014AD02002472
++:103230002406FF80024610243256007FAF4200244D
++:10324000035618213C02000A006280218E02004CC5
++:103250008FA200203124007F000428C0AE0200505D
++:103260008FA200200004214000852821AE020070BA
++:1032700093A2001001208821A202008393A20010D3
++:10328000A2020079920200853042003FA20200852E
++:103290003C0208008C4200DC024210210045102153
++:1032A00000461024AF42002C3C0208008C4200E48F
++:1032B0003C0308008C6300DC024210210044102112
++:1032C00000461024AF4200283C0208008C4200E473
++:1032D00002431821006518210242102100441021E8
++:1032E0003042007F3063007F93A50010034220210D
++:1032F000034318213C02000E006240213C02000CF6
++:1033000010B1008C008248213233007F1660001912
++:103310002404FF803C0208008C4200DC02421021A1
++:1033200000441024AF42002C3C0208008C4200E410
++:103330003C0308008C6300DC02421021004410248E
++:10334000AF4200283C0208008C4200E402431821EE
++:103350003063007F024210213042007F034220216F
++:10336000034318213C02000E006240213C02000C85
++:10337000008248219124000D2414FF8000001021B8
++:1033800000942025A124000D950400029505001449
++:103390008D07001C3084FFFF30A5FFFF8D0600184D
++:1033A000008520230004210000E4382100C23021E0
++:1033B00000E4202B00C43021AD07001CAD0600182E
++:1033C00095020002A5020014A50000168D02000857
++:1033D000AD0200108D020008AD02000C9502000243
++:1033E000A5020020A50000228D020008AD020024E5
++:1033F0009122000D30420040104000422622000180
++:103400003C0208008C4200E0A3B300283C10000AF4
++:103410000242102100541024AF4200243C02080054
++:103420008C4200E0A380002C27A4002C0242102133
++:103430003042007F03421821007018218C6200D8AE
++:103440008D26000427A50028AFA9002C00461021D6
++:10345000AC6200D80E0009E1AF83002893A30028D6
++:103460008F8200280E000626A04300D10E000B68B4
++:103470000000000002541024AF4200243C02080067
++:103480008C4200DC00132940001320C000A420213E
++:10349000024210210044102100541024AF42002C9D
++:1034A0003C0208008C4200E43C0308008C6300DC12
++:1034B00003563021024210210045102100541024EF
++:1034C000AF4200283C0208008C4200E4024318216D
++:1034D0000064182102421021004510213042007F73
++:1034E0003063007F03422021034318213C02000E79
++:1034F000006240213C02000C00D080210082482163
++:10350000262200013043007F14750005304400FF7F
++:103510002403FF800223102400431026304400FFC0
++:1035200093A2001000808821250800281444FF760B
++:103530002529002093A400108FA300142402FFFF6C
++:103540001062000A308900FF2482000124830001F8
++:103550003042007F14550005306900FF2403FF80CE
++:103560000083102400431026304900FF92020078A7
++:10357000305300FF11330032012088213C02080043
++:103580008C4200DC3225007F000520C00005294068
++:1035900000A42021024210212406FF8000441021B3
++:1035A00000461024AF42002C3C0308008C6300DC72
++:1035B0003C0208008C4200E4024318210242102120
++:1035C0000045102100641821004610243063007F5C
++:1035D000AF420028034318213C02000E0062402144
++:1035E0003C0208008C4200E48D06000C0100202102
++:1035F00002421021004510213042007F0342182171
++:103600003C02000C0062482110C0000D012028215E
++:103610000E00064A000000002402FF800222182447
++:1036200026240001006228263082007F1455000203
++:10363000308300FF30A300FF1473FFD000608821A7
++:103640008E0300743C027FFF3442FFFF00621824A7
++:10365000AE0300740E00066B02402021AF57002419
++:103660008FA20030AF5E00288FBF005C8FBE005875
++:103670008FB700548FB600508FB5004C8FB4004800
++:103680008FB300448FB200408FB1003C8FB0003840
++:1036900027BD006003E00008AF42002C27BDFFD823
++:1036A000AFB1001CAFBF0020AFB000182751018898
++:1036B000922200032408FF803C03000A3047007F69
++:1036C000A3A700108F4601803C0208008C4200E056
++:1036D000AF86003400C2282100A81024AF42002485
++:1036E0009224000030A2007F0342102100431021E9
++:1036F000AF8200283084007F24020002148200255B
++:10370000000719403C0208008C4200E400C210216E
++:103710000043282130A2007F0342182100A8102472
++:10372000AF4200283C02000C006218219062000D9C
++:10373000AFA3001400481025A062000D8FA3001451
++:103740009062000D304200405040006A8FBF002060
++:103750008F860028A380002C27A400148CC200D8D8
++:103760008C63000427A50010004310210E0009E11E
++:10377000ACC200D893A300108F8200280E0006264A
++:10378000A04300D10E000B68000000000A000E0BE1
++:103790008FBF00200E00062F00C020210E00063D26
++:1037A000000000003C020008034280219223000137
++:1037B0009202007B1443004F8FBF00209222000032
++:1037C0003044007F24020004108200172882000584
++:1037D00010400006240200052402000310820007A6
++:1037E0008FB1001C0A000E0C0000000010820012B5
++:1037F0008FBF00200A000E0C8FB1001C92050083C1
++:10380000920600788E0700748F84003430A500FF84
++:1038100000073E0230C600FF0E00067330E7007F4F
++:103820000A000E0B8FBF00200E000BD78F840034D0
++:103830000A000E0B8FBF002024020C80AF42002430
++:103840009202003E30420040104000200000000084
++:103850009202003E00021600000216030441000618
++:10386000000000008F8400340E0005A024050093A2
++:103870000A000E0B8FBF00209202003F24030018A5
++:10388000304200FF1443000C8F84003424050039BB
++:103890000E000538000030210E0002508F840034E5
++:1038A00024020012A202003F0E0002598F8400344D
++:1038B0000A000E0B8FBF0020240500360E000538CD
++:1038C000000030210A000E0B8FBF00200E000250B6
++:1038D0008F8400349202000534420020A2020005C9
++:1038E0000E0002598F8400340E000FC08F84003404
++:1038F0008FBF00208FB1001C8FB0001824020C80F5
++:1039000027BD002803E00008AF42002427BDFFE8E0
++:10391000AFB00010AFBF001427430100946200084D
++:103920000002140000021403044100020000802180
++:103930002410000194620008304200801040001AF8
++:10394000020010219462000830422000104000164E
++:10395000020010218C6300183C021C2D344219ED2A
++:10396000240600061062000F3C0760213C0208009C
++:103970008C4200D4104000078F8200288F830028DB
++:10398000906200623042000F34420040A062006248
++:103990008F8200288F840034944500D40E000AF1F1
++:1039A00030A5FFFF020010218FBF00148FB0001060
++:1039B00003E0000827BD001827BDFFE0AFB10014E9
++:1039C000AFB00010A380002CAFBF00188F450100DE
++:1039D0003C0308008C6300E02402FF80AF850034C4
++:1039E00000A318213064007F0344202100621824C2
++:1039F0003C02000A00822021AF430024275001002E
++:103A00008E0200148C8300DCAF8400280043102356
++:103A100018400004000088218E0200140E000A8461
++:103A2000AC8200DC9202000B24030002304200FF53
++:103A30001443002F0000000096020008304300FFEE
++:103A40002402008214620005240200840E00093E54
++:103A5000000000000A000E97000000001462000938
++:103A6000240200818F8200288F8400343C0760216B
++:103A7000944500D49206000530A5FFFF0A000E868B
++:103A800030C600FF14620027000000009202000A06
++:103A9000304300FF306200201040000430620040DC
++:103AA0008F8400340A000E82240600401040000477
++:103AB000000316008F8400340A000E8224060041A1
++:103AC00000021603044100178F84003424060042CC
++:103AD0008F8200283C076019944500D430A5FFFF71
++:103AE0000E000AF1000000000A000E97000000001E
++:103AF0009202000B24030016304200FF1043000620
++:103B0000000000009202000B24030017304200FF67
++:103B100014430004000000000E000E11000000001D
++:103B2000004088210E000B68000000009202000A8D
++:103B3000304200081040000624020C808F850028C7
++:103B40003C0400080E0011EE0344202124020C80E6
++:103B5000AF4200248FBF0018022010218FB0001048
++:103B60008FB1001403E0000827BD002027BDFFE847
++:103B7000AFBF0014AFB000108F5000243C0308000A
++:103B80008C6300E08F4501002402FF8000A3182110
++:103B90003064007F03442021006218243C02000AA4
++:103BA00000822021AF850034AF4300249082006260
++:103BB000AF8400283042000F34420050A0820062DF
++:103BC0003C02001F3442FF800E00062602028024C1
++:103BD000AF5000248FBF00148FB0001003E0000826
++:103BE00027BD00183C0208008C4200201040001D38
++:103BF0002745010090A300093C0200080342202150
++:103C000024020018546200033C0200080A000ED887
++:103C10002402000803422021240200161462000539
++:103C20002402001724020012A082003F0A000EE2C4
++:103C300094A700085462000694A700089362000548
++:103C40002403FFFE00431024A362000594A700088C
++:103C500090A6001B8CA4000094A500060A000ACCC4
++:103C600000073C0003E000080000000027440100BA
++:103C700094820008304500FF38A3008238A20084F7
++:103C80002C6300012C420001006218251060000620
++:103C9000240200839382002D1040000D00000000DC
++:103CA0000A000B9B0000000014A2000524A2FF8064
++:103CB0008F4301043C02602003E00008AC43001481
++:103CC000304200FF2C420002104000032402002278
++:103CD0000A000E3C0000000014A2000300000000D7
++:103CE0000A000EA9000000000A000EC70000000034
++:103CF0009363007E9362007A144300090000202140
++:103D00009362000024030050304200FF144300047B
++:103D1000240400019362007E24420001A362007E1D
++:103D200003E00008008010218F4201F80440FFFEEC
++:103D300024020002AF4401C0A34201C43C021000AF
++:103D400003E00008AF4201F827BDFFE8AFBF001055
++:103D50009362003F2403000A304200FF14430046F0
++:103D6000000000008F6300548F62004C1062007DE1
++:103D7000036030219362000024030050304200FFB2
++:103D80001443002F000000008F4401403C02080053
++:103D90008C4200E02403FF800082102100431024A5
++:103DA000AF4200243C0208008C4200E08F650054C2
++:103DB0003C03000A008220213084007F034410214C
++:103DC00000431021AC4501089762003C8F63004C12
++:103DD0003042FFFF0002104000621821AF63005C18
++:103DE0008F6300548F64004C9762003C006418237A
++:103DF0003042FFFF00031843000210400043102A26
++:103E000010400006000000008F6200548F63004CD9
++:103E1000004310230A000F58000210439762003C31
++:103E20003042FFFF00021040ACC2006424020001D7
++:103E3000A0C0007CA0C2008424020C80AF420024F9
++:103E40000E000F0A8F440140104000478FBF001042
++:103E50008F4301408F4201F80440FFFE240200021C
++:103E6000AF4301C0A34201C43C021000AF4201F8BD
++:103E70000A000FA88FBF00109362003F24030010B8
++:103E8000304200FF14430004000000008F44014052
++:103E90000A000F94000028219362003F24030016BB
++:103EA000304200FF1443000424020014A362003FC8
++:103EB0000A000FA2000000008F62004C8F630050C8
++:103EC00000431023044100288FBF0010936200813B
++:103ED00024420001A3620081936200812C4200040D
++:103EE00014400010000000009362003F240300040F
++:103EF000304200FF14430006000000008F440140E0
++:103F00008FBF0010240500930A0005A027BD0018EC
++:103F10008F440140240500938FBF00100A00060F54
++:103F200027BD00188F4401400E0002500000000021
++:103F30008F6200542442FFFFAF6200548F62005032
++:103F40002442FFFFAF6200500E0002598F4401402F
++:103F50008F4401408FBF0010240500040A00025E58
++:103F600027BD00188FBF001003E0000827BD001810
++:103F70008F4201889363007E00021402304400FFE8
++:103F8000306300FF1464000D0000000093620080A5
++:103F9000304200FF1044000900000000A3640080CC
++:103FA0009362000024030050304200FF14430004D9
++:103FB000000000000A0006D78F440180A36400803F
++:103FC00003E000080000000027BDFFE8AFB00010CC
++:103FD000AFBF00149362000524030030304200306C
++:103FE00014430089008080213C0208008C4200209C
++:103FF00010400080020020210E0004930000000009
++:104000008F850020ACB000009362003E9363003FB8
++:10401000304200FF00021200306300FF0043102511
++:10402000ACA2000493620082000216000002160394
++:1040300004410005000000003C0308008C630048B8
++:104040000A000FE6000000009362003E304200408C
++:10405000144000030000182193620081304300FFE8
++:104060009362008200031E00304200FF0002140031
++:1040700000621825ACA300088F620040ACA2000CBF
++:104080008F620048ACA200108F62004CACA20014FA
++:104090008F6200508F63004C0043102304410003E3
++:1040A000000000000A000FFA8F62004C8F6200507F
++:1040B000ACA200183C02080094424B5E3C03C00BCB
++:1040C00000002021004310250E0004B8ACA2001C03
++:1040D0008F6200548F840020AC8200008F620058F1
++:1040E000AC8200048F62005CAC8200088F620060CA
++:1040F0008F43007400431021AC82000C8F62006477
++:10410000AC820010976300689762006A00031C008D
++:104110003042FFFF00621825AC83001493620082D6
++:1041200024030080304200FF14430003000000001D
++:104130000A00102EAC8000188F63000C24020001CE
++:104140001062000E2402FFFF9362003E30420040E6
++:104150001440000A2402FFFF8F63000C8F4200749A
++:10416000006218233C020800006210241440000280
++:10417000000028210060282100051043AC820018AF
++:104180003C02080094424B5E3C03C00C000020211E
++:10419000004310258F8300200E0004B8AC62001C81
++:1041A0008F6200188F8300203C05080094A54B5EA9
++:1041B00024040001AC620000AC6000048F66006C57
++:1041C0003C02400D00A22825AC6600088F6200DC8E
++:1041D000AC62000CAC600010936200050002160097
++:1041E000AC620014AC6000180E0004B8AC65001C92
++:1041F000020020218FBF00148FB00010A3600005C3
++:104200000A00042127BD00188FBF00148FB00010D2
++:1042100003E0000827BD00189742007C30C600FF6D
++:10422000A08600843047FFFF2402000514C2000B63
++:1042300024E3465090A201122C42000710400007D0
++:1042400024E30A0090A30112240200140062100467
++:1042500000E210210A0010663047FFFF3067FFFFC1
++:1042600003E00008A4870014AC87004C8CA201086E
++:104270000080402100A0482100E2102330C600FF4A
++:104280001840000393AA001324E2FFFCACA201082B
++:1042900030C2000110400008000000008D020050F4
++:1042A00000E2102304410013240600058D0200548F
++:1042B00010E20010000000008D02005414E2001A09
++:1042C000000000003C0208008C4200D83042002070
++:1042D0001040000A2402000191030078910200833B
++:1042E000144300062402000101002021012028219E
++:1042F000240600040A00105400000000A1000084FD
++:1043000011400009A50200148F4301008F4201F8FB
++:104310000440FFFE24020002AF4301C0A34201C4D7
++:104320003C021000AF4201F803E00008000000006A
++:1043300027BDFFE88FA90028AFBF001000804021F3
++:1043400000E918231860007330C600FFA080007CCD
++:10435000A08000818CA2010800E210230440004DDF
++:10436000000000008C8200509483003C8C84006428
++:10437000004748233063FFFF012318210083202BCF
++:1043800010800004000000008D0200640A0010B7D5
++:1043900000E210219502003C3042FFFF0122102173
++:1043A00000E21021AD02005C9502003C8D03005C30
++:1043B0003042FFFF0002104000E210210043102BAA
++:1043C00010400003000000000A0010C68D02005CCF
++:1043D0009502003C3042FFFF0002104000E2102135
++:1043E000AD02005CA1000084AD07004C8CA2010866
++:1043F00000E210231840000224E2FFFCACA20108F6
++:1044000030C200011040000A000000008D02005080
++:1044100000E2102304410004010020218D02005419
++:1044200014E20003000000000A0010E82406000562
++:104430008D02005414E200478FBF00103C020800B8
++:104440008C4200D8304200201040000A24020001B3
++:1044500091030078910200831443000624020001B6
++:1044600001002021240600048FBF00100A00105410
++:1044700027BD0018A1000084A50200148F4301008D
++:104480008F4201F80440FFFE240200020A00110DD1
++:10449000000000008C82005C004910230043102BB8
++:1044A00054400001AC87005C9502003C3042FFFFA5
++:1044B0000062102B14400007240200029502003C09
++:1044C0008D03005C3042FFFF00621821AD03005CE9
++:1044D00024020002AD07004CA10200840E000F0A66
++:1044E0008F4401001040001B8FBF00108F4301005C
++:1044F0008F4201F80440FFFE24020002AF4301C0D6
++:10450000A34201C43C021000AF4201F80A0011238B
++:104510008FBF001030C200101040000E8FBF00107F
++:104520008C83005C9482003C006918233042FFFFBA
++:10453000006218213C023FFF3444FFFF0083102B30
++:10454000544000010080182101231021AD02005CBD
++:104550008FBF001003E0000827BD001827BDFFE84B
++:104560008FAA0028AFBF00100080402100EA482336
++:104570001920002130C600FF8C83005C8C8200640F
++:10458000006A18230043102B5040001000691821C6
++:1045900094A2011001221021A4A2011094A20110E2
++:1045A0003042FFFF0043102B1440000A3C023FFF43
++:1045B00094A2011000431023A4A201109482003C95
++:1045C0003042FFFF0A00114200621821A4A001102E
++:1045D0003C023FFF3444FFFF0083102B5440000196
++:1045E0000080182100671021AD02005CA100007C52
++:1045F0000A00118AA100008130C200101040003C66
++:10460000000000008C820050004A1023184000383F
++:10461000000000009082007C24420001A082007C07
++:104620009082007C3C0308008C630024304200FF31
++:104630000043102B1440005C8FBF00108CA20108B7
++:1046400000E2102318400058000000008C83005442
++:104650009482003C006A18233042FFFF0003184395
++:10466000000210400043102A104000050000000026
++:104670008C820054004A10230A001171000210437A
++:104680009482003C3042FFFF00021040AD02006403
++:104690009502003C8D0400649503003C3042FFFF0E
++:1046A00000021040008220213063FFFF00831821A8
++:1046B00001431021AD02005C8D020054ACA2010840
++:1046C00024020002A10200840E000F0A8F440100A0
++:1046D000104000358FBF00108F4301008F4201F85A
++:1046E0000440FFFE240200020A0011B30000000093
++:1046F000AD07004C8CA2010800E210231840000214
++:1047000024E2FFFCACA2010830C200011040000A04
++:10471000000000008D02005000E21023044100045C
++:10472000010020218D02005414E20003000000006B
++:104730000A0011AA240600058D02005414E2001A92
++:104740008FBF00103C0208008C4200D8304200208D
++:104750001040000A240200019103007891020083B6
++:104760001443000624020001010020212406000455
++:104770008FBF00100A00105427BD0018A10000844C
++:10478000A50200148F4301008F4201F80440FFFE90
++:1047900024020002AF4301C0A34201C43C02100046
++:1047A000AF4201F88FBF001003E0000827BD0018DA
++:1047B0008FAA00108C8200500080402130C600FF7C
++:1047C000004A102300A048211840000700E01821EB
++:1047D00024020001A0800084A0A00112A482001481
++:1047E0000A001125AFAA0010A0800081AD07004C7F
++:1047F0008CA2010800E210231840000224E2FFFC12
++:10480000ACA2010830C20001104000080000000006
++:104810008D0200500062102304410013240600059D
++:104820008D02005410620010000000008D02005440
++:1048300014620011000000003C0208008C4200D805
++:10484000304200201040000A240200019103007849
++:10485000910200831443000624020001010020217C
++:1048600001202821240600040A0010540000000042
++:10487000A1000084A502001403E00008000000006D
++:1048800027BDFFE0AFBF0018274201009046000A95
++:104890008C4800148C8B004C9082008430C900FF3F
++:1048A00001681823304A00FF1C60001A2D460006DC
++:1048B000240200010142100410C00016304300031E
++:1048C000012030210100382114600007304C000C19
++:1048D00015800009304200301440000B8FBF0018D3
++:1048E0000A001214000000000E001125AFAB0010EA
++:1048F0000A0012148FBF00180E00109AAFAB001000
++:104900000A0012148FBF0018AFAB00100E0011BACE
++:10491000AFAA00148FBF001803E0000827BD0020D5
++:1049200024020003A08200848C82005403E000086B
++:10493000ACA201083C0200080342182190620081E9
++:10494000240600433C07601924420001A062008154
++:10495000906300813C0208008C4200C0306300FF7D
++:10496000146200102403FF803C0208008C4200E027
++:104970000082102100431024AF4200243C020800B2
++:104980008C4200E03C03000A008210213042007F8C
++:104990000342102100431021944500D40A000AF17B
++:1049A00030A5FFFF03E000080000000027BDFFE086
++:1049B000AFBF0018AFB10014AFB000108F4201803C
++:1049C0000080802100A088210E00121B00402021C1
++:1049D000A20000848E0200548FBF00188FB0001018
++:1049E000AE2201088FB1001403E0000827BD0020AB
++:1049F00027BDFFE03C020008AFB00010AFBF0018B9
++:104A0000AFB10014034280218F5101409203008412
++:104A10008E0400508E02004C14820040306600FF6D
++:104A20003C0208008C4200E02403FF800222102197
++:104A300000431024AF4200243C0208008C4200E0F6
++:104A40009744007C92050081022210213042007FB1
++:104A5000034218213C02000A0062182114A0000B36
++:104A60003084FFFF2402000554C20014248205DCB8
++:104A70009062011224420001A062011224020C8003
++:104A8000AF4200240A00127324020005A060011244
++:104A90002402000514C20009248205DC9202008170
++:104AA0002C4200075040000524820A009203008136
++:104AB0002402001400621004008210213044FFFF21
++:104AC000A60400140E00121B022020219602003CB6
++:104AD0008E03004C022020213042FFFF00021040D4
++:104AE000006218210E000250AE03005C9202007DAD
++:104AF00002202021344200400E000259A202007D13
++:104B00008F4201F80440FFFE24020002AF5101C0B1
++:104B1000A34201C43C021000AF4201F88FBF00184D
++:104B20008FB100148FB0001003E0000827BD0020F3
++:104B300008000ACC08000B1408000B9808000BE4CE
++:104B400008000C200A0000280000000000000000FF
++:104B50000000000D6370362E322E3300000000007E
++:104B60000602030400000000000000000000000036
++:104B70000000000000000000000000000000000035
++:104B80000000000000000000000000000000002005
++:104B90000000000000000000000000000000000015
++:104BA0000000000000000000000000000000000005
++:104BB00000000000000000000000000000000001F4
++:104BC0000000002B000000000000000400030D4066
++:104BD00000000000000000000000000000000000D5
++:104BE00000000000000000001000000300000000B2
++:104BF0000000000D0000000D3C020800244258A4F3
++:104C00003C03080024635F70AC4000000043202B8D
++:104C10001480FFFD244200043C1D080037BD7FFCCA
++:104C200003A0F0213C100800261000A03C1C080046
++:104C3000279C58A40E0001AC000000000000000DED
++:104C400027BDFFE83C096018AFBF00108D2C500055
++:104C5000240DFF7F24080031018D5824356A380C5B
++:104C600024070C003C1A8000AD2A50003C04800A46
++:104C7000AF4800083C1B8008AF4700240E00091510
++:104C8000AF8400100E0008D8000000000E000825B8
++:104C9000000000000E001252000000003C046016EC
++:104CA0008C8500003C06FFFF3C02535300A61824ED
++:104CB0001062004734867C0094C201F2A780002C69
++:104CC00010400003A78000CC38581E1EA798002C67
++:104CD00094C201F810400004978300CC38591E1E7E
++:104CE000A79900CC978300CC2C7F006753E000018C
++:104CF000240300669784002C2C82040114400002D7
++:104D000000602821240404003C0760008CE904387A
++:104D10002403103C3128FFFF1103001F30B9FFFFAF
++:104D200057200010A38000CE24020050A38200CEA2
++:104D3000939F00CE53E0000FA78500CCA78000CC46
++:104D4000978500CC8FBF0010A780002CA78000346F
++:104D5000A78000E63C010800AC25008003E00008C5
++:104D600027BD0018939F00CE57E0FFF5A78000CC29
++:104D7000A78500CC978500CC8FBF0010A784002C9E
++:104D8000A7800034A78000E63C010800AC25008025
++:104D900003E0000827BD0018A38000CE8CCB003CA8
++:104DA000316A00011140000E0000000030A7FFFF33
++:104DB00010E0FFDE240200508CCC00C831860001D8
++:104DC00014C0FFDC939F00CE0A00007A2402005139
++:104DD0008C8F00043C0E60000A00005D01EE302163
++:104DE0008CEF0808240D5708000F740211CD000441
++:104DF00030B8FFFF240500660A00007B240404008D
++:104E00001700FFCC939F00CE0A00007A24020050C6
++:104E10008F8600103089FFFF000939408CC30010D5
++:104E20003C08005000E82025AF4300388CC5001432
++:104E300027420400AF82001CAF45003CAF44003065
++:104E40000000000000000000000000000000000062
++:104E50000000000000000000000000000000000052
++:104E60008F4B0000316A00201140FFFD0000000060
++:104E700003E00008000000008F840010948A001AEC
++:104E80008C8700243149FFFF000940C000E8302131
++:104E9000AF46003C8C8500248F43003C00A31023C8
++:104EA00018400029000000008C8B002025620001C2
++:104EB0003C0D005035AC0008AF420038AF4C00301C
++:104EC00000000000000000000000000000000000E2
++:104ED00000000000000000000000000000000000D2
++:104EE0008F4F000031EE002011C0FFFD00000000D8
++:104EF0008F4A04003C080020AC8A00108F4904044B
++:104F0000AC890014AF4800300000000094860018FF
++:104F10009487001C00C71821A48300189485001AE8
++:104F200024A20001A482001A9498001A9499001EE9
++:104F3000133800030000000003E000080000000038
++:104F400003E00008A480001A8C8200200A0000DC24
++:104F50003C0D00500A0000CD000000003C0308009A
++:104F60008C6300208F82001827BDFFE810620008C4
++:104F7000AFBF00100E000104AF8300183C0308000F
++:104F80008C63002024040001106400048F89001049
++:104F90008FBF001003E0000827BD00188FBF00106E
++:104FA0003C076012A520000A9528000A34E500108D
++:104FB00027BD00183106FFFF03E00008ACA60090F3
++:104FC0003C0208008C42002027BDFFC8AFBF003460
++:104FD000AFBE0030AFB7002CAFB60028AFB500248D
++:104FE000AFB40020AFB3001CAFB20018AFB10014D3
++:104FF00010400050AFB000108F840010948600065F
++:105000009483000A00C3282330B6FFFF12C0004A71
++:105010008FBF003494890018948A000A012A402323
++:105020003102FFFF02C2382B14E0000202C020212F
++:10503000004020212C8C0005158000020080A0215A
++:10504000241400040E0000B3028020218F8700107A
++:1050500002809821AF80001494ED000A028088211C
++:105060001280004E31B2FFFF3C1770003C1540002B
++:105070003C1E60008F8F001C8DEE000001D71824AD
++:10508000507500500220202102A3802B160000350D
++:105090003C182000507800470220202124100001F5
++:1050A0008F83001414600039029158230230F823D2
++:1050B0000250C82133F1FFFF1620FFEE3332FFFF0D
++:1050C0008F8700103C110020AF510030000000001D
++:1050D00094E6000A3C1E601237D5001002662821B3
++:1050E000A4E5000A94E2000A94F2000A94F400187D
++:1050F0003057FFFF1292003BAEB700908CED0014CA
++:105100008CE400100013714001AE4021000E5FC31B
++:10511000010E502B008B4821012A1821ACE8001405
++:10512000ACE3001002D3382330F6FFFF16C0FFB9FE
++:105130008F8400108FBF00348FBE00308FB7002CDB
++:105140008FB600288FB500248FB400208FB3001CC9
++:105150008FB200188FB100148FB0001003E0000868
++:1051600027BD0038107E001B000000001477FFCC24
++:10517000241000010E00159B000000008F83001416
++:105180001060FFCB0230F823029158238F87001064
++:10519000017020210A0001973093FFFF8F830014D4
++:1051A0001460FFCB3C110020AF5100300A000163B6
++:1051B000000000000E00077D024028210A00015770
++:1051C000004080210E00033A024028210A000157C6
++:1051D000004080210E001463022020210A000157A4
++:1051E000004080210E0000CD000000000A0001797F
++:1051F00002D3382327BDFFE8AFB00010AFBF0014C3
++:105200000E00003F000000003C028000345000709F
++:105210000A0001BA8E0600008F4F000039EE00012F
++:1052200031C20001104000248F8600A88E070000C4
++:105230003C0C08008D8C003C3C0908008D2900388E
++:1052400000E66823018D28210000502100AD302B9D
++:10525000012A4021010620213C010800AC25003C28
++:10526000AF8700A83C010800AC2400380E000106FE
++:10527000000000003C0308008C6300701060FFE633
++:10528000006020213C0508008CA500683C06080051
++:105290008CC6006C0E00152A000000003C010800BE
++:1052A000AC2000708F4F000039EE000131C20001C8
++:1052B0001440FFDE8F8600A88E0A00008F8B00A8A6
++:1052C0003C0508008CA5003C3C0408008C84003898
++:1052D000014B482300A938210082182100E9402B06
++:1052E000006810213C010800AC27003C3C0108008C
++:1052F000AC2200388F5F01002419FF0024180C0035
++:1053000003F9202410980012AF840000AF4400205D
++:10531000936D0000240C002031A600FF10CC001279
++:10532000240E005010CE00043C194000AF59013843
++:105330000A0001B3000000000E0011C800000000C8
++:105340003C194000AF5901380A0001B300000000C9
++:105350000E00011F000000003C194000AF59013849
++:105360000A0001B3000000008F58010000802821CE
++:10537000330F00FF01E020210E0002F1AF8F000487
++:105380003C194000AF5901380A0001B30000000089
++:1053900000A4102B2403000110400009000030215C
++:1053A0000005284000A4102B04A0000300031840AF
++:1053B0005440FFFC000528405060000A0004182BF0
++:1053C0000085382B54E000040003184200C3302548
++:1053D00000852023000318421460FFF900052842CD
++:1053E0000004182B03E0000800C310218F4201B80D
++:1053F0000440FFFE00000000AF4401803C031000A9
++:1054000024040040AF450184A3440188A3460189D8
++:10541000A747018A03E00008AF4301B83084FFFFCB
++:105420000080382130A5FFFF000020210A00022A59
++:10543000240600803087FFFF8CA40000240600387B
++:105440000A00022A000028218F8300388F8600304E
++:105450001066000B008040213C07080024E75A1822
++:10546000000328C000A710218C4400002463000121
++:10547000108800053063000F5466FFFA000328C04F
++:1054800003E00008000010213C07080024E75A1C34
++:1054900000A7302103E000088CC200003C0390000C
++:1054A0003462000100822025AF4400208F45002097
++:1054B00004A0FFFE0000000003E000080000000060
++:1054C0003C038000346200010082202503E00008D4
++:1054D000AF44002027BDFFE0AFB100143091FFFFC3
++:1054E000AFB00010AFBF00181220001300A0802141
++:1054F0008CA2000024040002240601401040000F8A
++:10550000004028210E000C5C00000000000010216B
++:10551000AE000000022038218FBF00188FB10014A8
++:105520008FB0001000402021000028210000302111
++:105530000A00022A27BD00208CA200000220382188
++:105540008FBF00188FB100148FB0001000402021D1
++:1055500000002821000030210A00022A27BD002077
++:1055600000A010213087FFFF8CA500048C440000B0
++:105570000A00022A2406000627BDFFE0AFB0001093
++:10558000AFBF0018AFB100149363003E00808021CC
++:105590000080282130620040000020211040000FD0
++:1055A0008E1100000E000851022020219367000098
++:1055B0002404005030E500FF50A400128E0F0000BC
++:1055C000022020218FBF00188FB100148FB000106F
++:1055D000A762013C0A00091127BD00200E000287C6
++:1055E000000000000E0008510220202193670000F7
++:1055F0002404005030E500FF14A4FFF20220202113
++:105600008E0F00003C1008008E1000503C0D000C66
++:10561000240BFF8001F05021314E007F01DA602120
++:10562000018D4021014B4824AF4900280220202150
++:105630008FBF00188FB100148FB00010A50200D6E4
++:1056400027BD00200A000911AF8800D027BDFFE068
++:10565000AFBF0018AFB10014AFB0001093660001E7
++:10566000008080210E00025630D1000493640005B2
++:10567000001029C2A765000034830040A363000521
++:105680000E00025F020020210E00091302002021FB
++:1056900024020001AF62000C02002821A762001062
++:1056A00024040002A762001224060140A76200142D
++:1056B0000E000C5CA76200161620000F8FBF0018AA
++:1056C000978C00343C0B08008D6B00782588FFFF19
++:1056D0003109FFFF256A0001012A382B10E000067E
++:1056E000A78800343C0F6006240E001635ED00102C
++:1056F000ADAE00508FBF00188FB100148FB00010F6
++:1057000003E0000827BD002027BDFFE0AFB1001473
++:10571000AFBF0018AFB0001000A088211080000AB1
++:105720003C03600024020080108200120000000090
++:105730000000000D8FBF00188FB100148FB0001053
++:1057400003E0000827BD00208C682BF80500FFFE51
++:1057500000000000AC712BC08FBF00188FB1001487
++:105760008FB000103C09100027BD002003E00008A6
++:10577000AC692BF80E00025600A0202193650005AD
++:10578000022020210E00025F30B000FF2403003E03
++:105790001603FFE7000000008F4401780480FFFE3D
++:1057A000240700073C061000AF51014002202021D1
++:1057B000A34701448FBF00188FB100148FB00010B1
++:1057C000AF4601780A0002C227BD002027BDFFE8CE
++:1057D000AFBF0014AFB000108F50002000000000D9
++:1057E0000E000913AF440020AF5000208FBF0014FB
++:1057F0008FB0001003E0000827BD00183084FFFFC1
++:10580000008038212406003500A020210A00022A49
++:10581000000028213084FFFF008038212406003654
++:1058200000A020210A00022A0000282127BDFFD065
++:10583000AFB3001C3093FFFFAFB50024AFB2001828
++:10584000AFBF0028AFB40020AFB10014AFB000105C
++:1058500030B5FFFF12600027000090218F90001CE0
++:105860008E0300003C0680002402004000033E023C
++:1058700000032C0230E4007F006688241482001D9F
++:1058800030A500FF8F8300282C68000A510000100B
++:105890008F910014000358803C0C0800258C56940E
++:1058A000016C50218D49000001200008000000001B
++:1058B00002B210213045FFFF0E000236240400849E
++:1058C000162000028F90001CAF8000288F910014DA
++:1058D000260C002026430001018080213072FFFF4A
++:1058E00016200004AF8C001C0253502B1540FFDC27
++:1058F00000000000024010218FBF00288FB5002457
++:105900008FB400208FB3001C8FB200188FB1001429
++:105910008FB0001003E0000827BD0030240E0034D3
++:1059200014AE00F9000000009203000E241F168040
++:105930003C07000CA36300219202000D0347C8211D
++:105940003C066000A3620020961100123C0A7FFF13
++:10595000354CFFFFA771003C960B00102403000597
++:105960003168FFFFAF6800848E05001CAF5F002820
++:105970008F3800008CC4444803057826008F3021FE
++:10598000AF66004C8F69004C24CE00013C057F00BF
++:10599000AF6900508F740050AF740054AF66007050
++:1059A000AF6E00588F6D005824140050AF6D005C2E
++:1059B000A3600023AF6C0064A36300378E02001461
++:1059C000AF6200488F710048AF7100248E0B001841
++:1059D000AF6B006C9208000CA3680036937F003E0A
++:1059E00037F90020A379003E8F78007403058024E6
++:1059F000360F4000AF6F007493640000308900FFE1
++:105A0000513402452404FF803C04080024845A9841
++:105A10000E00028D000000003C1008008E105A9805
++:105A20000E00025602002021240600042407000173
++:105A3000A366007D020020210E00025FA36700051F
++:105A40008F5F017807E0FFFE240B0002AF5001409A
++:105A5000A34B01448F90001C3C081000AF48017814
++:105A60000A000362AF8000282CAD003751A0FF98D8
++:105A70008F9100140005A0803C180800271856BC20
++:105A8000029878218DEE000001C00008000000009F
++:105A90002418000614B80011000000003C0808009B
++:105AA0008D085A9824040005AF4800208E1F001866
++:105AB000AF7F00188F79004CAF79001C8F650050C4
++:105AC000122000C0AF6500700A000362AF84002896
++:105AD0002406000710A60083240300063C050800E6
++:105AE00024A55A980E000264240400818F90001CA3
++:105AF0000011102B0A000362AF8200282407000463
++:105B000014A7FFF6240500503C1808008F185A9877
++:105B1000AF5800208E0F0008AF6F00408E090008BC
++:105B2000AF6900448E14000CAF7400488E0E001054
++:105B3000AF6E004C8E0D0010AF6D00848E0A001405
++:105B4000AF6A00508E0C0018AF6C00548E04001C1D
++:105B5000AF64005893630000306B00FF116501D8FB
++:105B6000000000008F7400488F6900400289702394
++:105B700005C000042404008C1620FFDE240200036C
++:105B8000240400823C05080024A55A980E000287D0
++:105B9000000000008F90001C000010210A0003622A
++:105BA000AF820028240F000514AFFFCC240520008D
++:105BB0003C0708008CE75A98AF4700208E06000487
++:105BC000AF66005C9208000824100008A36800215A
++:105BD0008F9F001C93F90009A37900208F86001C79
++:105BE00090D8000A330400FF10900011000000005C
++:105BF0002885000914A0006924020002240A00205C
++:105C0000108A000B34058000288D002115A00008A3
++:105C100024054000240E0040108E00053C050001C4
++:105C200024140080109400023C050002240540006A
++:105C30008F7800743C19FF00031980240205782531
++:105C4000AF6F007490C4000BA36400818F84001CAC
++:105C50009489000C11200192000000009490000C27
++:105C60002406FFBF24050004A770003C908F000E9F
++:105C7000A36F003E8F84001C9089000FA369003F32
++:105C80008F8B001C8D6E00108F54007401D468231C
++:105C9000AF6D00608D6A0014AF6A0064956C0018E7
++:105CA000A76C00689563001AA763006A8D62001CE8
++:105CB000AF62006C9167000EA367003E9368003EE0
++:105CC0000106F8241220014BA37F003E8F90001C98
++:105CD0000A000362AF8500282407002214A7FF7F73
++:105CE000240300073C0B08008D6B5A981220000C0F
++:105CF000AF4B00200A000362AF830028240C00335E
++:105D000010AC0014240A00283C05080024A55A9869
++:105D10000E00023C240400810A0003EB8F90001C5B
++:105D20003C04080024845A980E00028D00000000F4
++:105D30009363000024110050306200FF10510135C0
++:105D4000000000008F90001C000018210A00036270
++:105D5000AF8300283C0D08008DAD5A9824040081C3
++:105D6000AF4D00203C05080024A55A980E00023CC7
++:105D7000A36A00348F90001C240200090A00036209
++:105D8000AF82002802B288213225FFFF0E000236C2
++:105D9000240400840A0003628F90001C1082FFA478
++:105DA00024050400288B000311600170240C0004FA
++:105DB000240300015483FF9E240540000A00043B95
++:105DC000240501003C04080024845A988F62004C8A
++:105DD0000E00028D8F6300508F90001C0000202168
++:105DE0000A000362AF8400288E1000042404008A95
++:105DF000AF50002093790005333800021700015F8F
++:105E0000020028219368002302002821311F00206E
++:105E100017E0015A2404008D9367003F2406001206
++:105E200030E200FF10460155240400810E000256A6
++:105E30000200202193630023240500040200202196
++:105E4000346B0042A36B00230E00025FA365007D4C
++:105E50008F4401780480FFFE240A0002AF50014005
++:105E6000A34A01448F90001C3C0C1000AF4C0178F9
++:105E70000A0003EC0011102B8E1000042404008A89
++:105E8000AF500020936E000531CD000215A0001622
++:105E900002002821936F003F2414000402002821EF
++:105EA00031E900FF11340010240400810E00025675
++:105EB000020020219362002324080012241FFFFE09
++:105EC00034460020A3660023A368003F93790005B1
++:105ED00002002021033FC0240E00025FA3780005CA
++:105EE00002002821000020210E00033400000000E1
++:105EF0000A0003EB8F90001C8E1000043C03000886
++:105F00000343A021AF500020928B000024050050D5
++:105F1000316400FF10850161240700880200202100
++:105F2000000028210E00022A2406000E928D000097
++:105F3000240EFF800200282101AE8025A2900000DF
++:105F4000240400040E000C5C240600300A0003EB5D
++:105F50008F90001C8E0800043C14080026945A9868
++:105F60003C010800AC285A98AF480020921F00035B
++:105F700033F9000413200002240200122402000658
++:105F8000A362003F920B001B2404FFC03165003F59
++:105F900000A43825A367003E9206000330C200012A
++:105FA00014400132000000008E020008AE8200089A
++:105FB0003C0208008C425AA010400131000249C244
++:105FC000A76900088E14000C240C0001240300149F
++:105FD000AF74002C8E0E0010AF6E0030960D0016C0
++:105FE000A76D0038960A0014A76A003AAF6C000C3F
++:105FF000A76C0010A76C0012A76C0014A76C001609
++:1060000012200136A3630034920F000331F0000226
++:106010002E1100018F90001C262200080A00036246
++:10602000AF8200288E0400043C0E0008034E30218D
++:10603000AF4400208E05000890CD0000240C0050D5
++:1060400031AA00FF114C00862407008824060009AD
++:106050000E00022A000000000A0003EB8F90001CD3
++:106060008E04001C0E00024100000000104000F4ED
++:10607000004050218F89001C240700890140202105
++:106080008D25001C240600010E00022A00000000DD
++:106090000A0003EB8F90001C960D00023C140800D0
++:1060A00026945A9831AA0004514000B83C10600070
++:1060B0008E0E001C3C010800AC2E5A98AF4E0020FA
++:1060C000920700102408001430E200FF144800D6A4
++:1060D00000000000960B00023163000114600165AE
++:1060E000000000008E020004AE8200083C1408008C
++:1060F0008E945AA01280015B000000008F7400741F
++:106100003C0380002404000102835825AF6B007417
++:10611000A3600005AF64000C3C0708008CE75AA0A0
++:106120008F86001CA7640010000711C2A76400122C
++:10613000A7640014A7640016A76200088CC80008B2
++:1061400024040002AF68002C8CC5000CAF65003041
++:1061500090DF0010A37F00348F99001C9330001152
++:10616000A37000358F98001C930F0012A36F0036A8
++:106170008F89001C912E0013A36E00378F90001C96
++:10618000960D0014A76D0038960A0016A76A003A0B
++:106190008E0C0018AF6C00245620FDCCAF84002874
++:1061A0003C05080024A55A980E0002640000202136
++:1061B0008F90001C0A0004A7000020218E1000040C
++:1061C00024070081AF500020936900233134001070
++:1061D000128000170000000002002021000028218A
++:1061E0002406001F0E00022A000000000A0003EB34
++:1061F0008F90001C3C05080024A55A980E000287C9
++:10620000240400828F90001C000028210A000362F1
++:10621000AF8500283C0408008C845A980E0014E8CE
++:10622000000000008F90001C0A000482000018216A
++:106230000E00025602002021937800230200202144
++:10624000370F00100E00025FA36F002300003821FB
++:1062500002002021000028210A0005A82406001FB2
++:10626000920F000C31E90001112000030000000032
++:106270009618000EA4D8002C921F000C33F90002CF
++:1062800013200005000038218E0200149608001229
++:10629000ACC2001CA4C8001A0A0005432406000969
++:1062A0003C05080024A55A980E0002872404008BA0
++:1062B0008F90001C0011282B0A000362AF85002874
++:1062C000AF6000843C0A08008D4A5A983C0D0800D3
++:1062D0008DAD0050240CFF803C02000C014D1821B4
++:1062E000006C2024AF4400288E070014306B007F20
++:1062F000017A282100A2C821AF2700D88E060014F9
++:10630000AF9900D0AF2600DC8E080010251FFFFEDD
++:106310000A000408AF3F01083C0508008CA55A9804
++:106320003C1908008F39005024CCFFFE00B9C02171
++:1063300003047824AF4F00283C1408008E945A9828
++:106340003C0908008D2900500289702131CD007F61
++:1063500001BA502101478021AE0600D8AF9000D08D
++:10636000AE0000DC0A0003B1AE0C0108548CFE3014
++:10637000240540000A00043B240510000E00032EF3
++:10638000000000000A0003EB8F90001C8E0F442CCD
++:106390003C186C62370979703C010800AC205A98AF
++:1063A00015E9000824050140979F00349786002CCA
++:1063B0000280282103E6C82B132000112404009238
++:1063C000240501400E000C7A240400023C01080060
++:1063D000AC225A98AF4200203C0508008CA55A9880
++:1063E00010A00005240400830E00084500000000F2
++:1063F00010400009240400833C05080024A55A9895
++:106400000E000264000000008F90001C0011202B81
++:106410000A000362AF8400280E0008490000000053
++:106420000A00055F8F90001C0E00084D0000000060
++:106430003C05080024A55A980A00062F2404008B66
++:10644000240400040E000C7A240500301440002AB5
++:10645000004050218F89001C240700830140202127
++:106460008D25001C0A000551240600018E04000839
++:106470000E000241000000000A00051BAE82000869
++:106480003C05080024A55A980E00023C240400870D
++:106490008F90001C0A0005360011102B8F830038E6
++:1064A0008F8600301066FE9D000038213C070800F2
++:1064B00024E75A1C000320C0008728218CAC000070
++:1064C00011900061246A00013143000F5466FFFA05
++:1064D000000320C00A0004F6000038213C05080033
++:1064E00024A55A980E000287240400828F90001C75
++:1064F0000A000536000010213C0B0008034B202148
++:106500002403005024070001AF420020A0830000B4
++:10651000A08700018F82001C90480004A08800180A
++:106520008F85001C90A60005A08600198F9F001C77
++:1065300093F90006A099001A8F90001C921800078A
++:10654000A098001B8F94001C928F0008A08F001C45
++:106550008F89001C912E0009A08E001D8F8D001CBC
++:1065600091AC000AA08C001E8F8B001C3C0C080014
++:10657000258C5A1C9163000B3C0B0800256B5A18A4
++:10658000A083001F8F87001C90E8000CA0880020CB
++:106590008F82001C9045000D24024646A0850021F4
++:1065A0008F86001C90DF000EA09F00228F99001C98
++:1065B0009330000FA09000238F98001C93140010BC
++:1065C000A09400248F8F001C91E90011A089002560
++:1065D0008F89001C8F8E00308F900038952D00140D
++:1065E000000E18C025C80001A48D002895270016AC
++:1065F000006C3021006BC821A487002A9525001863
++:106600003108000FA485002CA482002E8D3F001CB1
++:10661000ACCA0000AF88003011100006AF3F000088
++:10662000000038218D25001C014020210A00055161
++:1066300024060001250C00013184000F00003821E0
++:106640000A0006B8AF8400383C07080024E75A184F
++:106650000087302100003821ACA000000A0004F6B9
++:10666000ACC000003C05080024A55A980A00062F7B
++:10667000240400878E0400040E0002410000000084
++:106680000A00056AAE8200083084FFFF30C600FFB2
++:106690008F4201B80440FFFE00064400010430258B
++:1066A0003C07200000C720253C031000AF400180BC
++:1066B000AF450184AF44018803E00008AF4301B84F
++:1066C00027BDFFE8AFB00010AFBF00143C0760006B
++:1066D000240600021080000600A080210010102B6C
++:1066E0008FBF00148FB0001003E0000827BD001812
++:1066F0003C09600EAD2000348CE5201C8F82001C0C
++:106700002408FFFC00A81824ACE3201C0E0006D1CE
++:106710008C45000C0010102B8FBF00148FB00010A0
++:1067200003E0000827BD00183C02600E344701005A
++:1067300024090018274A040000000000000000009F
++:10674000000000003C06005034C30200AF44003893
++:10675000AF45003CAF430030014018218F4B000093
++:10676000316800201100FFFD2406007F2408FFFF90
++:106770008C6C000024C6FFFF24630004ACEC000016
++:1067800014C8FFFB24E70004000000000000000024
++:10679000000000003C0F0020AF4F00300000000060
++:1067A00024AD020001A5702B2529FFFF008E2021BA
++:1067B0001520FFE101A0282103E0000800000000EF
++:1067C00027BDFFE0AFB10014AFBF0018AFB000109D
++:1067D0003C05600E8CA20034008088211440000625
++:1067E0003C0460008C87201C2408FFFC00E8302457
++:1067F00034C30001AC83201C8F8B001C24090001D2
++:10680000ACA90034956900028D6500148D70000CF0
++:106810002D2400818D6700048D660008108000071C
++:106820008D6A00102D2C00041580000E30CE00075C
++:10683000312D000311A0000B000000002404008B88
++:10684000020028210E0006D1240600030011102B9F
++:106850008FBF00188FB100148FB0001003E0000844
++:1068600027BD002015C0FFF62404008B3C03002048
++:10687000AF4300300000000024020001AF8200148A
++:106880000000000000000000000000003C1F01505C
++:10689000013FC825253800033C0F600EAF47003884
++:1068A00000181882AF46003C35E8003CAF59003074
++:1068B000274704008F4400003086002010C0FFFDF1
++:1068C00000000000106000082466FFFF2403FFFFA3
++:1068D0008CEB000024C6FFFF24E70004AD0B000092
++:1068E00014C3FFFB250800043C08600EAD09003806
++:1068F0000000000000000000000000003C07002035
++:10690000AF470030000000000E0006F901402021D2
++:1069100002002821000020210E0006D124060003D9
++:106920000011102B8FBF00188FB100148FB0001012
++:1069300003E0000827BD002027BDFFE0AFB200182C
++:106940003092FFFFAFB10014AFBF001CAFB000101A
++:106950001640000D000088210A0007AA022010211D
++:1069600024050001508500278CE5000C0000000D77
++:10697000262300013071FFFF24E200200232382B71
++:1069800010E00019AF82001C8F8200141440001622
++:106990008F87001C3C0670003C0320008CE5000043
++:1069A00000A62024148300108F84003C00054402BC
++:1069B0003C09800000A980241480FFE9310600FF13
++:1069C0002CCA00095140FFEB262300010006688015
++:1069D0003C0E080025CE579801AE60218D8B00003B
++:1069E0000160000800000000022010218FBF001C81
++:1069F0008FB200188FB100148FB0001003E00008B0
++:106A000027BD00200E0006D1240400841600FFD804
++:106A10008F87001C0A00078BAF80003C90EF0002BC
++:106A200000002021240600090E0006D1000F2E00D0
++:106A30008F87001C0010102B0A00078BAF82003CD0
++:106A4000020028210E0006DF240400018F87001CAD
++:106A50000A00078BAF82003C020028210E0006DFEF
++:106A6000000020210A0007C38F87001C0E00071FAB
++:106A7000020020210A0007C38F87001C30B0FFFFEF
++:106A8000001019C08F5801B80700FFFE3C1F2004FA
++:106A90003C191000AF430180AF400184AF5F018813
++:106AA000AF5901B80A00078C262300013082FFFF8E
++:106AB00014400003000018210004240224030010E5
++:106AC000308500FF14A000053087000F2466000801
++:106AD0000004220230C300FF3087000F14E00005DD
++:106AE000308900032468000400042102310300FF00
++:106AF0003089000315200005388B0001246A00024C
++:106B000000042082314300FF388B00013164000112
++:106B100010800002246C0001318300FF03E00008B4
++:106B200000601021308BFFFF000B394230E600FF80
++:106B30003C09080025295998000640800109602178
++:106B40008D8700003164001F240A0001008A1804A8
++:106B500030A500FF00E3202514A000020003102749
++:106B600000E22024240F000100CF700401096821F5
++:106B7000000E282714800005ADA400008F86000CAD
++:106B800000A6102403E00008AF82000C8F88000CE0
++:106B900001C8102503E00008AF82000C3C06001F6E
++:106BA0003C0360003084FFFF34C5FF8024020020D6
++:106BB000AC602008AC60200CAC602010AC652014E8
++:106BC000AC642018AC62200000000000000000004F
++:106BD00003E000080000000027BDFFE82402FFFFDB
++:106BE000AFBF0010AF82000C000020213C0608005F
++:106BF00024C659982405FFFF248900010004408021
++:106C00003124FFFF010618212C87002014E0FFFA31
++:106C1000AC6500000E0008160000202124020001CF
++:106C20003C04600024050020AC822018AC852000C4
++:106C3000000000000000000000000000244A0001E5
++:106C40003142FFFF2C46040014C0FFF78FBF001035
++:106C500003E0000827BD00188F8300082C620400A1
++:106C600003E00008384200018F830008246200011D
++:106C700003E00008AF8200088F8300082462FFFF52
++:106C800003E00008AF82000827BDFFE0AFB10014A9
++:106C9000AFBF0018AFB000108F6B00303C06600033
++:106CA00000808821ACCB20088F6A002C3C02800039
++:106CB00024030008ACCA200C9769003A9768003892
++:106CC00000092C003107FFFF00A72025ACC42010CD
++:106CD000ACC22014ACC32000000000000000000083
++:106CE000000000003C0360008C6D200031AC000807
++:106CF0001580FFF9000000008C6E201405C00020F4
++:106D0000000000000E0007DA8F84000C00024080B3
++:106D10003C09080025295998010938218CE4000014
++:106D20000E0007DA00028140020220213090FFFFAE
++:106D3000020020210E0007F8000028213C0C8000F2
++:106D4000022C58253210FFFF3C116000240A00205D
++:106D5000AE2B2014AE302018AE2A20000000000018
++:106D60000000000000000000020010218FBF00188A
++:106D70008FB100148FB0001003E0000827BD002081
++:106D80008C6620143C02001F3443FF803C1FFFE848
++:106D900000C3C02437F9080003198021001079C20C
++:106DA0003C0C8000022C582531F0FFFF3C116000A4
++:106DB000240A0020AE2B2014AE302018AE2A20006A
++:106DC0000000000000000000000000000200102190
++:106DD0008FBF00188FB100148FB0001003E00008BF
++:106DE00027BD002027BDFFE8AFB000103402FFFF31
++:106DF0003090FFFFAFBF00141202000602002021F6
++:106E00000E00081600000000020020210E0007F806
++:106E1000240500018F8400088FBF00148FB000107C
++:106E20002483FFFF27BD001803E00008AF8300089C
++:106E3000000439C230E6003F00043B42000718401E
++:106E4000240210002CC4002024C8FFE0AF42002C14
++:106E5000246300011480000330A900FF00071840DC
++:106E6000310600FF0003608024080001019A5821C8
++:106E70003C0A000E00C82804016A382111200005D0
++:106E8000000530278CE900000125302503E00008CB
++:106E9000ACE600008CEE000001C6682403E00008A8
++:106EA000ACED000027BDFFE8AFBF0014AFB000108D
++:106EB0003C0460008C8508083403F00030A2F00028
++:106EC00050430006240200018C8708083404E000C7
++:106ED00030E6F00010C4001E24020002AF82004021
++:106EE0003C1060003C0A0200AE0A0814240910009D
++:106EF0003C08000E8E03440003482021AF49002CBB
++:106F0000240501200E000CC0000030218F830040BA
++:106F1000106000043C021691240B0001106B000E5F
++:106F20003C023D2C344F0090AE0F44088FBF00143C
++:106F30008FB000103C0C6000240E10003C0D0200CD
++:106F400027BD0018AD8E442003E00008AD8D081069
++:106F50000A0008E7AF8000403C0218DA344F009086
++:106F6000AE0F44088FBF00148FB000103C0C6000BF
++:106F7000240E10003C0D020027BD0018AD8E4420E9
++:106F800003E00008AD8D08100A0008BB24050001CD
++:106F90000A0008BB000028213C08080025085DA461
++:106FA0002404FFFF010018212402001E2442FFFFD9
++:106FB000AC6400000441FFFD246300043C070800AA
++:106FC00024E75E208CE5FFFC2404001C240600015D
++:106FD000308A001F0146480424840001000910275C
++:106FE0002C8300201460FFFA00A22824ACE5FFFCEB
++:106FF0003C05666634A4616E3C06080024C65EE06B
++:10700000AF840058AF88009C2404FFFF00C0182103
++:107010002402001F2442FFFFAC6400000441FFFD76
++:10702000246300043C0766663C05080024A55EA0B6
++:10703000AF86004834E6616EAF8600982404FFFFF7
++:1070400000A018212402000F2442FFFFAC640000BE
++:107050000441FFFD246300043C0B66663C06080007
++:1070600024C65E203568616EAF8500A4AF880070CD
++:107070002404FFFF00C018212402001F2442FFFF48
++:10708000AC6400000441FFFD246300043C0D66660F
++:107090003C0A0800254A5F6035AC616EAF860090FF
++:1070A000AF8C005C2404FFFF014018212402000380
++:1070B0002442FFFFAC6400000441FFFD2463000490
++:1070C0003C09080025295F708D27FFFC2404000679
++:1070D000240500013099001F0325C0042484000109
++:1070E000001878272C8E002015C0FFFA00EF3824F6
++:1070F000AD27FFFC3C09666624030400240403DC7E
++:1071000024050200240600663522616E3C08080052
++:1071100025085AA4AF820074AF830044AF83006C8B
++:10712000AF830050AF830084AF8A008CAF840064CB
++:10713000AF85004CAF860054AF840078AF85006007
++:10714000AF86008001001821240200022442FFFFC4
++:10715000AC6000000441FFFD24630004240400032C
++:107160002403000C3C0A0800254A5AB0AF8A006884
++:107170000A00098E2405FFFF000418802484000102
++:10718000006858212C8700C014E0FFFBAD650000AB
++:107190003C0E666635CD616E240C17A024081800DD
++:1071A000AF8D0088AF8C009403E00008AF88007CAE
++:1071B0002484007F000421C200004021000030210F
++:1071C00000003821000028210A0009A5AF8400A092
++:1071D0001060000624E7000100C4302124A500014E
++:1071E0002CC20BF51440FFFA2CA300663C090800E2
++:1071F00025295F6001201821240200032442FFFF9B
++:10720000AC6000000441FFFD2463000410E0001A9C
++:1072100024E3FFFF0003294210A0000A0000202100
++:107220002406FFFF3C03080024635F602484000100
++:107230000085502BAC660000250800011540FFFBBF
++:107240002463000430E2001F10400008000868803A
++:10725000240C0001004C38040008588001692821E2
++:1072600024E6FFFF03E00008ACA6000001A94021CE
++:107270002409FFFFAD09000003E000080000000042
++:10728000AF4400283C04000C034420210005288260
++:107290000A000CC000003021000421803C03600083
++:1072A000AC6410080000000000052980AC65100CDB
++:1072B0000000000003E000088C62100C27BDFFE80E
++:1072C0000080282124040038AFBF00140E0009D527
++:1072D000AFB0001024040E00AF4400283C10000C96
++:1072E00003502021240500100E000CC000003021A6
++:1072F00003501021AC400000AC40000424040038CE
++:107300008FBF00148FB0001024053FFF27BD001869
++:107310000A0009D58C430000000421803C03600072
++:10732000AC641008000000008C62100C03E0000840
++:107330000002118227BDFFC8AFB400208F940068FF
++:10734000AFBE0030AFB7002CAFB600280000B821A8
++:107350000080B021241E00C0AFBF0034AFB50024B0
++:10736000AFB3001CAFB20018AFB10014AFB0001043
++:107370000A000A12AFA5003C504000018F9400683B
++:1073800027DEFFFF13C00028269400048E92000021
++:107390003C03080024635DA01240FFF70283102B1A
++:1073A0003C04080024845AA4028410230002A8C0CC
++:1073B000000098210A000A212411000100118840D0
++:1073C000122000260000000002B380210251282470
++:1073D0000200202110A0FFF9267300010E0009DE33
++:1073E000000000000016684032EC000101AC2021D2
++:1073F0000E0009D5020028218F89009426F700018C
++:107400008FA6003C3AEB0001316A00012528FFFFFE
++:107410000011382702CAB021AF88009416E6FFE7B2
++:1074200002479024AE92000002E010218FBF00348A
++:107430008FBE00308FB7002C8FB600288FB5002488
++:107440008FB400208FB3001C8FB200188FB10014CE
++:107450008FB0001003E0000827BD00383C0E080084
++:1074600025CE5DA0028E102B0A000A0DAE92000000
++:1074700027BDFFD8AFB10014AFB00010AFBF0020E0
++:10748000AFB3001CAFB2001800A0882110A0001FED
++:10749000000480403C13080026735AA40A000A5ACC
++:1074A0002412000112200019261000010E0009F517
++:1074B00002002021000231422444FFA0000618806F
++:1074C0003045001F2C8217A1007318212631FFFFC1
++:1074D0001040FFF400B230048C690000020020214B
++:1074E00024053FFF012640241500FFEE0126382524
++:1074F0000E0009D5AC6700008F8A009426100001A9
++:10750000254700011620FFE9AF8700948FBF0020B8
++:107510008FB3001C8FB200188FB100148FB0001011
++:1075200003E0000827BD00288F85009C00805821BB
++:107530000000402100004821240A001F3C0C0800E4
++:10754000258C5E1C3C0D080025AD5DA48CA60000BA
++:1075500050C000140000402100AD1023000238C0CC
++:10756000240300010A000A930000202115000003F3
++:1075700000E410212448202400004821252900018E
++:10758000512B00132506DFDC106000062484000167
++:1075900000C3702415C0FFF5000318400A000A91CB
++:1075A0000000402110AC002624A300040060282124
++:1075B000254AFFFF1540FFE5AF85009C512B0004D5
++:1075C0002506DFDC0000402103E000080100102157
++:1075D0000006614230C5001F000C50803C070800C7
++:1075E00024E75DA424040001014730211120000F8D
++:1075F00000A420043C05080024A55E20148000059A
++:107600002529FFFF24C6000410C50011000000005A
++:10761000240400018CCF00000004C0270004204097
++:1076200001F868241520FFF5ACCD00008F99007893
++:1076300001001021032B482303E00008AF890078E4
++:107640003C05080024A55DA40A000A9B0000402117
++:107650003C06080024C65DA40A000AB42404000104
++:10766000308800FF240200021102000A24030003F4
++:107670001103005C8F8900A4240400041104005F3E
++:1076800024050005110500670000182103E000082B
++:10769000006010218F8900483C0C0800258C5EE0BA
++:1076A0003C04080024845F60240300201060000F65
++:1076B00000005821240D0002240E00033C0F080096
++:1076C00025EF5EE08D27000014E0000B30F9FFFF8E
++:1076D000252900040124C02B53000001018048210A
++:1076E0002463FFFF5460FFF88D270000016018211C
++:1076F00003E0000800601021132000323C0500FF69
++:1077000030E200FF004030211040004200005021D4
++:1077100024050001000020210005C84000A6C02467
++:1077200017000003332500FF14A0FFFB2484000191
++:10773000012CC023001828C000AA6021008C502111
++:107740003144001F240C0001008C18040003102792
++:1077500000E23024110D0041AD260000110E004C56
++:10776000000A1840110D00368F87006C510E00562C
++:107770008F8C0060240D0004110D005A8F8E008440
++:10778000240E0005150EFFDA01601821240B1430B9
++:1077900011400006000018218F8400A0246300011E
++:1077A000006A402B1500FFFD016458218F8A00807C
++:1077B000AF89008C016018212549FFFF0A000AEB00
++:1077C000AF89008000E52024000736021080FFD03A
++:1077D000240A001800075402314600FF0A000AF389
++:1077E000240A00103C0C0800258C5EA03C04080014
++:1077F00024845EE00A000ADA240300103C0C08002E
++:10780000258C5E203C04080024845EA00A000AD96E
++:107810008F89009000071A02306600FF0A000AF301
++:10782000240A00088F89008C3C0C0800258C5F60BE
++:107830003C04080024845F700A000ADA2403000470
++:10784000000A4080250B003024E6FFFF016018216C
++:10785000AF8900480A000AEBAF86006C000AC982B3
++:10786000001978803C07080024E75EA001E720218A
++:10787000000A18428C8F00003079001F032C380456
++:107880000007C02701F860240A000B08AC8C000038
++:10789000000331420006288000AF28213062001F1B
++:1078A0008CB8000024630001004CC804000321428E
++:1078B000001938270004108003073024004F2021CE
++:1078C0000A000B4CACA60000000A68C025AB0032D1
++:1078D000258AFFFF01601821AF8900A40A000AEB86
++:1078E000AF8A0060254B1030AF89009001601821ED
++:1078F00025C9FFFF0A000AEBAF8900843086000724
++:107900002CC2000610400014000000000006408059
++:107910003C030800246357BC010338218CE40000B9
++:1079200000800008000000002409000310A9000ED8
++:1079300000000000240A000510AA000B000000004F
++:10794000240B000110AB0008000000008F8C00A089
++:1079500010AC00050000000003E00008000010214A
++:107960000A000A7900A020210A000AC700C02021CD
++:1079700027BDFFE8308400FF240300021083000BC2
++:10798000AFBF0010240600031086003A240800044C
++:1079900010880068240E0005108E007F2CAF143074
++:1079A0008FBF001003E0000827BD00182CA2003094
++:1079B0001440FFFC8FBF001024A5FFD0000531C28A
++:1079C000000668803C07080024E75EE001A730213C
++:1079D0008CC900000005288230AC001F240B000178
++:1079E000018B50048F840048012A4025ACC8000058
++:1079F0008C83000050600001AF8600488F98006CB7
++:107A000030AE000124A6FFFF270F000115C00002C1
++:107A1000AF8F006C24A600010006414200082080C0
++:107A2000008718218C79000030C2001F2406000155
++:107A30000046F804033F382410E0FFDA8FBF00103F
++:107A40000005C182001870803C0F080025EF5EA081
++:107A500001CF48218D2B00000005684231A5001F91
++:107A600000A66004016C502527BD001803E0000843
++:107A7000AD2A00002CA7003014E0FFCA8FBF001011
++:107A800030B900071723FFC724A8FFCE00086A02F9
++:107A9000000D60803C0B0800256B5EA0018B30213F
++:107AA0008CC40000000828C230AA001F240800016E
++:107AB000014848048F8200A400891825ACC3000047
++:107AC0008C5F000053E00001AF8600A40005704009
++:107AD000000E7942000F28803C04080024845EE0F8
++:107AE00000A418218C6B000025DF000131CD001FA0
++:107AF000001F514201A86004016C4825000A108053
++:107B0000AC690000004428218CA600008F9800601A
++:107B100033F9001F8FBF00100328380400C77825F1
++:107B2000270E000127BD0018ACAF000003E00008DD
++:107B3000AF8E006024A5EFD02CB804001300FF998D
++:107B40008FBF001000053142000658803C0A080033
++:107B5000254A5E20016A30218CC4000030A3001F3A
++:107B600024090001006910048F9900900082F82513
++:107B7000ACDF00008F27000050E00001AF860090CE
++:107B80008F8D00848FBF001027BD001825AC000129
++:107B900003E00008AF8C008415E0FF828FBF001067
++:107BA0008F8600A0000610400046F821001F21002B
++:107BB00003E4C8210019384024F8143000B8402BE1
++:107BC0001100FF788FBF001024A4EBD00E00021329
++:107BD00000C0282100027942000F70803C0D08008F
++:107BE00025AD5F6001CD20218C8B0000304C001F43
++:107BF00024060001018618048F89008C016350253A
++:107C0000AC8A00008D25000050A00001AF84008CDC
++:107C10008F9800808FBF001027BD00182708000133
++:107C200003E00008AF88008030A5000724030003AC
++:107C300010A3001028A2000414400008240700022A
++:107C40002403000410A300152408000510A8000F49
++:107C50008F8500A003E000080000000014A7FFFDCE
++:107C60000080282114C3FFFB240400020A000B8BB0
++:107C700000000000240900050080282110C9FFFB36
++:107C80002404000303E000080000000014C5FFF115
++:107C9000008028210A000B8B24040005240A00011F
++:107CA0000080282110CAFFF12404000403E000082A
++:107CB0000000000027BDFFE0AFB00010000581C24A
++:107CC0002603FFD024C5003F2C6223D024C6007FAA
++:107CD000AFB20018AFB10014AFBF001C309100FF6D
++:107CE000000691C2000529820200202110400008F0
++:107CF0002403FFFF0E000A4B0000000002002021B9
++:107D0000022028210E000C390240302100001821E9
++:107D10008FBF001C8FB200188FB100148FB00010FD
++:107D20000060102103E0000827BD002027BDFFD818
++:107D300024A2007FAFB3001CAFB20018000299C2AA
++:107D4000309200FF24A3003F02402021026028213E
++:107D5000AFB10014AFB00010AFBF00200E000B6E2B
++:107D60000003898200408021004020210220282138
++:107D700014400009000018218FBF00208FB3001CA1
++:107D80008FB200188FB100148FB000100060102166
++:107D900003E0000827BD00280E0009FC00000000D9
++:107DA00000402821020020211051FFF3001019C0CB
++:107DB0000E000A4B00000000020020210240282192
++:107DC0000E000C39026030218FBF00208FB3001CE1
++:107DD0008FB200188FB100148FB00010000018216E
++:107DE0000060102103E0000827BD00283084FFFF59
++:107DF00030A5FFFF1080000700001821308200012D
++:107E00001040000200042042006518211480FFFB8E
++:107E10000005284003E000080060102110C00007A2
++:107E2000000000008CA2000024C6FFFF24A500046F
++:107E3000AC82000014C0FFFB2484000403E00008AF
++:107E40000000000010A0000824A3FFFFAC86000083
++:107E500000000000000000002402FFFF2463FFFF79
++:107E60001462FFFA2484000403E00008000000000C
++:107E700030A5FFFF8F4201B80440FFFE3C076015AC
++:107E800000A730253C031000AF440180AF400184BF
++:107E9000AF46018803E00008AF4301B88F8500D0EA
++:107EA0002C864000008018218CA700840087102BAE
++:107EB00014400010000000008CA800842D06400033
++:107EC00050C0000F240340008CAA0084008A482B75
++:107ED000512000018CA3008400035A42000B208033
++:107EE0003C05080024A558200085182103E000085F
++:107EF0008C62000014C0FFF4000000002403400066
++:107F000000035A42000B20803C05080024A558209D
++:107F10000085182103E000088C6200008F8300D0E8
++:107F2000906600D024C50001A06500D08F8500D0E8
++:107F3000906400D090A200D210440017000000000E
++:107F4000936C00788F8B00BC318A00FFA16A000C13
++:107F500025490001938700C4312200FF3048007F8B
++:107F60001107000B00026827A36200788F4E01788A
++:107F700005C0FFFE8F9900B0241800023C0F1000CE
++:107F8000AF590140A358014403E00008AF4F017806
++:107F90000A000D0931A20080A0A000D00A000CFF49
++:107FA000000000008F8700D027BDFFC8AFBF0030A2
++:107FB000AFB7002CAFB60028AFB50024AFB4002097
++:107FC000AFB3001CAFB20018AFB10014AFB00010D7
++:107FD00094E300E094E200E2104300D72405FFFFA1
++:107FE0003C047FFF3497FFFF2415FF800A000DF04B
++:107FF0003C16000E108A00D18FBF00308F9100B068
++:108000003C1808008F18005C001230C0001291402C
++:108010000311702101D57824AF4F002C94EC00E2BD
++:1080200031CD007F01BA5821318A7FFF0176482186
++:10803000000A804002091021945300003C08080007
++:108040008D0800580246C02132733FFF001319808B
++:10805000010320210224282130BF007F03FAC82118
++:1080600000B5A024AF54002C0336A0218E87001049
++:108070008E8F003003785821256D008800EF702323
++:10808000240C0002AE8E0010AF8D00ACA16C0088F5
++:10809000976A003C8E8400308F9100AC0E000CD6A5
++:1080A0003150FFFF00024B80020940253C02420094
++:1080B00001022025AE2400048E8300048F8D00ACC5
++:1080C0008E860000240E0008ADA3001CADA600188B
++:1080D000ADA0000CADA00010929F000A33F900FF84
++:1080E000A5B90014968500083C1F000CA5A5001634
++:1080F0009298000A331100FFA5B100209690000865
++:1081000024180005A5B00022ADA00024928F000B1A
++:108110002410C00031E700FFA5A70002A1AE0001B6
++:108120008E8C00308F8B00AC8F8400B0AD6C00085B
++:108130003C0A08008D4A005401444821013540247E
++:10814000AF4800283C0208008C4200540044302113
++:1081500030C3007F007AC821033F282102458821CF
++:10816000AF9100BCAF8500C0A23800008F8A00BC70
++:108170002403FFBF2418FFDF954F000201F03824CD
++:1081800000F37025A54E0002914D000231AC003F76
++:10819000358B0040A14B00028F8600BC8F8900D038
++:1081A000ACC000048D28007C3C098000ACC80008ED
++:1081B00090C4000D3082007FA0C2000D8F8500BCEE
++:1081C00090BF000D03E3C824A0B9000D8F9100BC3F
++:1081D0009233000D02789024A232000D8E9000346C
++:1081E0008F8B00BCAD7000108E87002C8E8F0030FE
++:1081F00000EF7023AD6E0014916D001831AC007F5C
++:10820000A16C00188F9F00BC8E8A00308FE8001888
++:10821000015720240109302400C41025AFE20018C2
++:108220009283000AA3E3001C969900088F8500BC86
++:108230008F9800D0A4B9001E8E9000308E8400303C
++:108240000E0002138F0500848F8500D0000291403C
++:108250000002990090AF00BC0253882100403021F9
++:1082600031E7000210E0000302118021000290803B
++:108270000212802190B900BC3327000410E00002F4
++:108280000006F880021F80218E9800308F8B00BC82
++:1082900024068000330F0003000F702331CD00034C
++:1082A000020D6021AD6C000494A400E294AA00E2E7
++:1082B00094B000E231497FFF2522000130537FFF57
++:1082C0000206182400734025A4A800E294A400E24A
++:1082D0003C1408008E94006030917FFF123400221D
++:1082E000000000000E000CF6000000008F8700D098
++:1082F0000000282194F300E094F000E21213000F34
++:108300008FBF003090E900D090E800D1313200FFFB
++:10831000310400FF0244302B14C0FF36264A00010E
++:1083200090EE00D2264B000131CD00FF008D602180
++:10833000158BFF338F9100B08FBF00308FB7002CAB
++:108340008FB600288FB500248FB400208FB3001C97
++:108350008FB200188FB100148FB0001000A0102150
++:1083600003E0000827BD003894A300E20066402423
++:10837000A4A800E290A400E290B900E2309100FFCE
++:108380000011A1C20014F827001F39C03332007F4A
++:10839000024730250A000DE8A0A600E23084FFFF66
++:1083A00030A5FFFFAF440018AF45001C03E00008F4
++:1083B0008F42001427BDFFB8AFB000208F9000D0CF
++:1083C0003084FFFFAFA40010AFBF0044AFBE004039
++:1083D000AFB7003CAFB60038AFB50034AFB4003033
++:1083E000AFB3002CAFB20028AFB10024A7A0001893
++:1083F000920600D1920500D030C400FF30A300FFE8
++:108400000064102B10400122AFA00014920900D08C
++:108410008FB50010312800FF0088382324F4FFFFB7
++:108420000014882B0015982B02339024524001260B
++:108430008FB40014961E0012961F00108FB7001004
++:1084400003DFC823001714000019C400000224032E
++:108450000018140302E2B02A52C00001004020219B
++:108460000284282B10A0000200801821028018210D
++:1084700000033C0000071C033064FFFF2C8600094A
++:1084800014C000020060B821241700088E0A0008FA
++:10849000001769808E09000C31ABFFFF3C0C001007
++:1084A000016C402527520400AF4A0038AF9200B853
++:1084B000AF49003CAF480030000000000000000061
++:1084C00000000000000000000000000000000000AC
++:1084D00000000000000000008F4F000031EE00207F
++:1084E00011C0FFFD0017982A027110240A000E83A4
++:1084F0000000B02155E001019258000131130080C5
++:10850000126001CF012020219655001232A5FFFFF5
++:108510000E000CCBA7B500188F9000D00291A023BD
++:1085200026CD00018F9100B8000DB4000016B403F1
++:108530002638004002D7582A0014882B2405000151
++:108540000300902101711024AF9800B8AFA500146A
++:10855000104001BC8F8900B03C0C08008D8C005489
++:10856000240BFF80921E00D001895021014B28244A
++:10857000921900D0AF4500288E4700103C08080033
++:108580008D0800583C1808008F18005430E33FFF56
++:108590000003218001043021012658212402FF809C
++:1085A0000162F824920C00D0AF5F002C92480000CA
++:1085B00033D100FF333500FF0309982100117140CA
++:1085C000001578C0326D007F01CF382101BA282113
++:1085D000318300FF3164007F3C0A000C00AA88212F
++:1085E0000367F02100033140009A10213108003F59
++:1085F0003C1F000E00D1C021005F982127D90088C0
++:108600002D150008AF9100C0AF9900ACAF9800BC29
++:10861000AF9300B412A0018A00008821240E00014B
++:10862000010E4004310D005D11A0FFB2310F0002B8
++:108630008E4A00283C0300803C04FFEFAE6A000035
++:108640008E450024A260000A3488FFFFAE65000456
++:108650009247002C3C1FFF9F37FEFFFFA267000CD4
++:108660008E62000C3C180040A267000B00433025CE
++:1086700000C8C824033E88240238A825AE75000C23
++:108680008E490004AE6000183C0F00FFAE69001474
++:108690008E4D002C35EEFFFF8F8B00B001AE6024B5
++:1086A000AE6C00108E470008A660000896450012C8
++:1086B000AE6700208E42000C30B03FFF00105180AA
++:1086C000AE6200248E5E0014014B182130A400011C
++:1086D000AE7E00288E590018000331C2000443808A
++:1086E000AE79002C8E51001C00C8F821A67F001C1A
++:1086F000AE710030965800028E550020A678001EFC
++:10870000AE75003492490033313000045600000544
++:10871000925000008F8C00D08D8B007CAE6B0030AF
++:10872000925000008F8F00BCA1F00000924E0033E9
++:1087300031CD000251A00007925E00018F8900BC7C
++:108740002418FF80913100000311A825A1350000F5
++:10875000925E00018F9900BC2409FFBF240BFFDF4C
++:10876000A33E00018F9500BC92B8000D3311007F2D
++:10877000A2B1000D8F8E00BC91D0000D02097824AB
++:10878000A1CF000D8F8800BC8E6D0014910A000DE2
++:108790002DAC0001000C2940014B382400E51825C0
++:1087A000A103000D964200128F8800BC8F8700D075
++:1087B000A50200028E45000490FF00BC30A4000317
++:1087C0000004302330DE000300BE102133F9000224
++:1087D00017200002244400342444003090E200BCFE
++:1087E00000A2302430DF000417E0000224830004DC
++:1087F000008018218F8F00AC24090002AD03000413
++:10880000A1E90000924E003F8F8D00ACA1AE0001A7
++:108810008F9500AC924C003F8E440004A6AC000241
++:10882000976B003C0E000CD63170FFFF00025380A6
++:10883000020A38253C05420000E51825AEA30004D5
++:108840008F8600AC8E480038ACC800188E440034C7
++:10885000ACC4001CACC0000CACC00010A4C0001420
++:10886000A4C00016A4C00020A4C00022ACC00024F4
++:108870008E6400145080000124040001ACC4000880
++:108880000E000CF6241100010A000E768F9000D025
++:10889000920F00D2920E00D08FB5001031EB00FF86
++:1088A00031CD00FF008D6023016C50212554FFFF66
++:1088B0000014882B0015982B023390241640FEDDFF
++:1088C000000000008FB400148FBF00448FBE004032
++:1088D0003A8200018FB7003C8FB600388FB5003464
++:1088E0008FB400308FB3002C8FB200288FB10024DA
++:1088F0008FB0002003E0000827BD0048331100209E
++:10890000122000EF24150001921E00BC241F00015C
++:108910000000A82133D900011320000DAFBF001CB7
++:108920008E4400148E0800840088102B144000022E
++:10893000008030218E0600848E03006400C3A82BC3
++:1089400016A0000200C020218E0400640080A8212F
++:108950008E4700148E05006400E5302B14C0000221
++:1089600000E020218E0400640095F02313C0000471
++:108970008FAC001C240A0002AFAA001C8FAC001CA4
++:10898000028C582B156000A8000018218E4F00386B
++:108990008E6D000C3C0E0080AE6F00008E4A0034DD
++:1089A0003C10FF9F01AE5825AE6A00049246003F7E
++:1089B000360CFFFF016C38243C0500203C03FFEF20
++:1089C000A266000B00E510253468FFFF8F8700B812
++:1089D0000048F8243C04000803E4C825AE79000CE4
++:1089E0008CF80014AE60001802BE7821AE78001436
++:1089F0008CF10018AE71001C8CE90008AE690024EF
++:108A00008CEE000CAE6F002CAE600028AE6E002025
++:108A1000A6600038A660003A8CED001401B58023F2
++:108A2000021E902312400011AE72001090EA003D29
++:108A30008E6500048E640000000A310000A6C82183
++:108A4000000010210326402B0082F82103E8C021FA
++:108A5000AE790004AE78000090F1003DA271000AEA
++:108A60008F8900B895320006A67200088F9800AC76
++:108A70002419000202A02021A31900009769003CDC
++:108A80008F9200AC0E000CD63131FFFF00027B80CC
++:108A90008F8500B8022F68253C0E420001AE80256C
++:108AA000AE5000048F8400AC8CAC0038AC8C001845
++:108AB0008CAB0034AC8B001CAC80000CAC80001084
++:108AC000A4800014A4800016A4800020A4800022AA
++:108AD000AC80002490A7003FA487000212A00135BB
++:108AE0002403000153C0000290A2003D90A2003E6A
++:108AF00024480001A08800018F9F00ACAFF500085A
++:108B00008F8300D024070034906600BC30C500027B
++:108B100050A00001240700308F9200B88F8A00BC5B
++:108B2000906D00BC924B00002412C00032A50003DF
++:108B3000A14B00008F8600B88F8800BC240200047F
++:108B400090C400010045182330790003A1040001FE
++:108B50008F8A00BC8F9F00B800F53821955800021D
++:108B600097E9001200F9382103128824312F3FFFC2
++:108B7000022F7025A54E00029150000231A800047A
++:108B8000320C003F358B0040A14B000212A00002C6
++:108B90008F8500BC00E838218F8E00D0ACA7000480
++:108BA000240BFFBF8DCD007C2EA400012403FFDF2A
++:108BB000ACAD000890B0000D00044140320C007FC5
++:108BC000A0AC000D8F8600BC90CA000D014B102494
++:108BD000A0C2000D8F8700BC90E5000D00A3F82413
++:108BE00003E8C825A0F9000D8F9100B88F8D00BC57
++:108BF0008E380020ADB800108E290024ADA90014D5
++:108C00008E2F0028ADAF00188E2E002C0E000CF613
++:108C1000ADAE001C8FB0001C240C0002120C00EE44
++:108C20008F9000D08FA3001C006088211460000288
++:108C30000060A8210000A02156A0FE390291A023C7
++:108C40000014882B8FA90010960700103C1E0020EE
++:108C50000136402302C750213112FFFFA60A00103F
++:108C6000AFB20010AF5E0030000000009617001099
++:108C7000961300121277008F000000008E05000C82
++:108C80008E0B00080016698000AD7021000DC7C36F
++:108C900001CDA82B0178782101F56021AE0E000CE2
++:108CA000AE0C00088FB300100013B82B02378024DD
++:108CB0001200FF048F9000D00A000E3C000000005C
++:108CC0008E4D0038A6600008240B0003AE6D000036
++:108CD0008E500034A260000A8F9800B8AE70000475
++:108CE0003C0500809311003FA26B000C8E6F000CBE
++:108CF0003C0EFF9FA271000B01E5102535CCFFFF54
++:108D00003C03FFEF8F9200B8004C30243464FFFF27
++:108D100000C4F824AE7F000C8E590014964800124F
++:108D20008F8A00B0AE7900108E490014AE60001832
++:108D3000AE600020AE690014AE6000248E470018BB
++:108D400031093FFF0009F180AE6700288E4D000811
++:108D500003CA802131180001AE6D00308E4F000C27
++:108D60008F8C00AC001089C200185B80022B282178
++:108D7000240E0002A665001CA6600036AE6F002C13
++:108D8000A18E00009763003C8F8A00AC3C04420037
++:108D90003062FFFF00443025AD4600048F9F00B8CD
++:108DA000240700012411C0008FF30038240600348A
++:108DB000AD5300188FF90034AD59001CAD40000CC4
++:108DC000AD400010A5400014A5400016A5400020AD
++:108DD000A5400022AD400024A5550002A147000196
++:108DE0008F9E00AC8F8800B88F9200BCAFD5000872
++:108DF000910D0000A24D00008F9000B88F8B00BC39
++:108E000092180001A17800018F8400BC94850002B3
++:108E100000B1782401E97025A48E0002908C000234
++:108E20003183003FA08300028F8300D08F8400BC79
++:108E3000906200BC305300025260000124060030F2
++:108E4000AC8600048C6F007C2403FFBF02A0882145
++:108E5000AC8F0008908E000D31CC007FA08C000DEF
++:108E60008F8600BC90C2000D00432024A0C4000DDA
++:108E70008F8900BC913F000D37F90020A139000D0A
++:108E80008F8800B88F9300BC8D070020AE6700105C
++:108E90008D0A0024AE6A00148D1E0028AE7E0018D4
++:108EA0008D12002C0E000CF6AE72001C0A00103D54
++:108EB0008F9000D0960E00148E03000431CCFFFF7B
++:108EC000000C10C000622021AF44003C8E1F000443
++:108ED0008F46003C03E6C8231B20003C0000000036
++:108EE0008E0F000025E200013C05001034B500089B
++:108EF000AF420038AF550030000000000000000015
++:108F00000000000000000000000000000000000061
++:108F100000000000000000008F580000330B00200C
++:108F20001160FFFD000000008F5304003C0D002085
++:108F3000AE1300088F570404AE17000CAF4D00307D
++:108F4000000000003C0608008CC600442416000106
++:108F500010D600BD00000000961F00123C0508005E
++:108F60008CA5004000BFC821A61900129609001464
++:108F700025270001A6070014960A00143144FFFFBC
++:108F80005486FF498FB30010A60000140E000E1681
++:108F900030A5FFFF3C0408008C84002496030012D7
++:108FA0000044102300623023A60600120A00105964
++:108FB0008FB30010A08300018F8200AC2404000155
++:108FC000AC4400080A000FF08F8300D08E0200002E
++:108FD0000A0010EA3C0500108F8200C08FA7001C19
++:108FE000921800D0920B00D0920E00D0331100FFE7
++:108FF000316900FF00117940000928C001E56021B6
++:1090000031C300FF036C50210003314000C2C8216E
++:10901000255F0088AF9F00ACAF9900BCA1470088D6
++:109020009768003C03C020218F9100AC0E000CD645
++:109030003110FFFF00026B80020DC0253C0442008E
++:109040008F8D00B803045825AE2B00048DA900387D
++:109050008F8B00AC0000882100118100AD690018E1
++:109060008DAF00343C087FFF3504FFFFAD6F001C5F
++:1090700091AC003E8D65001C8D660018000C190037
++:10908000000C770200A33821020E102500E3F82B14
++:1090900000C2C821033F5021AD67001CAD6A001813
++:1090A000AD60000CAD60001091B8003E24050005D5
++:1090B00003C45024A578001495A9000403C02021FE
++:1090C000A569001691AF003EA56F002095B1000480
++:1090D000A5710022AD60002491AE003FA56E000294
++:1090E00091B0003E91AC003D01901023244300015B
++:1090F000A16300018F8600AC8F9F00BCACDE00082E
++:10910000A3E500008F9000BC8F9900B82405FFBF35
++:1091100096070002973800120247782433093FFF70
++:1091200001E98825A6110002921200022418FFDF2F
++:10913000324E003F35CD0040A20D00028F8600BCAC
++:109140008F8C00D02412FFFFACC000048D8B007CFC
++:109150003C0C8000ACCB000890C2000D3043007F77
++:10916000A0C3000D8F8700BC90FF000D03E5C8244D
++:10917000A0F9000D8F9100BC9229000D01387824D0
++:10918000A22F000D8F9000BCAE120010AE1500147F
++:10919000920E00182415FF8002AE6825A20D00185B
++:1091A0008F8500BC8F8300B88CAB0018016C102435
++:1091B000004A3025ACA600189068003EA0A8001C0C
++:1091C0008F9F00B88F8700BC8F9800D097F900045C
++:1091D000A4F9001E0E0002138F0500848F8600D0B4
++:1091E000000279400002490090D200BC01E98821C8
++:1091F000004028213255000212A0000303D1202193
++:109200000002A8800095202190CD00BC31B200045E
++:109210001240000333DF0003000540800088202156
++:10922000240600048F9E00BC00DFC8233327000300
++:1092300000875021AFCA00040E000CF6A665003866
++:109240000A0010388F9000D0961E00123C080800CB
++:109250008D080024011E9021A61200120A00105948
++:109260008FB3001027BDFFE03C1808008F18005096
++:10927000AFB00010AFBF0018AFB10014AF8400B0A2
++:1092800093710074030478212410FF8031EE007F75
++:109290003225007F01F0582401DA68213C0C000AD5
++:1092A000A38500C401AC2821AF4B002494A9001071
++:1092B0009768000690A600620080382124020030E2
++:1092C0000109202330C300F0AF8500D010620019DF
++:1092D0003090FFFF90AE0062240DFFF0240A005092
++:1092E00001AE6024318B00FF116A002F00000000E6
++:1092F00016000007241F0C00AF5F00248FB100147C
++:109300008FBF00188FB0001003E0000827BD0020B9
++:109310000E000E1C02002021241F0C00AF5F002451
++:109320008FB100148FBF00188FB0001003E0000849
++:1093300027BD002094A200E094A400E290BF011396
++:10934000008218263079FFFF33E700C014E00009DF
++:109350002F31000116000038000000005620FFE603
++:10936000241F0C000E000D18000000000A0011ED73
++:10937000241F0C001620FFDE000000000E000D1858
++:10938000000000001440FFDC241F0C001600002227
++:109390008F8300D0906901133122003FA062011336
++:1093A0000A0011ED241F0C0094AF00D48F8600D466
++:1093B00000E02821240400050E000C5C31F0FFFFC2
++:1093C0001440000524030003979100E600001821D3
++:1093D0002625FFFFA78500E68F5801B80700FFFE8E
++:1093E0003C196013AF400180241F0C00AF50018472
++:1093F000007938253C101000AF4701888FB1001468
++:10940000AF5001B8AF5F00248FB000108FBF0018BD
++:1094100003E0000827BD00200E000E1C02002021E2
++:109420005040FFB5241F0C008F8300D090690113BA
++:109430000A0012163122003F0E000E1C02002021ED
++:109440001440FFAD241F0C00122000078F8300D0B2
++:10945000906801133106003F34C20040A06201133E
++:109460000A0011ED241F0C000E000D180000000072
++:109470005040FFA1241F0C008F8300D0906801137F
++:109480003106003F0A00124634C20040AF9B00C8BC
++:1094900003E00008AF8000EC3089FFFF0009404284
++:1094A0002D020041000921801440000200095040B3
++:1094B00024080040000830C0000811400046582130
++:1094C000256701A800E2C821272F007F2418FF800C
++:1094D00001F818240064302100CA702125CC00FF57
++:1094E000240DFF00018D202425650088240A0088B2
++:1094F0003C010800AC2A004C3C010800AC2500509F
++:10950000AF8400D43C010800AC2900603C01080095
++:10951000AC2800643C010800AC2700543C01080062
++:10952000AC2300583C010800AC26005C03E00008B6
++:1095300000000000308300FF30C6FFFF30E400FF72
++:109540008F4201B80440FFFE00034C00012438257F
++:109550003C08600000E820253C031000AF45018076
++:10956000AF460184AF44018803E00008AF4301B86F
++:109570008F86001C3C096012352700108CCB00043C
++:109580003C0C600E35850010316A00062D48000144
++:10959000ACE800C48CC40004ACA431808CC20008C8
++:1095A00094C30002ACA2318403E00008A78300E466
++:1095B0003C0308008C6300508F8400E88F86001CF9
++:1095C0002402FF800064C0210302C824AF59002890
++:1095D0008CCD00043305007F00BA78213C0E000CCE
++:1095E00001EE2821ACAD00588CC80008AF8500D032
++:1095F0003C076012ACA8005C8CCC001034E8001072
++:10960000ACAC000C8CCB000CACAB000894AA0014E2
++:109610003C0208008C42004425490001A4A9001422
++:1096200094A400143083FFFF106200178F8400D0D1
++:109630003C0A08008D4A0040A4AA00128CCE0018F3
++:10964000AC8E00248CCD0014AC8D00208CC700188B
++:10965000AC87002C8CCC001424060001AC8C0028B4
++:109660008D0B00BC5166001A8D0200B48D0200B84B
++:10967000A482003A948F003AA48F003C948800D4CE
++:1096800003E000083102FFFF3C0908008D29002497
++:10969000A4A000148F8400D0A4A900128CCE0018BE
++:1096A000AC8E00248CCD0014AC8D00208CC700182B
++:1096B000AC87002C8CCC001424060001AC8C002854
++:1096C0008D0B00BC5566FFEA8D0200B88D0200B418
++:1096D000A482003A948F003AA48F003C948800D46E
++:1096E00003E000083102FFFF8F86001C3C0C0800DD
++:1096F0008D8C0050240BFF808CCD00083C03000CA7
++:10970000000D51C0018A4021010B4824AF8A00E8B6
++:10971000AF49002890C700073105007F00BA10212B
++:109720000043282130E4000410800039AF8500D0C8
++:1097300090CF000731EE000811C000380000000093
++:109740008CD9000C8CC400140324C02B13000030EF
++:10975000000000008CC2000CACA200648CCD00188C
++:109760002402FFF8ACAD00688CCC0010ACAC0080DB
++:109770008CCB000CACAB00848CCA001CACAA007C67
++:1097800090A900BC01224024A0A800BC90C30007FF
++:109790003067000810E000048F8500D090AF00BC57
++:1097A00035EE0001A0AE00BC90D9000733380001AF
++:1097B000130000088F8300D08F8700D0240400346A
++:1097C00090E800BC35030002A0E300BC8F8300D00A
++:1097D000AC6400C090C900073126000210C000052B
++:1097E00000000000906A00BC35420004A06200BC8A
++:1097F0008F8300D09065011330AD003FA06D011341
++:109800008F8C00D0958B00D403E000083162FFFFFD
++:109810008CC200140A001305000000000A001306A1
++:10982000ACA0006427BDFFD8AFB000108F90001C23
++:10983000AFBF0024AFB40020AFB20018AFB1001426
++:10984000AFB3001C9613000E3C07600A3C14600680
++:109850003264FFFF369300100E00125534F40410EA
++:109860008F8400D43C11600E0E00099B363100102D
++:10987000920E00153C0708008CE700603C12601255
++:1098800031CD000FA38D00F08E0E00048E0D000868
++:1098900096080012961F00109619001A9618001EBE
++:1098A000960F001C310CFFFF33EBFFFF332AFFFF45
++:1098B0003309FFFF31E6FFFF3C010800AC2B0040FD
++:1098C0003C010800AC2C00243C010800AC2A0044F8
++:1098D000AE293178AE26317C92020015960300162F
++:1098E00036520010304400FF3065FFFF3C06080090
++:1098F0008CC60064AE243188AE4500B492080014D2
++:1099000096190018241F0001011FC004332FFFFF08
++:109910003C0508008CA50058AE5800B8AE4F00BCFE
++:10992000920C0014AF8E00D8AF8D00DC318B00FF9D
++:10993000AE4B00C0920A0015AE670048AE66004C00
++:10994000314900FFAE4900C8AE65007C3C03080009
++:109950008C6300503C0408008C84004C3C080800D8
++:109960008D0800543C0208008C42005C8FBF00242C
++:10997000AE6300808FB00010AE8300748FB3001C04
++:10998000AE22319CAE4200DCAE2731A0AE2631A41F
++:10999000AE24318CAE233190AE283194AE2531986F
++:1099A000AE870050AE860054AE8500708FB10014B3
++:1099B000AE4700E0AE4600E4AE4400CCAE4300D07B
++:1099C000AE4800D4AE4500D88FB400208FB2001846
++:1099D00003E0000827BD002827BDFFE0AFB1001459
++:1099E000AFBF0018241100010E000845AFB00010F1
++:1099F00010510005978400E6978300CC0083102B5C
++:109A0000144000088F8500D4240700028FBF00187F
++:109A10008FB100148FB0001000E0102103E00008A7
++:109A200027BD00200E000C7A24040005AF8200E858
++:109A30001040FFF6240700020E0008498F90001C1A
++:109A4000979F00E68F9900E88F8D00C827EF0001EF
++:109A5000240E0050AF590020A78F00E6A1AE0000F1
++:109A60003C0C08008D8C00648F8600C8240A80009E
++:109A7000000C5E00ACCB0074A4C0000694C9000AC0
++:109A8000241FFF803C0D000C012AC024A4D8000A2A
++:109A900090C8000A24182000011F1825A0C3000A3E
++:109AA0008F8700C8A0E000788F8500C800003821AB
++:109AB000A0A000833C0208008C4200508F8400E884
++:109AC0000044782101FFC824AF590028960B0002FA
++:109AD00031EE007F01DA6021018D3021A4CB00D46A
++:109AE000960A0002AF8600D03C0E000425492401EE
++:109AF000A4C900E68E080004ACC800048E03000868
++:109B0000ACC30000A4C00010A4C00014A0C000D0CA
++:109B10008F8500D02403FFBFA0A000D13C04080023
++:109B20008C8400648F8200D0A04400D28E1F000C71
++:109B30008F8A00D0978F00E4AD5F001C8E19001053
++:109B400024100030AD590018A5400030A551005434
++:109B5000A5510056A54F0016AD4E0068AD580080C7
++:109B6000AD580084914D006231AC000F358B001070
++:109B7000A14B00628F8600D090C900633128007F1E
++:109B8000A0C800638F8400D02406FFFF9085006387
++:109B900000A31024A08200638F9100D000E0102168
++:109BA000923F00BC37F90001A23900BC8F8A00D077
++:109BB000938F00F0AD580064AD5000C0914E00D3BB
++:109BC000000F690031CC000F018D5825A14B00D347
++:109BD0008F8500D08F8900DCACA900E88F8800D881
++:109BE0008FBF00188FB100148FB0001027BD002068
++:109BF000ACA800ECA4A600D6A4A000E0A4A000E2BB
++:109C000003E000080000000027BDFFE0AFB0001037
++:109C10008F90001CAFB10014AFBF00188E19000464
++:109C20003C1808008F180050240FFF80001989C0CD
++:109C30000238702131CD007F01CF602401BA50215C
++:109C40003C0B000CAF4C0028014B4021950900D47F
++:109C5000950400D68E0700043131FFFFAF8800D095
++:109C60000E000913000721C08E0600048F8300C870
++:109C7000000629C0AF4500209064003E30820040BD
++:109C8000144000068F8400D0341FFFFF948300D659
++:109C90003062FFFF145F000400000000948400D6CF
++:109CA0000E0008A83084FFFF8E050004022030213A
++:109CB0008FBF00188FB100148FB000102404002251
++:109CC00000003821000529C00A00127C27BD0020B1
++:109CD00027BDFFE0AFB100143091FFFFAFB000101F
++:109CE000AFBF00181220001D000080218F86001CCD
++:109CF0008CC500002403000600053F020005140285
++:109D000030E4000714830015304500FF2CA800063E
++:109D10001100004D000558803C0C0800258C57D4DC
++:109D2000016C50218D490000012000080000000056
++:109D30008F8E00EC240D000111CD005900000000B1
++:109D4000260B00013170FFFF24CA00200211202BD6
++:109D5000014030211480FFE6AF8A001C0200102170
++:109D60008FBF00188FB100148FB0001003E00008FF
++:109D700027BD0020938700CE14E00038240400148F
++:109D80000E001338000000008F86001C2402000122
++:109D90000A00147FAF8200EC8F8900EC24080002D7
++:109DA0001128003B2404001300002821000030216A
++:109DB000240700010E00127C000000000A00147F3E
++:109DC0008F86001C8F8700EC2405000214E5FFF647
++:109DD000240400120E0012E9000000008F8500E844
++:109DE00000403021240400120E00127C00003821B3
++:109DF0000A00147F8F86001C8F8300EC241F000351
++:109E0000147FFFD0260B00010E00129B0000000003
++:109E10008F8500E800403021240200022404001055
++:109E200000003821AF8200EC0E00127C0000000020
++:109E30000A00147F8F86001C8F8F00EC240600021E
++:109E400011E6000B0000000024040010000028218F
++:109E5000000030210A00149C240700010000282182
++:109E60000E00127C000030210A00147F8F86001C37
++:109E70000E0013A500000000144000128F99001C72
++:109E80008F86001C240200030A00147FAF8200ECBE
++:109E90000E001431000000000A00147F8F86001CA1
++:109EA0000E00128B000000002402000224040014A3
++:109EB0000000282100003021000038210A0014B9D8
++:109EC000AF8200EC004038212404001097380002D3
++:109ED000000028210E00127C3306FFFF0A00147FC9
++:109EE0008F86001C8F8400C83C077FFF34E6FFFF8D
++:109EF0008C8500742402000100A61824AC83007431
++:109F000003E00008A082000510A000362CA200800B
++:109F1000274A04003C0B000524090080104000077C
++:109F20002408008030A6000F00C540212D030081C9
++:109F30001460000200A0482124080080AF4B0030CC
++:109F400000000000000000000000000011000009F7
++:109F500000003821014030218C8D000024E70004EE
++:109F600000E8602BACCD0000248400041580FFFACB
++:109F700024C60004000000000000000000000000F3
++:109F80003C0E0006010E3825AF47003000000000EF
++:109F900000000000000000008F4F000031E80010BA
++:109FA0001100FFFD000000008F42003C8F43003C89
++:109FB0000049C8210323C02B130000040000000047
++:109FC0008F4C003825860001AF4600388F47003C93
++:109FD00000A9282300E96821AF4D003C14A0FFCE62
++:109FE0002CA2008003E000080000000027BDFFD085
++:109FF0003C020002AFB100143C11000CAF45003828
++:10A00000AFB3001CAF46003C00809821AF42003047
++:10A0100024050088AF44002803512021AFBF002849
++:10A02000AFB50024AFB40020AFB200180E0014F199
++:10A03000AFB000103C1F08008FFF004C3C18080018
++:10A040008F1800642410FF8003F3A82132B9007F29
++:10A0500002B078240018A0C0033A70210018914083
++:10A0600001D12021AF4F00280E0014F10254282105
++:10A070003C0D08008DAD00502405012001B358218E
++:10A08000316C007F01705024019A48210131202158
++:10A090000E0014F1AF4A00283C0808008D08005457
++:10A0A0003C0508008CA500640113382130E6007FD0
++:10A0B00000F0182400DA202100912021AF4300286D
++:10A0C0000E0014F1000529403C0208008C420058A3
++:10A0D0003C1008008E1000601200001C0053882104
++:10A0E0002415FF800A0015743C14000C3226007FF2
++:10A0F0000235182400DA202102402821AF4300282D
++:10A10000009420210E0014F12610FFC01200000F51
++:10A11000023288212E05004110A0FFF42412100005
++:10A120003226007F001091800235182400DA2021A9
++:10A1300002402821AF430028009420210E0014F192
++:10A14000000080211600FFF3023288213C0B08003A
++:10A150008D6B005C240AFF802405000201734021FE
++:10A16000010A4824AF4900283C0408009484006296
++:10A170003110007F021A88213C07000C0E000CAA47
++:10A180000227982100402821026020218FBF00284B
++:10A190008FB500248FB400208FB3001C8FB200183D
++:10A1A0008FB100148FB000100A0014F127BD0030E9
++:10A1B0008F83001C8C62000410400003000000002C
++:10A1C00003E00008000000008C6400108C650008AB
++:10A1D0000A00152A8C66000C000000000000001B1D
++:10A1E0000000000F0000000A000000080000000648
++:10A1F000000000050000000500000004000000044D
++:10A200000000000300000003000000030000000342
++:10A210000000000300000002000000020000000235
++:10A220000000000200000002000000020000000226
++:10A230000000000200000002000000020000000216
++:10A240000000000200000002000000020000000206
++:10A2500000000001000000010000000108000F24C0
++:10A2600008000D6C08000FB80800106008000F4CC3
++:10A2700008000F8C0800119408000D88080011B820
++:10A2800008000DD8080015540800151C08000D889A
++:10A2900008000D8808000D880800124008001240D0
++:10A2A00008000D8808000D88080014E008000D88DB
++:10A2B00008000D8808000D8808000D88080013B4F8
++:10A2C00008000D8808000D8808000D8808000D881A
++:10A2D00008000D8808000D8808000D8808000D880A
++:10A2E00008000D8808000D8808000D8808000D88FA
++:10A2F00008000D8808000D8808000FAC08000D88C4
++:10A3000008000D880800167808000D8808000D88E0
++:10A3100008000D8808000D8808000D8808000D88C9
++:10A3200008000D8808000D8808000D8808000D88B9
++:10A3300008000D8808000D8808000D8808000D88A9
++:10A3400008000D8808000D8808000D88080014100A
++:10A3500008000D8808000D8808001334080012A4B6
++:10A3600008001E2C08001EFC08001F1408001F28EF
++:10A3700008001F3808001E2C08001E2C08001E2C88
++:10A3800008001ED808002E1408002E1C08002DE41A
++:10A3900008002DF008002DFC08002E08080052F4DB
++:10A3A000080052B40800528008005254080052308D
++:10A3B000080051EC0A000C840000000000000000BE
++:10A3C0000000000D727870362E322E33000000002F
++:10A3D000060203030000000000000001000000006E
++:10A3E000000000000000000000000000000000006D
++:10A3F000000000000000000000000000000000005D
++:10A40000000000000000000000000000000000004C
++:10A41000000000000000000000000000000000003C
++:10A42000000000000000000000000000000000002C
++:10A43000000000000000000000000000000000001C
++:10A44000000000000000000000000000000000000C
++:10A4500000000000000000000000000000000000FC
++:10A4600000000000000000000000000000000000EC
++:10A4700000000000000000000000000000000000DC
++:10A4800000000000000000000000000000000000CC
++:10A4900000000000000000000000000000000000BC
++:10A4A00000000000000000000000000000000000AC
++:10A4B000000000000000000000000000000000009C
++:10A4C000000000000000000000000000000000008C
++:10A4D000000000000000000000000000000000007C
++:10A4E000000000000000000000000000000000006C
++:10A4F000000000000000000000000000000000005C
++:10A50000000000000000000000000000000000004B
++:10A51000000000000000000000000000000000003B
++:10A52000000000000000000000000000000000002B
++:10A53000000000000000000000000000000000001B
++:10A54000000000000000000000000000000000000B
++:10A5500000000000000000000000000000000000FB
++:10A5600000000000000000000000000000000000EB
++:10A5700000000000000000000000000000000000DB
++:10A5800000000000000000000000000000000000CB
++:10A5900000000000000000000000000000000000BB
++:10A5A00000000000000000000000000000000000AB
++:10A5B000000000000000000000000000000000009B
++:10A5C000000000000000000000000000000000008B
++:10A5D000000000000000000000000000000000007B
++:10A5E000000000000000000000000000000000006B
++:10A5F000000000000000000000000000000000005B
++:10A60000000000000000000000000000000000004A
++:10A61000000000000000000000000000000000003A
++:10A62000000000000000000000000000000000002A
++:10A63000000000000000000000000000000000001A
++:10A64000000000000000000000000000000000000A
++:10A6500000000000000000000000000000000000FA
++:10A6600000000000000000000000000000000000EA
++:10A6700000000000000000000000000000000000DA
++:10A6800000000000000000000000000000000000CA
++:10A6900000000000000000000000000000000000BA
++:10A6A00000000000000000000000000000000000AA
++:10A6B000000000000000000000000000000000009A
++:10A6C000000000000000000000000000000000008A
++:10A6D000000000000000000000000000000000007A
++:10A6E000000000000000000000000000000000006A
++:10A6F000000000000000000000000000000000005A
++:10A700000000000000000000000000000000000049
++:10A710000000000000000000000000000000000039
++:10A720000000000000000000000000000000000029
++:10A730000000000000000000000000000000000019
++:10A740000000000000000000000000000000000009
++:10A7500000000000000000000000000000000000F9
++:10A7600000000000000000000000000000000000E9
++:10A7700000000000000000000000000000000000D9
++:10A7800000000000000000000000000000000000C9
++:10A7900000000000000000000000000000000000B9
++:10A7A00000000000000000000000000000000000A9
++:10A7B0000000000000000000000000000000000099
++:10A7C0000000000000000000000000000000000089
++:10A7D0000000000000000000000000000000000079
++:10A7E0000000000000000000000000000000000069
++:10A7F0000000000000000000000000000000000059
++:10A800000000000000000000000000000000000048
++:10A810000000000000000000000000000000000038
++:10A820000000000000000000000000000000000028
++:10A830000000000000000000000000000000000018
++:10A840000000000000000000000000000000000008
++:10A8500000000000000000000000000000000000F8
++:10A8600000000000000000000000000000000000E8
++:10A8700000000000000000000000000000000000D8
++:10A8800000000000000000000000000000000000C8
++:10A8900000000000000000000000000000000000B8
++:10A8A00000000000000000000000000000000000A8
++:10A8B0000000000000000000000000000000000098
++:10A8C0000000000000000000000000000000000088
++:10A8D0000000000000000000000000000000000078
++:10A8E0000000000000000000000000000000000068
++:10A8F0000000000000000000000000000000000058
++:10A900000000000000000000000000000000000047
++:10A910000000000000000000000000000000000037
++:10A920000000000000000000000000000000000027
++:10A930000000000000000000000000000000000017
++:10A940000000000000000000000000000000000007
++:10A9500000000000000000000000000000000000F7
++:10A9600000000000000000000000000000000000E7
++:10A9700000000000000000000000000000000000D7
++:10A9800000000000000000000000000000000000C7
++:10A9900000000000000000000000000000000000B7
++:10A9A00000000000000000000000000000000000A7
++:10A9B0000000000000000000000000000000000097
++:10A9C0000000000000000000000000000000000087
++:10A9D0000000000000000000000000000000000077
++:10A9E0000000000000000000000000000000000067
++:10A9F0000000000000000000000000000000000057
++:10AA00000000000000000000000000000000000046
++:10AA10000000000000000000000000000000000036
++:10AA20000000000000000000000000000000000026
++:10AA30000000000000000000000000000000000016
++:10AA40000000000000000000000000000000000006
++:10AA500000000000000000000000000000000000F6
++:10AA600000000000000000000000000000000000E6
++:10AA700000000000000000000000000000000000D6
++:10AA800000000000000000000000000000000000C6
++:10AA900000000000000000000000000000000000B6
++:10AAA00000000000000000000000000000000000A6
++:10AAB0000000000000000000000000000000000096
++:10AAC0000000000000000000000000000000000086
++:10AAD0000000000000000000000000000000000076
++:10AAE0000000000000000000000000000000000066
++:10AAF0000000000000000000000000000000000056
++:10AB00000000000000000000000000000000000045
++:10AB10000000000000000000000000000000000035
++:10AB20000000000000000000000000000000000025
++:10AB30000000000000000000000000000000000015
++:10AB40000000000000000000000000000000000005
++:10AB500000000000000000000000000000000000F5
++:10AB600000000000000000000000000000000000E5
++:10AB700000000000000000000000000000000000D5
++:10AB800000000000000000000000000000000000C5
++:10AB900000000000000000000000000000000000B5
++:10ABA00000000000000000000000000000000000A5
++:10ABB0000000000000000000000000000000000095
++:10ABC0000000000000000000000000000000000085
++:10ABD0000000000000000000000000000000000075
++:10ABE0000000000000000000000000000000000065
++:10ABF0000000000000000000000000000000000055
++:10AC00000000000000000000000000000000000044
++:10AC10000000000000000000000000000000000034
++:10AC20000000000000000000000000000000000024
++:10AC30000000000000000000000000000000000014
++:10AC40000000000000000000000000000000000004
++:10AC500000000000000000000000000000000000F4
++:10AC600000000000000000000000000000000000E4
++:10AC700000000000000000000000000000000000D4
++:10AC800000000000000000000000000000000000C4
++:10AC900000000000000000000000000000000000B4
++:10ACA00000000000000000000000000000000000A4
++:10ACB0000000000000000000000000000000000094
++:10ACC0000000000000000000000000000000000084
++:10ACD0000000000000000000000000000000000074
++:10ACE0000000000000000000000000000000000064
++:10ACF0000000000000000000000000000000000054
++:10AD00000000000000000000000000000000000043
++:10AD10000000000000000000000000000000000033
++:10AD20000000000000000000000000000000000023
++:10AD30000000000000000000000000000000000013
++:10AD40000000000000000000000000000000000003
++:10AD500000000000000000000000000000000000F3
++:10AD600000000000000000000000000000000000E3
++:10AD700000000000000000000000000000000000D3
++:10AD800000000000000000000000000000000000C3
++:10AD900000000000000000000000000000000000B3
++:10ADA00000000000000000000000000000000000A3
++:10ADB0000000000000000000000000000000000093
++:10ADC0000000000000000000000000000000000083
++:10ADD0000000000000000000000000000000000073
++:10ADE0000000000000000000000000000000000063
++:10ADF0000000000000000000000000000000000053
++:10AE00000000000000000000000000000000000042
++:10AE10000000000000000000000000000000000032
++:10AE20000000000000000000000000000000000022
++:10AE30000000000000000000000000000000000012
++:10AE40000000000000000000000000000000000002
++:10AE500000000000000000000000000000000000F2
++:10AE600000000000000000000000000000000000E2
++:10AE700000000000000000000000000000000000D2
++:10AE800000000000000000000000000000000000C2
++:10AE900000000000000000000000000000000000B2
++:10AEA00000000000000000000000000000000000A2
++:10AEB0000000000000000000000000000000000092
++:10AEC0000000000000000000000000000000000082
++:10AED0000000000000000000000000000000000072
++:10AEE0000000000000000000000000000000000062
++:10AEF0000000000000000000000000000000000052
++:10AF00000000000000000000000000000000000041
++:10AF10000000000000000000000000000000000031
++:10AF20000000000000000000000000000000000021
++:10AF30000000000000000000000000000000000011
++:10AF40000000000000000000000000000000000001
++:10AF500000000000000000000000000000000000F1
++:10AF600000000000000000000000000000000000E1
++:10AF700000000000000000000000000000000000D1
++:10AF800000000000000000000000000000000000C1
++:10AF900000000000000000000000000000000000B1
++:10AFA00000000000000000000000000000000000A1
++:10AFB0000000000000000000000000000000000091
++:10AFC0000000000000000000000000000000000081
++:10AFD0000000000000000000000000000000000071
++:10AFE0000000000000000000000000000000000061
++:10AFF0000000000000000000000000000000000051
++:10B000000000000000000000000000000000000040
++:10B010000000000000000000000000000000000030
++:10B020000000000000000000000000000000000020
++:10B030000000000000000000000000000000000010
++:10B040000000000000000000000000000000000000
++:10B0500000000000000000000000000000000000F0
++:10B0600000000000000000000000000000000000E0
++:10B0700000000000000000000000000000000000D0
++:10B0800000000000000000000000000000000000C0
++:10B0900000000000000000000000000000000000B0
++:10B0A00000000000000000000000000000000000A0
++:10B0B0000000000000000000000000000000000090
++:10B0C0000000000000000000000000000000000080
++:10B0D0000000000000000000000000000000000070
++:10B0E0000000000000000000000000000000000060
++:10B0F0000000000000000000000000000000000050
++:10B10000000000000000000000000000000000003F
++:10B11000000000000000000000000000000000002F
++:10B12000000000000000000000000000000000001F
++:10B13000000000000000000000000000000000000F
++:10B1400000000000000000000000000000000000FF
++:10B1500000000000000000000000000000000000EF
++:10B1600000000000000000000000000000000000DF
++:10B1700000000000000000000000000000000000CF
++:10B1800000000000000000000000000000000000BF
++:10B1900000000000000000000000000000000000AF
++:10B1A000000000000000000000000000000000009F
++:10B1B000000000000000000000000000000000008F
++:10B1C000000000000000000000000000000000007F
++:10B1D000000000000000000000000000000000006F
++:10B1E000000000000000000000000000000000005F
++:10B1F000000000000000000000000000000000004F
++:10B20000000000000000000000000000000000003E
++:10B21000000000000000000000000000000000002E
++:10B22000000000000000000000000000000000001E
++:10B23000000000000000000000000000000000000E
++:10B2400000000000000000000000000000000000FE
++:10B2500000000000000000000000000000000000EE
++:10B2600000000000000000000000000000000000DE
++:10B2700000000000000000000000000000000000CE
++:10B2800000000000000000000000000000000000BE
++:10B2900000000000000000000000000000000000AE
++:10B2A000000000000000000000000000000000009E
++:10B2B000000000000000000000000000000000008E
++:10B2C000000000000000000000000000000000007E
++:10B2D000000000000000000000000000000000006E
++:10B2E000000000000000000000000000000000005E
++:10B2F000000000000000000000000000000000004E
++:10B30000000000000000000000000000000000003D
++:10B31000000000000000000000000000000000002D
++:10B32000000000000000000000000000000000001D
++:10B33000000000000000000000000000000000000D
++:10B3400000000000000000000000000000000000FD
++:10B3500000000000000000000000000000000000ED
++:10B3600000000000000000000000000000000000DD
++:10B3700000000000000000000000000000000000CD
++:10B3800000000000000000000000000000000000BD
++:10B3900000000000000000000000000000000000AD
++:10B3A000000000000000000000000000000000009D
++:10B3B000000000000000000000000000000000008D
++:10B3C000000000000000000000000000000000007D
++:10B3D000000000000000000000000000000000006D
++:10B3E000000000000000000000000000000000005D
++:10B3F000000000000000000000000000000000004D
++:10B40000000000000000000000000000000000003C
++:10B41000000000000000000000000000000000002C
++:10B42000000000000000000000000000000000001C
++:10B43000000000000000000000000000000000000C
++:10B4400000000000000000000000000000000000FC
++:10B4500000000000000000000000000000000000EC
++:10B4600000000000000000000000000000000000DC
++:10B4700000000000000000000000000000000000CC
++:10B4800000000000000000000000000000000000BC
++:10B4900000000000000000000000000000000000AC
++:10B4A000000000000000000000000000000000009C
++:10B4B000000000000000000000000000000000008C
++:10B4C000000000000000000000000000000000007C
++:10B4D000000000000000000000000000000000006C
++:10B4E000000000000000000000000000000000005C
++:10B4F000000000000000000000000000000000004C
++:10B50000000000000000000000000000000000003B
++:10B51000000000000000000000000000000000002B
++:10B52000000000000000000000000000000000001B
++:10B53000000000000000000000000000000000000B
++:10B5400000000000000000000000000000000000FB
++:10B5500000000000000000000000000000000000EB
++:10B5600000000000000000000000000000000000DB
++:10B5700000000000000000000000000000000000CB
++:10B5800000000000000000000000000000000000BB
++:10B5900000000000000000000000000000000000AB
++:10B5A000000000000000000000000000000000009B
++:10B5B000000000000000000000000000000000008B
++:10B5C000000000000000000000000000000000007B
++:10B5D000000000000000000000000000000000006B
++:10B5E000000000000000000000000000000000005B
++:10B5F000000000000000000000000000000000004B
++:10B60000000000000000000000000000000000003A
++:10B61000000000000000000000000000000000002A
++:10B62000000000000000000000000000000000001A
++:10B63000000000000000000000000000000000000A
++:10B6400000000000000000000000000000000000FA
++:10B6500000000000000000000000000000000000EA
++:10B6600000000000000000000000000000000000DA
++:10B6700000000000000000000000000000000000CA
++:10B6800000000000000000000000000000000000BA
++:10B6900000000000000000000000000000000000AA
++:10B6A000000000000000000000000000000000009A
++:10B6B000000000000000000000000000000000008A
++:10B6C000000000000000000000000000000000007A
++:10B6D000000000000000000000000000000000006A
++:10B6E000000000000000000000000000000000005A
++:10B6F000000000000000000000000000000000004A
++:10B700000000000000000000000000000000000039
++:10B710000000000000000000000000000000000029
++:10B720000000000000000000000000000000000019
++:10B730000000000000000000000000000000000009
++:10B7400000000000000000000000000000000000F9
++:10B7500000000000000000000000000000000000E9
++:10B7600000000000000000000000000000000000D9
++:10B7700000000000000000000000000000000000C9
++:10B7800000000000000000000000000000000000B9
++:10B7900000000000000000000000000000000000A9
++:10B7A0000000000000000000000000000000000099
++:10B7B0000000000000000000000000000000000089
++:10B7C0000000000000000000000000000000000079
++:10B7D0000000000000000000000000000000000069
++:10B7E0000000000000000000000000000000000059
++:10B7F0000000000000000000000000000000000049
++:10B800000000000000000000000000000000000038
++:10B810000000000000000000000000000000000028
++:10B820000000000000000000000000000000000018
++:10B830000000000000000000000000000000000008
++:10B8400000000000000000000000000000000000F8
++:10B8500000000000000000000000000000000000E8
++:10B8600000000000000000000000000000000000D8
++:10B8700000000000000000000000000000000000C8
++:10B8800000000000000000000000000000000000B8
++:10B8900000000000000000000000000000000000A8
++:10B8A0000000000000000000000000000000000098
++:10B8B0000000000000000000000000000000000088
++:10B8C0000000000000000000000000000000000078
++:10B8D0000000000000000000000000000000000068
++:10B8E0000000000000000000000000000000000058
++:10B8F0000000000000000000000000000000000048
++:10B900000000000000000000000000000000000037
++:10B910000000000000000000000000000000000027
++:10B920000000000000000000000000000000000017
++:10B930000000000000000000000000000000000007
++:10B9400000000000000000000000000000000000F7
++:10B9500000000000000000000000000000000000E7
++:10B9600000000000000000000000000000000000D7
++:10B9700000000000000000000000000000000000C7
++:10B9800000000000000000000000000000000000B7
++:10B9900000000000000000000000000000000000A7
++:10B9A0000000000000000000000000000000000097
++:10B9B0000000000000000000000000000000000087
++:10B9C0000000000000000000000000000000000077
++:10B9D0000000000000000000000000000000000067
++:10B9E0000000000000000000000000000000000057
++:10B9F0000000000000000000000000000000000047
++:10BA00000000000000000000000000000000000036
++:10BA10000000000000000000000000000000000026
++:10BA20000000000000000000000000000000000016
++:10BA30000000000000000000000000000000000006
++:10BA400000000000000000000000000000000000F6
++:10BA500000000000000000000000000000000000E6
++:10BA600000000000000000000000000000000000D6
++:10BA700000000000000000000000000000000000C6
++:10BA800000000000000000000000000000000000B6
++:10BA900000000000000000000000000000000000A6
++:10BAA0000000000000000000000000000000000096
++:10BAB0000000000000000000000000000000000086
++:10BAC0000000000000000000000000000000000076
++:10BAD0000000000000000000000000000000000066
++:10BAE0000000000000000000000000000000000056
++:10BAF0000000000000000000000000000000000046
++:10BB00000000000000000000000000000000000035
++:10BB10000000000000000000000000000000000025
++:10BB20000000000000000000000000000000000015
++:10BB30000000000000000000000000000000000005
++:10BB400000000000000000000000000000000000F5
++:10BB500000000000000000000000000000000000E5
++:10BB600000000000000000000000000000000000D5
++:10BB700000000000000000000000000000000000C5
++:10BB800000000000000000000000000000000000B5
++:10BB900000000000000000000000000000000000A5
++:10BBA0000000000000000000000000000000000095
++:10BBB0000000000000000000000000000000000085
++:10BBC0000000000000000000000000000000000075
++:10BBD0000000000000000000000000000000000065
++:10BBE0000000000000000000000000000000000055
++:10BBF0000000000000000000000000000000000045
++:10BC00000000000000000000000000000000000034
++:10BC10000000000000000000000000000000000024
++:10BC20000000000000000000000000000000000014
++:10BC30000000000000000000000000000000000004
++:10BC400000000000000000000000000000000000F4
++:10BC500000000000000000000000000000000000E4
++:10BC600000000000000000000000000000000000D4
++:10BC700000000000000000000000000000000000C4
++:10BC800000000000000000000000000000000000B4
++:10BC900000000000000000000000000000000000A4
++:10BCA0000000000000000000000000000000000094
++:10BCB0000000000000000000000000000000000084
++:10BCC0000000000000000000000000000000000074
++:10BCD0000000000000000000000000000000000064
++:10BCE0000000000000000000000000000000000054
++:10BCF0000000000000000000000000000000000044
++:10BD00000000000000000000000000000000000033
++:10BD10000000000000000000000000000000000023
++:10BD20000000000000000000000000000000000013
++:10BD30000000000000000000000000000000000003
++:10BD400000000000000000000000000000000000F3
++:10BD500000000000000000000000000000000000E3
++:10BD600000000000000000000000000000000000D3
++:10BD700000000000000000000000000000000000C3
++:10BD800000000000000000000000000000000000B3
++:10BD900000000000000000000000000000000000A3
++:10BDA0000000000000000000000000000000000093
++:10BDB0000000000000000000000000000000000083
++:10BDC0000000000000000000000000000000000073
++:10BDD0000000000000000000000000000000000063
++:10BDE0000000000000000000000000000000000053
++:10BDF0000000000000000000000000000000000043
++:10BE00000000000000000000000000000000000032
++:10BE10000000000000000000000000000000000022
++:10BE20000000000000000000000000000000000012
++:10BE30000000000000000000000000000000000002
++:10BE400000000000000000000000000000000000F2
++:10BE500000000000000000000000000000000000E2
++:10BE600000000000000000000000000000000000D2
++:10BE700000000000000000000000000000000000C2
++:10BE800000000000000000000000000000000000B2
++:10BE900000000000000000000000000000000000A2
++:10BEA0000000000000000000000000000000000092
++:10BEB0000000000000000000000000000000000082
++:10BEC0000000000000000000000000000000000072
++:10BED0000000000000000000000000000000000062
++:10BEE0000000000000000000000000000000000052
++:10BEF0000000000000000000000000000000000042
++:10BF00000000000000000000000000000000000031
++:10BF10000000000000000000000000000000000021
++:10BF20000000000000000000000000000000000011
++:10BF30000000000000000000000000000000000001
++:10BF400000000000000000000000000000000000F1
++:10BF500000000000000000000000000000000000E1
++:10BF600000000000000000000000000000000000D1
++:10BF700000000000000000000000000000000000C1
++:10BF800000000000000000000000000000000000B1
++:10BF900000000000000000000000000000000000A1
++:10BFA0000000000000000000000000000000000091
++:10BFB0000000000000000000000000000000000081
++:10BFC0000000000000000000000000000000000071
++:10BFD0000000000000000000000000000000000061
++:10BFE0000000000000000000000000000000000051
++:10BFF0000000000000000000000000000000000041
++:10C000000000000000000000000000000000000030
++:10C010000000000000000000000000000000000020
++:10C020000000000000000000000000000000000010
++:10C030000000000000000000000000000000000000
++:10C0400000000000000000000000000000000000F0
++:10C0500000000000000000000000000000000000E0
++:10C0600000000000000000000000000000000000D0
++:10C0700000000000000000000000000000000000C0
++:10C0800000000000000000000000000000000000B0
++:10C0900000000000000000000000000000000000A0
++:10C0A0000000000000000000000000000000000090
++:10C0B0000000000000000000000000000000000080
++:10C0C0000000000000000000000000000000000070
++:10C0D0000000000000000000000000000000000060
++:10C0E0000000000000000000000000000000000050
++:10C0F0000000000000000000000000000000000040
++:10C10000000000000000000000000000000000002F
++:10C11000000000000000000000000000000000001F
++:10C12000000000000000000000000000000000000F
++:10C1300000000000000000000000000000000000FF
++:10C1400000000000000000000000000000000000EF
++:10C1500000000000000000000000000000000000DF
++:10C1600000000000000000000000000000000000CF
++:10C1700000000000000000000000000000000000BF
++:10C1800000000000000000000000000000000000AF
++:10C19000000000000000000000000000000000009F
++:10C1A000000000000000000000000000000000008F
++:10C1B000000000000000000000000000000000007F
++:10C1C000000000000000000000000000000000006F
++:10C1D000000000000000000000000000000000005F
++:10C1E000000000000000000000000000000000004F
++:10C1F000000000000000000000000000000000003F
++:10C20000000000000000000000000000000000002E
++:10C21000000000000000000000000000000000001E
++:10C22000000000000000000000000000000000000E
++:10C2300000000000000000000000000000000000FE
++:10C2400000000000000000000000000000000000EE
++:10C2500000000000000000000000000000000000DE
++:10C2600000000000000000000000000000000000CE
++:10C2700000000000000000000000000000000000BE
++:10C2800000000000000000000000000000000000AE
++:10C29000000000000000000000000000000000009E
++:10C2A000000000000000000000000000000000008E
++:10C2B000000000000000000000000000000000007E
++:10C2C000000000000000000000000000000000006E
++:10C2D000000000000000000000000000000000005E
++:10C2E000000000000000000000000000000000004E
++:10C2F000000000000000000000000000000000003E
++:10C30000000000000000000000000000000000002D
++:10C31000000000000000000000000000000000001D
++:10C32000000000000000000000000000000000000D
++:10C3300000000000000000000000000000000000FD
++:10C3400000000000000000000000000000000000ED
++:10C3500000000000000000000000000000000000DD
++:10C3600000000000000000000000000000000000CD
++:10C3700000000000000000000000000000000000BD
++:10C3800000000000000000000000000000000000AD
++:10C39000000000000000000000000000000000009D
++:10C3A000000000000000000000000000000000008D
++:10C3B000000000000000000000000000000000007D
++:10C3C000000000000000000000000000000000006D
++:10C3D000000000000000000000000000000000005D
++:10C3E000000000000000000000000000000000004D
++:10C3F000000000000000000000000000000000003D
++:10C40000000000000000000000000000000000002C
++:10C41000000000000000000000000000000000001C
++:10C42000000000000000000000000000000000000C
++:10C4300000000000000000000000000000000000FC
++:10C4400000000000000000000000000000000000EC
++:10C4500000000000000000000000000000000000DC
++:10C4600000000000000000000000000000000000CC
++:10C4700000000000000000000000000000000000BC
++:10C4800000000000000000000000000000000000AC
++:10C49000000000000000000000000000000000009C
++:10C4A000000000000000000000000000000000008C
++:10C4B000000000000000000000000000000000007C
++:10C4C000000000000000000000000000000000006C
++:10C4D000000000000000000000000000000000005C
++:10C4E000000000000000000000000000000000004C
++:10C4F000000000000000000000000000000000003C
++:10C50000000000000000000000000000000000002B
++:10C51000000000000000000000000000000000001B
++:10C52000000000000000000000000000000000000B
++:10C5300000000000000000000000000000000000FB
++:10C5400000000000000000000000000000000000EB
++:10C5500000000000000000000000000000000000DB
++:10C5600000000000000000000000000000000000CB
++:10C5700000000000000000000000000000000000BB
++:10C5800000000000000000000000000000000000AB
++:10C59000000000000000000000000000000000009B
++:10C5A000000000000000000000000000000000008B
++:10C5B000000000000000000000000000000000007B
++:10C5C000000000000000000000000000000000006B
++:10C5D000000000000000000000000000000000005B
++:10C5E000000000000000000000000000000000004B
++:10C5F000000000000000000000000000000000003B
++:10C60000000000000000000000000000000000002A
++:10C61000000000000000000000000000000000001A
++:10C62000000000000000000000000000000000000A
++:10C6300000000000000000000000000000000000FA
++:10C6400000000000000000000000000000000000EA
++:10C6500000000000000000000000000000000000DA
++:10C6600000000000000000000000000000000000CA
++:10C6700000000000000000000000000000000000BA
++:10C6800000000000000000000000000000000000AA
++:10C69000000000000000000000000000000000009A
++:10C6A000000000000000000000000000000000008A
++:10C6B000000000000000000000000000000000007A
++:10C6C000000000000000000000000000000000006A
++:10C6D000000000000000000000000000000000005A
++:10C6E000000000000000000000000000000000004A
++:10C6F000000000000000000000000000000000003A
++:10C700000000000000000000000000000000000029
++:10C710000000000000000000000000000000000019
++:10C720000000000000000000000000000000000009
++:10C7300000000000000000000000000000000000F9
++:10C7400000000000000000000000000000000000E9
++:10C7500000000000000000000000000000000000D9
++:10C7600000000000000000000000000000000000C9
++:10C7700000000000000000000000000000000000B9
++:10C7800000000000000000000000000000000000A9
++:10C790000000000000000000000000000000000099
++:10C7A0000000000000000000000000000000000089
++:10C7B0000000000000000000000000000000000079
++:10C7C0000000000000000000000000000000000069
++:10C7D0000000000000000000000000000000000059
++:10C7E0000000000000000000000000000000000049
++:10C7F0000000000000000000000000000000000039
++:10C800000000000000000000000000000000000028
++:10C810000000000000000000000000000000000018
++:10C820000000000000000000000000000000000008
++:10C8300000000000000000000000000000000000F8
++:10C8400000000000000000000000000000000000E8
++:10C8500000000000000000000000000000000000D8
++:10C8600000000000000000000000000000000000C8
++:10C8700000000000000000000000000000000000B8
++:10C8800000000000000000000000000000000000A8
++:10C890000000000000000000000000000000000098
++:10C8A0000000000000000000000000000000000088
++:10C8B0000000000000000000000000000000000078
++:10C8C0000000000000000000000000000000000068
++:10C8D0000000000000000000000000000000000058
++:10C8E0000000000000000000000000000000000048
++:10C8F0000000000000000000000000000000000038
++:10C900000000000000000000000000000000000027
++:10C910000000000000000000000000000000000017
++:10C920000000000000000000000000000000000007
++:10C9300000000000000000000000000000000000F7
++:10C9400000000000000000000000000000000000E7
++:10C9500000000000000000000000000000000000D7
++:10C9600000000000000000000000000000000000C7
++:10C9700000000000000000000000000000000000B7
++:10C9800000000000000000000000000000000000A7
++:10C990000000000000000000000000000000000097
++:10C9A0000000000000000000000000000000000087
++:10C9B0000000000000000000000000000000000077
++:10C9C0000000000000000000000000000000000067
++:10C9D0000000000000000000000000000000000057
++:10C9E0000000000000000000000000000000000047
++:10C9F0000000000000000000000000000000000037
++:10CA00000000000000000000000000000000000026
++:10CA10000000000000000000000000000000000016
++:10CA20000000000000000000000000000000000006
++:10CA300000000000000000000000000000000000F6
++:10CA400000000000000000000000000000000000E6
++:10CA500000000000000000000000000000000000D6
++:10CA600000000000000000000000000000000000C6
++:10CA700000000000000000000000000000000000B6
++:10CA800000000000000000000000000000000000A6
++:10CA90000000000000000000000000000000000096
++:10CAA0000000000000000000000000000000000086
++:10CAB0000000000000000000000000000000000076
++:10CAC0000000000000000000000000000000000066
++:10CAD0000000000000000000000000000000000056
++:10CAE0000000000000000000000000000000000046
++:10CAF0000000000000000000000000000000000036
++:10CB00000000000000000000000000000000000025
++:10CB10000000000000000000000000000000000015
++:10CB20000000000000000000000000000000000005
++:10CB300000000000000000000000000000000000F5
++:10CB400000000000000000000000000000000000E5
++:10CB500000000000000000000000000000000000D5
++:10CB600000000000000000000000000000000000C5
++:10CB700000000000000000000000000000000000B5
++:10CB800000000000000000000000000000000000A5
++:10CB90000000000000000000000000000000000095
++:10CBA0000000000000000000000000000000000085
++:10CBB0000000000000000000000000000000000075
++:10CBC0000000000000000000000000000000000065
++:10CBD0000000000000000000000000000000000055
++:10CBE0000000000000000000000000000000000045
++:10CBF0000000000000000000000000000000000035
++:10CC00000000000000000000000000000000000024
++:10CC10000000000000000000000000000000000014
++:10CC20000000000000000000000000000000000004
++:10CC300000000000000000000000000000000000F4
++:10CC400000000000000000000000000000000000E4
++:10CC500000000000000000000000000000000000D4
++:10CC600000000000000000000000000000000000C4
++:10CC700000000000000000000000000000000000B4
++:10CC800000000000000000000000000000000000A4
++:10CC90000000000000000000000000000000000094
++:10CCA0000000000000000000000000000000000084
++:10CCB0000000000000000000000000000000000074
++:10CCC0000000000000000000000000000000000064
++:10CCD0000000000000000000000000000000000054
++:10CCE0000000000000000000000000000000000044
++:10CCF0000000000000000000000000000000000034
++:10CD00000000000000000000000000000000000023
++:10CD10000000000000000000000000000000000013
++:10CD20000000000000000000000000000000000003
++:10CD300000000000000000000000000000000000F3
++:10CD400000000000000000000000000000000000E3
++:10CD500000000000000000000000000000000000D3
++:10CD600000000000000000000000000000000000C3
++:10CD700000000000000000000000000000000000B3
++:10CD800000000000000000000000000000000000A3
++:10CD90000000000000000000000000000000000093
++:10CDA0000000000000000000000000000000000083
++:10CDB0000000000000000000000000000000000073
++:10CDC0000000000000000000000000000000000063
++:10CDD0000000000000000000000000000000000053
++:10CDE0000000000000000000000000000000000043
++:10CDF0000000000000000000000000000000000033
++:10CE00000000000000000000000000000000000022
++:10CE10000000000000000000000000000000000012
++:10CE20000000000000000000000000000000000002
++:10CE300000000000000000000000000000000000F2
++:10CE400000000000000000000000000000000000E2
++:10CE500000000000000000000000000000000000D2
++:10CE600000000000000000000000000000000000C2
++:10CE700000000000000000000000000000000000B2
++:10CE800000000000000000000000000000000000A2
++:10CE90000000000000000000000000000000000092
++:10CEA0000000000000000000000000000000000082
++:10CEB0000000000000000000000000000000000072
++:10CEC0000000000000000000000000000000000062
++:10CED0000000000000000000000000000000000052
++:10CEE0000000000000000000000000000000000042
++:10CEF0000000000000000000000000000000000032
++:10CF00000000000000000000000000000000000021
++:10CF10000000000000000000000000000000000011
++:10CF20000000000000000000000000000000000001
++:10CF300000000000000000000000000000000000F1
++:10CF400000000000000000000000000000000000E1
++:10CF500000000000000000000000000000000000D1
++:10CF600000000000000000000000000000000000C1
++:10CF700000000000000000000000000000000000B1
++:10CF800000000000000000000000000000000000A1
++:10CF90000000000000000000000000000000000091
++:10CFA0000000000000000000000000000000000081
++:10CFB0000000000000000000000000000000000071
++:10CFC0000000000000000000000000000000000061
++:10CFD0000000000000000000000000000000000051
++:10CFE0000000000000000000000000000000000041
++:10CFF0000000000000000000000000000000000031
++:10D000000000000000000000000000000000000020
++:10D010000000000000000000000000000000000010
++:10D020000000000000000000000000000000000000
++:10D0300000000000000000000000000000000000F0
++:10D0400000000000000000000000000000000000E0
++:10D0500000000000000000000000000000000000D0
++:10D0600000000000000000000000000000000000C0
++:10D0700000000000000000000000000000000000B0
++:10D0800000000000000000000000000000000000A0
++:10D090000000000000000000000000000000000090
++:10D0A0000000000000000000000000000000000080
++:10D0B0000000000000000000000000000000000070
++:10D0C0000000000000000000000000000000000060
++:10D0D0000000000000000000000000000000000050
++:10D0E0000000000000000000000000000000000040
++:10D0F0000000000000000000000000000000000030
++:10D10000000000000000000000000000000000001F
++:10D11000000000000000000000000000000000000F
++:10D1200000000000000000000000000000000000FF
++:10D1300000000000000000000000000000000000EF
++:10D1400000000000000000000000000000000000DF
++:10D1500000000000000000000000000000000000CF
++:10D1600000000000000000000000000000000000BF
++:10D1700000000000000000000000000000000000AF
++:10D18000000000000000000000000000000000009F
++:10D19000000000000000000000000000000000008F
++:10D1A000000000000000000000000000000000007F
++:10D1B000000000000000000000000000000000006F
++:10D1C000000000000000000000000000000000005F
++:10D1D000000000000000000000000000000000004F
++:10D1E000000000000000000000000000000000003F
++:10D1F000000000000000000000000000000000002F
++:10D20000000000000000000000000000000000001E
++:10D21000000000000000000000000000000000000E
++:10D2200000000000000000000000000000000000FE
++:10D2300000000000000000000000000000000000EE
++:10D2400000000000000000000000000000000000DE
++:10D2500000000000000000000000000000000000CE
++:10D2600000000000000000000000000000000000BE
++:10D2700000000000000000000000000000000000AE
++:10D28000000000000000000000000000000000009E
++:10D29000000000000000000000000000000000008E
++:10D2A000000000000000000000000000000000007E
++:10D2B000000000000000000000000000000000006E
++:10D2C000000000000000000000000000000000005E
++:10D2D000000000000000000000000000000000004E
++:10D2E000000000000000000000000000000000003E
++:10D2F000000000000000000000000000000000002E
++:10D30000000000000000000000000000000000001D
++:10D31000000000000000000000000000000000000D
++:10D3200000000000000000000000000000000000FD
++:10D3300000000000000000000000000000000000ED
++:10D3400000000000000000000000000000000000DD
++:10D3500000000000000000000000000000000000CD
++:10D3600000000000000000000000000000000000BD
++:10D3700000000000000000000000000000000000AD
++:10D38000000000000000000000000000000000009D
++:10D39000000000000000000000000000000000008D
++:10D3A000000000000000000000000000000000007D
++:10D3B000000000000000000000000000000000006D
++:10D3C000000000000000000000000000000000005D
++:10D3D000000000000000000000000000000000004D
++:10D3E000000000000000000000000000000000003D
++:10D3F000000000000000000000000000000000002D
++:10D40000000000000000000000000000000000001C
++:10D41000000000000000000000000000000000000C
++:10D4200000000000000000000000000000000000FC
++:10D4300000000000000000000000000000000000EC
++:10D4400000000000000000000000000000000000DC
++:10D4500000000000000000000000000000000000CC
++:10D4600000000000000000000000000000000000BC
++:10D4700000000000000000000000000000000000AC
++:10D48000000000000000000000000000000000009C
++:10D49000000000000000000000000000000000008C
++:10D4A000000000000000000000000000000000007C
++:10D4B000000000000000000000000000000000006C
++:10D4C000000000000000000000000000000000005C
++:10D4D000000000000000000000000000000000004C
++:10D4E000000000000000000000000000000000003C
++:10D4F000000000000000000000000000000000002C
++:10D50000000000000000000000000000000000001B
++:10D51000000000000000000000000000000000000B
++:10D5200000000000000000000000000000000000FB
++:10D5300000000000000000000000000000000000EB
++:10D5400000000000000000000000000000000000DB
++:10D5500000000000000000000000000000000000CB
++:10D5600000000000000000000000000000000000BB
++:10D5700000000000000000000000000000000000AB
++:10D58000000000000000000000000000000000009B
++:10D59000000000000000008000000000000000000B
++:10D5A000000000000000000000000000000000007B
++:10D5B00000000000000000000000000A0000000061
++:10D5C0000000000000000000100000030000000048
++:10D5D0000000000D0000000D3C02080024427340D2
++:10D5E0003C030800246377CCAC4000000043202BB0
++:10D5F0001480FFFD244200043C1D080037BD7FFC61
++:10D6000003A0F0213C100800261032103C1C08003A
++:10D61000279C73400E0010FE000000000000000D6B
++:10D6200030A5FFFF30C600FF274301808F4201B8BD
++:10D630000440FFFE24020002AC640000A465000860
++:10D64000A066000AA062000B3C021000AC67001844
++:10D6500003E00008AF4201B83C0360008C624FF861
++:10D660000440FFFE3C020200AC644FC0AC624FC4F9
++:10D670003C02100003E00008AC624FF89482000CFA
++:10D680002486001400A0382100021302000210803A
++:10D690000082402100C8102B1040005700000000FD
++:10D6A00090C300002C6200095040005190C200015C
++:10D6B000000310803C030800246372F00043102133
++:10D6C0008C420000004000080000000090C30001F0
++:10D6D0002402000A1462003A000000000106102330
++:10D6E0002C42000A1440003624C600028CE20000DE
++:10D6F00034420100ACE2000090C2000090C300017F
++:10D7000090C4000290C5000300031C000002160034
++:10D710000043102500042200004410250045102578
++:10D7200024C60004ACE2000490C2000090C30001D3
++:10D7300090C4000290C500030002160000031C0004
++:10D740000043102500042200004410250045102548
++:10D7500024C600040A000CB8ACE2000890C3000123
++:10D76000240200041462001624C6000290C20000C5
++:10D7700090C400018CE30000000212000044102558
++:10D780003463000424C60002ACE2000C0A000CB8AA
++:10D79000ACE3000090C300012402000314620008FF
++:10D7A00024C600028CE2000090C3000024C60001E1
++:10D7B00034420008A0E300100A000CB8ACE20000FC
++:10D7C00003E000082402000190C3000124020002CB
++:10D7D0001062000224C40002010020210A000CB8DB
++:10D7E000008030210A000CB824C6000190C200015C
++:10D7F0000A000CB800C2302103E00008000010212C
++:10D8000027BDFFE8AFBF0014AFB000100E00130239
++:10D8100000808021936200052403FFFE0200202186
++:10D82000004310248FBF00148FB00010A3620005C6
++:10D830000A00130B27BD001827BDFFE8AFB000108A
++:10D84000AFBF00140E000F3C0080802193620000E7
++:10D8500024030050304200FF14430004240201005E
++:10D86000AF4201800A000D3002002021AF4001804C
++:10D87000020020218FBF00148FB000100A000FE7B4
++:10D8800027BD001827BDFF80AFBE0078AFB700747A
++:10D89000AFB20060AFBF007CAFB60070AFB5006C38
++:10D8A000AFB40068AFB30064AFB1005CAFB0005874
++:10D8B0008F5001283C0208008C4231A02403FF80D5
++:10D8C0009365003F0202102100431024AF42002460
++:10D8D0003C0208008C4231A09364000530B200FF86
++:10D8E000020210213042007F034218210004202749
++:10D8F0003C02000A0062182130840001AF8300144A
++:10D900000000F0210000B82114800053AFA00050A7
++:10D9100093430116934401128F450104306300FFC5
++:10D920003C020001308400FF00A2282403431021A0
++:10D9300003441821245640002467400014A001CD60
++:10D940002402000193620000304300FF2402002003
++:10D950001062000524020050106200060000000062
++:10D960000A000D74000000000000000D0A000D7D8B
++:10D97000AFA000303C1E080027DE738C0A000D7D2E
++:10D98000AFA000303C0208008C4200DC24420001C1
++:10D990003C010800AC2200DC0E00139F00000000D8
++:10D9A0000A000F318FBF007C8F4201043C0300202E
++:10D9B00092D3000D004310240002202B00042140CC
++:10D9C000AFA400308F4301043C02004000621824E1
++:10D9D000146000023485004000802821326200205B
++:10D9E000AFA500301440000234A6008000A0302112
++:10D9F00010C0000BAFA6003093C500088F67004C25
++:10DA00000200202100052B0034A5008130A5F08103
++:10DA10000E000C9B30C600FF0A000F2E0000000015
++:10DA20009362003E304200401040000F2402000488
++:10DA300056420007240200120200202100E02821A3
++:10DA40000E0013F702C030210A000F318FBF007C97
++:10DA500016420005000000000E000D2100002021EC
++:10DA60000A000F318FBF007C9743011A96C4000E45
++:10DA700093620035326500043075FFFF00442004D6
++:10DA8000AFA400548ED1000410A000158ED400085D
++:10DA90009362003E3042004010400007000000004A
++:10DAA0000E0013E0022020211040000D00000000B5
++:10DAB0000A000F2E000000008F6200440222102393
++:10DAC0000440016A000000008F6200480222102317
++:10DAD00004410166240400160A000E218FC20004CE
++:10DAE0008F6200480222102304400008000000005A
++:10DAF0003C0208008C423100244200013C01080035
++:10DB0000AC2231000A000F23000000008F620040A9
++:10DB100002221023184000128F8400143C020800D7
++:10DB20008C423100327300FC0000A8212442000125
++:10DB30003C010800AC2231008F6300409482011C3C
++:10DB4000022318233042FFFF0043102A50400010E8
++:10DB50002402000C8F6200400A000DF20222102302
++:10DB60009483011C9762003C0043102B1040000678
++:10DB7000000000009482011C00551023A482011CA7
++:10DB80000A000DF72402000CA480011C2402000CE2
++:10DB9000AFA200308F620040005120231880000D9A
++:10DBA00002A4102A1440012600000000149500066B
++:10DBB00002A410233A620001304200011440012007
++:10DBC0000000000002A41023022488210A000E098C
++:10DBD0003055FFFF00002021326200021040001A81
++:10DBE000326200109362003E30420040504000110B
++:10DBF0008FC200040E00130202002021240200182C
++:10DC0000A362003F936200052403FFFE020020216F
++:10DC1000004310240E00130BA362000524040039F6
++:10DC2000000028210E0013C9240600180A000F3036
++:10DC300024020001240400170040F809000000003D
++:10DC40000A000F302402000110400108000000000B
++:10DC50008F63004C8F620054028210231C4001032A
++:10DC600002831023044200010060A021AFA4001829
++:10DC7000AFB10010AFB50014934201208F65004092
++:10DC80009763003C304200FF034210210044102102
++:10DC90008FA400543063FFFF244240000083182B00
++:10DCA0008FA40030AFA20020AFA50028008320255C
++:10DCB000AFA40030AFA50024AFA0002CAFB4003457
++:10DCC0009362003E30420008504000118FC20000B5
++:10DCD00002C0202127A500380E000CB2AFA00038EA
++:10DCE0005440000B8FC200008FA200383042010068
++:10DCF000504000078FC200008FA3003C8F6200607D
++:10DD00000062102304430001AF6300608FC2000073
++:10DD10000040F80927A400108FA200303042000212
++:10DD200054400001327300FE9362003E30420040D6
++:10DD3000104000378FA200248F6200541682001A10
++:10DD40003262000124020014124200102A4200151F
++:10DD500010400006240200162402000C12420007A4
++:10DD6000326200010A000E7D000000001242000530
++:10DD7000326200010A000E7D000000000A000E78E9
++:10DD80002417000E0A000E78241700100A000E7CDB
++:10DD900024170012936200232403FFBD00431024C4
++:10DDA000A362002332620001104000198FA20024F8
++:10DDB0002402000C1242000E2A42000D1040000600
++:10DDC0002402000E2402000A124200078FA200243F
++:10DDD0000A000E9524420001124200088FA200247E
++:10DDE0000A000E95244200010A000E932417000831
++:10DDF0002402000E16E20002241700162417001059
++:10DE00008FA2002424420001AFA200248FA200248C
++:10DE10008FA300148F76004000431021AF620040B2
++:10DE20008F8200149442011C104000090000000081
++:10DE30008F6200488F6400409763003C00441023C9
++:10DE40003063FFFF0043102A104000088FA20054E7
++:10DE5000936400368F6300403402FFFC008210049C
++:10DE600000621821AF6300488FA200548FA60030D3
++:10DE70000282902130C200081040000E0000000015
++:10DE80008F6200581642000430C600FF9742011A04
++:10DE90005040000134C6001093C500088FA700341D
++:10DEA0000200202100052B0034A500800E000C9BF1
++:10DEB00030A5F0808F620040005610231840001BF0
++:10DEC0008FA200183C0208008C42319830420010AA
++:10DED0001040000D24020001976200681440000AFF
++:10DEE000240200018F8200149442011C1440000699
++:10DEF00024020001A76200689742007A244200646D
++:10DF00000A000EE9A7620012A76200120E001302B7
++:10DF1000020020219362007D2403000102002021E1
++:10DF2000344200010A000EE7AFA300501840000A77
++:10DF3000000000000E001302020020219362007D09
++:10DF40002403000102002021AFA30050344200044A
++:10DF50000E00130BA362007D9362003E304200402E
++:10DF60001440000C326200011040000A0000000062
++:10DF70008F6300408FC20004240400182463000152
++:10DF80000040F809AF6300408FA200300A000F3054
++:10DF9000304200048F620058105200100000000050
++:10DFA0008F620018022210231C4000082404000184
++:10DFB0008F62001816220009000000008F62001C0A
++:10DFC000028210230440000500000000AF720058D8
++:10DFD000AFA40050AF710018AF74001C12E0000B2A
++:10DFE0008FA200500E00130202002021A377003FF1
++:10DFF0000E00130B0200202102E030212404003720
++:10E000000E0013C9000028218FA200501040000309
++:10E01000000000000E000CA90200202112A0000543
++:10E02000000018218FA2003030420004504000113F
++:10E0300000601021240300010A000F30006010214D
++:10E040000E001302020020219362007D02002021B5
++:10E05000344200040E00130BA362007D0E000CA9D5
++:10E06000020020210A000F3024020001AF400044CA
++:10E07000240200018FBF007C8FBE00788FB7007430
++:10E080008FB600708FB5006C8FB400688FB30064DA
++:10E090008FB200608FB1005C8FB0005803E00008C1
++:10E0A00027BD00808F4201B80440FFFE2402080013
++:10E0B000AF4201B803E00008000000003C02000885
++:10E0C00003421021944200483084FFFF2484001250
++:10E0D0003045FFFF10A0001700A4102B10400016C1
++:10E0E00024020003934201202403001AA343018B5E
++:10E0F000304200FF2446FFFE8F82000000A6182B4E
++:10E100003863000100021382004310241040000510
++:10E110008F84000434820001A746019403E00008C4
++:10E12000AF8200042402FFFE0082102403E00008F6
++:10E13000AF8200042402000303E00008A342018B25
++:10E1400027BDFFE0AFB10014AFB00010AFBF0018A3
++:10E1500030B0FFFF30D1FFFF8F4201B80440FFFE17
++:10E1600000000000AF440180AF4400200E000F42C9
++:10E17000020020218F8300008F840004A750019AA1
++:10E18000A750018EA74301908F8300083082800042
++:10E19000AF4301A8A75101881040000E8F820004F0
++:10E1A00093420116304200FC24420004005A102120
++:10E1B0008C4240003042FFFF144000068F82000472
++:10E1C0003C02FFFF34427FFF00821024AF82000434
++:10E1D0008F8200042403BFFF00431024A74201A63E
++:10E1E0009743010C8F42010400031C003042FFFFE3
++:10E1F00000621825AF4301AC3C021000AF4201B8E9
++:10E200008FBF00188FB100148FB0001003E000081A
++:10E2100027BD00208F470070934201128F830000BA
++:10E2200027BDFFF0304200FF00022882306201006B
++:10E23000000030211040004324A40003306240005D
++:10E24000104000103062200000041080005A10219D
++:10E250008C43400024A4000400041080AFA30000FD
++:10E26000005A10218C424000AFA2000493420116D4
++:10E27000304200FC005A10218C4240000A000FC0BE
++:10E28000AFA200081040002F0000302100041080D1
++:10E29000005A10218C43400024A400040004108084
++:10E2A000AFA30000005A10218C424000AFA000082C
++:10E2B000AFA200048FA80008000030210000202138
++:10E2C000240A00083C0908002529010003A41021A4
++:10E2D000148A000300042A001100000A0000000054
++:10E2E00090420000248400012C83000C00A2102125
++:10E2F00000021080004910218C4200001460FFF3DE
++:10E3000000C230263C0408008C8431048F42007027
++:10E310002C83002010600009004738233C030800CC
++:10E32000246331080004108000431021248300017D
++:10E33000AC4700003C010800AC233104AF86000864
++:10E340002406000100C0102103E0000827BD0010D2
++:10E350003C0208008C42003827BDFFD0AFB5002436
++:10E36000AFB40020AFB10014AFBF0028AFB3001CA2
++:10E37000AFB20018AFB00010000088213C150800B3
++:10E3800026B50038144000022454FFFF0000A021ED
++:10E390009742010E8F8400003042FFFF308340001F
++:10E3A0001060000A245200043C0200200082102465
++:10E3B00050400007308280008F8200042403BFFF9A
++:10E3C000008318240A0010103442100030828000AC
++:10E3D0001040000A3C020020008210241040000778
++:10E3E0008F8200043C03FFFF34637FFF0083182407
++:10E3F00034428000AF820004AF8300000E000F980B
++:10E400000000000014400007000000009743011EB8
++:10E410009742011C3063FFFF0002140000621825C0
++:10E42000AF8300089742010C8F4340003045FFFF47
++:10E430003402FFFF14620003000000000A001028ED
++:10E44000241100208F42400030420100544000015E
++:10E45000241100108F8400003082100050400014FE
++:10E4600036310001308200201440000B3C021000C5
++:10E47000008210245040000E363100013C030E0093
++:10E480003C020DFF008318243442FFFF0043102B91
++:10E4900050400007363100013C0208008C42002C3D
++:10E4A000244200013C010800AC22002C363100055A
++:10E4B0003C0608008CC6003454C000238F85000041
++:10E4C0008F820004304240005440001F8F850000BE
++:10E4D0003C021F01008210243C0310005443001A28
++:10E4E0008F85000030A20200144000178F850000C5
++:10E4F0003250FFFF363100028F4201B80440FFFE68
++:10E5000000000000AF400180020020210E000F42F9
++:10E51000AF4000208F8300042402BFFFA750019A60
++:10E52000006218248F820000A750018EA751018835
++:10E53000A74301A6A74201903C021000AF4201B8D8
++:10E540000A0010F5000010213C02100000A2102467
++:10E550001040003A0000000010C0000F0000000052
++:10E5600030A201001040000C3C0302003C020F00EE
++:10E5700000A2102410430008000000008F82000851
++:10E58000005410240055102190420004244200043D
++:10E590000A00109F000221C00000000000051602C2
++:10E5A0003050000F3A0300022E4203EF38420001C0
++:10E5B0002C6300010062182414600073240200011F
++:10E5C0003C0308008C6300D02E06000C386200016A
++:10E5D0002C4200010046102414400015001021C0F8
++:10E5E0002602FFFC2C4200045440001100002021B0
++:10E5F000386200022C420001004610241040000343
++:10E60000000512420A00109F000020210010182B64
++:10E610000043102450400006001021C000002021BB
++:10E620003245FFFF0E000F633226FFFB001021C0B2
++:10E630003245FFFF0A0010F2362600028F424000EA
++:10E640003C0308008C630024304201001040004667
++:10E6500030620001322200043070000D14400002CC
++:10E660002413000424130002000512C238420001E2
++:10E670002E4303EF304200013863000100431025B0
++:10E68000104000033231FFFB2402FFFB0202802412
++:10E6900010C000183202000130A201001040001525
++:10E6A000320200013C020F0000A210243C030200D1
++:10E6B0001043000F8F8200082403FFFE0203802412
++:10E6C00000541024005510219042000402333025DC
++:10E6D0002442000412000002000221C03226FFFF83
++:10E6E0000E000F633245FFFF1200002700001021CB
++:10E6F000320200011040000D320200042402000129
++:10E7000012020002023330253226FFFF00002021D2
++:10E710000E000F633245FFFF2402FFFE0202802439
++:10E7200012000019000010213202000410400016EF
++:10E7300024020001240200041202000202333025E8
++:10E740003226FFFF3245FFFF0E000F632404010055
++:10E750002402FFFB020280241200000B00001021A3
++:10E760000A0010F5240200011040000700001021EB
++:10E770003245FFFF36260002000020210E000F6305
++:10E7800000000000000010218FBF00288FB500247A
++:10E790008FB400208FB3001C8FB200188FB100140B
++:10E7A0008FB0001003E0000827BD003027BDFFD068
++:10E7B000AFB000103C04600CAFBF002CAFB6002817
++:10E7C000AFB50024AFB40020AFB3001CAFB2001847
++:10E7D000AFB100148C8250002403FF7F3C1A8000EC
++:10E7E000004310243442380CAC8250002402000351
++:10E7F0003C106000AF4200088E0208083C1B8008F5
++:10E800003C010800AC2000203042FFF038420010EC
++:10E810002C4200010E001B8DAF8200183C04FFFF4C
++:10E820003C020400348308063442000CAE0219484E
++:10E83000AE03194C3C0560168E0219808CA30000B3
++:10E840003442020000641824AE0219803C02535383
++:10E850001462000334A47C008CA200040050202128
++:10E860008C82007C8C830078AF820010AF83000C18
++:10E870008F55000032A200031040FFFD32A20001BC
++:10E880001040013D32A200028F420128AF42002019
++:10E890008F4201048F430100AF8200000E000F3C45
++:10E8A000AF8300043C0208008C4200C01040000806
++:10E8B0008F8400003C0208008C4200C42442000106
++:10E8C0003C010800AC2200C40A00126900000000EC
++:10E8D0003C020010008210241440010C8F830004BD
++:10E8E0003C0208008C4200203C0308008C63003886
++:10E8F00000008821244200013C010800AC220020D5
++:10E900003C16080026D60038146000022474FFFF6D
++:10E910000000A0219742010E308340003042FFFFEB
++:10E920001060000A245200043C02002000821024DF
++:10E9300050400007308280008F8200042403BFFF14
++:10E94000008318240A0011703442100030828000C5
++:10E950001040000A3C0200200082102410400007F2
++:10E960008F8200043C03FFFF34637FFF0083182481
++:10E9700034428000AF820004AF8300000E000F9885
++:10E980000000000014400007000000009743011E33
++:10E990009742011C3063FFFF00021400006218253B
++:10E9A000AF8300089742010C8F4340003045FFFFC2
++:10E9B0003402FFFF14620003000000000A00118807
++:10E9C000241100208F4240003042010054400001D9
++:10E9D000241100108F840000308210005040001479
++:10E9E00036310001308200201440000B3C02100040
++:10E9F000008210245040000E363100013C030E000E
++:10EA00003C020DFF008318243442FFFF0043102B0B
++:10EA100050400007363100013C0208008C42002CB7
++:10EA2000244200013C010800AC22002C36310005D4
++:10EA30003C0608008CC6003454C000238F850000BB
++:10EA40008F820004304240005440001F8F85000038
++:10EA50003C021F01008210243C0310005443001AA2
++:10EA60008F85000030A20200144000178F8500003F
++:10EA70003250FFFF363100028F4201B80440FFFEE2
++:10EA800000000000AF400180020020210E000F4274
++:10EA9000AF4000208F8300042402BFFFA750019ADB
++:10EAA000006218248F820000A750018EA7510188B0
++:10EAB000A74301A6A74201903C021000AF4201B853
++:10EAC0000A001267000010213C02100000A210246E
++:10EAD0001040003A0000000010C0000F00000000CD
++:10EAE00030A201001040000C3C0302003C020F0069
++:10EAF00000A2102410430008000000008F820008CC
++:10EB000000541024005610219042000424420004B6
++:10EB10000A0011FF000221C00000000000051602DB
++:10EB20003050000F3A0300022E4203EF384200013A
++:10EB30002C63000100621824146000852402000187
++:10EB40003C0308008C6300D02E06000C38620001E4
++:10EB50002C4200010046102414400015001021C072
++:10EB60002602FFFC2C42000454400011000020212A
++:10EB7000386200022C42000100461024504000037D
++:10EB8000000512420A0011FF000020210010182B7E
++:10EB90000043102450400006001021C00000202136
++:10EBA0003245FFFF0E000F633226FFFB001021C02D
++:10EBB0003245FFFF0A001252362600028F42400003
++:10EBC0003C0308008C6300243042010010400046E2
++:10EBD00030620001322200043070000D1440000247
++:10EBE0002413000424130002000512C2384200015D
++:10EBF0002E4303EF3042000138630001004310252B
++:10EC0000104000033231FFFB2402FFFB020280248C
++:10EC100010C000183202000130A20100104000159F
++:10EC2000320200013C020F0000A210243C0302004B
++:10EC30001043000F8F8200082403FFFE020380248C
++:10EC40000054102400561021904200040233302555
++:10EC50002442000412000002000221C03226FFFFFD
++:10EC60000E000F633245FFFF120000390000102133
++:10EC7000320200011040000D3202000424020001A3
++:10EC800012020002023330253226FFFF000020214D
++:10EC90000E000F633245FFFF2402FFFE02028024B4
++:10ECA0001200002B00001021320200041040002846
++:10ECB0002402000124020004120200020233302563
++:10ECC0003226FFFF3245FFFF0E000F6324040100D0
++:10ECD0002402FFFB020280241200001D000010210C
++:10ECE0000A001267240200015040001900001021A0
++:10ECF0003245FFFF36260002000020210E000F6380
++:10ED0000000000000A001267000010212402BFFF6B
++:10ED1000006210241040000800000000240287FF59
++:10ED200000621024144000083C020060008210249D
++:10ED300010400005000000000E000D34000000002F
++:10ED40000A001267000000000E0012C70000000059
++:10ED5000104000063C0240008F4301243C0260202A
++:10ED6000AC430014000000003C024000AF420138F8
++:10ED70000000000032A200021040FEBD00000000B2
++:10ED80008F4201403C044000AF4200208F430148C5
++:10ED90003C02700000621824106400420000000071
++:10EDA0000083102B144000063C0260003C0220004F
++:10EDB000106200073C0240000A0012C3000000007D
++:10EDC0001062003C3C0240000A0012C30000000038
++:10EDD0008F4501408F4601448F42014800021402D2
++:10EDE000304300FF240200041462000A274401801B
++:10EDF0008F4201B80440FFFE2402001CAC850000D5
++:10EE0000A082000B3C021000AF4201B80A0012C3FE
++:10EE10003C0240002402000914620012000616029F
++:10EE2000000229C0AF4500208F4201B80440FFFE18
++:10EE30002402000124030003AF450180A343018B9A
++:10EE4000A740018EA740019AA7400190AF4001A8BA
++:10EE5000A7420188A74201A6AF4001AC3C021000C6
++:10EE6000AF4201B88F4201B80440FFFE000000002D
++:10EE7000AC8500008F42014800021402A482000801
++:10EE800024020002A082000B8F420148A4820010DD
++:10EE90003C021000AC860024AF4201B80A0012C345
++:10EEA0003C0240000E001310000000000A0012C3D4
++:10EEB0003C0240000E001BC2000000003C0240006B
++:10EEC000AF420178000000000A00112F000000008E
++:10EED0008F4201003042003E144000112402000124
++:10EEE000AF4000488F420100304207C0104000058B
++:10EEF00000000000AF40004CAF40005003E00008AD
++:10EF000024020001AF400054AF4000408F42010096
++:10EF10003042380054400001AF4000442402000158
++:10EF200003E00008000000008F4201B80440FFFE2B
++:10EF300024020001AF440180AF400184A74501884D
++:10EF4000A342018A24020002A342018B9742014A94
++:10EF500014C00004A7420190AF4001A40A0012EFC0
++:10EF60003C0210008F420144AF4201A43C02100059
++:10EF7000AF4001A803E00008AF4201B88F4201B8DA
++:10EF80000440FFFE24020002AF440180AF4401842C
++:10EF9000A7450188A342018AA342018B9742014AF7
++:10EFA000A7420190AF4001A48F420144AF4201A8A3
++:10EFB0003C02100003E00008AF4201B83C029000A0
++:10EFC0003442000100822025AF4400208F420020FF
++:10EFD0000440FFFE0000000003E000080000000005
++:10EFE0003C028000344200010082202503E000083A
++:10EFF000AF44002027BDFFE8AFBF0014AFB0001042
++:10F000008F50014093430149934201489344014882
++:10F01000306300FF304200FF00021200006228252A
++:10F020002402001910620076308400802862001AE1
++:10F030001040001C24020020240200081062007707
++:10F04000286200091040000E2402000B2402000177
++:10F0500010620034286200025040000524020006BD
++:10F0600050600034020020210A00139A00000000C2
++:10F0700010620030020020210A00139A00000000F4
++:10F080001062003B2862000C504000022402000E77
++:10F090002402000910620056020020210A00139A7F
++:10F0A0000000000010620056286200211040000F8E
++:10F0B000240200382402001C106200582862001D3F
++:10F0C000104000062402001F2402001B1062004CA6
++:10F0D000000000000A00139A000000001062004ABD
++:10F0E000020020210A00139A00000000106200456F
++:10F0F0002862003910400007240200802462FFCB00
++:10F100002C42000210400045020020210A00139604
++:10F110000000302110620009000000000A00139A6C
++:10F12000000000001480003D020020210A0013901E
++:10F130008FBF00140A001396240600018F4201B805
++:10F140000440FFFE24020002A342018BA745018870
++:10F150009742014AA74201908F420144A74201927F
++:10F160003C021000AF4201B80A00139C8FBF00148C
++:10F170009742014A144000290000000093620005F4
++:10F180003042000414400025000000000E0013026D
++:10F190000200202193620005020020213442000475
++:10F1A0000E00130BA36200059362000530420004B9
++:10F1B00014400002000000000000000D93620000F7
++:10F1C00024030020304200FF14430014000000001C
++:10F1D0008F4201B80440FFFE24020005AF500180B9
++:10F1E000A342018B3C0210000A00139AAF4201B8FF
++:10F1F0008FBF00148FB000100A0012F227BD001854
++:10F200000000000D02002021000030218FBF0014FB
++:10F210008FB000100A0012DD27BD00180000000D9D
++:10F220008FBF00148FB0001003E0000827BD001846
++:10F2300027BDFFE8AFBF00100E000F3C000000002C
++:10F24000AF4001808FBF0010000020210A000FE7AF
++:10F2500027BD00183084FFFF30A5FFFF00001821F4
++:10F260001080000700000000308200011040000202
++:10F2700000042042006518210A0013AB0005284055
++:10F2800003E000080060102110C0000624C6FFFF44
++:10F290008CA2000024A50004AC8200000A0013B573
++:10F2A0002484000403E000080000000010A000080F
++:10F2B00024A3FFFFAC860000000000000000000057
++:10F2C0002402FFFF2463FFFF1462FFFA248400047A
++:10F2D00003E0000800000000308300FF30A500FFBD
++:10F2E00030C600FF274701808F4201B80440FFFE6F
++:10F2F000000000008F42012834634000ACE20000AF
++:10F3000024020001ACE00004A4E30008A0E2000A2B
++:10F3100024020002A0E2000B3C021000A4E5001051
++:10F32000ACE00024ACE00028A4E6001203E00008F2
++:10F33000AF4201B827BDFFE8AFBF00109362003FA6
++:10F3400024030012304200FF1043000D00803021E2
++:10F350008F620044008210230440000A8FBF001017
++:10F360008F620048240400390000282100C21023C5
++:10F3700004410004240600120E0013C9000000001E
++:10F380008FBF00102402000103E0000827BD001811
++:10F3900027BDFFC8AFB20030AFB1002CAFBF003403
++:10F3A000AFB0002890C5000D0080902130A400105F
++:10F3B0001080000B00C088218CC300088F620054AD
++:10F3C0001062000730A20005144000B524040001BB
++:10F3D0000E000D21000020210A0014BB0040202156
++:10F3E00030A200051040000930A30012108000ACCC
++:10F3F000240400018E2300088F620054146200A9C7
++:10F400008FBF00340A00142C240400382402001298
++:10F41000146200A3240400010220202127A500106B
++:10F420000E000CB2AFA000101040001102402021CD
++:10F430008E220008AF620084AF6000400E0013020D
++:10F44000000000009362007D024020213442002031
++:10F450000E00130BA362007D0E000CA902402021B8
++:10F46000240400382405008D0A0014B82406001274
++:10F470009362003E304200081040000F8FA200103F
++:10F4800030420100104000078FA300148F6200601B
++:10F490000062102304430008AF6300600A001441B7
++:10F4A00000000000AF6000609362003E2403FFF79D
++:10F4B00000431024A362003E9362003E30420008E5
++:10F4C000144000022406000300003021936200343F
++:10F4D000936300378F640084304200FF306300FF85
++:10F4E00000661821000318800043282100A4202B67
++:10F4F0001080000B000000009763003C8F620084C6
++:10F500003063FFFF004510230062182B14600004D5
++:10F51000000000008F6200840A00145D0045802313
++:10F520009762003C3050FFFF8FA300103062000450
++:10F5300010400004000628808FA2001C0A001465F9
++:10F540000202102B2E02021850400003240202185F
++:10F550000A00146E020510233063000410600003DB
++:10F56000004510238FA2001C00451023004080217D
++:10F570002C42008054400001241000800E00130231
++:10F580000240202124020001AF62000C9362003E81
++:10F59000001020403042007FA362003E8E22000413
++:10F5A00024420001AF620040A770003C8F6200500F
++:10F5B0009623000E00431021AF6200588F62005066
++:10F5C00000441021AF62005C8E220004AF6200187C
++:10F5D0008E220008AF62001C8FA20010304200088B
++:10F5E0005440000A93A20020A360003693620036C4
++:10F5F0002403FFDFA36200359362003E0043102422
++:10F60000A362003E0A0014988E220008A36200350F
++:10F610008E220008AF62004C8F6200248F6300408E
++:10F6200000431021AF6200489362000024030050A1
++:10F63000304200FF144300122403FF803C02080004
++:10F640008C4231A00242102100431024AF42002816
++:10F650003C0208008C4231A08E2400083C03000CC0
++:10F66000024210213042007F03421021004310214A
++:10F67000AC4400D88E230008AF820014AC4300DCF9
++:10F680000E00130B02402021240400380000282122
++:10F690002406000A0E0013C9000000002404000123
++:10F6A0008FBF00348FB200308FB1002C8FB0002894
++:10F6B0000080102103E0000827BD003827BDFFF8B7
++:10F6C00027420180AFA20000308A00FF8F4201B8BC
++:10F6D0000440FFFE000000008F4601283C020800A5
++:10F6E0008C4231A02403FF80AF86004800C2102165
++:10F6F00000431024AF4200243C0208008C4231A099
++:10F700008FA900008FA8000000C210213042007FA6
++:10F71000034218213C02000A00621821946400D4BC
++:10F720008FA700008FA5000024020002AF83001401
++:10F73000A0A2000B8FA30000354260003084FFFFC1
++:10F74000A4E200083C021000AD260000AD04000455
++:10F75000AC60002427BD0008AF4201B803E00008F8
++:10F76000240200018F88003C938200288F830014BC
++:10F770003C07080024E7779800481023304200FF38
++:10F78000304900FC246500888F860040304A000321
++:10F790001120000900002021248200048CA3000015
++:10F7A000304400FF0089102AACE3000024A50004C7
++:10F7B0001440FFF924E70004114000090000202153
++:10F7C0002482000190A30000304400FF008A102B27
++:10F7D000A0E3000024A500011440FFF924E7000184
++:10F7E00030C20003144000048F85003C3102000346
++:10F7F0001040000D0000000010A0000900002021B2
++:10F800002482000190C30000304400FF0085102BCB
++:10F81000A0E3000024C600011440FFF924E7000122
++:10F8200003E00008000000001100FFFD000020219F
++:10F83000248200048CC30000304400FF0088102B99
++:10F84000ACE3000024C600041440FFF924E70004E0
++:10F8500003E00008000000008F83003C9382002832
++:10F8600030C600FF30A500FF00431023304300FFE7
++:10F870008F820014008038210043102114C0000240
++:10F88000244800880083382130E20003144000053A
++:10F8900030A2000314400003306200031040000D4A
++:10F8A0000000000010A000090000202124820001B7
++:10F8B00090E30000304400FF0085102BA1030000FE
++:10F8C00024E700011440FFF92508000103E00008C7
++:10F8D0000000000010A0FFFD000020212482000491
++:10F8E0008CE30000304400FF0085102BAD030000C6
++:10F8F00024E700041440FFF92508000403E0000891
++:10F90000000000000080482130AAFFFF30C600FF41
++:10F9100030E7FFFF274801808F4201B80440FFFE17
++:10F920008F820048AD0200008F420124AD02000426
++:10F930008D220020A5070008A102000A240200165B
++:10F94000A102000B934301208D2200088D240004A6
++:10F95000306300FF004310219783003A00441021D8
++:10F960008D250024004310233C0308008C6331A044
++:10F970008F840014A502000C246300E82402FFFF1A
++:10F98000A50A000EA5030010A5060012AD0500187B
++:10F99000AD020024948201142403FFF73042FFFFDC
++:10F9A000AD0200288C820118AD02002C3C02100030
++:10F9B000AD000030AF4201B88D220020004310247A
++:10F9C00003E00008AD2200208F82001430E7FFFF23
++:10F9D00000804821904200D330A5FFFF30C600FFD1
++:10F9E0000002110030420F0000E238252748018054
++:10F9F0008F4201B80440FFFE8F820048AD02000034
++:10FA00008F420124AD0200048D220020A5070008CA
++:10FA1000A102000A24020017A102000B9343012057
++:10FA20008D2200088D240004306300FF0043102164
++:10FA30009783003A004410218F8400140043102360
++:10FA40003C0308008C6331A0A502000CA505000E44
++:10FA5000246300E8A5030010A5060012AD00001401
++:10FA60008D220024AD0200188C82005CAD02001CC7
++:10FA70008C820058AD0200202402FFFFAD0200245A
++:10FA8000948200E63042FFFFAD02002894820060BD
++:10FA9000948300BE30427FFF3063FFFF00021200FC
++:10FAA00000431021AD02002C3C021000AD000030DC
++:10FAB000AF4201B8948200BE2403FFF700A21021D8
++:10FAC000A48200BE8D2200200043102403E0000821
++:10FAD000AD220020274301808F4201B80440FFFE81
++:10FAE0008F8200249442001C3042FFFF000211C0AC
++:10FAF000AC62000024020019A062000B3C0210005E
++:10FB0000AC60003003E00008AF4201B88F87002CE2
++:10FB100030C300FF8F4201B80440FFFE8F820048CF
++:10FB200034636000ACA2000093820044A0A20005F0
++:10FB30008CE20010A4A20006A4A300088C8200207E
++:10FB40002403FFF7A0A2000A24020002A0A2000BD7
++:10FB50008CE20000ACA200108CE20004ACA2001405
++:10FB60008CE2001CACA200248CE20020ACA2002895
++:10FB70008CE2002CACA2002C8C820024ACA20018D9
++:10FB80003C021000AF4201B88C82002000431024D8
++:10FB900003E00008AC8200208F86001427BDFFE838
++:10FBA000AFBF0014AFB0001090C20063304200201D
++:10FBB0001040000830A500FF8CC2007C2403FFDF4A
++:10FBC00024420001ACC2007C90C2006300431024B8
++:10FBD000A0C2006310A000238F830014275001806F
++:10FBE000020028210E0015D6240600828F82001400
++:10FBF000904200633042004050400019A38000440E
++:10FC00008F83002C8F4201B80440FFFE8F82004892
++:10FC1000AE02000024026082A60200082402000254
++:10FC2000A202000B8C620008AE0200108C62000C75
++:10FC3000AE0200148C620014AE0200188C62001830
++:10FC4000AE0200248C620024AE0200288C620028E0
++:10FC5000AE02002C3C021000AF4201B8A380004469
++:10FC60008F8300148FBF00148FB000109062006368
++:10FC700027BD00183042007FA06200639782003ADF
++:10FC80008F86003C8F850014938300280046102344
++:10FC9000A782003AA4A000E490A400638F820040F1
++:10FCA000AF83003C2403FFBF0046102100832024C3
++:10FCB000AF820040A0A400638F820014A04000BD6A
++:10FCC0008F82001403E00008A44000BE8F8A001455
++:10FCD00027BDFFE0AFB10014AFB000108F88003C2B
++:10FCE000AFBF00189389001C954200E430D100FF9B
++:10FCF0000109182B0080802130AC00FF3047FFFF46
++:10FD00000000582114600003310600FF012030215B
++:10FD1000010958239783003A0068102B1440003CD7
++:10FD20000000000014680007240200018E02002079
++:10FD30002403FFFB34E7800000431024AE020020C0
++:10FD40002402000134E70880158200053165FFFFB9
++:10FD50000E001554020020210A00169102002021F5
++:10FD60000E001585020020218F8400482743018062
++:10FD70008F4201B80440FFFE24020018AC6400006A
++:10FD8000A062000B8F840014948200E6A46200102D
++:10FD90003C021000AC600030AF4201B894820060B9
++:10FDA00024420001A4820060948200603C030800A9
++:10FDB0008C63318830427FFF5443000F02002021C2
++:10FDC000948200602403800000431024A482006019
++:10FDD0009082006090830060304200FF000211C2F8
++:10FDE00000021027000211C03063007F0062182556
++:10FDF000A083006002002021022028218FBF00186C
++:10FE00008FB100148FB000100A0015F927BD002033
++:10FE1000914200632403FF8000431025A142006348
++:10FE20009782003A3048FFFF110000209383001CA6
++:10FE30008F840014004B1023304600FF948300E4AD
++:10FE40002402EFFF0168282B00621824A48300E439
++:10FE500014A000038E020020010058210000302170
++:10FE60002403FFFB34E7800000431024AE0200208F
++:10FE700024020001158200053165FFFF0E001554B4
++:10FE8000020020210A0016B99783003A0E0015855A
++:10FE9000020020219783003A8F82003CA780003A1D
++:10FEA00000431023AF82003C9383001C8F82001418
++:10FEB0008FBF00188FB100148FB0001027BD002035
++:10FEC00003E00008A04300BD938200442403000126
++:10FED00027BDFFE8004330042C420020AFB00010E3
++:10FEE000AFBF00142410FFFE10400005274501801D
++:10FEF0003C0208008C4231900A0016D600461024BD
++:10FF00003C0208008C423194004610241440000743
++:10FF1000240600848F8300142410FFFF9062006287
++:10FF20003042000F34420040A06200620E0015D63D
++:10FF300000000000020010218FBF00148FB00010DD
++:10FF400003E0000827BD00188F83002427BDFFE0D1
++:10FF5000AFB20018AFB10014AFB00010AFBF001CBB
++:10FF60009062000D00A0902130D100FF3042007F50
++:10FF7000A062000D8F8500148E4300180080802140
++:10FF80008CA2007C146200052402000E90A2006383
++:10FF9000344200200A0016FFA0A200630E0016C51E
++:10FFA000A38200442403FFFF104300472404FFFF03
++:10FFB00052200045000020218E4300003C0200102A
++:10FFC00000621024504000043C020008020020217E
++:10FFD0000A00170E24020015006210245040000988
++:10FFE0008E45000002002021240200140E0016C5D8
++:10FFF000A38200442403FFFF104300332404FFFFC7
++:020000021000EC
++:100000008E4500003C02000200A2102410400016A1
++:100010003C0200048F8600248CC200148CC30010A4
++:100020008CC40014004310230044102B50400005E2
++:10003000020020218E43002C8CC2001010620003AD
++:10004000020020210A00173F240200123C02000493
++:1000500000A210245040001C00002021020020219A
++:100060000A00173F2402001300A2102410400006CB
++:100070008F8300248C620010504000130000202168
++:100080000A001739020020218C6200105040000441
++:100090008E42002C020020210A00173F240200118A
++:1000A00050400009000020210200202124020017F6
++:1000B0000E0016C5A38200442403FFFF1043000274
++:1000C0002404FFFF000020218FBF001C8FB2001806
++:1000D0008FB100148FB000100080102103E00008E1
++:1000E00027BD00208F83001427BDFFD8AFB40020A8
++:1000F000AFB3001CAFB20018AFB10014AFB0001026
++:10010000AFBF0024906200638F91002C2412FFFF88
++:100110003442004092250000A06200638E2200104D
++:100120000080982130B0003F105200060360A021EB
++:100130002402000D0E0016C5A38200441052005484
++:100140002404FFFF8F8300148E2200188C63007C30
++:1001500010430007026020212402000E0E0016C585
++:10016000A38200442403FFFF104300492404FFFF3F
++:1001700024040020120400048F83001490620063A2
++:1001800034420020A06200638F85003410A000205C
++:1001900000000000560400048F8200140260202139
++:1001A0000A0017902402000A9683000A9442006015
++:1001B0003042FFFF144300048F8200202404FFFD1F
++:1001C0000A0017B7AF82003C3C0208008C42318C19
++:1001D0000045102B14400006026020210000282159
++:1001E0000E001646240600010A0017B70000202161
++:1001F0002402002D0E0016C5A38200442403FFFF35
++:10020000104300232404FFFF0A0017B70000202139
++:10021000160400058F8400148E2300142402FFFFAF
++:100220005062001802602021948200602442000184
++:10023000A4820060948200603C0308008C633188D3
++:1002400030427FFF5443000F0260202194820060FF
++:100250002403800000431024A48200609082006088
++:1002600090830060304200FF000211C2000210279C
++:10027000000211C03063007F00621825A083006077
++:10028000026020210E0015F9240500010000202144
++:100290008FBF00248FB400208FB3001C8FB20018D2
++:1002A0008FB100148FB000100080102103E000080F
++:1002B00027BD00288F83001427BDFFE8AFB00010D2
++:1002C000AFBF0014906200638F87002C00808021F4
++:1002D000344200408CE60010A06200633C0308003A
++:1002E0008C6331B030C23FFF0043102B1040004EF2
++:1002F0008F8500302402FF8090A3000D004310245E
++:10030000304200FF504000490200202100061382C5
++:10031000304800032402000255020044020020215C
++:1003200094A2001C8F85001424030023A4A20114AE
++:100330008CE60000000616023042003F1043001019
++:100340003C0300838CE300188CA2007C1062000642
++:100350002402000E0E0016C5A38200442403FFFFF2
++:10036000104300382404FFFF8F8300149062006361
++:1003700034420020A06200630A0017FC8F8300242F
++:1003800000C31024144300078F83002490A200624E
++:100390003042000F34420020A0A20062A38800383F
++:1003A0008F8300249062000D3042007FA062000D18
++:1003B0008F83003410600018020020218F840030E9
++:1003C0008C8200100043102B1040000924020018FA
++:1003D000020020210E0016C5A38200442403FFFF63
++:1003E000104300182404FFFF0A00182400002021F5
++:1003F0008C820010240500010200202100431023FC
++:100400008F830024240600010E001646AC62001003
++:100410000A001824000020210E0015F9240500010F
++:100420000A00182400002021020020212402000DCF
++:100430008FBF00148FB0001027BD00180A0016C52A
++:10044000A38200448FBF00148FB0001000801021E1
++:1004500003E0000827BD001827BDFFC8AFB2002089
++:10046000AFBF0034AFB60030AFB5002CAFB400283A
++:10047000AFB30024AFB1001CAFB000188F46012805
++:100480003C0308008C6331A02402FF80AF86004843
++:1004900000C318213065007F03452821006218241D
++:1004A0003C02000AAF43002400A2282190A200626F
++:1004B00000809021AF850014304200FF000211023D
++:1004C000A382003890A200BC304200021440000217
++:1004D00024030034240300308F820014A3830028F7
++:1004E000938300388C4200C0A3800044AF82003C5C
++:1004F000240200041062031C8F84003C8E4400041C
++:10050000508003198F84003C8E4200103083FFFF1F
++:10051000A784003A106002FFAF8200408F8400146D
++:100520002403FF809082006300621024304200FFA9
++:10053000144002CF9785003A9383003824020002CA
++:1005400030B6FFFF14620005000088219382002866
++:100550002403FFFD0A001B19AF82003C8F82003C80
++:1005600002C2102B144002A18F8400400E0014EC34
++:1005700000000000938300283C040800248477983E
++:10058000240200341462002EAF84002C3C0A0800C0
++:100590008D4A77C82402FFFFAFA2001000803821E7
++:1005A0002405002F3C09080025297398240800FF22
++:1005B0002406FFFF90E2000024A3FFFF00062202B2
++:1005C00000C21026304200FF0002108000491021B6
++:1005D0008C420000306500FF24E7000114A8FFF5FD
++:1005E0000082302600061027AFA20014AFA2001030
++:1005F0000000282127A7001027A6001400C51023FB
++:100600009044000324A2000100A71821304500FFF8
++:100610002CA200041440FFF9A06400008FA2001077
++:100620001142000724020005024020210E0016C5D9
++:10063000A38200442403FFFF104300642404FFFF4F
++:100640003C0208009042779C104000098F82001401
++:10065000024020212402000C0E0016C5A382004493
++:100660002403FFFF104300592404FFFF8F8200146E
++:10067000A380001C3C0308008C63779C8C440080A2
++:100680003C0200FF3442FFFF006218240083202B4D
++:1006900010800008AF83003402402021240200199A
++:1006A0000E0016C5A38200442403FFFF1043004739
++:1006B0002404FFFF8F87003C9782003A8F85003427
++:1006C000AF8700200047202310A0003BA784003AFA
++:1006D0008F86001430A200030002102390C300BCD8
++:1006E0003050000300B0282100031882307300014D
++:1006F0000013108000A228213C0308008C6331A065
++:100700008F8200483084FFFF0085202B004310219A
++:1007100010800011244200888F84002C1082000E6B
++:100720003C033F013C0208008C42779800431024B0
++:100730003C0325001443000630E500FF8C820000D6
++:10074000ACC200888C8200100A0018E9ACC2009884
++:100750000E001529000030219382001C8F850014A3
++:100760008F830040020238218F82003CA387001C47
++:1007700094A400E4006218218F82003434841000B5
++:10078000AF83004000503021A4A400E41260000EAA
++:10079000AF86003C24E20004A382001C94A200E483
++:1007A00024C30004AF83003C34422000A4A200E430
++:1007B0000A001906000020218F820040AF80003C13
++:1007C00000471021AF820040000020212414FFFFC9
++:1007D000109402112403FFFF3C0808008D0877A83D
++:1007E0003C0208008C4231B03C03080090637798CB
++:1007F00031043FFF0082102B1040001B3067003F88
++:100800003C0208008C4231A88F83004800042180FC
++:1008100000621821006418213062007F0342282101
++:100820003C02000C00A228213C020080344200015E
++:100830003066007800C230252402FF800062102458
++:10084000AF42002830640007AF4208048F820014D2
++:100850000344202124840940AF460814AF850024B6
++:10086000AF840030AC4301189383003824020003A6
++:10087000146201CF240200012402002610E201D1FB
++:1008800028E2002710400013240200322402002234
++:1008900010E201CC28E200231040000824020024CA
++:1008A0002402002010E201B82402002110E20147D6
++:1008B000024020210A001AFB2402000B10E201C1B1
++:1008C0002402002510E20010024020210A001AFB39
++:1008D0002402000B10E201AE28E2003310400006B3
++:1008E0002402003F2402003110E2009A024020213D
++:1008F0000A001AFB2402000B10E201A5024020218D
++:100900000A001AFB2402000B8F90002C3C03080005
++:100910008C6331B08F8500308E0400100000A82158
++:100920008CB3001430823FFF0043102B8CB10020A9
++:100930005040018F0240202190A3000D2402FF802F
++:1009400000431024304200FF504001890240202122
++:10095000000413823042000314400185024020212C
++:1009600094A3001C8F8200148E040028A443011459
++:100970008CA20010026218231064000302402021A0
++:100980000A00197C2402001F8F82003400621021AB
++:100990000262102B104000088F83002402402021A7
++:1009A000240200180E0016C5A382004410540174DE
++:1009B0002404FFFF8F8300248F8400348C62001096
++:1009C0000224882100441023AC6200108F8200149E
++:1009D000AC7100208C4200680051102B10400009BF
++:1009E0008F830030024020212402001D0E0016C516
++:1009F000A38200442403FFFF104301612404FFFF8E
++:100A00008F8300308E0200248C6300241043000783
++:100A1000024020212402001C0E0016C5A3820044BF
++:100A20002403FFFF104301562404FFFF8F8400249A
++:100A30008C82002424420001AC8200241233000482
++:100A40008F8200148C4200685622000E8E02000035
++:100A50008E0200003C030080004310241440000D6F
++:100A60002402001A024020210E0016C5A382004471
++:100A70002403FFFF104301422404FFFF0A0019BAB8
++:100A80008E0200143C0300800043102450400003F9
++:100A90008E020014AC8000208E0200142411FFFF8F
++:100AA0001051000E3C0308003C0208008C423190BB
++:100AB000004310242403001B14400007A3830044B8
++:100AC0000E0016C5024020211051012D2404FFFF05
++:100AD0000A0019CB8E030000A38000448E0300009F
++:100AE0003C02000100621024104000123C02008011
++:100AF0000062102414400008024020212402001A41
++:100B00000E0016C5A38200442403FFFF1043011CFE
++:100B10002404FFFF02402021020028210E0016E5D8
++:100B2000240600012403FFFF104301152404FFFFE6
++:100B3000241500018F83002402A0302102402021CF
++:100B40009462003624050001244200010A001ADFE5
++:100B5000A46200368F90002C3C0308008C6331B0F7
++:100B60008E13001032623FFF0043102B10400089AB
++:100B70008F8400302402FF809083000D00431024F6
++:100B8000304200FF104000842402000D0013138245
++:100B900030420003240300011443007F2402000DAF
++:100BA0009082000D30420008544000048F820034CF
++:100BB000024020210A001A102402002450400004A0
++:100BC0008E03000C024020210A001A102402002784
++:100BD0008C82002054620006024020218E0300080F
++:100BE0008C820024506200098E02001402402021F1
++:100BF000240200200E0016C5A38200441054007188
++:100C00002403FFFF0A001A458F8400242411FFFFEC
++:100C1000145100048F860014024020210A001A405B
++:100C2000240200258E0300188CC2007C1062000391
++:100C30002402000E0A001A40024020218E030024E4
++:100C40008C82002810620003240200210A001A404E
++:100C5000024020218E0500288C82002C10A2000367
++:100C60002402001F0A001A40024020218E03002C9B
++:100C700014600003240200230A001A4002402021CD
++:100C80008CC200680043102B104000032402002691
++:100C90000A001A40024020218C82001400651821AD
++:100CA0000043102B104000088F84002402402021B4
++:100CB000240200220E0016C5A382004410510041F8
++:100CC0002403FFFF8F8400242403FFF79082000D8C
++:100CD00000431024A082000D8F8600143C030800FE
++:100CE0008C6331AC8F82004894C400E08F8500246F
++:100CF0000043102130847FFF000420400044102175
++:100D00003043007F034320213C03000E0083202159
++:100D10002403FF8000431024AF42002CA493000062
++:100D20008CA2002824420001ACA200288CA2002C36
++:100D30008E03002C00431021ACA2002C8E02002C4C
++:100D4000ACA200308E020014ACA2003494A2003A8F
++:100D500024420001A4A2003A94C600E03C0208002C
++:100D60008C4231B024C4000130837FFF1462000F35
++:100D700000803021240280000082302430C2FFFF36
++:100D8000000213C2304200FF000210270A001A7E40
++:100D9000000233C02402000D024020210E0016C5BF
++:100DA000A38200440A001A84004018218F82001494
++:100DB00002402021240500010E0015F9A44600E0A0
++:100DC000000018210A001B16006088218F90002C5B
++:100DD0003C0308008C6331B08E05001030A23FFF49
++:100DE0000043102B104000612402FF808F840030EC
++:100DF0009083000D00431024304200FF5040005CFF
++:100E0000024020218F8200341040000B0005138225
++:100E10008F8200149763000A944200603042FFFF03
++:100E200014430005000513828F8200202404FFFD77
++:100E30000A001AF3AF82003C304200031440000E57
++:100E40000000000092020002104000058E03002402
++:100E500050600015920300030A001AAF02402021DF
++:100E60008C82002450620010920300030240202173
++:100E70000A001AB72402000F9082000D30420008C9
++:100E80005440000992030003024020212402001074
++:100E90000E0016C5A38200442403FFFF1043003850
++:100EA0002404FFFF92030003240200025462000C9A
++:100EB000920200038F820034544000099202000322
++:100EC000024020212402002C0E0016C5A3820044FB
++:100ED0002403FFFF1043002A2404FFFF92020003B3
++:100EE0000200282102402021384600102CC60001B3
++:100EF0002C4200010E0016E5004630252410FFFFAD
++:100F00001050001F2404FFFF8F8300341060001373
++:100F1000024020213C0208008C42318C0043102BFF
++:100F200014400007000000000000282124060001F2
++:100F30000E001646000000000A001AF300002021EF
++:100F40002402002D0E0016C5A38200441050000C90
++:100F50002404FFFF0A001AF3000020210E0015F9F7
++:100F6000240500010A001AF300002021024020217C
++:100F70002402000D0E0016C5A3820044004020216B
++:100F80000A001B16008088211514000E00000000C6
++:100F90000E00174C024020210A001B160040882139
++:100FA0000E0016C5A38200440A001B1600408821CB
++:100FB00014620017022018212402002314E2000505
++:100FC0002402000B0E0017C0024020210A001B164D
++:100FD0000040882102402021A38200440E0016C553
++:100FE0002411FFFF0A001B170220182130A500FF63
++:100FF0000E001529240600019783003A8F82003CD9
++:10100000A780003A00431023AF82003C0220182141
++:101010001220003E9782003A2402FFFD5462003EF7
++:101020008E4300208E4200048F830014005610234C
++:10103000AE420004906200633042007FA062006311
++:101040008E4200208F840014A780003A34420002B0
++:10105000AE420020A48000E4908200632403FFBF1E
++:1010600000431024A08200630A001B598E43002015
++:101070009082006300621024304200FF1040002381
++:101080009782003A90820088908300BD2485008872
++:101090003042003F2444FFE02C820020A383001C48
++:1010A00010400019AF85002C2402000100821804B2
++:1010B000306200191440000C3C02800034420002EF
++:1010C000006210241440000B306200201040000F1A
++:1010D0009782003A90A600010240202124050001D9
++:1010E0000A001B5330C60001024020210A001B5297
++:1010F00024050001024020210000282124060001CF
++:101100000E001646000000009782003A1440FD04CD
++:101110008F8400148E4300203062000410400012BF
++:101120008F84003C2402FFFB00621024AE420020AA
++:10113000274301808F4201B80440FFFE8F820048A0
++:10114000AC6200008F420124AC6200042402608380
++:10115000A462000824020002A062000B3C021000FE
++:10116000AF4201B88F84003C8F8300148FBF0034DE
++:101170008FB600308FB5002C8FB400288FB30024B9
++:101180008FB200208FB1001C8FB000182402000124
++:1011900027BD003803E00008AC6400C030A500FFA4
++:1011A0002403000124A900010069102B1040000C49
++:1011B00000004021240A000100A31023004A380443
++:1011C00024630001308200010069302B10400002CE
++:1011D000000420420107402554C0FFF800A310235B
++:1011E00003E00008010010213C020800244260A432
++:1011F0003C010800AC22738C3C02080024425308D6
++:101200003C010800AC2273902402000627BDFFE0D9
++:101210003C010800A02273943C021EDCAFB200180F
++:10122000AFB10014AFBF001CAFB0001034526F411B
++:1012300000008821240500080E001B7A02202021CE
++:10124000001180803C07080024E773980002160014
++:1012500002071821AC6200000000282124A200012E
++:101260003045FFFF8C6200002CA6000804410002FC
++:10127000000220400092202614C0FFF8AC64000059
++:10128000020780218E0400000E001B7A2405002036
++:10129000262300013071FFFF2E2301001460FFE5BB
++:1012A000AE0200008FBF001C8FB200188FB1001477
++:1012B0008FB0001003E0000827BD002027BDFFD835
++:1012C000AFB3001CAFB20018AFBF0020AFB1001425
++:1012D000AFB000108F5101408F48014800089402C0
++:1012E000324300FF311300FF8F4201B80440FFFE7C
++:1012F00027500180AE1100008F420144AE0200046D
++:1013000024020002A6120008A202000B240200140C
++:10131000AE1300241062002528620015104000085A
++:101320002402001524020010106200302402001272
++:10133000106200098FBF00200A001CB58FB3001C8B
++:101340001062007024020022106200378FBF00205C
++:101350000A001CB58FB3001C3C0208008C4231A06F
++:101360002403FF800222102100431024AF420024F6
++:101370003C0208008C4231A0022210213042007F42
++:10138000034218213C02000A00621821166000BCCA
++:10139000AF830014906200623042000F344200308C
++:1013A000A06200620A001CB48FBF00203C046000F1
++:1013B0008C832C083C02F0033442FFFF00621824A7
++:1013C000AC832C083C0208008C4231A08C832C0892
++:1013D000244200740002108200021480006218256A
++:1013E000AC832C080A001CB48FBF00203C0208000C
++:1013F0008C4231A02403FF800222102100431024DC
++:10140000AF4200243C0208008C4231A03C03000A99
++:10141000022210213042007F03421021004310219C
++:101420000A001CB3AF8200143C0208008C4231A0B9
++:101430002405FF800222102100451024AF42002421
++:101440003C0208008C4231A0022210213042007F71
++:10145000034218213C02000A0062182190620063D6
++:1014600000A21024304200FF10400085AF8300141A
++:1014700024620088944300123C0208008C4231A888
++:1014800030633FFF00031980022210210043102126
++:101490003043007F03432021004510243C03000C0F
++:1014A00000832021AF4200289082000D00A210246A
++:1014B000304200FF10400072AF8400249082000D83
++:1014C000304200101440006F8FBF00200E0015C87E
++:1014D000000000008F4201B80440FFFE0000000041
++:1014E000AE1100008F420144AE020004240200024B
++:1014F000A6120008A202000BAE1300240A001CB4BE
++:101500008FBF00202406FF8002261024AF42002057
++:101510003C0208008C4231A031043FFF00042180CE
++:101520000222102100461024AF4200243C03080090
++:101530008C6331A83C0208008C4231A03227007F26
++:101540000223182102221021006418213042007F5A
++:101550003064007F034228213C02000A0066182400
++:1015600000A22821034420213C02000C00822021FB
++:10157000AF4300283C020008034718210062902175
++:10158000AF850014AF8400240E0015C8010080212F
++:101590008F4201B80440FFFE8F8200248F84001424
++:1015A000274501809042000DACB10000A4B00006B8
++:1015B000000216000002160300021027000237C2C4
++:1015C00014C00016248200889442001232033FFFA8
++:1015D00030423FFF14430012240260829083006374
++:1015E0002402FF8000431024304200FF5040000CD2
++:1015F00024026082908200623042000F3442004038
++:10160000A082006224026084A4A200082402000DCB
++:10161000A0A200050A001C9E3C0227002402608252
++:10162000A4A20008A0A000053C02270000061C00A0
++:101630000062182524020002A0A2000BACA3001037
++:10164000ACA00014ACA00024ACA00028ACA0002CDE
++:101650008E42004C8F840024ACA200189083000DB1
++:101660002402FF8000431024304200FF1040000598
++:101670008FBF00209082000D3042007FA082000DBD
++:101680008FBF00208FB3001C8FB200188FB10014E1
++:101690008FB000103C02100027BD002803E00008B6
++:1016A000AF4201B80800343008003430080033A8D5
++:1016B000080033E0080034140800343808003438D7
++:1016C00008003438080033180A0001240000000024
++:1016D000000000000000000D747061362E322E33C1
++:1016E00000000000060203010000000000000000EE
++:1016F00000000000000000000000000000000000EA
++:1017000000000000000000000000000000000000D9
++:1017100000000000000000000000000000000000C9
++:1017200000000000000000000000000000000000B9
++:1017300000000000000000000000000000000000A9
++:101740000000000000000000000000000000000099
++:101750000000000000000000000000001000000376
++:10176000000000000000000D0000000D3C02080019
++:1017700024421C003C03080024632094AC40000079
++:101780000043202B1480FFFD244200043C1D080070
++:1017900037BD2FFC03A0F0213C1008002610049058
++:1017A0003C1C0800279C1C000E00015C000000008F
++:1017B0000000000D3084FFFF308200078F85001885
++:1017C00010400002248300073064FFF800853021B8
++:1017D00030C41FFF03441821247B4000AF85001C48
++:1017E000AF84001803E00008AF4400843084FFFF9A
++:1017F000308200078F8500208F860028104000026D
++:10180000248300073064FFF8008520210086182B10
++:1018100014600002AF8500240086202303442821A1
++:1018200034068000AF840020AF44008000A6202151
++:1018300003E00008AF84003827BDFFD8AFB3001C19
++:10184000AFB20018AFB00010AFBF0024AFB400209B
++:10185000AFB100143C0860088D1450002418FF7FBD
++:101860003C1A8000029898243672380CAD12500051
++:101870008F5100083C07601C3C08600036300001B6
++:10188000AF500008AF800018AF400080AF40008428
++:101890008CE600088D0F08083C0760168CEC0000F1
++:1018A00031EEFFF039CA00103C0DFFFF340B800011
++:1018B0003C030080034B48212D440001018D282466
++:1018C0003C0253533C010800AC230420AF8900388C
++:1018D000AF860028AF840010275B400014A20003ED
++:1018E00034E37C008CF90004032818218C7F007CF1
++:1018F0008C6500783C0280003C0B08008D6B048CEA
++:101900003C0A08008D4A048834520070AF85003CC0
++:10191000AF9F00403C13080026731C440240A021E6
++:101920008E4800008F46000038C30001306400017B
++:1019300010800017AF880034028048218D2F0000EE
++:101940003C0508008CA5045C3C1808008F1804585E
++:1019500001E8102300A280210000C8210202402BD0
++:1019600003198821022838213C010800AC30045CAE
++:101970003C010800AC2704588F4E000039CD00010F
++:1019800031AC00011580FFED01E04021AF8F003444
++:101990008E5100003C0708008CE7045C3C0D0800F9
++:1019A0008DAD04580228802300F0602100007021D2
++:1019B0000190302B01AE1821006620213C01080067
++:1019C000AC2C045C3C010800AC2404588F46010890
++:1019D0008F47010030C92000AF860000AF87000CA0
++:1019E0001120000A00C040213C1808008F18042C68
++:1019F000270800013C010800AC28042C3C184000DA
++:101A0000AF5801380A000196000000009749010410
++:101A100000002821014550213122FFFF0162582199
++:101A20000162F82B015F502130D902003C0108000F
++:101A3000AC2B048C3C010800AC2A0488172000154C
++:101A400024040F0010E400130000000024080D001F
++:101A500010E8023B30CD000611A0FFE93C18400021
++:101A6000936E00002409001031C400F01089027147
++:101A700024020070108202E58F880014250F0001F7
++:101A8000AF8F00143C184000AF5801380A0001968F
++:101A900000000000974C01041180FFD93C18400061
++:101AA00030C34000146000A1000000008F460178A0
++:101AB00004C0FFFE8F87003824100800240F0008A0
++:101AC0008CE30008AF500178A74F0140A7400142C6
++:101AD000974E01048F86000031C9FFFF30CD000111
++:101AE00011A002E1012040212531FFFE241800024F
++:101AF000A75801463228FFFFA75101483C190800AA
++:101B00008F39043C172002D08F8C000C30DF00206E
++:101B100017E00002240400092404000130C20C0074
++:101B2000240504005045000134840004A744014A00
++:101B30003C1108008E3104203C1800483C10000184
++:101B40000238182530CF00020070282511E000046B
++:101B5000000018213C19010000B9282524030001C8
++:101B600030DF000453E00005AF8300083C0600109E
++:101B700000A6282524030001AF830008AF4510000C
++:101B80000000000000000000000000000000000055
++:101B90008F83000810600023000000008F451000B4
++:101BA00004A1FFFE000000001060001E0000000005
++:101BB0008F4410003C0C0020008C102410400019B1
++:101BC0008F8E000031CD000211A000160000000031
++:101BD000974F101415E000130000000097591008EB
++:101BE0003338FFFF271100060011188200033080F0
++:101BF00000C7282132300001322300031200032CD9
++:101C00008CA200000000000D00C7F821AFE2000028
++:101C10003C0508008CA5043024A600013C01080006
++:101C2000AC2604308F6D00003402FFFFAF8D00043E
++:101C30008CEC0000118202A6000020218CED000037
++:101C400031AC01001180028A000000003C02080053
++:101C50008C4204743C0308008C63044C3C1F080055
++:101C60008FFF04703C1808008F1804480048382182
++:101C70000068802100E8282B03E430210208402B73
++:101C80000304882100C57021022878213C01080046
++:101C9000AC30044C3C010800AC2F04483C01080067
++:101CA000AC2704743C010800AC2E04708F8400182B
++:101CB0000120302131290007249F000833F91FFF3C
++:101CC00003594021AF84001CAF990018251B400028
++:101CD000AF590084112000038F83002024C2000725
++:101CE0003046FFF88F84002800C3282100A4302B41
++:101CF00014C00002AF83002400A428230345602100
++:101D0000340D8000018D10213C0F1000AF850020A4
++:101D1000AF820038AF450080AF4F01788F88001444
++:101D2000250F00010A0001EFAF8F00148F62000839
++:101D30008F670000240500300007760231C300F0F1
++:101D4000106500A7240F0040546FFF4C8F880014CB
++:101D50008F4B01780560FFFE0000000030CA0200D2
++:101D600015400003000612820000000D00061282DA
++:101D7000304D0003000D4900012D18210003808023
++:101D8000020D402100086080019380218E1F000019
++:101D900017E00002000000000000000D8F6E00043C
++:101DA00005C202BD92070006920E000592020004D1
++:101DB0003C090001000E18800070F8218FED00181A
++:101DC000277100082448000501A96021000830821D
++:101DD000AFEC0018022020210E00059E26050014FD
++:101DE000920A00068F7900043C0B7FFF000A2080D6
++:101DF000009178218DF800043566FFFF0326282422
++:101E000003053821ADE70004920E0005920D000491
++:101E1000960C0008000E10800051C8218F2300008E
++:101E2000974901043C07FFFF006758243128FFFF52
++:101E3000010DF82103EC50233144FFFF01643025EC
++:101E4000AF260000920300072418000110780275E5
++:101E5000240F0003106F0285000000008E050010A3
++:101E60002419000AA7590140A7450142921800040D
++:101E70008F860000240F0001A7580144A7400146A7
++:101E80009747010430D100023C050041A7470148B3
++:101E900000001821A74F014A1220000330CB000494
++:101EA0003C0501412403000151600005AF83000897
++:101EB0003C06001000A6282524030001AF8300087B
++:101EC000AF4510000000000000000000000000000E
++:101ED000000000008F8A000811400004000000008C
++:101EE0008F4410000481FFFE000000008F6B000093
++:101EF000920800043C1108008E310444AF8B0004AA
++:101F000097590104311800FF3C0E08008DCE0440A3
++:101F10003325FFFF0305382102276021000010212F
++:101F2000250F000A31E8FFFF0187482B01C2682115
++:101F300001A9F821311000073C010800AC2C044431
++:101F40003C010800AC3F0440120000038F8C0018D5
++:101F50002506000730C8FFF8010C682131BF1FFFBC
++:101F6000AF8C001CAF9F0018AF5F00849744010442
++:101F7000035F80213084FFFF308A00071140000397
++:101F8000261B4000248900073124FFF88F8200209F
++:101F90008F850028008220210085702B15C000024B
++:101FA000AF820024008520233C0B08008D6B048C3D
++:101FB0003C0A08008D4A04880344882134038000C9
++:101FC000022310213C0F1000AF840020AF820038A4
++:101FD000AF440080AF4F01780A0002968F8800144A
++:101FE0008F5001780600FFFE30D10200162000035A
++:101FF000000612820000000D00061282305F00030E
++:10200000001F1900007F302100062080009FC8219A
++:1020100000194880013380218E180000130000024F
++:10202000000000000000000D8F6C000C058001FB1B
++:102030008F870038240E0001AE0E00008CE30008EC
++:10204000A20000078F65000400055402314D00FF17
++:1020500025A80005000830822CCB00411560000245
++:10206000A20A00040000000D8F7800043C03FFFF6B
++:1020700000E02821330BFFFF256C000B000C1082C1
++:1020800000022080008748218D3F000026040014B4
++:10209000A618000803E3C8240E00059EAD39000011
++:1020A0008F4F01083C11100001F1382410E001AB02
++:1020B00000000000974D01049208000725AAFFECDC
++:1020C000350600023144FFFFA2060007960600080D
++:1020D0002CC7001354E0000592030007921100077B
++:1020E000362F0001A20F00079203000724180001F9
++:1020F000107801C224090003106901D58F880038C7
++:1021000030CBFFFF257100020011788331E400FF1E
++:1021100000042880A20F000500A848218D2D000092
++:10212000974A01043C0EFFFF01AEF8243143FFFF44
++:10213000006B1023244CFFFE03ECC825AD390000D2
++:10214000920600053C03FFF63462FFFF30D800FF23
++:102150000018388000F08821922F00143C04FF7F83
++:102160003487FFFF31EE000F01C65821316500FFB3
++:1021700000055080015068218DAC00200148F821F5
++:10218000A20B00060182C824AE0C000CAFF9000CB3
++:10219000920900068E11000C032778240009C080E4
++:1021A0000310702195C60026030828210227202449
++:1021B000AE04000CADCF0020ADC60024ACA60010CC
++:1021C0008F8800003C0B08008D6B048C3C0A0800D3
++:1021D0008D4A0488241F001024190002A75F0140C3
++:1021E000A7400142A7400144A7590146974901046D
++:1021F00024070001310600022538FFFEA7580148D8
++:102200003C050009A747014A10C00003000018213F
++:102210003C05010924030001310C00045180000534
++:10222000AF8300083C08001000A828252403000103
++:10223000AF830008AF451000000000000000000060
++:1022400000000000000000009205000424AE00021F
++:1022500031CD0007000D182330620007AE020010D8
++:102260008F90000812000004000000008F4F100043
++:1022700005E1FFFE000000008F7100008F8E001846
++:102280003C0308008C630444AF91000497450104AB
++:1022900025CF001031E61FFF30A2FFFFAF8E001CDC
++:1022A000AF860018AF4600842449FFFE3C0C0800AE
++:1022B0008D8C0440974D010401208021000947C303
++:1022C0000070C02131A9FFFF0310F82B0188C8213D
++:1022D000033F202103463821313100073C0108002B
++:1022E000AC3804443C010800AC2404401220000334
++:1022F00024FB40002527000730E9FFF88F860020E7
++:102300008F8400280126382100E4C02B170000022A
++:10231000AF86002400E438230347202134198000CD
++:10232000009910213C0F1000AF870020AF820038C9
++:10233000AF470080AF4F01780A0002968F880014E3
++:102340009747010410E0FDAE3C1840008F5801781B
++:102350000700FFFE30C5400010A000033C1F00082E
++:102360000000000D3C1F0008AF5F01402410080072
++:102370008F860000AF5001789744010430D90001E6
++:10238000132000ED3086FFFF24CCFFFE240D000259
++:10239000A74D0146A74C01488F9100182408000D55
++:1023A000A748014A8F630000262F000831E21FFF73
++:1023B0000342702130C90007AF830004AF91001CB5
++:1023C000AF82001800C03821AF4200841120000302
++:1023D00025DB400024D800073307FFF88F85002055
++:1023E0008F84002800E5302100C4382B14E000025F
++:1023F000AF85002400C430238F8400140346F821E5
++:10240000340C8000AF86002003EC8021AF460080B2
++:10241000249900013C0610003C184000AF460178AA
++:10242000AF900038AF990014AF5801380A000196F8
++:10243000000000008F630000975101043067FFFF28
++:102440003228FFFF8F4F017805E0FFFE30EC0007D8
++:10245000000CF82333F0000724F9FFFE2404000ADF
++:10246000A7440140A7500142A7590144A740014693
++:10247000A74801488F45010830B800201700000226
++:10248000240300092403000130CD0002A743014AC0
++:102490003C04004111A00003000018213C0401414C
++:1024A0002403000130C9000451200005AF83000857
++:1024B0003C0600100086202524030001AF8300089D
++:1024C000AF44100000000000000000000000000009
++:1024D000000000008F8E000811C000040000000002
++:1024E0008F4210000441FFFE000000008F7F0000BB
++:1024F000276400088F91003CAF9F0004948500087A
++:102500009490000A9499000C30AFFFFF0010C400B3
++:102510003323FFFF11F100A6030320253C0E080022
++:102520008DCE04443C0C08008D8C044000E88821CA
++:102530002626FFFE01C628210000682100A6F82BF0
++:10254000018D2021009F80213C010800AC2504441E
++:102550003C010800AC30044024E200083042FFFF98
++:102560003047000710E000038F830018244F000756
++:1025700031E2FFF83106FFFF30C800070043802139
++:1025800032191FFF0359C021AF83001CAF990018F7
++:10259000271B4000AF590084110000038F8C0020DE
++:1025A00024C5000730A6FFF88F84002800CC28211E
++:1025B00000A4F82B17E00002AF8C002400A428230D
++:1025C000AF850020AF4500803C0408008C840434B3
++:1025D00003454821340E8000012E6821108000053B
++:1025E000AF8D0038939100172406000E12260011BB
++:1025F0002407043F3C021000AF4201788F8800148A
++:10260000250F00010A0001EFAF8F00140E0005C472
++:1026100000E020218F8800143C0B08008D6B048C97
++:102620003C0A08008D4A0488250F00010A0001EFCA
++:10263000AF8F00143C021000A7470148AF42017859
++:102640000A0004CE8F88001424040F001184003D7A
++:1026500030CE002015C0000224030009240300012D
++:102660000A00021AA743014A0A00020DA7400146C8
++:1026700094EF000894F1000A94F0000C8F8C003C59
++:10268000001174003207FFFF31EDFFFF11AC00377E
++:1026900001C720253C1808008F1804443C0F08008F
++:1026A0008DEF0440000080210308682101A8382B29
++:1026B00001F0702101C760213C010800AC2D0444E9
++:1026C0003C010800AC2C04400A00027A8F840018F8
++:1026D0003C0208008C42047C3C0308008C630454D8
++:1026E0003C1F08008FFF04783C1808008F18045026
++:1026F000004838210068802100E8282B03E43021BD
++:102700000208402B0304882100C57021022878218B
++:102710003C010800AC3004543C010800AC2F0450CC
++:102720003C010800AC27047C3C010800AC2E047876
++:102730000A00027A8F840018A74001460A00043577
++:102740008F91001830CD002015A0FFC52403000D87
++:10275000240300050A00021AA743014A974E010408
++:1027600025C5FFF00A00038130A4FFFF8F980040C9
++:102770001498FFC8000010213C0508008CA5046CCB
++:102780003C1F08008FFF046800A8C8210328302BD5
++:1027900003E22021008640213C010800AC39046C92
++:1027A0003C010800AC2804680A00027A8F840018F3
++:1027B0008F8C0040148CFF5900E8C8213C18080099
++:1027C0008F18046C3C1108008E3104682723FFFE2B
++:1027D00003034821000010210123302B0222702125
++:1027E00001C668213C010800AC29046C3C010800CA
++:1027F000AC2D04680A0004A524E200088F88003884
++:102800003C03FFFF8D02000C0043F82403E4C825BD
++:10281000AD19000C0A00038F30CBFFFF0A0003C381
++:10282000AE000000974A0104920400048E26000CBA
++:10283000014458212579FFF200C7C0243325FFFF4A
++:1028400003053825AE27000C0A0002E68E050010AD
++:102850003C0DFFFF8D0A0010014D582401646025D6
++:10286000AD0C00100A00038F30CBFFFF974301042B
++:10287000920E00048E290010006E1021244DFFEEF0
++:102880000127602431A8FFFF0188F825AE3F001022
++:102890000A0002E68E0500108E0F000CAE0000004C
++:1028A00000078880023028210A0002B8ACAF00205F
++:1028B0001460000D3058FFFF3C04FFFF0044682403
++:1028C00001A47026000E602B000D102B004CF82484
++:1028D00013E00002000000000000000D8CAF0000BB
++:1028E0000A00025001E410253B03FFFF0003882B80
++:1028F0000018802B0211202410800002000000002C
++:102900000000000D8CB900000A0002503722FFFFC2
++:102910003084FFFF30A5FFFF108000070000182162
++:10292000308200011040000200042042006518219E
++:102930001480FFFB0005284003E000080060102120
++:1029400010C00007000000008CA2000024C6FFFF9A
++:1029500024A50004AC82000014C0FFFB2484000402
++:1029600003E000080000000010A0000824A3FFFFFF
++:10297000AC86000000000000000000002402FFFF01
++:102980002463FFFF1462FFFA2484000403E00008BC
++:1029900000000000308EFFFF30D8FFFF00057C00F4
++:1029A00001F8602539CDFFFF01AC5021014C582BB7
++:1029B000014B4821000944023127FFFF00E8302184
++:1029C0000006240230C5FFFF00A418213862FFFF73
++:1029D00003E000083042FFFF3C0C08008D8C0484AB
++:1029E000240BFF8027BDFFD001845021014B4824D8
++:1029F000AF4900203C0808008D080484AFB20020D5
++:102A0000AFB00018AFBF0028AFB30024AFB1001CB7
++:102A1000936600040104382130E4007F009A1021FD
++:102A20003C0300080043902130C500200360802152
++:102A30003C080111277B000814A000022646007004
++:102A40002646006C9213000497510104920F000473
++:102A50003267000F322EFFFF31ED004001C72823FF
++:102A600011A0000500004821925900BC3338000431
++:102A70001700009000000000924300BC307F00046B
++:102A800013E0000F0000000010A0000D0000000087
++:102A9000960E0002240AFF8000A7602125CDFFFECC
++:102AA000A74D1016920B0004014B2024308200FF2A
++:102AB00010400085010C40253C0F0400010F40250B
++:102AC0008F5301780660FFFE2404000AA7440140EA
++:102AD000960D00022404000931AC0007000C5823B5
++:102AE000316A0007A74A0142960200022443FFFE12
++:102AF000A7430144A7400146975F0104A75F01482F
++:102B00008F590108333800205300000124040001CC
++:102B1000920F000431EE001015C000023483001043
++:102B200000801821A743014A0000000000000000B7
++:102B30000000000000000000AF481000000000008E
++:102B40000000000000000000000000008F51100095
++:102B50000621FFFE3113FFFF12600003000000009A
++:102B60008F481018ACC8000096030006307FFFFFA6
++:102B700027F900020019988200138880023B302157
++:102B80008CD800001520005700183402920300046E
++:102B90002405FF8000A3F82433F100FF1220002C4D
++:102BA00000000000924700BC30F2000212400028F2
++:102BB00000000000974B100C2562FFFEA742101684
++:102BC000000000003C0A040035490030AF49100005
++:102BD00000000000000000000000000000000000F5
++:102BE0008F4C10000581FFFE000000009749100C7B
++:102BF0008F51101C00C020213127FFFF24F200302C
++:102C0000001218820003288000BBF8213226FFFF43
++:102C1000AFF100000E0005B300112C020013C880B4
++:102C2000033B98218E78000000027400AFB80010BA
++:102C30008FA80010310FFFFFAFAF00108FA400105E
++:102C400001C46825AFAD00108FA60010AE6600006D
++:102C500097730008976D000A9766000C8F8A003CF6
++:102C6000000D5C0030CCFFFF3262FFFF104A0036DF
++:102C7000016C2025960600023C10100024D30008A9
++:102C80000E00013B3264FFFF974C01040E00014926
++:102C90003184FFFFAF5001788FBF00288FB300242D
++:102CA0008FB200208FB1001C8FB0001803E0000825
++:102CB00027BD003010A0FF700000000024A5FFFC1D
++:102CC0000A0005EC240900048CD10000AF51101853
++:102CD0008F5301780660FF7A2404000A0A00060177
++:102CE0000000000000A7C8218F8800388F4E101CFC
++:102CF0000019C0820018788001E82021AC8E000005
++:102D0000000E2C0200C020210E0005B331C6FFFFCB
++:102D1000023B28218CAD000000025400004030210D
++:102D2000AFAD00108FAC0010318BFFFFAFAB0010C8
++:102D30008FA2001001424825AFA900108FA70010F4
++:102D40000A000631ACA700008F8F0040148FFFC926
++:102D50000000000097420104960B00023C050800A9
++:102D60008CA5046C3049FFFF316AFFFF3C1108005D
++:102D70008E310468012A382124F2FFFE00B240217E
++:102D80000012FFC30112C82B023FC02103192021EA
++:102D90003C010800AC28046C3C010800AC24046829
++:102DA0000A00066B0000000000A4102B1040000970
++:102DB000240300010005284000A4102B04A00003F8
++:102DC000000318405440FFFC000528401060000735
++:102DD000000000000085302B14C0000200031842E0
++:102DE000008520231460FFFB0005284203E0000853
++:102DF000008010218F85002C27BDFFE800053027BB
++:102E00002CC300012CA400020083102510400003F5
++:102E1000AFBF00102405007FAF85002C00052827D8
++:102E200030A5FFFF0E000592240426F58F830030A5
++:102E3000240402BD004030210083382B10E000093B
++:102E400024050001000420400083102B04800003AF
++:102E5000000528405440FFFC0004204010A000085A
++:102E600000C350210064402B1500000200052842D9
++:102E70000064182314A0FFFB0004204200C350216B
++:102E80008FBF0010000A4C02312200FF27BD00183E
++:102E9000AF8A002C03E00008AF8900300A00002A46
++:102EA00000000000000000000000000D7478703683
++:102EB0002E322E3300000000060203000000000046
++:102EC000000001360000EA60000000000000000081
++:102ED00000000000000000000000000000000000F2
++:102EE00000000000000000000000000000000000E2
++:102EF00000000000000000000000000000000016BC
++:102F000000000000000000000000000000000000C1
++:102F100000000000000000000000000000000000B1
++:102F200000000000000000000000000000000000A1
++:102F3000000000000000138800000000000005DC15
++:102F4000000000000000000010000003000000006E
++:102F50000000000D0000000D3C02080024423C204F
++:102F60003C03080024633DD4AC4000000043202B08
++:102F70001480FFFD244200043C1D080037BD7FFC87
++:102F800003A0F0213C100800261000A83C1C0800FB
++:102F9000279C3C200E0002BA000000000000000D3B
++:102FA0008F8300383C088000350700708CE50000F6
++:102FB000008330253C02900000C22025AF85003000
++:102FC000AF4400208F4900200520FFFE3C03800015
++:102FD000346200708C4500008F8600303C19080078
++:102FE0008F39007C3C0E08008DCE007800A620238F
++:102FF00003245821000078210164682B01CF60214F
++:10300000018D50213C010800AC2B007C3C010800E4
++:10301000AC2A007803E00008000000000A0000412C
++:10302000240400018F8400383C05800034A2000194
++:103030000082182503E00008AF43002003E00008E9
++:10304000000010213084FFFF30A5FFFF1080000733
++:1030500000001821308200011040000200042042CC
++:10306000006518211480FFFB0005284003E00008DC
++:103070000060102110C00007000000008CA20000BA
++:1030800024C6FFFF24A50004AC82000014C0FFFB8F
++:103090002484000403E000080000000010A00008E1
++:1030A00024A3FFFFAC860000000000000000000029
++:1030B0002402FFFF2463FFFF1462FFFA248400044C
++:1030C00003E0000800000000308AFFFF93A800130F
++:1030D000A74A014497490E1630C600FF3C02100073
++:1030E000A7490146AF450148A3460152A748015AE6
++:1030F000AF4701608FA400188FA30014A7440158A4
++:10310000AF43015403E00008AF42017803E0000838
++:10311000000000003C038000346200708C49000015
++:103120008F8800002484000727BDFFF83084FFF853
++:10313000AF890030974D008A31ACFFFFAFAC000083
++:103140008FAB0000016850232547FFFF30E61FFFCB
++:1031500000C4282B14A0FFF73C0C8000358B0070B6
++:103160008D6A00003C0708008CE700843C060800DC
++:103170008CC6008000081082014918230002788064
++:1031800000E370210000202101C3C82B00C4C0212E
++:1031900001FA4021031948212502400027BD0008FB
++:1031A0003C010800AC2E00843C010800AC290080E2
++:1031B00003E00008000000008F8200002486000762
++:1031C00030C5FFF800A2182130641FFF03E000089B
++:1031D000AF8400008F8700388F8A004027BDFFB87A
++:1031E0008F860044AFB60040AFBF0044AFB5003C8F
++:1031F000AFB40038AFB30034AFB20030AFB1002C81
++:10320000AFB000288F4501048D4900ACAF47008066
++:103210008CC8002000A938230000B021AF480E1050
++:103220008F440E1000004821AF440E148CC20024BD
++:10323000AF420E188F430E18AF430E1C10E001254D
++:103240002D230001936B0008116000D400000000E2
++:10325000976E001031CDFFFF00ED602B158000CF81
++:103260000000000097700010320FFFFFAF4F0E00FC
++:103270008F520000325100081220FFFD00000000B4
++:1032800097540E088F460E043285FFFF30B30001BD
++:1032900012600132000000000000000D30B8A040B4
++:1032A00024150040131500C030A9A0001120012DE5
++:1032B00000000000937F000813E0000800000000F9
++:1032C00097630010306BFFFF00CB402B1100000311
++:1032D00030AC00401180012300000000A785003CB5
++:1032E000AF8600349366000800E02821AFA70020D5
++:1032F00014C0012427B30020AF60000C9782003C6B
++:103300003047400014E00002240300162403000E9E
++:1033100024194007A363000AAF790014938A003E82
++:103320008F740014315800070018AA4002959025A8
++:10333000AF7200149784003C8F700014309100101D
++:1033400002117825AF6F0014978E003C31CD000834
++:1033500011A00147000028218F6700143C021000D3
++:103360003C0C810000E22825AF65001497460E0A48
++:103370002408000E3405FFFC30C3FFFF006C582505
++:10338000AF6B0004A3680002937F000A27E90004E2
++:10339000A369000A9786003C9363000A30CC1F00A3
++:1033A000000C598301634021251F0028A37F0009D9
++:1033B00097490E0CA769001093790009272A00028B
++:1033C000315800070018A82332B10007A371000B81
++:1033D00093740009976400108F910034978F003C1C
++:1033E000329200FF024480210205702131ED00403D
++:1033F00011A0000531C4FFFF0091282B3C12800072
++:1034000010A000140000A0210224382B14E0011B9E
++:103410008FA500208F4D0E14AF4D0E108F420E1C45
++:10342000AF420E18AF440E008F4F000031EE00087F
++:1034300011C0FFFD0000000097540E080080882195
++:1034400000009021A794003C8F500E04241400012A
++:10345000AF900034976400103095FFFF8E68000035
++:103460000111F82317E00009AE7F00008F650014FA
++:103470008F8B004434A60040AF6600148F4C0E10B2
++:10348000AD6C00208F430E18AD63002493670008D5
++:1034900014E000D2000000000E00009E2404001082
++:1034A0008F8900483C08320000402821312600FF67
++:1034B0000006FC0003E8502525390001AF990048BB
++:1034C000AC4A0000937800099370000A330400FFAF
++:1034D00000047400320F00FF01CF6825AC4D0004DA
++:1034E0008F820048064000EAACA20008ACA0000CA5
++:1034F0009783003C306B0008156000022628000608
++:1035000026280002974E0E148F450E1C8F6700046C
++:10351000936D000231C4FFFF31A200FFAFA2001083
++:103520008F6C0014AFA800180E00008BAFAC001415
++:10353000240400100E0000C7000000008E7200007E
++:1035400016400005000000008F6400142405FFBF32
++:1035500000859824AF7300148F79000C033538214F
++:10356000AF67000C9375000816A00008000000006B
++:1035700012800006000000008F7F00143C0BEFFF5C
++:103580003568FFFE03E84824AF690014A3740008FF
++:103590008FA500200A00024602202021AF470E001E
++:1035A0000A0000F5000000008F5901780720FFFE97
++:1035B000241F08008F840000AF5F0178974B008ABA
++:1035C000316AFFFF014448232528FFFF31021FFF16
++:1035D0002C4300081460FFF9000000008F8E0048A3
++:1035E0008F8D003800C048210344202125C60001EA
++:1035F000240C0F00AF86004800E9382324864000E1
++:1036000031CA00FF11AC0005240800019391003E6F
++:103610003230000700107A4035E80001000AAC00A3
++:103620003C18010002B8A025AC9440008F930048DC
++:1036300030B2003630A40008ACD3000410800097EC
++:1036400001123025974E0E0A8F8D00003C0281003A
++:1036500031CCFFFF25AB0008018240253C03100060
++:1036600031651FFF25390006241F000EAF48016099
++:1036700000C33025A75F015AAF850000A759015844
++:1036800014E0000A8F93003824120F0052720002D7
++:103690002416000134C600408F580E108F94004449
++:1036A000AE9800208F550E18AE9500248F450E144D
++:1036B000AF4501448F590E1CAF590148A34A01522E
++:1036C0003C0A1000AF460154AF4A017814E0FEDD19
++:1036D0002D2300010076A025128000178FBF004423
++:1036E0008F84003824160F0010960084000000001C
++:1036F0008F45017804A0FFFE24150F001095006E81
++:10370000000000008F470E14240202403C1F1000EE
++:10371000AF4701448F440E1CAF440148A3400152FF
++:10372000A740015AAF400160A7400158AF42015481
++:10373000AF5F01788FBF00448FB600408FB5003C6B
++:103740008FB400388FB300348FB200308FB1002CAB
++:103750008FB0002803E0000827BD004814C0FED049
++:1037600030B8A0408F420E148F84004400004821DE
++:10377000AC8200208F510E1CAC9100240A00020E76
++:103780002D2300018F910034978A003C3C12800069
++:103790000220A821315800401700FF300000A0216E
++:1037A000976900108F9200343139FFFF13320035D2
++:1037B00000002021008048211480FEA000A03821B4
++:1037C0008F420E148F840044AC8200208F510E1C57
++:1037D000AC9100240A00020E2D230001936A000917
++:1037E0009378000B315000FF330F00FF020F702160
++:1037F00025C2000A3050FFFF0E00009E020020216B
++:103800008F8600483C1F410024CD0001AF8D004849
++:10381000936C000930C600FF00064400318300FFAE
++:10382000246B0002010B4825013FC825AC5900005C
++:103830008F67000C97440E1400F22825AC45000455
++:103840008F450E1C8F670004936A00023084FFFFCF
++:10385000315800FFAFB800108F6F0014AFB10018DF
++:103860000E00008BAFAF00140A0001A60200202159
++:10387000AF6000040A00013EA36000020A00024695
++:1038800000002021000090210A0001702414000192
++:103890003C1280000A000195ACB2000C8F91000030
++:1038A00025240002A744015826300008320F1FFFCC
++:1038B0000A0001F9AF8F0000AF40014C1120002C2D
++:1038C000000000008F590E10AF5901448F430E18AD
++:1038D000240200403C1F1000AF430148A3400152A6
++:1038E000A740015AAF400160A7400158AF420154C0
++:1038F000AF5F01780A0002278FBF00441120000645
++:103900000000000097460E0830CC004015800002F1
++:10391000000000000000000D8F4D017805A0FFFEA3
++:103920000000000097530E103C120500240E2000EA
++:10393000326AFFFF0152C025AF58014C8F4F0E1461
++:103940003C021000AF4F01448F500E1CAF50014895
++:10395000A34001528F840038A740015AAF40016054
++:10396000A7400158AF4E01540A000215AF4201783A
++:103970008F490E14AF4901448F430E1C0A00028E7A
++:10398000240200403C0E20FF27BDFFE03C1A8000CF
++:103990003C0F800835CDFFFDAFBF001CAFB2001853
++:1039A000AFB10014AFB00010AF8F0040AF4D0E00AC
++:1039B0000000000000000000000000000000000007
++:1039C000000000003C0C00FF358BFFFDAF4B0E00EC
++:1039D0003C0660048CC95000240AFF7F3C11600043
++:1039E000012A40243507380CACC750008E24043817
++:1039F00024050009AF4500083083FFFF38622F71AE
++:103A00002450C0B3AF8000480E000068AF800000B3
++:103A100052000001AE20442C0E0004353C11800001
++:103A20000E000ED9363000708F8A00403C1208001C
++:103A300026523C88020088218E0800008F5F00001B
++:103A40003BF900013338000113000017AF88003044
++:103A5000022048218D2700003C0F08008DEF006CEC
++:103A60003C0C08008D8C006800E8C02301F8282178
++:103A70000000682100B8302B018D582101664021DB
++:103A80003C010800AC25006C3C010800AC28006833
++:103A90008F44000038830001306200011440FFEDC4
++:103AA00000E04021AF8700308E0C00003C0508008C
++:103AB0008CA5006C3C0408008C84006801883023CD
++:103AC00000A638210000102100E6402B00821821BA
++:103AD0000068F8213C010800AC27006C3C0108009C
++:103AE000AC3F00688F49010025590088AF99004418
++:103AF000AF890038AF4900208E070000AF87003043
++:103B00008F4D017805A0FFFE000000008E0600002A
++:103B10003C0B08008D6B00743C0408008C84007022
++:103B200000C728230165F8210000102103E5402B80
++:103B30000082382100E8C821240908003C0108005F
++:103B4000AC3F00743C010800AC390070AF4901780B
++:103B500093580108A398003E938F003E31EE000178
++:103B600015C000158F830038240E0D00106E00194B
++:103B7000240F0F00106F001D00000000915900007D
++:103B800024180050332900FF113800043C1F400066
++:103B9000AF5F01380A0002E7000000000E00090EC6
++:103BA000000000008F8A00403C1F4000AF5F0138DA
++:103BB0000A0002E700000000938D003E31AC0006D1
++:103BC000000C51000E0000CE0152D8210A00034320
++:103BD0008F8A00403C1B0800277B3D080E0000CE6A
++:103BE000000000000A0003438F8A00403C1B0800CD
++:103BF000277B3D280E0000CE000000000A00034392
++:103C00008F8A004090AA00018FAB00108CAC00108E
++:103C10003C0300FF8D680004AD6C00208CAD0014E7
++:103C200000E060213462FFFFAD6D00248CA7001816
++:103C30003C09FF000109C024AD6700288CAE001CC0
++:103C40000182C82403197825AD6F0004AD6E002CE5
++:103C50008CAD0008314A00FFAD6D001C94A9000234
++:103C60003128FFFFAD68001090A70000A56000029A
++:103C7000A1600004A167000090A30002306200FF71
++:103C80000002198210600005240500011065000E75
++:103C90000000000003E00008A16A00018CD80028A1
++:103CA000354A0080AD7800188CCF0014AD6F001439
++:103CB0008CCE0030AD6E00088CC4002CA16A0001CF
++:103CC00003E00008AD64000C8CCD001CAD6D001845
++:103CD0008CC90014AD6900148CC80024AD680008BC
++:103CE0008CC70020AD67000C8CC200148C8300646C
++:103CF0000043C82B13200007000000008CC20014F2
++:103D0000144CFFE400000000354A008003E0000886
++:103D1000A16A00018C8200640A000399000000007F
++:103D200090AA000027BDFFF88FA9001CA3AA0000DD
++:103D30008FAE00003C0FFF808FA8001835E2FFFF18
++:103D40008CCD002C01C26024AFAC0000A120000487
++:103D500000E06021A7A000028FB800008D270004BA
++:103D60000188182100A0582100C05021006D28268C
++:103D70003C06FF7F3C0F00FF2CAD000135EEFFFF3E
++:103D800034D9FFFF3C02FF0003193024000D1DC091
++:103D9000010EC82400E2C02400C370250319782551
++:103DA000AD2E0000AD2F00048D450024AFAE000005
++:103DB000AD2500088D4D00202405FFFFAD2D000C22
++:103DC000956800023107FFFFAD27001091660018CB
++:103DD00030C200FF000219C2506000018D4500345E
++:103DE000AD2500148D67000827BD0008AD27001C15
++:103DF0008C8B00CCAD2C0028AD20002CAD2B0024EA
++:103E0000AD20001803E00008AD20002027BDFFE032
++:103E1000AFB20018AFB10014AFB00010AFBF001CBC
++:103E20009098000000C088213C0D00FF330F007FF8
++:103E3000A0CF0000908E000135ACFFFF3C0AFF00D0
++:103E4000A0CE000194A6001EA22000048CAB00149A
++:103E50008E29000400A08021016C2824012A40241E
++:103E60000080902101052025A6260002AE24000432
++:103E700026050020262400080E00007624060002F5
++:103E800092470000260500282624001400071E0083
++:103E90000003160324060004044000032403FFFF6C
++:103EA000965900023323FFFF0E000076AE23001068
++:103EB000262400248FBF001C8FB200188FB100147D
++:103EC0008FB0001024050003000030210A0000809C
++:103ED00027BD002027BDFFD8AFB1001CAFB0001830
++:103EE000AFBF002090A80000240200018FB0003C6A
++:103EF0003103003F00808821106200148FAA00382F
++:103F0000240B0005506B0016AFAA001000A0202162
++:103F100000C028210E0003DC02003021922400BCE6
++:103F2000308300021060000326060030ACC00000A1
++:103F300024C600048FBF00208FB1001C8FB0001872
++:103F400000C0102103E0000827BD002801403821EF
++:103F50000E00035AAFB000100A0004200000000059
++:103F60000E0003A1AFB000140A00042000000000FE
++:103F70003C02000A034218213C04080024843D6CE2
++:103F80002405001A000030210A000080AF8300548D
++:103F90003C038000346200708C48000000A058216F
++:103FA00000C04821308A00FFAF8800308F4401787C
++:103FB0000480FFFE3C0C8000358600708CC500003C
++:103FC0003C0308008C6300743C1808008F180070D4
++:103FD00000A82023006468210000C82101A4782BD8
++:103FE0000319702101CF60213C010800AC2D007441
++:103FF0003C010800AC2C00708F480E14AF480144FF
++:10400000AF47014CA34A0152A74B01589346010800
++:1040100030C5000854A0000135291000934B090059
++:1040200024070050316A00FF11470007000000001C
++:104030008F450E1CAF450148AF4901543C091000A3
++:1040400003E00008AF490178934D010831A800084A
++:104050001100001000000000934F010831EE001025
++:1040600051C00001352900083C04080090843DD06F
++:10407000A34401508F4309A4AF4301488F4209A0D4
++:10408000AF420144AF4901543C09100003E000086D
++:10409000AF4901783C1908008F393D8C333800084E
++:1040A0005700FFF1352900080A00047300000000E2
++:1040B00024070040AF470814AF4008108F4209445E
++:1040C0008F4309508F4409548F45095C8F46094C32
++:1040D000AF820064AF830050AF84004CAF85005CBA
++:1040E00003E00008AF8600609346010930C5007FF9
++:1040F000000518C0000521400083102103E00008DE
++:10410000244200883C09080091293D9124A800021E
++:104110003C05110000093C0000E8302500C51825C9
++:1041200024820008AC83000003E00008AC80000497
++:104130009347010B8F4A002C974F09083C18000E3B
++:104140000358482131EEFFFF000E41C0AF48002C5C
++:1041500097430908952C001A008040212403000190
++:10416000318BFFFFAC8B00008D2D001C00A058216F
++:1041700000C06021AC8D00048D24002030E7004099
++:10418000AD04000891220019304400031083004858
++:104190002885000214A00062240600021086005642
++:1041A00024190003109900660000000010E0003A96
++:1041B000000000003C07080094E73D8624E200016F
++:1041C000934F0934934709219525002A31EE00FFCA
++:1041D000000E488230ED00FF978700580009360036
++:1041E000000D1C003044FFFF00C310250044C02513
++:1041F00000A778213C19400003197025000F4C00DE
++:10420000AD090004AD0E0000934D09203C030006EB
++:1042100025090014000D360000C32025AD04000858
++:104220008F59092C24E5000130A27FFFAD19000C45
++:104230008F580930A782005825020028AD180010B9
++:104240008F4F0938AD0F0014AD2B00048F4E09407D
++:10425000AD2E0008934D09373C05080090A53D9010
++:104260008F4409488F46094031A700FF00EC182110
++:10427000008678230003C7000005CC0003196025E1
++:1042800031E8FFFC01885825AD2B000CAD20001053
++:1042900003E00008AF4A002C3C0D080095AD3D86B8
++:1042A0003C0E080095CE3D800A0004C901AE1021E5
++:1042B0003C05080094A53D8A3C06080094C63D8054
++:1042C0003C18080097183D7C952E002400A6782104
++:1042D00001F86823000E240025A2FFF200821825B1
++:1042E00024190800AD03000CAD190014AD00001036
++:1042F0000A0004C4250800189526002495250028E6
++:104300000006C40000057C00370E810035ED080072
++:10431000AD0E000CAD0D00100A0004C425080014F9
++:104320001480FFA200000000952400240004140063
++:1043300034430800AD03000C0A0004C42508001033
++:104340003C03080094633D8A3C05080094A53D8029
++:104350003C06080094C63D7C953900249538002819
++:10436000006520210086782300196C000018740075
++:1043700025E2FFEE01C2202535A3810024190800A3
++:10438000AD03000CAD040010AD190018AD00001411
++:104390000A0004C42508001C03E00008240201F4FC
++:1043A00027BDFFE8AFB00010AFBF00140E000060E3
++:1043B0000080802124050040AF4508148F83005001
++:1043C0008F84004C8F85005C0070182100641023DE
++:1043D00018400004AF830050AF6300548F66005450
++:1043E000AF86004C1200000C000000008F440074E7
++:1043F000936800813409FA002D07000710E00005DA
++:1044000000891021936C0081240B01F4018B50046E
++:1044100001441021AF62000C8F4E095C01C5682376
++:1044200019A000048FBF00148F4F095CAF8F005C90
++:104430008FBF00148FB000100A00006227BD001863
++:104440008F8400648F8300508F82004CAF640044DF
++:10445000AF63005003E00008AF6200543C038000EB
++:10446000346200708C43000027BDFFF8308700FFE6
++:1044700030A900FF30C800FFAF8300308F440178BF
++:104480000480FFFE3C028000345900708F38000029
++:10449000A3A700033C0708008CE700748FAC000062
++:1044A0003C0608008CC60070030378233C0E7FFF97
++:1044B00000EFC82135CDFFFF00005021018D2824D9
++:1044C00000CA1821000847C0032F202B00A8102580
++:1044D0000064C021AFA200003C010800AC390074A8
++:1044E0003C010800AC380070934F010AA3A0000201
++:1044F0003C0E80FFA3AF00018FAC0000312B007F8A
++:1045000035CDFFFF018D4824000B5600012A4025C0
++:10451000240730002406FF803C05100027BD00085A
++:10452000AF48014CAF470154A7400158A346015280
++:1045300003E00008AF45017827BDFFE8AFBF0014D6
++:10454000AFB000108F6500743C068000309000FF13
++:1045500000A620250E000060AF6400749363000580
++:10456000346200080E000062A362000502002021F0
++:104570008FBF00148FB00010240500052406000131
++:104580000A00057027BD001827BDFFE03C0380002E
++:10459000AFB00010AFBF0018AFB1001434620070AC
++:1045A0008C470000309000FF30A800FFAF8700303C
++:1045B0008F4401780480FFFE3C18800037110070A2
++:1045C0008E2F00003C0D08008DAD00743C0A0800E1
++:1045D0008D4A007001E7702301AE282100005821A8
++:1045E00000AE302B014B4821012638213C01080048
++:1045F000AC250074000088213C010800AC27007045
++:104600001100000F000000008F6200742619FFFFE8
++:104610003208007F0002FE0233E5007F150000062D
++:10462000332200FF2407FF800207202624A3FFFF78
++:1046300000838025320200FF0040802124111008F1
++:104640000E000060000000008F49081831250004AA
++:1046500014A0FFFD3218007F001878C000187140C8
++:1046600001CF682125AC0088AF4C0818274A098083
++:104670008D4B0020AF4B01448D460024AF460148CE
++:10468000A35001500E000062A740015802201021E3
++:104690008FBF00188FB100148FB0001003E0000826
++:1046A00027BD002027BDFFE8308400FFAFBF00100A
++:1046B0000E0005BB30A500FF8F8300508FBF001098
++:1046C000344500402404FF903C02100027BD001830
++:1046D000AF43014CA3440152AF45015403E000082D
++:1046E000AF4201789343093E306200081040000D4C
++:1046F0003C0901013528080AAC8800008F47007486
++:10470000AC8700043C06080090C63D9030C5001000
++:1047100050A00006AC8000088F6A0060AC8A0008D8
++:104720002484000C03E00008008010210A00062207
++:104730002484000C27BDFFE8AFBF0014AFB0001009
++:104740009346093F00A050210005288000853823AA
++:1047500030C200FF240300063C09080095293D866D
++:1047600024E8FFD824050004104300372406000283
++:104770009750093C3C0F020400063400320EFFFF44
++:1047800001CF6825AC8D0000934C093E318B002091
++:104790001160000800000000934309363C02010349
++:1047A000345F0300307900FF033FC0252405000873
++:1047B000AC98000493430934935909210005F88209
++:1047C000306200FF0002C082332F00FF00186E002D
++:1047D000000F740001AE6025018920253C094000CE
++:1047E00000898025ACF0FFD8934309378F4F0948E3
++:1047F0008F580940306200FF004AC821033F7021F2
++:1048000001F86023000E6F0001A650253185FFFCE2
++:10481000001F58800145482501683821AD09002056
++:104820000E00006024F00028240400040E00006242
++:10483000A364003F020010218FBF00148FB000104E
++:1048400003E0000827BD00180A0006352406001200
++:1048500027BDFFD024090010AFB60028AFB5002453
++:10486000AFB40020AFB10014AFB000103C0108009D
++:10487000A0293D90AFBF002CAFB3001CAFB2001811
++:1048800097480908309400FF3C02000E3107FFFFF3
++:10489000000731C0AF46002C974409089344010B30
++:1048A00030B500FF03428021308300300000B0218A
++:1048B0001060012500008821240C00043C01080040
++:1048C000A02C3D90934B093E000B5600000A2E038E
++:1048D00004A0016000000000AF400048934F010BAE
++:1048E00031EE002011C00006000000009358093E80
++:1048F00000189E0000139603064001890000000086
++:104900009344010B30830040106000038F930050EC
++:104910008F8200502453FFFF9347093E30E6000882
++:1049200014C0000224120003000090219619002CEC
++:1049300093580934934F0937A7990058330C00FF57
++:1049400031EE00FF024E6821000D5880016C5021AD
++:10495000015140213C010800A4283D869205001821
++:1049600030A900FF010918213C010800A4233D885B
++:104970009211001816200002000000000000000D37
++:104980003C010800A4233D8A3C010800A4203D808E
++:104990003C010800A4203D7C935F010B3063FFFFC6
++:1049A00033F00040120000022464000A2464000B6B
++:1049B0003091FFFF0E00009E022020219358010B32
++:1049C0003C08080095083D8A0040202100185982C3
++:1049D000316700010E00049A01072821934C010B56
++:1049E0008F4B002C974E09083C0F000E034F4021BF
++:1049F00031CDFFFF000D51C0AF4A002C974309088D
++:104A00009505001A004038212404000130A9FFFF59
++:104A1000AC4900008D06001C00404821318A00404E
++:104A2000AC4600048D020020ACE20008910300199E
++:104A300030630003106400EC28790002172001188D
++:104A4000241000021070010C241F0003107F011EAF
++:104A500000000000114000DE000000003C090800DA
++:104A600095293D8625220001935F0934934E092143
++:104A70009504002A33F900FF0019C08231CF00FFEE
++:104A8000978E005800184600000F6C00010D80251D
++:104A90003045FFFF02051025008E50213C034000E9
++:104AA00000433025000A6400ACEC0004ACE60000D2
++:104AB000935F09203C19000624EC0014001FC60077
++:104AC00003197825ACEF00088F48092C25CD00018B
++:104AD00031A57FFFACE8000C8F500930A785005846
++:104AE00024E80028ACF000108F4409380100802130
++:104AF000ACE40014AD9300048F530940AD9300085B
++:104B0000934A09373C19080093393D908F4309486F
++:104B10008F460940314200FF0052F82100667023A1
++:104B2000001F7F000019C40001F8282531CDFFFCCB
++:104B300000AD2025AD84000CAD800010AF4B002CE3
++:104B4000934B093E317300081260000D3C060101D1
++:104B500034CC080AACEC00288F530074AD13000469
++:104B60003C0B0800916B3D903167001050E0000352
++:104B7000AD0000088F6A0060AD0A00082510000C27
++:104B800012C0003D000000009343093F24160006B8
++:104B900024060004306200FF105600C924070002FA
++:104BA0009758093C3C0F0204330DFFFF01AF40252D
++:104BB000AE0800009345093E30A400201080000894
++:104BC00000000000935309363C0B0103357F0300BE
++:104BD000327900FF033F7025AE0E00042406000862
++:104BE000934F093493480921312AFFFF31ED00FF2B
++:104BF000000D1082310300FF0002B60000032C00FC
++:104C000002C56025018A9825001220803C094000D9
++:104C10000204502302695825AD4BFFD8935F093732
++:104C20008F4F09488F58094033F900FF0332702134
++:104C30000006B08201D668210007440001F828234D
++:104C4000000D1F000068302530A2FFFC2547FFD86B
++:104C500000C260250016808002074821ACEC0020CD
++:104C6000253000280E00006024120004A372003FCB
++:104C70000E000062000000009347010B30F200407C
++:104C8000124000053C1900FF8E180000372EFFFF70
++:104C9000030E3024AE0600000E0000C702202021C3
++:104CA0003C10080092103D90321100031220000FBA
++:104CB00002A028218F89005025330001AF930050B6
++:104CC000AF7300508F6B00540173F8231BE0000298
++:104CD000026020218F640054AF6400548F4C007434
++:104CE000258401F4AF64000C02A028210280202159
++:104CF000A76000680E0005BB3C1410008F850050B3
++:104D000034550006AF45014C8F8A00488FBF002CF8
++:104D10008FB3001C25560001AF9600488FB20018D3
++:104D2000A34A01528FB60028AF5501548FB1001429
++:104D3000AF5401788FB500248FB400208FB00010DD
++:104D400003E0000827BD00309358093E00189E007C
++:104D500000139603064200362411000293440923EF
++:104D6000308300021060FEDD8F8600608F8200506D
++:104D700014C2FEDA000000000E0000600000000017
++:104D80009369003F24070016312800FF1107000C2B
++:104D9000240500083C0C0800918C3D90358B0001E7
++:104DA0003C010800A02B3D90936A003F314300FF77
++:104DB00010650065240D000A106D005E2402000CD1
++:104DC0000E000062000000000A00069000000000D3
++:104DD0003C09080095293D863C0A0800954A3D801B
++:104DE0000A0006F3012A10213C09080095293D8A92
++:104DF0003C04080094843D803C06080094C63D7C39
++:104E000095030024012410210046F8230003CC0060
++:104E100027F0FFF20330C025240F0800ACF8000C87
++:104E2000ACEF0014ACE000100A0006EE24E7001816
++:104E30003C010800A0313D90935F093E241600011B
++:104E400033F900201720FEA5241100080A0006905F
++:104E5000241100048F6E00848F4D094011A0FE9E26
++:104E6000AF8E0050240F00143C010800A02F3D908D
++:104E70000A00068F00000000950E0024950D002802
++:104E8000000E6400000D2C003589810034A6080056
++:104E9000ACE9000CACE600100A0006EE24E70014B2
++:104EA0001460FEEC000000009502002400021C00CB
++:104EB00034640800ACE4000C0A0006EE24E700109D
++:104EC0000A000741240700123C02080094423D8A70
++:104ED0003C06080094C63D803C03080094633D7C7A
++:104EE00095100024951900280046F82103E3C023FB
++:104EF00000106C0000197400270FFFEE01CF282569
++:104F000035AC8100ACEC000CACE5001024070800C7
++:104F1000AD2700182527001C0A0006EEAD2000145E
++:104F20008F7F004CAF7F00548F7900540A000699A0
++:104F3000AF790050A362003F0E0000620000000045
++:104F40000A00069000000000240200140A0008274E
++:104F5000A362003F27BDFFE8308400FFAFBF001011
++:104F60000E0005BB30A500FF9378007E9379007F8B
++:104F7000936E00809368007A332F00FF001866005C
++:104F8000000F6C0031CB00FF018D4825000B520053
++:104F90008FBF0010012A3825310600FF344470000D
++:104FA00000E628252402FF813C03100027BD0018DD
++:104FB000AF45014CAF440154A342015203E0000845
++:104FC000AF43017827BDFFD8AFB20018AFB10014CE
++:104FD000AFB00010AFBF0020AFB3001C9342010977
++:104FE000308600FF30B000FF000618C23204000215
++:104FF0003071000114800005305200FF93670005F6
++:1050000030E5000810A0000D30C80010024020213B
++:105010000E0005A702202821240400018FBF0020D4
++:105020008FB3001C8FB200188FB100148FB0001026
++:105030000080102103E0000827BD00281500003281
++:105040000000000093430109000028213062007F26
++:10505000000220C00002F94003E49821267900886C
++:10506000033B98218E7800248E6F0008130F0046B2
++:10507000000000008F640084241800020004FD82F8
++:1050800033F900031338007C0000000093660083AE
++:10509000934A0109514600043205007C10A00060CB
++:1050A000000000003205007C14A0005302402021C3
++:1050B00016200006320400018E7F00248F5901045F
++:1050C00017F9FFD600002021320400011080000AE9
++:1050D000024020218F4209408F9300641053000644
++:1050E000000000000E00066D022028218F430940B9
++:1050F000AF630044024020210E0006020220282156
++:105100000A000860240400013C0908008D2900649D
++:10511000252600013C010800AC26006416000012A0
++:10512000000000008F6D00843C0E00C001AE6024C2
++:1051300015800005024020210E00082E02202821A3
++:105140000A00086024040001240500040E00057014
++:1051500024060001024020210E00082E02202821F2
++:105160000A000860240400010E000041240400012C
++:10517000936B007D020B50250E000062A36A007D38
++:105180000A0008A38F6D00848F6600748F480104A5
++:105190008E67002400064E021507FFB63126007FF9
++:1051A000936B008326440001308A007F1146004340
++:1051B000316300FF5464FFB08F6400842645000112
++:1051C00030B1007F30A200FF122600042405000148
++:1051D000004090210A00087624110001240FFF806E
++:1051E000024F702401CF9026324200FF00409021F0
++:1051F0000A000876241100010E00066D0220282105
++:10520000321800301300FFAA321000820240202121
++:105210000E0005A7022028210A00086024040001CE
++:105220008F6E00743C0F80002405000301CF902591
++:10523000AF72007493710083240600010E000570A4
++:10524000322400FF0E00004124040001936D007D14
++:10525000020D60250E000062A36C007D3C0B08006F
++:105260008D6B0054257000013C010800AC300054E7
++:105270000A000860240400018F6800743C09800063
++:105280002405000401093825AF6700749363008387
++:10529000240600010E000570306400FF0E0000417E
++:1052A000240400019362007D020298250E00006232
++:1052B000A373007D0A00086024040001324D0080C1
++:1052C00039AC0080546CFF6C8F6400840A0008C9FC
++:1052D0002645000127BDFFC83C0A0008AFBF0030CB
++:1052E000AFB5002CAFB40028AFB30024AFB200209C
++:1052F000AFB1001CAFB00018034AD8212409004008
++:10530000AF490814AF4008108F4209448F43095039
++:105310008F4609548F47095C8F48094C9344010814
++:105320009345010BAF820064308400FF30A500FF7D
++:10533000AF830050AF86004CAF87005C0E00084A78
++:10534000AF8800601440017D8FBF0030A760006807
++:10535000934D0900240B00503C15080026B53D482C
++:1053600031AC00FF3C12080026523D58118B00035F
++:10537000000000000000A8210000902193510109C5
++:105380008F9F005024040010322E007F000E68C052
++:10539000000E6140018D282124B40088AF54081804
++:1053A0008F4901048F4A09A43C0B000E034BC02116
++:1053B000012A10233C010800AC223D6C8F430958A0
++:1053C0003C010800A0243D9097470908007F302346
++:1053D0003C010800AC263D7030E8FFFF0008C9C062
++:1053E0003C010800AC3F3D94AF59002C974209089E
++:1053F0009710002C8EB10000930F001803749821B1
++:10540000A7900058AF9300440220F80931F000FF44
++:10541000304E000215C001B2304F000111E0014FC3
++:10542000000000009343093E3066000814C00002EB
++:10543000241400030000A0218F5809A424130001A4
++:105440003C010800AC383D98934F0934935109371B
++:1054500031EC00FF322E00FF028E6821000D288003
++:1054600000AC5021015058213C010800A42B3D887C
++:105470003C010800A42A3D8693490934312200FFEB
++:1054800002022021249000103C010800A4303D8439
++:10549000240700068F9F00503C010800AC273D8C7C
++:1054A0008F88005C8F59095800008021011F282334
++:1054B00004A00149033F20230480014700A4302BAE
++:1054C00010C00149000000003C010800AC253D70FF
++:1054D0008E4200000040F809000000003043000246
++:1054E000146000F80040882130440001548000100E
++:1054F0008E4200043C0908008D293D743C0AC0001E
++:10550000012A8025AF500E008F45000030AB000807
++:105510001160FFFD00000000974D0E0824100001EF
++:10552000A78D003C8F4C0E04AF8C00348E420004DB
++:105530000040F8090000000002228825322E0002F7
++:1055400015C00180000000003C09080095293D7C41
++:105550003C06080094C63D883C0A0800954A3D7EFA
++:105560003C1908008F393D74012660213C18080061
++:105570008F183D983C03080094633D92018A2021D6
++:105580008F4E09400329F821248F000203E32821CC
++:10559000031968213C010800A42C3D8AAF8E0064E9
++:1055A0003C010800AC2D3D983C010800A4253D803D
++:1055B0000E00009E31E4FFFF8F870048004020214D
++:1055C0003C010800A0273D918E42000824E800011C
++:1055D000AF8800480040F809000000009344010B28
++:1055E0008F4C002C974A09083C0B000E034B4021BE
++:1055F0003149FFFF000919C08F8B0050AF43002CC9
++:10560000974309089506001A00403821308A004067
++:1056100030DFFFFFAC5F00008D19001C0040482107
++:10562000AC5900048D180020AC580008910F0019E7
++:1056300031E30003107300F0000000002862000254
++:105640001440010924050002106500FD240D00032B
++:10565000106D010D00000000114000D90000000095
++:105660003C0A0800954A3D8625420001934D0934C5
++:1056700093580921950E002A31A300FF00032082D0
++:10568000331F00FF9798005800047E00001FCC00D5
++:1056900001F940253049FFFF0109102501D83021CB
++:1056A0003C0540000045502500066C00ACED0004B0
++:1056B000ACEA0000934309203C04000624ED0014EA
++:1056C0000003FE0003E4C825ACF900088F49092C4B
++:1056D000270F000131EE7FFFACE9000C8F48093045
++:1056E000A78E005824E90028ACE800108F4509383F
++:1056F00001204021ACE50014ADAB00048F4209400D
++:10570000ADA20008934B09373C1F080093FF3D9062
++:105710008F4309488F4A0940316600FF00D4202199
++:10572000006A78230004C700001FCC000319282555
++:1057300031EEFFFC00AE1025ADA2000CADA00010B4
++:10574000AF4C002C934C093E318B00085160000F88
++:105750008E58000C3C06010134CA080AACEA002845
++:105760008F4B0074AD2B00043C0C0800918C3D90D5
++:105770003187001050E00003AD2000088F62006008
++:10578000AD2200082528000C8E58000C0300F809F3
++:10579000010020213C19080097393D8A3C1F080070
++:1057A00097FF3D7E033F782125E900020E0000C7E8
++:1057B0003124FFFF3C0E08008DCE3D6C3C080800F4
++:1057C0008D083D7401C828233C010800AC253D6CC0
++:1057D00014A00006000000003C0308008C633D8C10
++:1057E000346400403C010800AC243D8C1200007081
++:1057F0008F8C00448F470E108F900044AE0700201E
++:105800008F4D0E18AE0D00243C10080096103D8000
++:105810000E0000600000000024020040AF420814A7
++:105820008F8600508F8A004C00D01821006A5823C0
++:1058300019600004AF830050AF6300548F650054BB
++:10584000AF85004C1200000C000000008F44007473
++:10585000936800813409FA002D0E000711C000057D
++:1058600000891821937F0081241901F403F9780439
++:1058700001E41821AF63000C8F44095C8F83005C46
++:105880000083C0231B000003000000008F50095C50
++:10589000AF90005C0E000062000000008F8C005092
++:1058A0008E4700103C010800AC2C3D9400E0F80944
++:1058B000000000003C0D08008DAD3D6C55A0FEF5CC
++:1058C000240700068F450024975909088F8B006430
++:1058D0008F9400503C0F001F978200588F86005411
++:1058E0008F93004C3328FFFF35E9FF8000A9502437
++:1058F000000871C032320100AF4E0024A4C2002C57
++:10590000AF4A0024AF6B0044AF740050AF73005433
++:105910001640008032380010570000868EA4000424
++:10592000322300405460001B8EB100088EB0000C82
++:105930000200F809000000008FBF00308FB5002C76
++:105940008FB400288FB300248FB200208FB1001CC9
++:105950008FB0001803E0000827BD00389347010905
++:105960008F8800380007FE0003E8C825AF59008083
++:105970008F5809A08F5309A4AFB80010AF580E1468
++:105980008FB40010AF540E10AF530E1C0A00096202
++:10599000AF530E180220F809000000008EB0000C72
++:1059A0000200F809000000000A000AA88FBF0030BA
++:1059B000A5800020A59300220A000A5BAD93002475
++:1059C0003C09080095293D863C06080094C63D80A8
++:1059D0000A0009F4012610213C010800AC203D70AA
++:1059E0000A00098E8E4200003C010800AC243D7084
++:1059F0000A00098E8E4200003C03080094633D8A31
++:105A00003C04080094843D803C1F080097FF3D7CC7
++:105A1000951800240064C821033F782300186C0007
++:105A200025EEFFF201AE2825AC45000C240208004B
++:105A3000ACE20014ACE000100A0009EF24E7001803
++:105A400095060024950900280006240000091C0082
++:105A5000349F810034790800ACFF000CACF90010D1
++:105A60000A0009EF24E700141460FEFB00000000A8
++:105A70009518002400187C0035EE0800ACEE000CF0
++:105A80000A0009EF24E700103C07080094E73D8076
++:105A90003C04080094843D8A3C03080094633D7CE8
++:105AA00095190024951800280087F82103E378232E
++:105AB0002407080000192C0000186C0025EEFFEEEA
++:105AC00001AE302534A28100AD2700182527001C27
++:105AD000AD22000CAD2600100A0009EFAD20001425
++:105AE00093520109000028210E000602324400FFF3
++:105AF0008FBF00308FB5002C8FB400288FB30024E7
++:105B00008FB200208FB1001C8FB0001803E0000896
++:105B100027BD0038935F010933E400FF0E00066DD6
++:105B200000002821323800105300FF7E322300404D
++:105B30008EA400040080F809000000000A000AA2F8
++:105B4000322300401200FF5F000000008F540E144B
++:105B50008F920044AE5400208F530E1C0A000A8A14
++:105B6000AE5300248F82001C008040213C040100C1
++:105B70009047008530E3002010600009000000001D
++:105B80003C0708008CE73D948F83001800E3202336
++:105B9000048000089389000414E30003010020211D
++:105BA00003E00008008010213C04010003E000082D
++:105BB000008010211120000B006738238F8C0020FB
++:105BC00024090034918B00BC316A0002514000016D
++:105BD0002409003000E9682B15A0FFF10100202105
++:105BE00000E938232419FFFC00B9C02400F9782407
++:105BF00000F8702B15C0FFEA01E8202130C2000335
++:105C00000002182314C00012306900030000302184
++:105C100000A9702101C6682100ED602B1180FFE012
++:105C20003C0401002D2F00010006482B01053821FE
++:105C300001E9302414C0FFDA24E4FFFC2419FFFC3E
++:105C400000B9C0240308202103E0000800801021CF
++:105C50008F8B002024060004916A00BC31440004AC
++:105C60001480FFEC00A970210A000B5E00003021B7
++:105C700027BDFFE8AFBF00108F460100934A01091E
++:105C80003C1F08008FFF00902407FF80314F00FF6A
++:105C900031E8007F0008614003E6C821032CC021E1
++:105CA00027090120012770243C010800A02F3DD0C6
++:105CB000AF4E080C3C0D08008DAD00903C040080F8
++:105CC0003482000301A65821016C182124650120AB
++:105CD00030AA007801424025AF48081C3C1F08004C
++:105CE0008FFF00908F88004003E6C0213319000722
++:105CF00003074824033A7821AF49002825E909C061
++:105D0000952E00023C0D08008DAD008C3C0A080069
++:105D10008D4A009031CC3FFF01A61821000C59801C
++:105D2000006B282100A72024AF44002C95220002FC
++:105D30003C1F08008FFF008C9107008530593FFF02
++:105D400003E678210019C1800146702101F868211D
++:105D500031CC007F31AB007F019A2821017A50219C
++:105D60003C03000C3C04000E00A328210144102138
++:105D700030E6002027470980AF82002CAF88001C46
++:105D8000AF890024AF85002010C00006AF8700282F
++:105D90008D0200508CA4010C0044302318C0007701
++:105DA00000000000910C0085240DFFDF018D3824D8
++:105DB000A10700858F8B001C8F8900248F87002806
++:105DC0008D65004CAF850018912F000D31EE00203D
++:105DD00011C000170000000024090001A38900047D
++:105DE000AF80000C8CE400248F85000C240A00088E
++:105DF000AF800008AF8000103C010800A42A3D7E5F
++:105E00003C010800A4203D920E000B32000030211E
++:105E10008F8500248FBF0010AF82001490A8000D62
++:105E200027BD00180008394203E0000830E20001F5
++:105E3000913F00022418000133F900FF001921826C
++:105E400010980039240800021088005B8F86002C0F
++:105E50008CE5002414A0001B8F9F002091220000DD
++:105E6000240A00053046003F10CA00472404000100
++:105E70008F860008A3840004AF860010AF86000C54
++:105E80008CE400248F85000C240A00083C010800E3
++:105E9000A42A3D7E3C010800A4203D920E000B3256
++:105EA000000000008F8500248FBF0010AF82001417
++:105EB00090A8000D27BD00180008394203E0000833
++:105EC00030E200018CF800088CF900248FEE00C449
++:105ED000A38000048CE40024AF8E000C8F85000C9E
++:105EE0008F86000803197823240A0008AF8F00105A
++:105EF0003C010800A42A3D7E3C010800A4203D92FC
++:105F00000E000B32000000008F8500248FBF0010B0
++:105F1000AF82001490A8000D27BD00180008394278
++:105F200003E0000830E20001912300003062003FEE
++:105F3000104400278F8500208CE400241480002169
++:105F4000000000008D2E00183C187FFF8F85002078
++:105F5000370FFFFF01CF1824AF8300088F9F000881
++:105F60008CA8008403E8C82B1720000203E020213E
++:105F70008CA400840A000BEDAF8400088CA3010CF4
++:105F80000A000BCBAF8300188D2C00188F860008F9
++:105F90003C0D7FFF8F89002035A3FFFF018358242C
++:105FA00024040001AF8B0010AD2000CCA3840004BA
++:105FB0000A000BF9AF86000C8CCA00140A000BED26
++:105FC000AF8A00088CA300C80A000C30AF83000819
++:105FD0008F84002C8CAC00648C8D0014018D582BA8
++:105FE00011600004000000008CA200640A000C3064
++:105FF000AF8200088C8200140A000C30AF820008C7
++:106000008F85000C27BDFFE0AFBF0018AFB10014B3
++:1060100014A00007AFB000108F86002424020005F2
++:1060200090C400003083003F106200B68F840020CF
++:106030008F91000800A080218F8C00283C0508006B
++:106040008CA53D708D8B000431663FFF00C5502B41
++:106050005540000100C02821938D000411A0007359
++:1060600000B0F82B8F98002024040034930F00BC5C
++:1060700031EE000251C000012404003000A4C82BFE
++:10608000172000D10000000000A4282300B0F82B46
++:106090003C010800A4243D7C17E000680200202198
++:1060A0003C0308008C633D6C0083102B54400001BE
++:1060B000008018218F8800243C010800AC233D7427
++:1060C000000048219104000D308300205060000141
++:1060D0008F490E188F8300140123382B10E00059CC
++:1060E000000000003C0408008C843D7400895821A5
++:1060F000006B502B114000560090602B006930233C
++:1061000000C020213C010800AC263D7412000003B1
++:10611000241FFFFC1090008A32270003009FC82430
++:106120003C010800AC393D743C010800A4203D92BC
++:106130008F84000C120400078F830020AF910008A9
++:10614000020020218C7100CCAF90000C26300001A1
++:10615000AC7000CC3C0208008C423D748F8A001069
++:10616000240700180082202301422823AF84000C5A
++:1061700010800002AF850010240700108F86001CDD
++:106180003C010800A0273D902407004090CC0085EA
++:10619000318B00C0116700408F8D001414A00015D2
++:1061A00000002021934A01098F420974314500FF04
++:1061B0000002260224A300013090007F3071007F8E
++:1061C0001230007A2407FF80A0C300833C09080036
++:1061D0008D293D8C8F880024240D0002352C000869
++:1061E0003C010800A02D3DD13C010800AC2C3D8CA9
++:1061F00024040010910E000D31C6002010C00005CF
++:1062000000801821240800013C010800AC283D74DE
++:10621000348300018FBF00188FB100148FB00010BD
++:106220000060102103E0000827BD00203C010800A9
++:10623000A4203D7C13E0FF9A020020210A000C817B
++:1062400000A020213C0408008C843D740090602B49
++:106250001180FFAE000000003C0F080095EF3D7C70
++:1062600001E4702101C6682B11A000072C820004F4
++:106270003C1F60008FF954043338003F1700FFE5DE
++:10628000240300422C8200041040FFA0240300429B
++:106290000A000CDF8FBF0018152DFFC000000000A2
++:1062A0008CDF00743C0380002405FF8003E3C825D5
++:1062B000ACD9007490D80085240E0004240400108A
++:1062C000330F003F01E54025A0C800858F880024DA
++:1062D0003C010800A02E3DD1240300019106000DD1
++:1062E00030C9002015200003000000003C03080016
++:1062F0008C633D743C010800AC233D6C0A000CD655
++:10630000000000008F8700108C88008400E8282B94
++:1063100014A0000200E088218C910084240900016F
++:10632000A38900048F440E18022028210E000B328E
++:1063300002203021022080210A000C67AF82001465
++:1063400000071823306600033C010800A4263D9294
++:10635000122000058F8C0020918B00BC316A000454
++:106360001540001524CD00043C0F080095EF3D9228
++:1063700001E4702100AE302B50C0FF6E8F84000C02
++:106380002C85000514A0FFA32403004230980003CD
++:1063900017000002009818232483FFFC3C0108002A
++:1063A000AC233D740A000CA30000000000A7582491
++:1063B0000A000CCB016718263C010800A42D3D9271
++:1063C0000A000D33000000003C010800AC203D74C1
++:1063D0000A000CDE240300428F83001014600007C3
++:1063E000000010218F88002424050005910600007C
++:1063F00030C400FF108500030000000003E0000827
++:1064000000000000910A0018314900FF000939C25C
++:1064100014E0FFFA8F85001C3C04080094843D7C46
++:106420003C0308008C633D943C1908008F393D748F
++:106430003C0F080095EF3D920064C0218CAD0054E4
++:106440000319702101CF6021018D58231960001DAF
++:1064500000000000910E001C8F8C002C974B0E103A
++:1064600031CD00FF8D850004016D30238D88000043
++:1064700030CEFFFF000E510000AAC82100003821D5
++:1064800001072021032A182B0083C021AD990004A5
++:10649000AD980000918F000A01CF6821A18D000AFC
++:1064A0008F88002C974B0E12A50B0008950A003818
++:1064B00025490001A50900389107000D34E60008C0
++:1064C000A106000D03E000080000000027BDFFE06A
++:1064D000938700048F8F00248FAD00143C0E7FFF44
++:1064E0008F89000C35C8FFFFAFBF001CAFB000188C
++:1064F00001A8182491EA000D000717C03C1FBFFF38
++:10650000006258252D2E00018F90001837F9FFFFEB
++:106510003C1808008F183D943C0F080095EF3D8A09
++:1065200001796824000E47803C07EFFF3C05F0FF2F
++:1065300001A818253149002034E2FFFF34ACFFFFE9
++:106540000310582327A500102406000225EA0002A4
++:1065500000621824008080211520000200004021E4
++:106560008F480E1CA7AA0012056000372407000000
++:1065700030FF00FF001FCF008F8B001C00793825F3
++:10658000AFA70014916F00853C08080091083D9169
++:106590003C18DFFF31EE00C0370AFFFF000E182B5A
++:1065A0003C1F080097FF3D8400EA6824A3A800115F
++:1065B0000003174001A248258FB90010AFA90014AD
++:1065C0003C0A0800914A3D93A7BF00168FA800140B
++:1065D000032CC0243C0B01003C0F0FFF030B1825BC
++:1065E0003147000335EEFFFF010C68240007160059
++:1065F000006EF8243C09700001A2C82503E9582563
++:10660000AFB90014AFAB00100E000076A3A00015C8
++:106610008F8C0024260200089186000D30C40020D3
++:10662000108000068FBF001C3C05080094A53D802B
++:1066300024B0FFFF3C010800A4303D808FB000185B
++:1066400003E0000827BD00208F9800140118502B8C
++:106650005540FFC7240700010A000DB630FF00FFB8
++:106660009382000427BDFFE0AFBF00181040000F69
++:10667000008050218F880024240B00058F8900089A
++:10668000910700008F8400200100282130E3003FA3
++:106690008F86002C106B000800003821AFA9001075
++:1066A0000E00040EAFAA0014A38000048FBF0018D0
++:1066B00003E0000827BD00208D1900183C0F0800DA
++:1066C0008DEF3D748F9800103C027FFF8D08001401
++:1066D000345FFFFF033F682401F8702101AE60239F
++:1066E00001883821AFA900100E00040EAFAA0014D3
++:1066F0000A000E04A38000048F8700243C050800D4
++:1067000094A53D923C0208008C423D8C90E6000D21
++:106710000005240030C300201060002C00444025F8
++:106720008F85001C00006021240B000190A30085D0
++:1067300000004821240A00013C0F800035EE007063
++:106740008DC70000AF8700308F5801780700FFFE2B
++:106750003C038000347900708F3800003C0508004D
++:106760008CA500743C0D08008DAD007003077823E4
++:1067700000AF38210000102100EF302B01A22021B2
++:10678000008618213C010800AC2700743C01080079
++:10679000AC230070AF4B01483C1908008F393D9481
++:1067A000A7490144A74A0146AF59014C3C0B0800D8
++:1067B000916B3D91A34B0152AF4801543C0810002E
++:1067C000A74C015803E00008AF4801788F4B0E1C1E
++:1067D0003C0A08008D4A3D7497490E16974D0E14D9
++:1067E00001456021312AFFFF0A000E2731A9FFFF72
++:1067F0008F8300249064000D308200201040002917
++:10680000000000000000482100005021000040214D
++:106810003C07800034EB00708D670000AF870030CC
++:106820008F4C01780580FFFE3C0D800035AC007078
++:106830008D8B00003C0508008CA500743C0408000A
++:106840008C8400700167302300A67821000010219D
++:1068500001E6C82B0082C021031970213C01080009
++:10686000AC2F00743C010800AC2E0070AF49014809
++:106870003C0D08008DAD3D94A7480144240900401B
++:10688000A74A01463C081000240AFF91AF4D014C75
++:10689000A34A0152AF490154A740015803E0000840
++:1068A000AF4801788F490E1897460E1297450E1083
++:1068B00030CAFFFF0A000E5D30A8FFFF8F8300245F
++:1068C00027BDFFF89064000D308200201040003A90
++:1068D00000000000240B000100004821240A0001F0
++:1068E0003C088000350700708CE30000AF83003067
++:1068F0008F4C01780580FFFE3C0E80003C040800B0
++:1069000090843DD035C700708CEC00003C05080039
++:106910008CA50074A3A400033C1908008F390070F3
++:106920008FAD00000183302300A638210000102124
++:106930000322782100E6C02B01F8602101AE40253A
++:10694000AFA800003C010800AC2700743C0108001F
++:10695000AC2C00709346010A3C04080090843DD1A1
++:10696000A3A00002A3A600018FA300003C0580FFA6
++:106970003099007F34A2FFFF006278240019C6001E
++:1069800001F87025240D3000AF4E014C27BD0008E2
++:10699000AF4D0154A7400158AF4B0148A7490144EE
++:1069A000A74A01463C091000240AFF80A34A01526D
++:1069B00003E00008AF4901788F4B0E1897460E127E
++:1069C00097450E1030CAFFFF0A000E9130A9FFFF55
++:1069D0008F85001C2402008090A40085308300C0B5
++:1069E000106200058F8600208F8800088F87000CBA
++:1069F000ACC800C8ACC700C403E000080000000039
++:106A00003C0A0800254A39543C09080025293A2047
++:106A10003C08080025082DD43C07080024E73B3437
++:106A20003C06080024C637C43C05080024A5353CB4
++:106A30003C040800248431643C0308002463385C6F
++:106A40003C020800244236303C010800AC2A3D508C
++:106A50003C010800AC293D4C3C010800AC283D48F5
++:106A60003C010800AC273D543C010800AC263D64C5
++:106A70003C010800AC253D5C3C010800AC243D58BD
++:106A80003C010800AC233D683C010800AC223D609D
++:086A900003E000080000000013
++:00000001FF
diff --git a/firmware/bnx2/bnx2-mips-09-6.2.1b.fw.ihex b/firmware/bnx2/bnx2-mips-09-6.2.1b.fw.ihex
new file mode 100644
index 0000000..43d7c4f
+:1095C00080080000800E00008008008080080000F5
+:1095D00080000A8080000A00800009808000090065
+:00000001FF
-diff --git a/fs/9p/vfs_addr.c b/fs/9p/vfs_addr.c
-index eb14e05..5156de7 100644
---- a/fs/9p/vfs_addr.c
-+++ b/fs/9p/vfs_addr.c
-@@ -187,7 +187,7 @@ static int v9fs_vfs_writepage_locked(struct page *page)
-
- retval = v9fs_file_write_internal(inode,
- v9inode->writeback_fid,
-- (__force const char __user *)buffer,
-+ (const char __force_user *)buffer,
- len, &offset, 0);
- if (retval > 0)
- retval = 0;
diff --git a/fs/9p/vfs_inode.c b/fs/9p/vfs_inode.c
-index 3662f1d..90558b5 100644
+index 703342e..2b96b597 100644
--- a/fs/9p/vfs_inode.c
+++ b/fs/9p/vfs_inode.c
-@@ -1312,7 +1312,7 @@ static void *v9fs_vfs_follow_link(struct dentry *dentry, struct nameidata *nd)
+@@ -540,8 +540,7 @@ static struct inode *v9fs_qid_iget(struct super_block *sb,
+ unlock_new_inode(inode);
+ return inode;
+ error:
+- unlock_new_inode(inode);
+- iput(inode);
++ iget_failed(inode);
+ return ERR_PTR(retval);
+
+ }
+@@ -1312,7 +1311,7 @@ static void *v9fs_vfs_follow_link(struct dentry *dentry, struct nameidata *nd)
void
v9fs_vfs_put_link(struct dentry *dentry, struct nameidata *nd, void *p)
{
p9_debug(P9_DEBUG_VFS, " %pd %s\n",
dentry, IS_ERR(s) ? "<error>" : s);
+diff --git a/fs/9p/vfs_inode_dotl.c b/fs/9p/vfs_inode_dotl.c
+index 9861c7c..4d3ecfb 100644
+--- a/fs/9p/vfs_inode_dotl.c
++++ b/fs/9p/vfs_inode_dotl.c
+@@ -149,8 +149,7 @@ static struct inode *v9fs_qid_iget_dotl(struct super_block *sb,
+ unlock_new_inode(inode);
+ return inode;
+ error:
+- unlock_new_inode(inode);
+- iput(inode);
++ iget_failed(inode);
+ return ERR_PTR(retval);
+
+ }
diff --git a/fs/Kconfig.binfmt b/fs/Kconfig.binfmt
-index 270c481..0d8a962 100644
+index 2d0cbbd..a6d6149 100644
--- a/fs/Kconfig.binfmt
+++ b/fs/Kconfig.binfmt
-@@ -106,7 +106,7 @@ config HAVE_AOUT
+@@ -103,7 +103,7 @@ config HAVE_AOUT
config BINFMT_AOUT
tristate "Kernel support for a.out and ECOFF binaries"
A.out (Assembler.OUTput) is a set of formats for libraries and
executables used in the earliest versions of UNIX. Linux used
diff --git a/fs/afs/inode.c b/fs/afs/inode.c
-index 8a1d38e..300a14e 100644
+index e06f5a2..81d07ac 100644
--- a/fs/afs/inode.c
+++ b/fs/afs/inode.c
@@ -141,7 +141,7 @@ struct inode *afs_iget_autocell(struct inode *dir, const char *dev_name,
&data);
if (!inode) {
diff --git a/fs/aio.c b/fs/aio.c
-index a793f70..46f45af 100644
+index 480440f..623fd88 100644
--- a/fs/aio.c
+++ b/fs/aio.c
-@@ -404,7 +404,7 @@ static int aio_setup_ring(struct kioctx *ctx)
+@@ -441,7 +441,7 @@ static int aio_setup_ring(struct kioctx *ctx)
size += sizeof(struct io_event) * nr_events;
nr_pages = PFN_UP(size);
goto out_sig;
if (offset > inode->i_sb->s_maxbytes)
diff --git a/fs/autofs4/waitq.c b/fs/autofs4/waitq.c
-index 116fd38..c04182da 100644
+index 35b755e..f4b9e0a 100644
--- a/fs/autofs4/waitq.c
+++ b/fs/autofs4/waitq.c
@@ -59,7 +59,7 @@ static int autofs4_write(struct autofs_sb_info *sbi,
fd_offset + ex.a_text);
if (error != N_DATADDR(ex))
diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c
-index d925f55..d31f527 100644
+index cd46e41..244f778 100644
--- a/fs/binfmt_elf.c
+++ b/fs/binfmt_elf.c
-@@ -34,6 +34,7 @@
+@@ -35,6 +35,7 @@
#include <linux/utsname.h>
#include <linux/coredump.h>
#include <linux/sched.h>
#include <asm/uaccess.h>
#include <asm/param.h>
#include <asm/page.h>
-@@ -47,7 +48,7 @@
+@@ -48,7 +49,7 @@
static int load_elf_binary(struct linux_binprm *bprm);
static unsigned long elf_map(struct file *, unsigned long, struct elf_phdr *,
#ifdef CONFIG_USELIB
static int load_elf_library(struct file *);
-@@ -65,6 +66,14 @@ static int elf_core_dump(struct coredump_params *cprm);
+@@ -66,6 +67,14 @@ static int elf_core_dump(struct coredump_params *cprm);
#define elf_core_dump NULL
#endif
#if ELF_EXEC_PAGESIZE > PAGE_SIZE
#define ELF_MIN_ALIGN ELF_EXEC_PAGESIZE
#else
-@@ -84,6 +93,15 @@ static struct linux_binfmt elf_format = {
+@@ -85,6 +94,15 @@ static struct linux_binfmt elf_format = {
.load_binary = load_elf_binary,
.load_shlib = load_elf_library,
.core_dump = elf_core_dump,
.min_coredump = ELF_EXEC_PAGESIZE,
};
-@@ -91,6 +109,8 @@ static struct linux_binfmt elf_format = {
+@@ -92,6 +110,8 @@ static struct linux_binfmt elf_format = {
static int set_brk(unsigned long start, unsigned long end)
{
start = ELF_PAGEALIGN(start);
end = ELF_PAGEALIGN(end);
if (end > start) {
-@@ -99,7 +119,7 @@ static int set_brk(unsigned long start, unsigned long end)
+@@ -100,7 +120,7 @@ static int set_brk(unsigned long start, unsigned long end)
if (BAD_ADDR(addr))
return addr;
}
return 0;
}
-@@ -160,12 +180,13 @@ create_elf_tables(struct linux_binprm *bprm, struct elfhdr *exec,
+@@ -161,12 +181,13 @@ create_elf_tables(struct linux_binprm *bprm, struct elfhdr *exec,
elf_addr_t __user *u_rand_bytes;
const char *k_platform = ELF_PLATFORM;
const char *k_base_platform = ELF_BASE_PLATFORM;
/*
* In some cases (e.g. Hyper-Threading), we want to avoid L1
-@@ -207,8 +228,12 @@ create_elf_tables(struct linux_binprm *bprm, struct elfhdr *exec,
+@@ -208,8 +229,12 @@ create_elf_tables(struct linux_binprm *bprm, struct elfhdr *exec,
* Generate 16 random bytes for userspace PRNG seeding.
*/
get_random_bytes(k_rand_bytes, sizeof(k_rand_bytes));
if (__copy_to_user(u_rand_bytes, k_rand_bytes, sizeof(k_rand_bytes)))
return -EFAULT;
-@@ -323,9 +348,11 @@ create_elf_tables(struct linux_binprm *bprm, struct elfhdr *exec,
+@@ -324,9 +349,11 @@ create_elf_tables(struct linux_binprm *bprm, struct elfhdr *exec,
return -EFAULT;
current->mm->env_end = p;
return -EFAULT;
return 0;
}
-@@ -514,14 +541,14 @@ static inline int arch_check_elf(struct elfhdr *ehdr, bool has_interp,
+@@ -515,14 +542,14 @@ static inline int arch_check_elf(struct elfhdr *ehdr, bool has_interp,
an ELF header */
static unsigned long load_elf_interp(struct elfhdr *interp_elf_ex,
unsigned long total_size;
int i;
-@@ -541,6 +568,11 @@ static unsigned long load_elf_interp(struct elfhdr *interp_elf_ex,
+@@ -542,6 +569,11 @@ static unsigned long load_elf_interp(struct elfhdr *interp_elf_ex,
goto out;
}
eppnt = interp_elf_phdata;
for (i = 0; i < interp_elf_ex->e_phnum; i++, eppnt++) {
if (eppnt->p_type == PT_LOAD) {
-@@ -564,8 +596,6 @@ static unsigned long load_elf_interp(struct elfhdr *interp_elf_ex,
+@@ -565,8 +597,6 @@ static unsigned long load_elf_interp(struct elfhdr *interp_elf_ex,
map_addr = elf_map(interpreter, load_addr + vaddr,
eppnt, elf_prot, elf_type, total_size);
total_size = 0;
error = map_addr;
if (BAD_ADDR(map_addr))
goto out;
-@@ -584,8 +614,8 @@ static unsigned long load_elf_interp(struct elfhdr *interp_elf_ex,
+@@ -585,8 +615,8 @@ static unsigned long load_elf_interp(struct elfhdr *interp_elf_ex,
k = load_addr + eppnt->p_vaddr;
if (BAD_ADDR(k) ||
eppnt->p_filesz > eppnt->p_memsz ||
error = -ENOMEM;
goto out;
}
-@@ -624,9 +654,11 @@ static unsigned long load_elf_interp(struct elfhdr *interp_elf_ex,
+@@ -625,9 +655,11 @@ static unsigned long load_elf_interp(struct elfhdr *interp_elf_ex,
elf_bss = ELF_PAGESTART(elf_bss + ELF_MIN_ALIGN - 1);
/* Map the last of the bss segment */
}
error = load_addr;
-@@ -634,6 +666,336 @@ out:
+@@ -635,6 +667,336 @@ out:
return error;
}
/*
* These are the functions used to load ELF style executables and shared
* libraries. There is no binary dependent code anywhere else.
-@@ -647,6 +1009,11 @@ static unsigned long randomize_stack_top(unsigned long stack_top)
+@@ -648,6 +1010,11 @@ static unsigned long randomize_stack_top(unsigned long stack_top)
{
unsigned long random_variable = 0;
if ((current->flags & PF_RANDOMIZE) &&
!(current->personality & ADDR_NO_RANDOMIZE)) {
random_variable = (unsigned long) get_random_int();
-@@ -666,7 +1033,7 @@ static int load_elf_binary(struct linux_binprm *bprm)
+@@ -667,7 +1034,7 @@ static int load_elf_binary(struct linux_binprm *bprm)
unsigned long load_addr = 0, load_bias = 0;
int load_addr_set = 0;
char * elf_interpreter = NULL;
struct elf_phdr *elf_ppnt, *elf_phdata, *interp_elf_phdata = NULL;
unsigned long elf_bss, elf_brk;
int retval, i;
-@@ -681,6 +1048,7 @@ static int load_elf_binary(struct linux_binprm *bprm)
+@@ -682,6 +1049,7 @@ static int load_elf_binary(struct linux_binprm *bprm)
struct elfhdr interp_elf_ex;
} *loc;
struct arch_elf_state arch_state = INIT_ARCH_ELF_STATE;
loc = kmalloc(sizeof(*loc), GFP_KERNEL);
if (!loc) {
-@@ -839,6 +1207,77 @@ static int load_elf_binary(struct linux_binprm *bprm)
+@@ -840,6 +1208,77 @@ static int load_elf_binary(struct linux_binprm *bprm)
/* Do this immediately, since STACK_TOP as used in setup_arg_pages
may depend on the personality. */
SET_PERSONALITY2(loc->elf_ex, &arch_state);
if (elf_read_implies_exec(loc->elf_ex, executable_stack))
current->personality |= READ_IMPLIES_EXEC;
-@@ -925,12 +1364,21 @@ static int load_elf_binary(struct linux_binprm *bprm)
- #else
- load_bias = ELF_PAGESTART(ELF_ET_DYN_BASE - vaddr);
- #endif
+@@ -915,8 +1354,21 @@ static int load_elf_binary(struct linux_binprm *bprm)
+ if (current->flags & PF_RANDOMIZE)
+ load_bias += arch_mmap_rnd();
+ load_bias = ELF_PAGESTART(load_bias);
- total_size = total_mapping_size(elf_phdata,
- loc->elf_ex.e_phnum);
-- if (!total_size) {
-- error = -EINVAL;
-- goto out_free_dentry;
+
+#ifdef CONFIG_PAX_RANDMMAP
+ /* PaX: randomize base address at the default exe base if requested */
+#endif
+ load_bias = ELF_PAGESTART(PAX_ELF_ET_DYN_BASE - vaddr + load_bias);
+ elf_flags |= MAP_FIXED;
- }
++ }
+#endif
+
+ total_size = total_mapping_size(elf_phdata, loc->elf_ex.e_phnum);
- }
-
- error = elf_map(bprm->file, load_bias + vaddr, elf_ppnt,
-@@ -962,9 +1410,9 @@ static int load_elf_binary(struct linux_binprm *bprm)
+ if (!total_size) {
+ retval = -EINVAL;
+ goto out_free_dentry;
+@@ -952,9 +1404,9 @@ static int load_elf_binary(struct linux_binprm *bprm)
* allowed task size. Note that p_filesz must always be
* <= p_memsz so it is only necessary to check p_memsz.
*/
/* set_brk can never work. Avoid overflows. */
retval = -EINVAL;
goto out_free_dentry;
-@@ -1000,16 +1448,43 @@ static int load_elf_binary(struct linux_binprm *bprm)
+@@ -990,16 +1442,43 @@ static int load_elf_binary(struct linux_binprm *bprm)
if (retval)
goto out_free_dentry;
if (likely(elf_bss != elf_brk) && unlikely(padzero(elf_bss))) {
load_bias, interp_elf_phdata);
if (!IS_ERR((void *)elf_entry)) {
/*
-@@ -1237,7 +1712,7 @@ static bool always_dump_vma(struct vm_area_struct *vma)
+@@ -1050,6 +1529,7 @@ static int load_elf_binary(struct linux_binprm *bprm)
+ current->mm->end_data = end_data;
+ current->mm->start_stack = bprm->p;
+
++#ifndef CONFIG_PAX_RANDMMAP
+ if ((current->flags & PF_RANDOMIZE) && (randomize_va_space > 1)) {
+ current->mm->brk = current->mm->start_brk =
+ arch_randomize_brk(current->mm);
+@@ -1057,6 +1537,7 @@ static int load_elf_binary(struct linux_binprm *bprm)
+ current->brk_randomized = 1;
+ #endif
+ }
++#endif
+
+ if (current->personality & MMAP_PAGE_ZERO) {
+ /* Why this, you ask??? Well SVr4 maps page 0 as read-only,
+@@ -1225,7 +1706,7 @@ static bool always_dump_vma(struct vm_area_struct *vma)
* Decide what to dump of a segment, part, all or none.
*/
static unsigned long vma_dump_size(struct vm_area_struct *vma,
{
#define FILTER(type) (mm_flags & (1UL << MMF_DUMP_##type))
-@@ -1275,7 +1750,7 @@ static unsigned long vma_dump_size(struct vm_area_struct *vma,
+@@ -1263,7 +1744,7 @@ static unsigned long vma_dump_size(struct vm_area_struct *vma,
if (vma->vm_file == NULL)
return 0;
goto whole;
/*
-@@ -1482,9 +1957,9 @@ static void fill_auxv_note(struct memelfnote *note, struct mm_struct *mm)
+@@ -1470,9 +1951,9 @@ static void fill_auxv_note(struct memelfnote *note, struct mm_struct *mm)
{
elf_addr_t *auxv = (elf_addr_t *) mm->saved_auxv;
int i = 0;
fill_note(note, "CORE", NT_AUXV, i * sizeof(elf_addr_t), auxv);
}
-@@ -1493,7 +1968,7 @@ static void fill_siginfo_note(struct memelfnote *note, user_siginfo_t *csigdata,
+@@ -1481,7 +1962,7 @@ static void fill_siginfo_note(struct memelfnote *note, user_siginfo_t *csigdata,
{
mm_segment_t old_fs = get_fs();
set_fs(KERNEL_DS);
set_fs(old_fs);
fill_note(note, "CORE", NT_SIGINFO, sizeof(*csigdata), csigdata);
}
-@@ -2213,7 +2688,7 @@ static int elf_core_dump(struct coredump_params *cprm)
+@@ -2201,7 +2682,7 @@ static int elf_core_dump(struct coredump_params *cprm)
vma = next_vma(vma, gate_vma)) {
unsigned long dump_size;
vma_filesz[i++] = dump_size;
vma_data_size += dump_size;
}
-@@ -2321,6 +2796,167 @@ out:
+@@ -2309,6 +2790,167 @@ out:
#endif /* CONFIG_ELF_CORE */
{
register_binfmt(&elf_format);
diff --git a/fs/block_dev.c b/fs/block_dev.c
-index 975266b..c3d1856 100644
+index c7e4163..6939003 100644
--- a/fs/block_dev.c
+++ b/fs/block_dev.c
-@@ -734,7 +734,7 @@ static bool bd_may_claim(struct block_device *bdev, struct block_device *whole,
+@@ -732,7 +732,7 @@ static bool bd_may_claim(struct block_device *bdev, struct block_device *whole,
else if (bdev->bd_contains == bdev)
return true; /* is a whole device which isn't held */
else if (whole->bd_holder != NULL)
return false; /* is a partition of a held device */
diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c
-index 6d67f32..8f33187 100644
+index 0f11ebc..1bf3321 100644
--- a/fs/btrfs/ctree.c
+++ b/fs/btrfs/ctree.c
-@@ -1181,9 +1181,12 @@ static noinline int __btrfs_cow_block(struct btrfs_trans_handle *trans,
+@@ -1180,9 +1180,12 @@ static noinline int __btrfs_cow_block(struct btrfs_trans_handle *trans,
free_extent_buffer(buf);
add_root_to_dirty_list(root);
} else {
WARN_ON(trans->transid != btrfs_header_generation(parent));
diff --git a/fs/btrfs/delayed-inode.c b/fs/btrfs/delayed-inode.c
-index 82f0c7c..dff78a8 100644
+index a2ae427..53c2e98 100644
--- a/fs/btrfs/delayed-inode.c
+++ b/fs/btrfs/delayed-inode.c
@@ -462,7 +462,7 @@ static int __btrfs_add_delayed_deletion_item(struct btrfs_delayed_node *node,
if (val < seq || val >= seq + BTRFS_DELAYED_BATCH)
return 1;
-@@ -1436,7 +1436,7 @@ void btrfs_balance_delayed_items(struct btrfs_root *root)
+@@ -1437,7 +1437,7 @@ void btrfs_balance_delayed_items(struct btrfs_root *root)
int seq;
int ret;
- seq = atomic_read(&delayed_root->items_seq);
+ seq = atomic_read_unchecked(&delayed_root->items_seq);
- ret = btrfs_wq_run_delayed_node(delayed_root, root, 0);
+ ret = btrfs_wq_run_delayed_node(delayed_root, fs_info, 0);
if (ret)
diff --git a/fs/btrfs/delayed-inode.h b/fs/btrfs/delayed-inode.h
index f70119f..ab5894d 100644
spin_lock_init(&delayed_root->lock);
init_waitqueue_head(&delayed_root->wait);
diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c
-index 05fef19..f3774b8 100644
+index 9e66f5e..f7caaf0 100644
--- a/fs/btrfs/super.c
+++ b/fs/btrfs/super.c
@@ -271,7 +271,7 @@ void __btrfs_abort_transaction(struct btrfs_trans_handle *trans,
wake_up(&root->fs_info->transaction_wait);
wake_up(&root->fs_info->transaction_blocked_wait);
diff --git a/fs/btrfs/sysfs.c b/fs/btrfs/sysfs.c
-index 94edb0a..e94dc93 100644
+index e8a4c86..f8c22ae 100644
--- a/fs/btrfs/sysfs.c
+++ b/fs/btrfs/sysfs.c
@@ -472,7 +472,7 @@ static int addrm_unknown_feature_attrs(struct btrfs_fs_info *fs_info, bool add)
return 0;
diff --git a/fs/btrfs/tree-log.h b/fs/btrfs/tree-log.h
-index 154990c..d0cf699 100644
+index 6916a78..4598936 100644
--- a/fs/btrfs/tree-log.h
+++ b/fs/btrfs/tree-log.h
-@@ -43,7 +43,7 @@ static inline void btrfs_init_log_ctx(struct btrfs_log_ctx *ctx)
+@@ -45,7 +45,7 @@ static inline void btrfs_init_log_ctx(struct btrfs_log_ctx *ctx)
static inline void btrfs_set_log_full_commit(struct btrfs_fs_info *fs_info,
struct btrfs_trans_handle *trans)
{
static inline int btrfs_need_log_full_commit(struct btrfs_fs_info *fs_info,
diff --git a/fs/buffer.c b/fs/buffer.c
-index 20805db..2e8fc69 100644
+index c7a5602..18eabd1 100644
--- a/fs/buffer.c
+++ b/fs/buffer.c
@@ -3417,7 +3417,7 @@ void __init buffer_init(void)
/*
diff --git a/fs/cachefiles/bind.c b/fs/cachefiles/bind.c
-index fbb08e9..0fda764 100644
+index 6af790f..ec4c1e6 100644
--- a/fs/cachefiles/bind.c
+++ b/fs/cachefiles/bind.c
@@ -39,13 +39,11 @@ int cachefiles_daemon_bind(struct cachefiles_cache *cache, char *args)
#else
diff --git a/fs/cachefiles/namei.c b/fs/cachefiles/namei.c
-index 1e51714..411eded 100644
+index ab857ab..ff8d593 100644
--- a/fs/cachefiles/namei.c
+++ b/fs/cachefiles/namei.c
@@ -309,7 +309,7 @@ try_again:
return 0;
diff --git a/fs/ceph/dir.c b/fs/ceph/dir.c
-index 83e9976..bfd1eee 100644
+index 4248307..f41e44e 100644
--- a/fs/ceph/dir.c
+++ b/fs/ceph/dir.c
@@ -127,6 +127,8 @@ static int __dcache_readdir(struct file *file, struct dir_context *ctx,
@@ -190,7 +192,12 @@ more:
dout(" %llu (%llu) dentry %p %pd %p\n", di->offset, ctx->pos,
- dentry, dentry, dentry->d_inode);
+ dentry, dentry, d_inode(dentry));
- if (!dir_emit(ctx, dentry->d_name.name,
+ name = dentry->d_name.name;
+ if (name == dentry->d_iname) {
+ }
+ if (!dir_emit(ctx, name,
dentry->d_name.len,
- ceph_translate_ino(dentry->d_sb, dentry->d_inode->i_ino),
- dentry->d_inode->i_mode >> 12)) {
+ ceph_translate_ino(dentry->d_sb, d_inode(dentry)->i_ino),
+ d_inode(dentry)->i_mode >> 12)) {
@@ -248,7 +255,7 @@ static int ceph_readdir(struct file *file, struct dir_context *ctx)
struct ceph_fs_client *fsc = ceph_inode_to_client(inode);
struct ceph_mds_client *mdsc = fsc->mdsc;
u32 ftype;
struct ceph_mds_reply_info_parsed *rinfo;
diff --git a/fs/ceph/super.c b/fs/ceph/super.c
-index a63997b..ddc0577 100644
+index 4e99053..a7e2a5f 100644
--- a/fs/ceph/super.c
+++ b/fs/ceph/super.c
-@@ -889,7 +889,7 @@ static int ceph_compare_super(struct super_block *sb, void *data)
+@@ -885,7 +885,7 @@ static int ceph_compare_super(struct super_block *sb, void *data)
/*
* construct our own bdi so we can control readahead, etc.
*/
static int ceph_register_bdi(struct super_block *sb,
struct ceph_fs_client *fsc)
-@@ -906,7 +906,7 @@ static int ceph_register_bdi(struct super_block *sb,
+@@ -902,7 +902,7 @@ static int ceph_register_bdi(struct super_block *sb,
VM_MAX_READAHEAD * 1024 / PAGE_CACHE_SIZE;
err = bdi_register(&fsc->backing_dev_info, NULL, "ceph-%ld",
server->ops->print_stats(m, tcon);
}
diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c
-index d72fe37..ded5511 100644
+index 0a9fb6b..9def7fa 100644
--- a/fs/cifs/cifsfs.c
+++ b/fs/cifs/cifsfs.c
-@@ -1092,7 +1092,7 @@ cifs_init_request_bufs(void)
+@@ -1082,7 +1082,7 @@ cifs_init_request_bufs(void)
*/
cifs_req_cachep = kmem_cache_create("cifs_request",
CIFSMaxBufSize + max_hdr_size, 0,
if (cifs_req_cachep == NULL)
return -ENOMEM;
-@@ -1119,7 +1119,7 @@ cifs_init_request_bufs(void)
+@@ -1109,7 +1109,7 @@ cifs_init_request_bufs(void)
efficient to alloc 1 per page off the slab compared to 17K (5page)
alloc of large cifs buffers even when page debugging is on */
cifs_sm_req_cachep = kmem_cache_create("cifs_small_rq",
NULL);
if (cifs_sm_req_cachep == NULL) {
mempool_destroy(cifs_req_poolp);
-@@ -1204,8 +1204,8 @@ init_cifs(void)
+@@ -1194,8 +1194,8 @@ init_cifs(void)
atomic_set(&bufAllocCount, 0);
atomic_set(&smBufAllocCount, 0);
#ifdef CONFIG_CIFS_STATS2
atomic_set(&midCount, 0);
diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h
-index 22b289a..bbbba08 100644
+index 22b289a..bbbba082 100644
--- a/fs/cifs/cifsglob.h
+++ b/fs/cifs/cifsglob.h
@@ -823,35 +823,35 @@ struct cifs_tcon {
GLOBAL_EXTERN atomic_t smBufAllocCount;
GLOBAL_EXTERN atomic_t midCount;
diff --git a/fs/cifs/file.c b/fs/cifs/file.c
-index ca30c39..570fb94 100644
+index 3f50cee..7741620 100644
--- a/fs/cifs/file.c
+++ b/fs/cifs/file.c
-@@ -2055,10 +2055,14 @@ static int cifs_writepages(struct address_space *mapping,
+@@ -2054,10 +2054,14 @@ static int cifs_writepages(struct address_space *mapping,
index = mapping->writeback_index; /* Start from prev offset */
end = -1;
} else {
}
server = cifs_sb_master_tcon(cifs_sb)->ses->server;
diff --git a/fs/cifs/misc.c b/fs/cifs/misc.c
-index 3379463..3af418a 100644
+index 8442b8b..ea6986f 100644
--- a/fs/cifs/misc.c
+++ b/fs/cifs/misc.c
@@ -170,7 +170,7 @@ cifs_buf_get(void)
}
diff --git a/fs/cifs/smb1ops.c b/fs/cifs/smb1ops.c
-index d297903..1cb7516 100644
+index fc537c2..47d654c 100644
--- a/fs/cifs/smb1ops.c
+++ b/fs/cifs/smb1ops.c
@@ -622,27 +622,27 @@ static void
}
diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c
-index eab05e1..ffe5ea4 100644
+index 54daee5..2669fcb 100644
--- a/fs/cifs/smb2ops.c
+++ b/fs/cifs/smb2ops.c
@@ -418,8 +418,8 @@ smb2_clear_stats(struct cifs_tcon *tcon)
}
diff --git a/fs/cifs/smb2pdu.c b/fs/cifs/smb2pdu.c
-index 65cd7a8..3518676 100644
+index 54cbe19..fcd4a1b 100644
--- a/fs/cifs/smb2pdu.c
+++ b/fs/cifs/smb2pdu.c
@@ -2147,8 +2147,7 @@ SMB2_query_directory(const unsigned int xid, struct cifs_tcon *tcon,
req->FileIndex = cpu_to_le32(index);
diff --git a/fs/coda/cache.c b/fs/coda/cache.c
-index 46ee6f2..89a9e7f 100644
+index 5bb630a..043dc70 100644
--- a/fs/coda/cache.c
+++ b/fs/coda/cache.c
@@ -24,7 +24,7 @@
/*
diff --git a/fs/compat_ioctl.c b/fs/compat_ioctl.c
-index afec645..9c65620 100644
+index 6b8e2f0..9b13a5e 100644
--- a/fs/compat_ioctl.c
+++ b/fs/compat_ioctl.c
-@@ -621,7 +621,7 @@ static int serial_struct_ioctl(unsigned fd, unsigned cmd,
+@@ -622,7 +622,7 @@ static int serial_struct_ioctl(unsigned fd, unsigned cmd,
return -EFAULT;
if (__get_user(udata, &ss32->iomem_base))
return -EFAULT;
if (__get_user(ss.iomem_reg_shift, &ss32->iomem_reg_shift) ||
__get_user(ss.port_high, &ss32->port_high))
return -EFAULT;
-@@ -703,8 +703,8 @@ static int do_i2c_rdwr_ioctl(unsigned int fd, unsigned int cmd,
+@@ -704,8 +704,8 @@ static int do_i2c_rdwr_ioctl(unsigned int fd, unsigned int cmd,
for (i = 0; i < nmsgs; i++) {
if (copy_in_user(&tmsgs[i].addr, &umsgs[i].addr, 3*sizeof(u16)))
return -EFAULT;
return -EFAULT;
}
return sys_ioctl(fd, cmd, (unsigned long)tdata);
-@@ -797,7 +797,7 @@ static int compat_ioctl_preallocate(struct file *file,
+@@ -798,7 +798,7 @@ static int compat_ioctl_preallocate(struct file *file,
copy_in_user(&p->l_len, &p32->l_len, sizeof(s64)) ||
copy_in_user(&p->l_sysid, &p32->l_sysid, sizeof(s32)) ||
copy_in_user(&p->l_pid, &p32->l_pid, sizeof(u32)) ||
return -EFAULT;
return ioctl_preallocate(file, p);
-@@ -1618,8 +1618,8 @@ COMPAT_SYSCALL_DEFINE3(ioctl, unsigned int, fd, unsigned int, cmd,
+@@ -1620,8 +1620,8 @@ COMPAT_SYSCALL_DEFINE3(ioctl, unsigned int, fd, unsigned int, cmd,
static int __init init_sys32_ioctl_cmp(const void *p, const void *q)
{
unsigned int a, b;
return 1;
if (a < b)
diff --git a/fs/configfs/dir.c b/fs/configfs/dir.c
-index cf0db00..c7f70e8 100644
+index c81ce7f..f3de5fd 100644
--- a/fs/configfs/dir.c
+++ b/fs/configfs/dir.c
@@ -1540,7 +1540,8 @@ static int configfs_readdir(struct file *file, struct dir_context *ctx)
/*
* We'll have a dentry and an inode for
+diff --git a/fs/configfs/item.c b/fs/configfs/item.c
+index e65f9ff..3ed264d 100644
+--- a/fs/configfs/item.c
++++ b/fs/configfs/item.c
+@@ -116,7 +116,7 @@ void config_item_init_type_name(struct config_item *item,
+ const char *name,
+ struct config_item_type *type)
+ {
+- config_item_set_name(item, name);
++ config_item_set_name(item, "%s", name);
+ item->ci_type = type;
+ config_item_init(item);
+ }
+@@ -125,7 +125,7 @@ EXPORT_SYMBOL(config_item_init_type_name);
+ void config_group_init_type_name(struct config_group *group, const char *name,
+ struct config_item_type *type)
+ {
+- config_item_set_name(&group->cg_item, name);
++ config_item_set_name(&group->cg_item, "%s", name);
+ group->cg_item.ci_type = type;
+ config_group_init(group);
+ }
diff --git a/fs/coredump.c b/fs/coredump.c
index bbbe139..b76fae5 100644
--- a/fs/coredump.c
return 0;
while (nr) {
diff --git a/fs/dcache.c b/fs/dcache.c
-index c71e373..5c1f656 100644
+index 50bb3c2..d874b57 100644
--- a/fs/dcache.c
+++ b/fs/dcache.c
-@@ -511,7 +511,7 @@ static void __dentry_kill(struct dentry *dentry)
+@@ -545,7 +545,7 @@ static void __dentry_kill(struct dentry *dentry)
* dentry_iput drops the locks, at which point nobody (except
* transient RCU lookups) can reach this dentry.
*/
this_cpu_dec(nr_dentry);
if (dentry->d_op && dentry->d_op->d_release)
dentry->d_op->d_release(dentry);
-@@ -564,7 +564,7 @@ static inline struct dentry *lock_parent(struct dentry *dentry)
+@@ -598,7 +598,7 @@ static inline struct dentry *lock_parent(struct dentry *dentry)
struct dentry *parent = dentry->d_parent;
if (IS_ROOT(dentry))
return NULL;
return NULL;
if (likely(spin_trylock(&parent->d_lock)))
return parent;
-@@ -626,8 +626,8 @@ static inline bool fast_dput(struct dentry *dentry)
+@@ -642,7 +642,7 @@ static inline bool fast_dput(struct dentry *dentry)
+
+ /*
+ * If we have a d_op->d_delete() operation, we sould not
+- * let the dentry count go to zero, so use "put__or_lock".
++ * let the dentry count go to zero, so use "put_or_lock".
+ */
+ if (unlikely(dentry->d_flags & DCACHE_OP_DELETE))
+ return lockref_put_or_lock(&dentry->d_lockref);
+@@ -660,8 +660,8 @@ static inline bool fast_dput(struct dentry *dentry)
*/
if (unlikely(ret < 0)) {
spin_lock(&dentry->d_lock);
spin_unlock(&dentry->d_lock);
return 1;
}
-@@ -682,7 +682,7 @@ static inline bool fast_dput(struct dentry *dentry)
+@@ -697,7 +697,7 @@ static inline bool fast_dput(struct dentry *dentry)
+ */
+ smp_rmb();
+ d_flags = ACCESS_ONCE(dentry->d_flags);
+- d_flags &= DCACHE_REFERENCED | DCACHE_LRU_LIST;
++ d_flags &= DCACHE_REFERENCED | DCACHE_LRU_LIST | DCACHE_DISCONNECTED;
+
+ /* Nothing to do? Dropping the reference was all we needed? */
+ if (d_flags == (DCACHE_REFERENCED | DCACHE_LRU_LIST) && !d_unhashed(dentry))
+@@ -716,7 +716,7 @@ static inline bool fast_dput(struct dentry *dentry)
* else could have killed it and marked it dead. Either way, we
* don't need to do anything else.
*/
spin_unlock(&dentry->d_lock);
return 1;
}
-@@ -692,7 +692,7 @@ static inline bool fast_dput(struct dentry *dentry)
+@@ -726,7 +726,7 @@ static inline bool fast_dput(struct dentry *dentry)
* lock, and we just tested that it was zero, so we can just
* set it to 1.
*/
return 0;
}
-@@ -751,7 +751,7 @@ repeat:
+@@ -776,6 +776,9 @@ repeat:
+ if (unlikely(d_unhashed(dentry)))
+ goto kill_it;
+
++ if (unlikely(dentry->d_flags & DCACHE_DISCONNECTED))
++ goto kill_it;
++
+ if (unlikely(dentry->d_flags & DCACHE_OP_DELETE)) {
+ if (dentry->d_op->d_delete(dentry))
+ goto kill_it;
+@@ -785,7 +788,7 @@ repeat:
dentry->d_flags |= DCACHE_REFERENCED;
dentry_lru_add(dentry);
spin_unlock(&dentry->d_lock);
return;
-@@ -766,7 +766,7 @@ EXPORT_SYMBOL(dput);
+@@ -800,7 +803,7 @@ EXPORT_SYMBOL(dput);
/* This must be called with d_lock held */
static inline void __dget_dlock(struct dentry *dentry)
{
}
static inline void __dget(struct dentry *dentry)
-@@ -807,8 +807,8 @@ repeat:
+@@ -841,8 +844,8 @@ repeat:
goto repeat;
}
rcu_read_unlock();
spin_unlock(&ret->d_lock);
return ret;
}
-@@ -886,9 +886,9 @@ restart:
+@@ -920,9 +923,9 @@ restart:
spin_lock(&inode->i_lock);
hlist_for_each_entry(dentry, &inode->i_dentry, d_u.d_alias) {
spin_lock(&dentry->d_lock);
__dentry_kill(dentry);
dput(parent);
goto restart;
-@@ -923,7 +923,7 @@ static void shrink_dentry_list(struct list_head *list)
+@@ -957,7 +960,7 @@ static void shrink_dentry_list(struct list_head *list)
* We found an inuse dentry which was not removed from
* the LRU because of laziness during lookup. Do not free it.
*/
spin_unlock(&dentry->d_lock);
if (parent)
spin_unlock(&parent->d_lock);
-@@ -961,8 +961,8 @@ static void shrink_dentry_list(struct list_head *list)
+@@ -995,8 +998,8 @@ static void shrink_dentry_list(struct list_head *list)
dentry = parent;
while (dentry && !lockref_put_or_lock(&dentry->d_lockref)) {
parent = lock_parent(dentry);
spin_unlock(&dentry->d_lock);
if (parent)
spin_unlock(&parent->d_lock);
-@@ -1002,7 +1002,7 @@ static enum lru_status dentry_lru_isolate(struct list_head *item,
+@@ -1036,7 +1039,7 @@ static enum lru_status dentry_lru_isolate(struct list_head *item,
* counts, just remove them from the LRU. Otherwise give them
* another pass through the LRU.
*/
d_lru_isolate(lru, dentry);
spin_unlock(&dentry->d_lock);
return LRU_REMOVED;
-@@ -1336,7 +1336,7 @@ static enum d_walk_ret select_collect(void *_data, struct dentry *dentry)
+@@ -1370,7 +1373,7 @@ static enum d_walk_ret select_collect(void *_data, struct dentry *dentry)
} else {
if (dentry->d_flags & DCACHE_LRU_LIST)
d_lru_del(dentry);
d_shrink_add(dentry, &data->dispose);
data->found++;
}
-@@ -1384,7 +1384,7 @@ static enum d_walk_ret umount_check(void *_data, struct dentry *dentry)
+@@ -1418,7 +1421,7 @@ static enum d_walk_ret umount_check(void *_data, struct dentry *dentry)
return D_WALK_CONTINUE;
/* root with refcount 1 is fine */
return D_WALK_CONTINUE;
printk(KERN_ERR "BUG: Dentry %p{i=%lx,n=%pd} "
-@@ -1393,7 +1393,7 @@ static enum d_walk_ret umount_check(void *_data, struct dentry *dentry)
+@@ -1427,7 +1430,7 @@ static enum d_walk_ret umount_check(void *_data, struct dentry *dentry)
dentry->d_inode ?
dentry->d_inode->i_ino : 0UL,
dentry,
dentry->d_sb->s_type->name,
dentry->d_sb->s_id);
WARN_ON(1);
-@@ -1534,7 +1534,7 @@ struct dentry *__d_alloc(struct super_block *sb, const struct qstr *name)
+@@ -1568,7 +1571,7 @@ struct dentry *__d_alloc(struct super_block *sb, const struct qstr *name)
dentry->d_iname[DNAME_INLINE_LEN-1] = 0;
if (name->len > DNAME_INLINE_LEN-1) {
size_t size = offsetof(struct external_name, name[1]);
if (!p) {
kmem_cache_free(dentry_cache, dentry);
return NULL;
-@@ -1557,7 +1557,7 @@ struct dentry *__d_alloc(struct super_block *sb, const struct qstr *name)
+@@ -1591,7 +1594,7 @@ struct dentry *__d_alloc(struct super_block *sb, const struct qstr *name)
smp_wmb();
dentry->d_name.name = dname;
dentry->d_flags = 0;
spin_lock_init(&dentry->d_lock);
seqcount_init(&dentry->d_seq);
-@@ -1566,6 +1566,9 @@ struct dentry *__d_alloc(struct super_block *sb, const struct qstr *name)
+@@ -1600,6 +1603,9 @@ struct dentry *__d_alloc(struct super_block *sb, const struct qstr *name)
dentry->d_sb = sb;
dentry->d_op = NULL;
dentry->d_fsdata = NULL;
INIT_HLIST_BL_NODE(&dentry->d_hash);
INIT_LIST_HEAD(&dentry->d_lru);
INIT_LIST_HEAD(&dentry->d_subdirs);
-@@ -2290,7 +2293,7 @@ struct dentry *__d_lookup(const struct dentry *parent, const struct qstr *name)
+@@ -2321,7 +2327,7 @@ struct dentry *__d_lookup(const struct dentry *parent, const struct qstr *name)
goto next;
}
found = dentry;
spin_unlock(&dentry->d_lock);
break;
-@@ -2358,7 +2361,7 @@ again:
+@@ -2389,7 +2395,7 @@ again:
spin_lock(&dentry->d_lock);
inode = dentry->d_inode;
isdir = S_ISDIR(inode->i_mode);
if (!spin_trylock(&inode->i_lock)) {
spin_unlock(&dentry->d_lock);
cpu_relax();
-@@ -3311,7 +3314,7 @@ static enum d_walk_ret d_genocide_kill(void *data, struct dentry *dentry)
+@@ -3331,7 +3337,7 @@ static enum d_walk_ret d_genocide_kill(void *data, struct dentry *dentry)
if (!(dentry->d_flags & DCACHE_GENOCIDE)) {
dentry->d_flags |= DCACHE_GENOCIDE;
}
}
return D_WALK_CONTINUE;
-@@ -3427,7 +3430,8 @@ void __init vfs_caches_init(unsigned long mempages)
+@@ -3447,7 +3453,8 @@ void __init vfs_caches_init(unsigned long mempages)
mempages -= reserve;
names_cachep = kmem_cache_create("names_cache", PATH_MAX, 0,
dcache_init();
inode_init();
diff --git a/fs/debugfs/inode.c b/fs/debugfs/inode.c
-index 96400ab..906103d 100644
+index 1275604..d2ca85b 100644
--- a/fs/debugfs/inode.c
+++ b/fs/debugfs/inode.c
-@@ -386,6 +386,10 @@ struct dentry *debugfs_create_file_size(const char *name, umode_t mode,
- }
- EXPORT_SYMBOL_GPL(debugfs_create_file_size);
-
-+#ifdef CONFIG_GRKERNSEC_SYSFS_RESTRICT
-+extern int grsec_enable_sysfs_restrict;
-+#endif
-+
- /**
- * debugfs_create_dir - create a directory in the debugfs filesystem
- * @name: a pointer to a string containing the name of the directory to
-@@ -404,6 +408,10 @@ EXPORT_SYMBOL_GPL(debugfs_create_file_size);
+@@ -407,6 +407,10 @@ EXPORT_SYMBOL_GPL(debugfs_create_file_size);
* If debugfs is not enabled in the kernel, the value -%ENODEV will be
* returned.
*/
struct dentry *debugfs_create_dir(const char *name, struct dentry *parent)
{
struct dentry *dentry = start_creating(name, parent);
-@@ -416,7 +424,12 @@ struct dentry *debugfs_create_dir(const char *name, struct dentry *parent)
+@@ -419,7 +423,12 @@ struct dentry *debugfs_create_dir(const char *name, struct dentry *parent)
if (unlikely(!inode))
return failed_creating(dentry);
inode->i_fop = &simple_dir_operations;
diff --git a/fs/ecryptfs/inode.c b/fs/ecryptfs/inode.c
-index b08b518..d6acffa 100644
+index fc850b5..1677a2a 100644
--- a/fs/ecryptfs/inode.c
+++ b/fs/ecryptfs/inode.c
@@ -663,7 +663,7 @@ static char *ecryptfs_readlink_lower(struct dentry *dentry, size_t *bufsiz)
old_fs = get_fs();
set_fs(get_ds());
- rc = lower_dentry->d_inode->i_op->readlink(lower_dentry,
+ rc = d_inode(lower_dentry)->i_op->readlink(lower_dentry,
- (char __user *)lower_buf,
+ (char __force_user *)lower_buf,
PATH_MAX);
i += packet_length_size;
if (copy_to_user(&buf[i], msg_ctx->msg, msg_ctx->msg_size))
diff --git a/fs/exec.c b/fs/exec.c
-index 00400cf..b9d927b 100644
+index 1977c2a..40e7f8f 100644
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -56,8 +56,20 @@
/*
* cover the whole range: [new_start, old_end)
*/
-@@ -672,10 +718,6 @@ int setup_arg_pages(struct linux_binprm *bprm,
+@@ -675,10 +721,6 @@ int setup_arg_pages(struct linux_binprm *bprm,
stack_top = arch_align_stack(stack_top);
stack_top = PAGE_ALIGN(stack_top);
stack_shift = vma->vm_end - stack_top;
bprm->p -= stack_shift;
-@@ -687,8 +729,28 @@ int setup_arg_pages(struct linux_binprm *bprm,
+@@ -690,8 +732,28 @@ int setup_arg_pages(struct linux_binprm *bprm,
bprm->exec -= stack_shift;
down_write(&mm->mmap_sem);
/*
* Adjust stack execute permissions; explicitly enable for
* EXSTACK_ENABLE_X, disable for EXSTACK_DISABLE_X and leave alone
-@@ -707,13 +769,6 @@ int setup_arg_pages(struct linux_binprm *bprm,
+@@ -710,13 +772,6 @@ int setup_arg_pages(struct linux_binprm *bprm,
goto out_unlock;
BUG_ON(prev != vma);
/* mprotect_fixup is overkill to remove the temporary stack flags */
vma->vm_flags &= ~VM_STACK_INCOMPLETE_SETUP;
-@@ -737,6 +792,27 @@ int setup_arg_pages(struct linux_binprm *bprm,
+@@ -740,6 +795,27 @@ int setup_arg_pages(struct linux_binprm *bprm,
#endif
current->mm->start_stack = bprm->p;
ret = expand_stack(vma, stack_base);
if (ret)
ret = -EFAULT;
-@@ -781,8 +857,10 @@ static struct file *do_open_execat(int fd, struct filename *name, int flags)
+@@ -784,8 +860,10 @@ static struct file *do_open_execat(int fd, struct filename *name, int flags)
if (err)
goto exit;
out:
return file;
-@@ -815,7 +893,7 @@ int kernel_read(struct file *file, loff_t offset,
+@@ -818,7 +896,7 @@ int kernel_read(struct file *file, loff_t offset,
old_fs = get_fs();
set_fs(get_ds());
/* The cast to a user pointer is valid due to the set_fs() */
set_fs(old_fs);
return result;
}
-@@ -860,6 +938,7 @@ static int exec_mmap(struct mm_struct *mm)
+@@ -863,6 +941,7 @@ static int exec_mmap(struct mm_struct *mm)
tsk->mm = mm;
tsk->active_mm = mm;
activate_mm(active_mm, mm);
tsk->mm->vmacache_seqnum = 0;
vmacache_flush(tsk);
task_unlock(tsk);
-@@ -926,10 +1005,14 @@ static int de_thread(struct task_struct *tsk)
- if (!thread_group_leader(tsk)) {
- struct task_struct *leader = tsk->group_leader;
-
-- sig->notify_count = -1; /* for exit_notify() */
- for (;;) {
- threadgroup_change_begin(tsk);
- write_lock_irq(&tasklist_lock);
-+ /*
-+ * Do this under tasklist_lock to ensure that
-+ * exit_notify() can't miss ->group_exit_task
-+ */
-+ sig->notify_count = -1;
- if (likely(leader->exit_state))
- break;
- __set_current_state(TASK_KILLABLE);
-@@ -1258,7 +1341,7 @@ static void check_unsafe_exec(struct linux_binprm *bprm)
+@@ -1271,7 +1350,7 @@ static void check_unsafe_exec(struct linux_binprm *bprm)
}
rcu_read_unlock();
bprm->unsafe |= LSM_UNSAFE_SHARE;
else
p->fs->in_exec = 1;
-@@ -1459,6 +1542,31 @@ static int exec_binprm(struct linux_binprm *bprm)
+@@ -1472,6 +1551,31 @@ static int exec_binprm(struct linux_binprm *bprm)
return ret;
}
/*
* sys_execve() executes a new program.
*/
-@@ -1467,6 +1575,11 @@ static int do_execveat_common(int fd, struct filename *filename,
+@@ -1480,6 +1584,11 @@ static int do_execveat_common(int fd, struct filename *filename,
struct user_arg_ptr envp,
int flags)
{
char *pathbuf = NULL;
struct linux_binprm *bprm;
struct file *file;
-@@ -1476,6 +1589,8 @@ static int do_execveat_common(int fd, struct filename *filename,
+@@ -1489,6 +1598,8 @@ static int do_execveat_common(int fd, struct filename *filename,
if (IS_ERR(filename))
return PTR_ERR(filename);
/*
* We move the actual failure in case of RLIMIT_NPROC excess from
* set*uid() to execve() because too many poorly written programs
-@@ -1513,6 +1628,11 @@ static int do_execveat_common(int fd, struct filename *filename,
+@@ -1526,6 +1637,11 @@ static int do_execveat_common(int fd, struct filename *filename,
if (IS_ERR(file))
goto out_unmark;
sched_exec();
bprm->file = file;
-@@ -1539,6 +1659,11 @@ static int do_execveat_common(int fd, struct filename *filename,
+@@ -1552,6 +1668,11 @@ static int do_execveat_common(int fd, struct filename *filename,
}
bprm->interp = bprm->filename;
retval = bprm_mm_init(bprm);
if (retval)
goto out_unmark;
-@@ -1555,24 +1680,70 @@ static int do_execveat_common(int fd, struct filename *filename,
+@@ -1568,24 +1689,70 @@ static int do_execveat_common(int fd, struct filename *filename,
if (retval < 0)
goto out;
current->fs->in_exec = 0;
current->in_execve = 0;
acct_update_integrals(current);
-@@ -1584,6 +1755,14 @@ static int do_execveat_common(int fd, struct filename *filename,
+@@ -1597,6 +1764,14 @@ static int do_execveat_common(int fd, struct filename *filename,
put_files_struct(displaced);
return retval;
out:
if (bprm->mm) {
acct_arg_size(bprm, 0);
-@@ -1730,3 +1909,312 @@ COMPAT_SYSCALL_DEFINE5(execveat, int, fd,
+@@ -1743,3 +1918,312 @@ COMPAT_SYSCALL_DEFINE5(execveat, int, fd,
argv, envp, flags);
}
#endif
+void pax_report_refcount_overflow(struct pt_regs *regs)
+{
+ if (current->signal->curr_ip)
-+ printk(KERN_ERR "PAX: From %pI4: refcount overflow detected in: %s:%d, uid/euid: %u/%u\n",
++ printk(KERN_EMERG "PAX: From %pI4: refcount overflow detected in: %s:%d, uid/euid: %u/%u\n",
+ ¤t->signal->curr_ip, current->comm, task_pid_nr(current),
+ from_kuid_munged(&init_user_ns, current_uid()), from_kuid_munged(&init_user_ns, current_euid()));
+ else
-+ printk(KERN_ERR "PAX: refcount overflow detected in: %s:%d, uid/euid: %u/%u\n", current->comm, task_pid_nr(current),
++ printk(KERN_EMERG "PAX: refcount overflow detected in: %s:%d, uid/euid: %u/%u\n", current->comm, task_pid_nr(current),
+ from_kuid_munged(&init_user_ns, current_uid()), from_kuid_munged(&init_user_ns, current_euid()));
-+ print_symbol(KERN_ERR "PAX: refcount overflow occured at: %s\n", instruction_pointer(regs));
++ print_symbol(KERN_EMERG "PAX: refcount overflow occured at: %s\n", instruction_pointer(regs));
+ preempt_disable();
+ show_regs(regs);
+ preempt_enable();
+static __noreturn void pax_report_usercopy(const void *ptr, unsigned long len, bool to_user, const char *type)
+{
+ if (current->signal->curr_ip)
-+ printk(KERN_ERR "PAX: From %pI4: kernel memory %s attempt detected %s %p (%s) (%lu bytes)\n",
++ printk(KERN_EMERG "PAX: From %pI4: kernel memory %s attempt detected %s %p (%s) (%lu bytes)\n",
+ ¤t->signal->curr_ip, to_user ? "leak" : "overwrite", to_user ? "from" : "to", ptr, type ? : "unknown", len);
+ else
-+ printk(KERN_ERR "PAX: kernel memory %s attempt detected %s %p (%s) (%lu bytes)\n",
++ printk(KERN_EMERG "PAX: kernel memory %s attempt detected %s %p (%s) (%lu bytes)\n",
+ to_user ? "leak" : "overwrite", to_user ? "from" : "to", ptr, type ? : "unknown", len);
+ dump_stack();
+ gr_handle_kernel_exploit();
+EXPORT_SYMBOL(__check_object_size);
+
+#ifdef CONFIG_PAX_MEMORY_STACKLEAK
-+void pax_track_stack(void)
++void __used pax_track_stack(void)
+{
+ unsigned long sp = (unsigned long)&sp;
+ if (sp < current_thread_info()->lowest_stack &&
+#endif
+
+#ifdef CONFIG_PAX_SIZE_OVERFLOW
-+void __nocapture(1, 3, 4) report_size_overflow(const char *file, unsigned int line, const char *func, const char *ssa_name)
++void __nocapture(1, 3, 4) __used report_size_overflow(const char *file, unsigned int line, const char *func, const char *ssa_name)
+{
-+ printk(KERN_ERR "PAX: size overflow detected in function %s %s:%u %s", func, file, line, ssa_name);
++ printk(KERN_EMERG "PAX: size overflow detected in function %s %s:%u %s", func, file, line, ssa_name);
+ dump_stack();
+ do_group_exit(SIGKILL);
+}
#ifdef CONFIG_EXT2_FS_POSIX_ACL
if (def_mount_opts & EXT2_DEFM_ACL)
diff --git a/fs/ext2/xattr.c b/fs/ext2/xattr.c
-index 9142614..97484fa 100644
+index 0b6bfd3..93a2964 100644
--- a/fs/ext2/xattr.c
+++ b/fs/ext2/xattr.c
@@ -247,7 +247,7 @@ ext2_xattr_list(struct dentry *dentry, char *buffer, size_t buffer_size)
}
return 1;
diff --git a/fs/ext3/super.c b/fs/ext3/super.c
-index d4dbf3c..906a6fb 100644
+index a9312f0..e3a11ec 100644
--- a/fs/ext3/super.c
+++ b/fs/ext3/super.c
@@ -655,10 +655,8 @@ static int ext3_show_options(struct seq_file *seq, struct dentry *root)
#ifdef CONFIG_EXT3_FS_POSIX_ACL
if (def_mount_opts & EXT3_DEFM_ACL)
diff --git a/fs/ext3/xattr.c b/fs/ext3/xattr.c
-index c6874be..f8a6ae8 100644
+index 7cf3650..e3f4a51 100644
--- a/fs/ext3/xattr.c
+++ b/fs/ext3/xattr.c
@@ -330,7 +330,7 @@ static int
static int
diff --git a/fs/ext4/balloc.c b/fs/ext4/balloc.c
-index 83a6f49..d4e4d03 100644
+index 955bf49a..44ee359 100644
--- a/fs/ext4/balloc.c
+++ b/fs/ext4/balloc.c
-@@ -557,8 +557,8 @@ static int ext4_has_free_clusters(struct ext4_sb_info *sbi,
+@@ -556,8 +556,8 @@ static int ext4_has_free_clusters(struct ext4_sb_info *sbi,
/* Hm, nope. Are (enough) root reserved clusters available? */
if (uid_eq(sbi->s_resuid, current_fsuid()) ||
(!gid_eq(sbi->s_resgid, GLOBAL_ROOT_GID) && in_group_p(sbi->s_resgid)) ||
if (free_clusters >= (nclusters + dirty_clusters +
resv_clusters))
diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
-index f63c3d5..3c1a033 100644
+index 9a83f14..1dd1b38 100644
--- a/fs/ext4/ext4.h
+++ b/fs/ext4/ext4.h
-@@ -1287,19 +1287,19 @@ struct ext4_sb_info {
+@@ -1310,19 +1310,19 @@ struct ext4_sb_info {
unsigned long s_mb_last_start;
/* stats for buddy allocator */
"MMP failure info: last update time: %llu, last update "
"node: %s, last update device: %s\n",
diff --git a/fs/ext4/resize.c b/fs/ext4/resize.c
-index 8a8ec62..1b02de5 100644
+index cf0c472..ddf284d 100644
--- a/fs/ext4/resize.c
+++ b/fs/ext4/resize.c
@@ -413,7 +413,7 @@ static int set_flexbg_block_bitmap(struct super_block *sb, handle_t *handle,
err = ext4_handle_dirty_metadata(handle, NULL, bh);
if (unlikely(err))
diff --git a/fs/ext4/super.c b/fs/ext4/super.c
-index e061e66..87bc092 100644
+index ca9d4a2..4c52f42 100644
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
-@@ -1243,7 +1243,7 @@ static ext4_fsblk_t get_sb_block(void **data)
+@@ -1232,7 +1232,7 @@ static ext4_fsblk_t get_sb_block(void **data)
}
#define DEFAULT_JOURNAL_IOPRIO (IOPRIO_PRIO_VALUE(IOPRIO_CLASS_BE, 3))
"Contact linux-ext4@vger.kernel.org if you think we should keep it.\n";
#ifdef CONFIG_QUOTA
-@@ -2443,7 +2443,7 @@ struct ext4_attr {
+@@ -2442,7 +2442,7 @@ struct ext4_attr {
int offset;
int deprecated_val;
} u;
static int parse_strtoull(const char *buf,
unsigned long long max, unsigned long long *value)
diff --git a/fs/ext4/xattr.c b/fs/ext4/xattr.c
-index 1e09fc7..0400dd4 100644
+index 16e28c0..728c282 100644
--- a/fs/ext4/xattr.c
+++ b/fs/ext4/xattr.c
-@@ -399,7 +399,7 @@ static int
+@@ -398,7 +398,7 @@ static int
ext4_xattr_list_entries(struct dentry *dentry, struct ext4_xattr_entry *entry,
char *buffer, size_t buffer_size)
{
for (; !IS_LAST_ENTRY(entry); entry = EXT4_XATTR_NEXT(entry)) {
const struct xattr_handler *handler =
-@@ -416,9 +416,10 @@ ext4_xattr_list_entries(struct dentry *dentry, struct ext4_xattr_entry *entry,
+@@ -415,9 +415,10 @@ ext4_xattr_list_entries(struct dentry *dentry, struct ext4_xattr_entry *entry,
buffer += size;
}
rest -= size;
}
EXPORT_SYMBOL(__f_setown);
diff --git a/fs/fhandle.c b/fs/fhandle.c
-index 999ff5c..2281df9 100644
+index d59712d..2281df9 100644
--- a/fs/fhandle.c
+++ b/fs/fhandle.c
@@ -8,6 +8,7 @@
retval = -EPERM;
goto out_err;
}
-@@ -195,8 +195,9 @@ static int handle_to_path(int mountdirfd, struct file_handle __user *ufh,
- goto out_err;
- }
- /* copy the full handle */
-- if (copy_from_user(handle, ufh,
-- sizeof(struct file_handle) +
-+ *handle = f_handle;
-+ if (copy_from_user(&handle->f_handle,
-+ &ufh->f_handle,
- f_handle.handle_bytes)) {
- retval = -EFAULT;
- goto out_handle;
diff --git a/fs/file.c b/fs/file.c
-index ee738ea..f6c15629 100644
+index 93c5f89..ed75817 100644
--- a/fs/file.c
+++ b/fs/file.c
@@ -16,6 +16,7 @@
{
struct fdtable *fdt;
-@@ -800,6 +801,7 @@ int replace_fd(unsigned fd, struct file *file, unsigned flags)
+@@ -799,6 +800,7 @@ int replace_fd(unsigned fd, struct file *file, unsigned flags)
if (!file)
return __close_fd(files, fd);
if (fd >= rlimit(RLIMIT_NOFILE))
return -EBADF;
-@@ -826,6 +828,7 @@ SYSCALL_DEFINE3(dup3, unsigned int, oldfd, unsigned int, newfd, int, flags)
+@@ -825,6 +827,7 @@ SYSCALL_DEFINE3(dup3, unsigned int, oldfd, unsigned int, newfd, int, flags)
if (unlikely(oldfd == newfd))
return -EINVAL;
if (newfd >= rlimit(RLIMIT_NOFILE))
return -EBADF;
-@@ -881,6 +884,7 @@ SYSCALL_DEFINE1(dup, unsigned int, fildes)
+@@ -880,6 +883,7 @@ SYSCALL_DEFINE1(dup, unsigned int, fildes)
int f_dupfd(unsigned int from, struct file *file, unsigned flags)
{
int err;
seq_printf(m, "CacheOp: alo=%d luo=%d luc=%d gro=%d\n",
atomic_read(&fscache_n_cop_alloc_object),
diff --git a/fs/fuse/cuse.c b/fs/fuse/cuse.c
-index 28d0c7a..04816b7 100644
+index e5bbf74..9bfdaf3 100644
--- a/fs/fuse/cuse.c
+++ b/fs/fuse/cuse.c
-@@ -611,10 +611,12 @@ static int __init cuse_init(void)
+@@ -602,10 +602,12 @@ static int __init cuse_init(void)
INIT_LIST_HEAD(&cuse_conntbl[i]);
/* inherit and extend fuse_dev_operations */
cuse_class = class_create(THIS_MODULE, "cuse");
if (IS_ERR(cuse_class))
diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c
-index 39706c5..a803c71 100644
+index c8b68ab..97190db 100644
--- a/fs/fuse/dev.c
+++ b/fs/fuse/dev.c
-@@ -1405,7 +1405,7 @@ static ssize_t fuse_dev_splice_read(struct file *in, loff_t *ppos,
+@@ -1398,7 +1398,7 @@ static ssize_t fuse_dev_splice_read(struct file *in, loff_t *ppos,
ret = 0;
pipe_lock(pipe);
send_sig(SIGPIPE, current, 0);
if (!ret)
ret = -EPIPE;
-@@ -1434,7 +1434,7 @@ static ssize_t fuse_dev_splice_read(struct file *in, loff_t *ppos,
+@@ -1427,7 +1427,7 @@ static ssize_t fuse_dev_splice_read(struct file *in, loff_t *ppos,
page_nr++;
ret += buf->len;
}
diff --git a/fs/fuse/dir.c b/fs/fuse/dir.c
-index 1545b71..7fabe47 100644
+index 0572bca..cb9c3fa 100644
--- a/fs/fuse/dir.c
+++ b/fs/fuse/dir.c
@@ -1394,7 +1394,7 @@ static char *read_link(struct dentry *dentry)
if (!IS_ERR(link))
free_page((unsigned long) link);
diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c
-index f42dffb..4a4c435 100644
+index 0fa8062..755b198 100644
--- a/fs/gfs2/glock.c
+++ b/fs/gfs2/glock.c
@@ -385,9 +385,9 @@ static void state_change(struct gfs2_glock *gl, unsigned int new_state)
}
diff --git a/fs/gfs2/quota.c b/fs/gfs2/quota.c
-index 3aa17d4..b338075 100644
+index e3065cb..45e7117 100644
--- a/fs/gfs2/quota.c
+++ b/fs/gfs2/quota.c
@@ -154,7 +154,7 @@ static enum lru_status gfs2_qd_isolate(struct list_head *item,
spin_unlock(&qd->qd_lockref.lock);
diff --git a/fs/hostfs/hostfs_kern.c b/fs/hostfs/hostfs_kern.c
-index fd62cae..3494dfa 100644
+index 07d8d8f..2c2a4e7 100644
--- a/fs/hostfs/hostfs_kern.c
+++ b/fs/hostfs/hostfs_kern.c
-@@ -908,7 +908,7 @@ static void *hostfs_follow_link(struct dentry *dentry, struct nameidata *nd)
+@@ -918,7 +918,7 @@ static void *hostfs_follow_link(struct dentry *dentry, struct nameidata *nd)
static void hostfs_put_link(struct dentry *dentry, struct nameidata *nd, void *cookie)
{
__putname(s);
}
diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c
-index c274aca..772fa5e 100644
+index 87724c1..5a5e53f 100644
--- a/fs/hugetlbfs/inode.c
+++ b/fs/hugetlbfs/inode.c
-@@ -148,6 +148,7 @@ hugetlb_get_unmapped_area(struct file *file, unsigned long addr,
+@@ -151,6 +151,7 @@ hugetlb_get_unmapped_area(struct file *file, unsigned long addr,
struct mm_struct *mm = current->mm;
struct vm_area_struct *vma;
struct hstate *h = hstate_file(file);
struct vm_unmapped_area_info info;
if (len & ~huge_page_mask(h))
-@@ -161,17 +162,26 @@ hugetlb_get_unmapped_area(struct file *file, unsigned long addr,
+@@ -164,17 +165,26 @@ hugetlb_get_unmapped_area(struct file *file, unsigned long addr,
return addr;
}
info.high_limit = TASK_SIZE;
info.align_mask = PAGE_MASK & ~huge_page_mask(h);
info.align_offset = 0;
-@@ -912,7 +922,7 @@ static struct file_system_type hugetlbfs_fs_type = {
+@@ -939,7 +949,7 @@ static struct file_system_type hugetlbfs_fs_type = {
};
MODULE_ALIAS_FS("hugetlbfs");
static int can_do_hugetlb_shm(void)
{
diff --git a/fs/inode.c b/fs/inode.c
-index f00b16f..b653fea 100644
+index 6e342ca..0538cb7 100644
--- a/fs/inode.c
+++ b/fs/inode.c
@@ -830,16 +830,20 @@ unsigned int get_next_ino(void)
/*
diff --git a/fs/jfs/super.c b/fs/jfs/super.c
-index 5d30c56..8c45372 100644
+index 4cd9798..8dfe86a 100644
--- a/fs/jfs/super.c
+++ b/fs/jfs/super.c
@@ -901,7 +901,7 @@ static int __init init_jfs_fs(void)
if (jfs_inode_cachep == NULL)
return -ENOMEM;
diff --git a/fs/kernfs/dir.c b/fs/kernfs/dir.c
-index 6acc964..eca491f 100644
+index 2d48d28..82eddad 100644
--- a/fs/kernfs/dir.c
+++ b/fs/kernfs/dir.c
@@ -182,7 +182,7 @@ struct kernfs_node *kernfs_get_parent(struct kernfs_node *kn)
{
unsigned long hash = init_name_hash();
unsigned int len = strlen(name);
-@@ -831,6 +831,12 @@ static int kernfs_iop_mkdir(struct inode *dir, struct dentry *dentry,
+@@ -873,6 +873,12 @@ static int kernfs_iop_mkdir(struct inode *dir, struct dentry *dentry,
ret = scops->mkdir(parent, dentry->d_name.name, mode);
kernfs_put_active(parent);
free_page((unsigned long)page);
}
diff --git a/fs/libfs.c b/fs/libfs.c
-index 0ab6512..cd9982d 100644
+index 0281359..24971ac 100644
--- a/fs/libfs.c
+++ b/fs/libfs.c
@@ -160,6 +160,9 @@ int dcache_readdir(struct file *file, struct dir_context *ctx)
+ name = d_name;
+ }
+ if (!dir_emit(ctx, name, next->d_name.len,
- next->d_inode->i_ino, dt_type(next->d_inode)))
+ d_inode(next)->i_ino, dt_type(d_inode(next))))
return 0;
spin_lock(&dentry->d_lock);
@@ -1027,7 +1035,7 @@ EXPORT_SYMBOL(noop_fsync);
#define MNT_NS_INTERNAL ERR_PTR(-EINVAL) /* distinct from any mnt_namespace */
diff --git a/fs/namei.c b/fs/namei.c
-index 50a8583..44c470a 100644
+index fe30d3b..cf767ae 100644
--- a/fs/namei.c
+++ b/fs/namei.c
-@@ -337,17 +337,32 @@ int generic_permission(struct inode *inode, int mask)
+@@ -336,17 +336,32 @@ int generic_permission(struct inode *inode, int mask)
if (ret != -EACCES)
return ret;
* Read/write DACs are always overridable.
* Executable DACs are overridable when there is
* at least one exec bit set.
-@@ -356,14 +371,6 @@ int generic_permission(struct inode *inode, int mask)
+@@ -355,14 +370,6 @@ int generic_permission(struct inode *inode, int mask)
if (capable_wrt_inode_uidgid(inode, CAP_DAC_OVERRIDE))
return 0;
return -EACCES;
}
EXPORT_SYMBOL(generic_permission);
-@@ -503,7 +510,7 @@ struct nameidata {
+@@ -502,7 +509,7 @@ struct nameidata {
int last_type;
unsigned depth;
struct file *base;
};
/*
-@@ -714,13 +721,13 @@ void nd_jump_link(struct nameidata *nd, struct path *path)
+@@ -713,13 +720,13 @@ void nd_jump_link(struct nameidata *nd, struct path *path)
nd->flags |= LOOKUP_JUMPED;
}
{
return nd->saved_names[nd->depth];
}
-@@ -855,7 +862,7 @@ follow_link(struct path *link, struct nameidata *nd, void **p)
+@@ -854,7 +861,7 @@ follow_link(struct path *link, struct nameidata *nd, void **p)
{
struct dentry *dentry = link->dentry;
int error;
BUG_ON(nd->flags & LOOKUP_RCU);
-@@ -876,6 +883,12 @@ follow_link(struct path *link, struct nameidata *nd, void **p)
+@@ -875,6 +882,11 @@ follow_link(struct path *link, struct nameidata *nd, void **p)
if (error)
goto out_put_nd_path;
-+ if (gr_handle_follow_link(dentry->d_parent->d_inode,
-+ dentry->d_inode, dentry, nd->path.mnt)) {
++ if (gr_handle_follow_link(dentry, nd->path.mnt)) {
+ error = -EACCES;
+ goto out_put_nd_path;
+ }
nd->last_type = LAST_BIND;
*p = dentry->d_inode->i_op->follow_link(dentry, nd);
error = PTR_ERR(*p);
-@@ -1640,6 +1653,8 @@ static inline int nested_symlink(struct path *path, struct nameidata *nd)
+@@ -1647,6 +1659,8 @@ static inline int nested_symlink(struct path *path, struct nameidata *nd)
if (res)
break;
res = walk_component(nd, path, LOOKUP_FOLLOW);
put_link(nd, &link, cookie);
} while (res > 0);
-@@ -1712,7 +1727,7 @@ EXPORT_SYMBOL(full_name_hash);
+@@ -1719,7 +1733,7 @@ EXPORT_SYMBOL(full_name_hash);
static inline u64 hash_name(const char *name)
{
unsigned long a, b, adata, bdata, mask, hash, len;
hash = a = 0;
len = -sizeof(unsigned long);
-@@ -2007,6 +2022,8 @@ static int path_lookupat(int dfd, const char *name,
+@@ -2015,6 +2029,8 @@ static int path_lookupat(int dfd, const struct filename *name,
if (err)
break;
err = lookup_last(nd, &path);
put_link(nd, &link, cookie);
}
}
-@@ -2014,6 +2031,13 @@ static int path_lookupat(int dfd, const char *name,
+@@ -2022,6 +2038,13 @@ static int path_lookupat(int dfd, const struct filename *name,
if (!err)
err = complete_walk(nd);
if (!err && nd->flags & LOOKUP_DIRECTORY) {
if (!d_can_lookup(nd->path.dentry)) {
path_put(&nd->path);
-@@ -2035,8 +2059,15 @@ static int filename_lookup(int dfd, struct filename *name,
- retval = path_lookupat(dfd, name->name,
- flags | LOOKUP_REVAL, nd);
+@@ -2042,8 +2065,15 @@ static int filename_lookup(int dfd, struct filename *name,
+ if (unlikely(retval == -ESTALE))
+ retval = path_lookupat(dfd, name, flags | LOOKUP_REVAL, nd);
- if (likely(!retval))
+ if (likely(!retval)) {
return retval;
}
-@@ -2615,6 +2646,13 @@ static int may_open(struct path *path, int acc_mode, int flag)
+@@ -2621,6 +2651,13 @@ static int may_open(struct path *path, int acc_mode, int flag)
if (flag & O_NOATIME && !inode_owner_or_capable(inode))
return -EPERM;
return 0;
}
-@@ -2846,7 +2884,7 @@ looked_up:
+@@ -2852,7 +2889,7 @@ looked_up:
* cleared otherwise prior to returning.
*/
static int lookup_open(struct nameidata *nd, struct path *path,
const struct open_flags *op,
bool got_write, int *opened)
{
-@@ -2881,6 +2919,17 @@ static int lookup_open(struct nameidata *nd, struct path *path,
+@@ -2887,6 +2924,17 @@ static int lookup_open(struct nameidata *nd, struct path *path,
/* Negative dentry, just create the file */
if (!dentry->d_inode && (op->open_flag & O_CREAT)) {
umode_t mode = op->mode;
if (!IS_POSIXACL(dir->d_inode))
mode &= ~current_umask();
/*
-@@ -2902,6 +2951,8 @@ static int lookup_open(struct nameidata *nd, struct path *path,
+@@ -2908,6 +2956,8 @@ static int lookup_open(struct nameidata *nd, struct path *path,
nd->flags & LOOKUP_EXCL);
if (error)
goto out_dput;
}
out_no_open:
path->dentry = dentry;
-@@ -2916,7 +2967,7 @@ out_dput:
+@@ -2922,7 +2972,7 @@ out_dput:
/*
* Handle the last step of open()
*/
struct file *file, const struct open_flags *op,
int *opened, struct filename *name)
{
-@@ -2966,6 +3017,15 @@ static int do_last(struct nameidata *nd, struct path *path,
+@@ -2972,6 +3022,15 @@ static int do_last(struct nameidata *nd, struct path *path,
if (error)
return error;
audit_inode(name, dir, LOOKUP_PARENT);
error = -EISDIR;
/* trailing slashes? */
-@@ -2985,7 +3045,7 @@ retry_lookup:
+@@ -2991,7 +3050,7 @@ retry_lookup:
*/
}
mutex_lock(&dir->d_inode->i_mutex);
mutex_unlock(&dir->d_inode->i_mutex);
if (error <= 0) {
-@@ -3009,11 +3069,28 @@ retry_lookup:
+@@ -3015,11 +3074,28 @@ retry_lookup:
goto finish_open_created;
}
/*
* If atomic_open() acquired write access it is dropped now due to
-@@ -3055,6 +3132,11 @@ finish_lookup:
+@@ -3060,6 +3136,11 @@ finish_lookup:
}
}
BUG_ON(inode != path->dentry->d_inode);
return 1;
}
-@@ -3074,7 +3156,18 @@ finish_open:
+@@ -3079,7 +3160,18 @@ finish_open:
path_put(&save_parent);
return error;
}
error = -EISDIR;
if ((open_flag & O_CREAT) && d_is_dir(nd->path.dentry))
goto out;
-@@ -3235,7 +3328,7 @@ static struct file *path_openat(int dfd, struct filename *pathname,
+@@ -3240,7 +3332,7 @@ static struct file *path_openat(int dfd, struct filename *pathname,
if (unlikely(error))
goto out;
while (unlikely(error > 0)) { /* trailing symlink */
struct path link = path;
void *cookie;
-@@ -3253,7 +3346,7 @@ static struct file *path_openat(int dfd, struct filename *pathname,
+@@ -3258,7 +3350,7 @@ static struct file *path_openat(int dfd, struct filename *pathname,
error = follow_link(&link, nd, &cookie);
if (unlikely(error))
break;
put_link(nd, &link, cookie);
}
out:
-@@ -3356,9 +3449,11 @@ static struct dentry *filename_create(int dfd, struct filename *name,
+@@ -3361,9 +3453,11 @@ static struct dentry *filename_create(int dfd, struct filename *name,
goto unlock;
error = -EEXIST;
/*
* Special case - lookup gave negative, but... we had foo/bar/
* From the vfs_mknod() POV we just have a negative dentry -
-@@ -3423,6 +3518,20 @@ struct dentry *user_path_create(int dfd, const char __user *pathname,
+@@ -3428,6 +3522,20 @@ struct dentry *user_path_create(int dfd, const char __user *pathname,
}
EXPORT_SYMBOL(user_path_create);
int vfs_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, dev_t dev)
{
int error = may_create(dir, dentry);
-@@ -3486,6 +3595,17 @@ retry:
+@@ -3491,6 +3599,17 @@ retry:
if (!IS_POSIXACL(path.dentry->d_inode))
mode &= ~current_umask();
error = security_path_mknod(&path, dentry, mode, dev);
if (error)
goto out;
-@@ -3501,6 +3621,8 @@ retry:
+@@ -3506,6 +3625,8 @@ retry:
error = vfs_mknod(path.dentry->d_inode,dentry,mode,0);
break;
}
out:
done_path_create(&path, dentry);
if (retry_estale(error, lookup_flags)) {
-@@ -3555,9 +3677,16 @@ retry:
+@@ -3560,9 +3681,16 @@ retry:
if (!IS_POSIXACL(path.dentry->d_inode))
mode &= ~current_umask();
done_path_create(&path, dentry);
if (retry_estale(error, lookup_flags)) {
lookup_flags |= LOOKUP_REVAL;
-@@ -3590,7 +3719,7 @@ void dentry_unhash(struct dentry *dentry)
+@@ -3595,7 +3723,7 @@ void dentry_unhash(struct dentry *dentry)
{
shrink_dcache_parent(dentry);
spin_lock(&dentry->d_lock);
__d_drop(dentry);
spin_unlock(&dentry->d_lock);
}
-@@ -3641,6 +3770,8 @@ static long do_rmdir(int dfd, const char __user *pathname)
+@@ -3646,6 +3774,8 @@ static long do_rmdir(int dfd, const char __user *pathname)
struct filename *name;
struct dentry *dentry;
struct nameidata nd;
unsigned int lookup_flags = 0;
retry:
name = user_path_parent(dfd, pathname, &nd, lookup_flags);
-@@ -3673,10 +3804,21 @@ retry:
+@@ -3678,10 +3808,21 @@ retry:
error = -ENOENT;
goto exit3;
}
exit3:
dput(dentry);
exit2:
-@@ -3769,6 +3911,8 @@ static long do_unlinkat(int dfd, const char __user *pathname)
+@@ -3774,6 +3915,8 @@ static long do_unlinkat(int dfd, const char __user *pathname)
struct nameidata nd;
struct inode *inode = NULL;
struct inode *delegated_inode = NULL;
unsigned int lookup_flags = 0;
retry:
name = user_path_parent(dfd, pathname, &nd, lookup_flags);
-@@ -3795,10 +3939,22 @@ retry_deleg:
+@@ -3800,10 +3943,22 @@ retry_deleg:
if (d_is_negative(dentry))
goto slashes;
ihold(inode);
exit2:
dput(dentry);
}
-@@ -3887,9 +4043,17 @@ retry:
+@@ -3892,9 +4047,17 @@ retry:
if (IS_ERR(dentry))
goto out_putname;
done_path_create(&path, dentry);
if (retry_estale(error, lookup_flags)) {
lookup_flags |= LOOKUP_REVAL;
-@@ -3993,6 +4157,7 @@ SYSCALL_DEFINE5(linkat, int, olddfd, const char __user *, oldname,
+@@ -3998,6 +4161,7 @@ SYSCALL_DEFINE5(linkat, int, olddfd, const char __user *, oldname,
struct dentry *new_dentry;
struct path old_path, new_path;
struct inode *delegated_inode = NULL;
int how = 0;
int error;
-@@ -4016,7 +4181,7 @@ retry:
+@@ -4021,7 +4185,7 @@ retry:
if (error)
return error;
(how & LOOKUP_REVAL));
error = PTR_ERR(new_dentry);
if (IS_ERR(new_dentry))
-@@ -4028,11 +4193,28 @@ retry:
+@@ -4033,11 +4197,26 @@ retry:
error = may_linkat(&old_path);
if (unlikely(error))
goto out_dput;
+
-+ if (gr_handle_hardlink(old_path.dentry, old_path.mnt,
-+ old_path.dentry->d_inode,
-+ old_path.dentry->d_inode->i_mode, to)) {
++ if (gr_handle_hardlink(old_path.dentry, old_path.mnt, to)) {
+ error = -EACCES;
+ goto out_dput;
+ }
done_path_create(&new_path, new_dentry);
if (delegated_inode) {
error = break_deleg_wait(&delegated_inode);
-@@ -4348,6 +4530,20 @@ retry_deleg:
+@@ -4353,6 +4532,20 @@ retry_deleg:
if (new_dentry == trap)
goto exit5;
+ }
+
+ error = gr_acl_handle_rename(new_dentry, new_dir, newnd.path.mnt,
-+ old_dentry, old_dir->d_inode, oldnd.path.mnt,
++ old_dentry, d_backing_inode(old_dir), oldnd.path.mnt,
+ to, flags);
+ if (error)
+ goto exit5;
error = security_path_rename(&oldnd.path, old_dentry,
&newnd.path, new_dentry, flags);
if (error)
-@@ -4355,6 +4551,9 @@ retry_deleg:
+@@ -4360,6 +4553,9 @@ retry_deleg:
error = vfs_rename(old_dir->d_inode, old_dentry,
new_dir->d_inode, new_dentry,
&delegated_inode, flags);
+ if (!error)
-+ gr_handle_rename(old_dir->d_inode, new_dir->d_inode, old_dentry,
-+ new_dentry, oldnd.path.mnt, new_dentry->d_inode ? 1 : 0, flags);
++ gr_handle_rename(d_backing_inode(old_dir), d_backing_inode(new_dir), old_dentry,
++ new_dentry, oldnd.path.mnt, d_is_positive(new_dentry) ? 1 : 0, flags);
exit5:
dput(new_dentry);
exit4:
-@@ -4411,14 +4610,24 @@ EXPORT_SYMBOL(vfs_whiteout);
+@@ -4416,14 +4612,24 @@ EXPORT_SYMBOL(vfs_whiteout);
int readlink_copy(char __user *buffer, int buflen, const char *link)
{
out:
return len;
diff --git a/fs/namespace.c b/fs/namespace.c
-index 38ed1e1..8500e56 100644
+index 02c6875..ac3626c 100644
--- a/fs/namespace.c
+++ b/fs/namespace.c
-@@ -1480,6 +1480,9 @@ static int do_umount(struct mount *mnt, int flags)
+@@ -1350,6 +1350,36 @@ enum umount_tree_flags {
+ UMOUNT_PROPAGATE = 2,
+ UMOUNT_CONNECTED = 4,
+ };
++
++static bool disconnect_mount(struct mount *mnt, enum umount_tree_flags how)
++{
++ /* Leaving mounts connected is only valid for lazy umounts */
++ if (how & UMOUNT_SYNC)
++ return true;
++
++ /* A mount without a parent has nothing to be connected to */
++ if (!mnt_has_parent(mnt))
++ return true;
++
++ /* Because the reference counting rules change when mounts are
++ * unmounted and connected, umounted mounts may not be
++ * connected to mounted mounts.
++ */
++ if (!(mnt->mnt_parent->mnt.mnt_flags & MNT_UMOUNT))
++ return true;
++
++ /* Has it been requested that the mount remain connected? */
++ if (how & UMOUNT_CONNECTED)
++ return false;
++
++ /* Is the mount locked such that it needs to remain connected? */
++ if (IS_MNT_LOCKED(mnt))
++ return false;
++
++ /* By default disconnect the mount */
++ return true;
++}
++
+ /*
+ * mount_lock must be held
+ * namespace_sem must be held for write
+@@ -1387,10 +1417,7 @@ static void umount_tree(struct mount *mnt, enum umount_tree_flags how)
+ if (how & UMOUNT_SYNC)
+ p->mnt.mnt_flags |= MNT_SYNC_UMOUNT;
+
+- disconnect = !(((how & UMOUNT_CONNECTED) &&
+- mnt_has_parent(p) &&
+- (p->mnt_parent->mnt.mnt_flags & MNT_UMOUNT)) ||
+- IS_MNT_LOCKED_AND_LAZY(p));
++ disconnect = disconnect_mount(p, how);
+
+ pin_insert_group(&p->mnt_umount, &p->mnt_parent->mnt,
+ disconnect ? &unmounted : NULL);
+@@ -1478,6 +1505,9 @@ static int do_umount(struct mount *mnt, int flags)
if (!(sb->s_flags & MS_RDONLY))
retval = do_remount_sb(sb, MS_RDONLY, NULL, 0);
up_write(&sb->s_umount);
return retval;
}
-@@ -1502,6 +1505,9 @@ static int do_umount(struct mount *mnt, int flags)
+@@ -1500,6 +1530,9 @@ static int do_umount(struct mount *mnt, int flags)
}
unlock_mount_hash();
namespace_unlock();
return retval;
}
-@@ -1559,7 +1565,7 @@ static inline bool may_mount(void)
+@@ -1527,11 +1560,8 @@ void __detach_mounts(struct dentry *dentry)
+ while (!hlist_empty(&mp->m_list)) {
+ mnt = hlist_entry(mp->m_list.first, struct mount, mnt_mp_list);
+ if (mnt->mnt.mnt_flags & MNT_UMOUNT) {
+- struct mount *p, *tmp;
+- list_for_each_entry_safe(p, tmp, &mnt->mnt_mounts, mnt_child) {
+- hlist_add_head(&p->mnt_umount.s_list, &unmounted);
+- umount_mnt(p);
+- }
++ hlist_add_head(&mnt->mnt_umount.s_list, &unmounted);
++ umount_mnt(mnt);
+ }
+ else umount_tree(mnt, UMOUNT_CONNECTED);
+ }
+@@ -1557,7 +1587,7 @@ static inline bool may_mount(void)
* unixes. Our API is identical to OSF/1 to avoid making a mess of AMD
*/
{
struct path path;
struct mount *mnt;
-@@ -1604,7 +1610,7 @@ out:
+@@ -1602,7 +1632,7 @@ out:
/*
* The 2.0 compatible umount. No flags.
*/
{
return sys_umount(name, 0);
}
-@@ -2670,6 +2676,16 @@ long do_mount(const char *dev_name, const char __user *dir_name,
+@@ -2677,6 +2707,16 @@ long do_mount(const char *dev_name, const char __user *dir_name,
MS_NOATIME | MS_NODIRATIME | MS_RELATIME| MS_KERNMOUNT |
MS_STRICTATIME);
if (flags & MS_REMOUNT)
retval = do_remount(&path, flags & ~MS_REMOUNT, mnt_flags,
data_page);
-@@ -2683,7 +2699,10 @@ long do_mount(const char *dev_name, const char __user *dir_name,
+@@ -2690,7 +2730,10 @@ long do_mount(const char *dev_name, const char __user *dir_name,
retval = do_new_mount(&path, type_page, flags, mnt_flags,
dev_name, data_page);
dput_out:
return retval;
}
-@@ -2701,7 +2720,7 @@ static void free_mnt_ns(struct mnt_namespace *ns)
+@@ -2708,7 +2751,7 @@ static void free_mnt_ns(struct mnt_namespace *ns)
* number incrementing at 10Ghz will take 12,427 years to wrap which
* is effectively never, so we can ignore the possibility.
*/
static struct mnt_namespace *alloc_mnt_ns(struct user_namespace *user_ns)
{
-@@ -2717,7 +2736,7 @@ static struct mnt_namespace *alloc_mnt_ns(struct user_namespace *user_ns)
+@@ -2724,7 +2767,7 @@ static struct mnt_namespace *alloc_mnt_ns(struct user_namespace *user_ns)
return ERR_PTR(ret);
}
new_ns->ns.ops = &mntns_operations;
atomic_set(&new_ns->count, 1);
new_ns->root = NULL;
INIT_LIST_HEAD(&new_ns->list);
-@@ -2727,7 +2746,7 @@ static struct mnt_namespace *alloc_mnt_ns(struct user_namespace *user_ns)
+@@ -2734,7 +2777,7 @@ static struct mnt_namespace *alloc_mnt_ns(struct user_namespace *user_ns)
return new_ns;
}
struct user_namespace *user_ns, struct fs_struct *new_fs)
{
struct mnt_namespace *new_ns;
-@@ -2848,8 +2867,8 @@ struct dentry *mount_subtree(struct vfsmount *mnt, const char *name)
+@@ -2855,8 +2898,8 @@ struct dentry *mount_subtree(struct vfsmount *mnt, const char *name)
}
EXPORT_SYMBOL(mount_subtree);
{
int ret;
char *kernel_type;
-@@ -2955,6 +2974,11 @@ SYSCALL_DEFINE2(pivot_root, const char __user *, new_root,
+@@ -2962,6 +3005,11 @@ SYSCALL_DEFINE2(pivot_root, const char __user *, new_root,
if (error)
goto out2;
get_fs_root(current->fs, &root);
old_mp = lock_mount(&old);
error = PTR_ERR(old_mp);
-@@ -3235,7 +3259,7 @@ static int mntns_install(struct nsproxy *nsproxy, struct ns_common *ns)
+@@ -3263,7 +3311,7 @@ static int mntns_install(struct nsproxy *nsproxy, struct ns_common *ns)
!ns_capable(current_user_ns(), CAP_SYS_ADMIN))
return -EPERM;
static struct callback_op callback_ops[];
diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c
-index d42dff6..ecbdf42 100644
+index f734562..3fd6c4e 100644
--- a/fs/nfs/inode.c
+++ b/fs/nfs/inode.c
-@@ -1270,16 +1270,16 @@ static int nfs_ctime_need_update(const struct inode *inode, const struct nfs_fat
+@@ -1275,16 +1275,16 @@ static int nfs_ctime_need_update(const struct inode *inode, const struct nfs_fat
return timespec_compare(&fattr->ctime, &inode->i_ctime) > 0;
}
EXPORT_SYMBOL_GPL(nfs_inc_attr_generation_counter);
diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c
-index 5416968..0942042 100644
+index 864e200..357c255 100644
--- a/fs/nfsd/nfs4proc.c
+++ b/fs/nfsd/nfs4proc.c
@@ -1496,7 +1496,7 @@ struct nfsd4_operation {
static struct nfsd4_operation nfsd4_ops[];
diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
-index 5b33ce1..c2a92aa 100644
+index 158badf..f7132ea 100644
--- a/fs/nfsd/nfs4xdr.c
+++ b/fs/nfsd/nfs4xdr.c
@@ -1703,7 +1703,7 @@ nfsd4_decode_notsupp(struct nfsd4_compoundargs *argp, void *p)
break;
case RC_REPLBUFF:
diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c
-index 3685265..e77261e 100644
+index 84d770b..929bc5e 100644
--- a/fs/nfsd/vfs.c
+++ b/fs/nfsd/vfs.c
@@ -893,7 +893,7 @@ __be32 nfsd_readv(struct file *file, loff_t offset, struct kvec *vec, int vlen,
ntfs_error(sb, "Out of bounds check failed. Corrupt directory "
"inode 0x%lx or driver bug.", vdir->i_ino);
goto err_out;
-diff --git a/fs/ntfs/file.c b/fs/ntfs/file.c
-index 1da9b2d..9cca092a 100644
---- a/fs/ntfs/file.c
-+++ b/fs/ntfs/file.c
-@@ -1281,7 +1281,7 @@ static inline size_t ntfs_copy_from_user(struct page **pages,
- char *addr;
- size_t total = 0;
- unsigned len;
-- int left;
-+ unsigned left;
-
- do {
- len = PAGE_CACHE_SIZE - ofs;
diff --git a/fs/ntfs/super.c b/fs/ntfs/super.c
index 9e1e112..241a52a 100644
--- a/fs/ntfs/super.c
if (bh_primary)
brelse(bh_primary);
diff --git a/fs/ocfs2/localalloc.c b/fs/ocfs2/localalloc.c
-index 0440134..d52c93a 100644
+index 857bbbc..3c47d15 100644
--- a/fs/ocfs2/localalloc.c
+++ b/fs/ocfs2/localalloc.c
@@ -1320,7 +1320,7 @@ static int ocfs2_local_alloc_slide_window(struct ocfs2_super *osb,
};
enum ocfs2_local_alloc_state
-diff --git a/fs/ocfs2/refcounttree.c b/fs/ocfs2/refcounttree.c
-index ee541f9..df3a500 100644
---- a/fs/ocfs2/refcounttree.c
-+++ b/fs/ocfs2/refcounttree.c
-@@ -4276,7 +4276,7 @@ static int ocfs2_reflink(struct dentry *old_dentry, struct inode *dir,
- error = posix_acl_create(dir, &mode, &default_acl, &acl);
- if (error) {
- mlog_errno(error);
-- goto out;
-+ return error;
- }
-
- error = ocfs2_create_inode_in_orphan(dir, mode,
diff --git a/fs/ocfs2/suballoc.c b/fs/ocfs2/suballoc.c
-index 0cb889a..6a26b24 100644
+index 4479029..5de740b 100644
--- a/fs/ocfs2/suballoc.c
+++ b/fs/ocfs2/suballoc.c
@@ -867,7 +867,7 @@ static int ocfs2_reserve_suballoc_bits(struct ocfs2_super *osb,
}
}
diff --git a/fs/ocfs2/super.c b/fs/ocfs2/super.c
-index 2667518..24bcf79 100644
+index 403c566..6525b35 100644
--- a/fs/ocfs2/super.c
+++ b/fs/ocfs2/super.c
@@ -308,11 +308,11 @@ static int ocfs2_osb_dump(struct ocfs2_super *osb, char *buf, int len)
out += snprintf(buf + out, len - out,
"%10s => State: %u Descriptor: %llu Size: %u bits "
-@@ -2093,11 +2093,11 @@ static int ocfs2_initialize_super(struct super_block *sb,
+@@ -2095,11 +2095,11 @@ static int ocfs2_initialize_super(struct super_block *sb,
mutex_init(&osb->system_file_mutex);
/* Copy the blockcheck stats from the superblock probe */
osb->osb_ecc_stats = *stats;
diff --git a/fs/open.c b/fs/open.c
-index 44a3be1..5e97aa1 100644
+index 98e5a52..8e77e14 100644
--- a/fs/open.c
+++ b/fs/open.c
@@ -32,6 +32,8 @@
if (!error)
error = do_truncate(dentry, length, ATTR_MTIME|ATTR_CTIME, f.file);
sb_end_write(inode->i_sb);
-@@ -392,6 +398,9 @@ retry:
+@@ -396,6 +402,9 @@ retry:
if (__mnt_is_readonly(path.mnt))
res = -EROFS;
out_path_release:
path_put(&path);
if (retry_estale(res, lookup_flags)) {
-@@ -423,6 +432,8 @@ retry:
+@@ -427,6 +436,8 @@ retry:
if (error)
goto dput_and_out;
set_fs_pwd(current->fs, &path);
dput_and_out:
-@@ -452,6 +463,13 @@ SYSCALL_DEFINE1(fchdir, unsigned int, fd)
+@@ -456,6 +467,13 @@ SYSCALL_DEFINE1(fchdir, unsigned int, fd)
goto out_putf;
error = inode_permission(inode, MAY_EXEC | MAY_CHDIR);
if (!error)
set_fs_pwd(current->fs, &f.file->f_path);
out_putf:
-@@ -481,7 +499,13 @@ retry:
+@@ -485,7 +503,13 @@ retry:
if (error)
goto dput_and_out;
error = 0;
dput_and_out:
path_put(&path);
-@@ -505,6 +529,16 @@ static int chmod_common(struct path *path, umode_t mode)
+@@ -509,6 +533,16 @@ static int chmod_common(struct path *path, umode_t mode)
return error;
retry_deleg:
mutex_lock(&inode->i_mutex);
error = security_path_chmod(path, mode);
if (error)
goto out_unlock;
-@@ -570,6 +604,9 @@ static int chown_common(struct path *path, uid_t user, gid_t group)
+@@ -574,6 +608,9 @@ static int chown_common(struct path *path, uid_t user, gid_t group)
uid = make_kuid(current_user_ns(), user);
gid = make_kgid(current_user_ns(), group);
retry_deleg:
newattrs.ia_valid = ATTR_CTIME;
if (user != (uid_t) -1) {
-@@ -1017,6 +1054,7 @@ long do_sys_open(int dfd, const char __user *filename, int flags, umode_t mode)
+@@ -1018,6 +1055,7 @@ long do_sys_open(int dfd, const char __user *filename, int flags, umode_t mode)
} else {
fsnotify_open(f);
fd_install(fd, f);
}
}
putname(tmp);
+diff --git a/fs/overlayfs/inode.c b/fs/overlayfs/inode.c
+index 04f1248..60b3be1 100644
+--- a/fs/overlayfs/inode.c
++++ b/fs/overlayfs/inode.c
+@@ -344,6 +344,9 @@ static int ovl_dentry_open(struct dentry *dentry, struct file *file,
+ enum ovl_path_type type;
+ bool want_write = false;
+
++ if (d_is_dir(dentry))
++ return d_backing_inode(dentry);
++
+ type = ovl_path_real(dentry, &realpath);
+ if (ovl_open_need_copy_up(file->f_flags, type, realpath.dentry)) {
+ want_write = true;
diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c
-index 5f0d199..13b74b9 100644
+index bf8537c..c16ef7d 100644
--- a/fs/overlayfs/super.c
+++ b/fs/overlayfs/super.c
@@ -172,7 +172,7 @@ void ovl_path_lower(struct dentry *dentry, struct path *path)
struct ovl_entry *oe;
struct ovl_fs *ufs;
diff --git a/fs/pipe.c b/fs/pipe.c
-index 21981e5..2c0bffb 100644
+index 8865f79..bd2c79b 100644
--- a/fs/pipe.c
+++ b/fs/pipe.c
-@@ -37,7 +37,7 @@ unsigned int pipe_max_size = 1048576;
+@@ -36,7 +36,7 @@ unsigned int pipe_max_size = 1048576;
/*
* Minimum pipe size, as required by POSIX
*/
/*
* We use a start+len construction, which provides full use of the
-@@ -56,7 +56,7 @@ unsigned int pipe_min_size = PAGE_SIZE;
+@@ -55,7 +55,7 @@ unsigned int pipe_min_size = PAGE_SIZE;
static void pipe_lock_nested(struct pipe_inode_info *pipe, int subclass)
{
mutex_lock_nested(&pipe->mutex, subclass);
}
-@@ -71,7 +71,7 @@ EXPORT_SYMBOL(pipe_lock);
+@@ -70,7 +70,7 @@ EXPORT_SYMBOL(pipe_lock);
void pipe_unlock(struct pipe_inode_info *pipe)
{
mutex_unlock(&pipe->mutex);
}
EXPORT_SYMBOL(pipe_unlock);
-@@ -292,9 +292,9 @@ pipe_read(struct kiocb *iocb, struct iov_iter *to)
+@@ -291,9 +291,9 @@ pipe_read(struct kiocb *iocb, struct iov_iter *to)
}
if (bufs) /* More to do? */
continue;
/* syscall merging: Usually we must not sleep
* if O_NONBLOCK is set, or if we got some data.
* But if a writer sleeps in kernel space, then
-@@ -351,7 +351,7 @@ pipe_write(struct kiocb *iocb, struct iov_iter *from)
+@@ -350,7 +350,7 @@ pipe_write(struct kiocb *iocb, struct iov_iter *from)
__pipe_lock(pipe);
send_sig(SIGPIPE, current, 0);
ret = -EPIPE;
goto out;
-@@ -387,7 +387,7 @@ pipe_write(struct kiocb *iocb, struct iov_iter *from)
+@@ -386,7 +386,7 @@ pipe_write(struct kiocb *iocb, struct iov_iter *from)
for (;;) {
int bufs;
send_sig(SIGPIPE, current, 0);
if (!ret)
ret = -EPIPE;
-@@ -455,9 +455,9 @@ pipe_write(struct kiocb *iocb, struct iov_iter *from)
+@@ -454,9 +454,9 @@ pipe_write(struct kiocb *iocb, struct iov_iter *from)
kill_fasync(&pipe->fasync_readers, SIGIO, POLL_IN);
do_wakeup = 0;
}
}
out:
__pipe_unlock(pipe);
-@@ -512,7 +512,7 @@ pipe_poll(struct file *filp, poll_table *wait)
+@@ -511,7 +511,7 @@ pipe_poll(struct file *filp, poll_table *wait)
mask = 0;
if (filp->f_mode & FMODE_READ) {
mask = (nrbufs > 0) ? POLLIN | POLLRDNORM : 0;
mask |= POLLHUP;
}
-@@ -522,7 +522,7 @@ pipe_poll(struct file *filp, poll_table *wait)
+@@ -521,7 +521,7 @@ pipe_poll(struct file *filp, poll_table *wait)
* Most Unices do not set POLLERR for FIFOs but on Linux they
* behave exactly like pipes for poll().
*/
mask |= POLLERR;
}
-@@ -534,7 +534,7 @@ static void put_pipe_info(struct inode *inode, struct pipe_inode_info *pipe)
+@@ -533,7 +533,7 @@ static void put_pipe_info(struct inode *inode, struct pipe_inode_info *pipe)
int kill = 0;
spin_lock(&inode->i_lock);
inode->i_pipe = NULL;
kill = 1;
}
-@@ -551,11 +551,11 @@ pipe_release(struct inode *inode, struct file *file)
+@@ -550,11 +550,11 @@ pipe_release(struct inode *inode, struct file *file)
__pipe_lock(pipe);
if (file->f_mode & FMODE_READ)
wake_up_interruptible_sync_poll(&pipe->wait, POLLIN | POLLOUT | POLLRDNORM | POLLWRNORM | POLLERR | POLLHUP);
kill_fasync(&pipe->fasync_readers, SIGIO, POLL_IN);
kill_fasync(&pipe->fasync_writers, SIGIO, POLL_OUT);
-@@ -620,7 +620,7 @@ void free_pipe_info(struct pipe_inode_info *pipe)
+@@ -619,7 +619,7 @@ void free_pipe_info(struct pipe_inode_info *pipe)
kfree(pipe);
}
/*
* pipefs_dname() is called from d_path().
-@@ -650,8 +650,9 @@ static struct inode * get_pipe_inode(void)
+@@ -649,8 +649,9 @@ static struct inode * get_pipe_inode(void)
goto fail_iput;
inode->i_pipe = pipe;
inode->i_fop = &pipefifo_fops;
/*
-@@ -830,17 +831,17 @@ static int fifo_open(struct inode *inode, struct file *filp)
+@@ -829,17 +830,17 @@ static int fifo_open(struct inode *inode, struct file *filp)
spin_lock(&inode->i_lock);
if (inode->i_pipe) {
pipe = inode->i_pipe;
spin_unlock(&inode->i_lock);
free_pipe_info(pipe);
pipe = inode->i_pipe;
-@@ -865,10 +866,10 @@ static int fifo_open(struct inode *inode, struct file *filp)
+@@ -864,10 +865,10 @@ static int fifo_open(struct inode *inode, struct file *filp)
* opened, even when there is no process writing the FIFO.
*/
pipe->r_counter++;
if ((filp->f_flags & O_NONBLOCK)) {
/* suppress POLLHUP until we have
* seen a writer */
-@@ -887,14 +888,14 @@ static int fifo_open(struct inode *inode, struct file *filp)
+@@ -886,14 +887,14 @@ static int fifo_open(struct inode *inode, struct file *filp)
* errno=ENXIO when there is no process reading the FIFO.
*/
ret = -ENXIO;
if (wait_for_partner(pipe, &pipe->r_counter))
goto err_wr;
}
-@@ -908,11 +909,11 @@ static int fifo_open(struct inode *inode, struct file *filp)
+@@ -907,11 +908,11 @@ static int fifo_open(struct inode *inode, struct file *filp)
* the process can at least talk to itself.
*/
wake_up_partner(pipe);
break;
-@@ -926,13 +927,13 @@ static int fifo_open(struct inode *inode, struct file *filp)
+@@ -925,13 +926,13 @@ static int fifo_open(struct inode *inode, struct file *filp)
return 0;
err_rd:
wake_up_interruptible(&pipe->wait);
ret = -ERESTARTSYS;
goto err;
-@@ -1010,7 +1011,7 @@ static long pipe_set_size(struct pipe_inode_info *pipe, unsigned long nr_pages)
+@@ -1007,7 +1008,7 @@ static long pipe_set_size(struct pipe_inode_info *pipe, unsigned long nr_pages)
* Currently we rely on the pipe array holding a power-of-2 number
* of pages.
*/
{
unsigned long nr_pages;
-@@ -1058,13 +1059,16 @@ long pipe_fcntl(struct file *file, unsigned int cmd, unsigned long arg)
+@@ -1055,13 +1056,16 @@ long pipe_fcntl(struct file *file, unsigned int cmd, unsigned long arg)
switch (cmd) {
case F_SETPIPE_SZ: {
goto out;
if (!capable(CAP_SYS_RESOURCE) && size > pipe_max_size) {
+diff --git a/fs/pnode.h b/fs/pnode.h
+index 7114ce6..0fcdbe7 100644
+--- a/fs/pnode.h
++++ b/fs/pnode.h
+@@ -20,8 +20,6 @@
+ #define SET_MNT_MARK(m) ((m)->mnt.mnt_flags |= MNT_MARKED)
+ #define CLEAR_MNT_MARK(m) ((m)->mnt.mnt_flags &= ~MNT_MARKED)
+ #define IS_MNT_LOCKED(m) ((m)->mnt.mnt_flags & MNT_LOCKED)
+-#define IS_MNT_LOCKED_AND_LAZY(m) \
+- (((m)->mnt.mnt_flags & (MNT_LOCKED|MNT_SYNC_UMOUNT)) == MNT_LOCKED)
+
+ #define CL_EXPIRE 0x01
+ #define CL_SLAVE 0x02
diff --git a/fs/posix_acl.c b/fs/posix_acl.c
-index 3a48bb7..403067b 100644
+index 84bb65b8..4270e47 100644
--- a/fs/posix_acl.c
+++ b/fs/posix_acl.c
@@ -20,6 +20,7 @@
help
Various /proc files exist to monitor process memory utilization:
diff --git a/fs/proc/array.c b/fs/proc/array.c
-index 1295a00..4c91a6b 100644
+index fd02a9e..7bc9dff 100644
--- a/fs/proc/array.c
+++ b/fs/proc/array.c
@@ -60,6 +60,7 @@
#include <linux/proc_fs.h>
#include <linux/ioport.h>
#include <linux/uaccess.h>
-@@ -322,6 +323,21 @@ static void task_cpus_allowed(struct seq_file *m, struct task_struct *task)
+@@ -340,6 +341,21 @@ static void task_cpus_allowed(struct seq_file *m, struct task_struct *task)
cpumask_pr_args(&task->cpus_allowed));
}
int proc_pid_status(struct seq_file *m, struct pid_namespace *ns,
struct pid *pid, struct task_struct *task)
{
-@@ -340,9 +356,24 @@ int proc_pid_status(struct seq_file *m, struct pid_namespace *ns,
+@@ -358,9 +374,24 @@ int proc_pid_status(struct seq_file *m, struct pid_namespace *ns,
task_cpus_allowed(m, task);
cpuset_task_status_allowed(m, task);
task_context_switch_counts(m, task);
static int do_task_stat(struct seq_file *m, struct pid_namespace *ns,
struct pid *pid, struct task_struct *task, int whole)
{
-@@ -364,6 +395,13 @@ static int do_task_stat(struct seq_file *m, struct pid_namespace *ns,
+@@ -382,6 +413,13 @@ static int do_task_stat(struct seq_file *m, struct pid_namespace *ns,
char tcomm[sizeof(task->comm)];
unsigned long flags;
state = *get_task_state(task);
vsize = eip = esp = 0;
permitted = ptrace_may_access(task, PTRACE_MODE_READ | PTRACE_MODE_NOAUDIT);
-@@ -434,6 +472,19 @@ static int do_task_stat(struct seq_file *m, struct pid_namespace *ns,
+@@ -452,6 +490,19 @@ static int do_task_stat(struct seq_file *m, struct pid_namespace *ns,
gtime = task_gtime(task);
}
/* scale priority and nice values from timeslices to -20..20 */
/* to make it look like a "normal" Unix priority/nice value */
priority = task_prio(task);
-@@ -465,9 +516,15 @@ static int do_task_stat(struct seq_file *m, struct pid_namespace *ns,
+@@ -483,9 +534,15 @@ static int do_task_stat(struct seq_file *m, struct pid_namespace *ns,
seq_put_decimal_ull(m, ' ', vsize);
seq_put_decimal_ull(m, ' ', mm ? get_mm_rss(mm) : 0);
seq_put_decimal_ull(m, ' ', rsslim);
seq_put_decimal_ull(m, ' ', esp);
seq_put_decimal_ull(m, ' ', eip);
/* The signal information here is obsolete.
-@@ -489,7 +546,11 @@ static int do_task_stat(struct seq_file *m, struct pid_namespace *ns,
+@@ -507,7 +564,11 @@ static int do_task_stat(struct seq_file *m, struct pid_namespace *ns,
seq_put_decimal_ull(m, ' ', cputime_to_clock_t(gtime));
seq_put_decimal_ll(m, ' ', cputime_to_clock_t(cgtime));
seq_put_decimal_ull(m, ' ', mm->start_data);
seq_put_decimal_ull(m, ' ', mm->end_data);
seq_put_decimal_ull(m, ' ', mm->start_brk);
-@@ -527,8 +588,15 @@ int proc_pid_statm(struct seq_file *m, struct pid_namespace *ns,
+@@ -545,8 +606,15 @@ int proc_pid_statm(struct seq_file *m, struct pid_namespace *ns,
struct pid *pid, struct task_struct *task)
{
unsigned long size = 0, resident = 0, shared = 0, text = 0, data = 0;
if (mm) {
size = task_statm(mm, &shared, &text, &data, &resident);
mmput(mm);
-@@ -551,6 +619,20 @@ int proc_pid_statm(struct seq_file *m, struct pid_namespace *ns,
+@@ -569,6 +637,20 @@ int proc_pid_statm(struct seq_file *m, struct pid_namespace *ns,
return 0;
}
static struct pid *
get_children_pid(struct inode *inode, struct pid *pid_prev, loff_t pos)
diff --git a/fs/proc/base.c b/fs/proc/base.c
-index 3f3d7ae..68de109 100644
+index 093ca14..322f097 100644
--- a/fs/proc/base.c
+++ b/fs/proc/base.c
@@ -113,6 +113,14 @@ struct pid_entry {
/*
* Provides a wchan file via kallsyms in a proper one-value-per-file format.
* Returns the resolved symbol. If that fails, simply return the address.
-@@ -265,7 +289,7 @@ static void unlock_trace(struct task_struct *task)
+@@ -267,7 +291,7 @@ static void unlock_trace(struct task_struct *task)
mutex_unlock(&task->signal->cred_guard_mutex);
}
#define MAX_STACK_TRACE_DEPTH 64
-@@ -456,7 +480,7 @@ static int proc_pid_limits(struct seq_file *m, struct pid_namespace *ns,
+@@ -462,7 +486,7 @@ static int proc_pid_limits(struct seq_file *m, struct pid_namespace *ns,
return 0;
}
static int proc_pid_syscall(struct seq_file *m, struct pid_namespace *ns,
struct pid *pid, struct task_struct *task)
{
-@@ -486,7 +510,7 @@ static int proc_pid_syscall(struct seq_file *m, struct pid_namespace *ns,
+@@ -495,7 +519,7 @@ static int proc_pid_syscall(struct seq_file *m, struct pid_namespace *ns,
/************************************************************************/
/* permission checks */
{
struct task_struct *task;
int allowed = 0;
-@@ -496,7 +520,10 @@ static int proc_fd_access_allowed(struct inode *inode)
+@@ -505,7 +529,10 @@ static int proc_fd_access_allowed(struct inode *inode)
*/
task = get_proc_task(inode);
if (task) {
put_task_struct(task);
}
return allowed;
-@@ -527,10 +554,35 @@ static bool has_pid_permissions(struct pid_namespace *pid,
+@@ -536,10 +563,35 @@ static bool has_pid_permissions(struct pid_namespace *pid,
struct task_struct *task,
int hide_pid_min)
{
return ptrace_may_access(task, PTRACE_MODE_READ);
}
-@@ -548,7 +600,11 @@ static int proc_pid_permission(struct inode *inode, int mask)
+@@ -557,7 +609,11 @@ static int proc_pid_permission(struct inode *inode, int mask)
put_task_struct(task);
if (!has_perms) {
/*
* Let's make getdents(), stat(), and open()
* consistent with each other. If a process
-@@ -609,6 +665,10 @@ struct mm_struct *proc_mem_open(struct inode *inode, unsigned int mode)
+@@ -618,6 +674,10 @@ struct mm_struct *proc_mem_open(struct inode *inode, unsigned int mode)
if (task) {
mm = mm_access(task, mode);
put_task_struct(task);
if (!IS_ERR_OR_NULL(mm)) {
-@@ -630,6 +690,11 @@ static int __mem_open(struct inode *inode, struct file *file, unsigned int mode)
+@@ -639,6 +699,11 @@ static int __mem_open(struct inode *inode, struct file *file, unsigned int mode)
return PTR_ERR(mm);
file->private_data = mm;
return 0;
}
-@@ -651,6 +716,17 @@ static ssize_t mem_rw(struct file *file, char __user *buf,
+@@ -660,6 +725,17 @@ static ssize_t mem_rw(struct file *file, char __user *buf,
ssize_t copied;
char *page;
if (!mm)
return 0;
-@@ -663,7 +739,7 @@ static ssize_t mem_rw(struct file *file, char __user *buf,
+@@ -672,7 +748,7 @@ static ssize_t mem_rw(struct file *file, char __user *buf,
goto free;
while (count > 0) {
if (write && copy_from_user(page, buf, this_len)) {
copied = -EFAULT;
-@@ -755,6 +831,13 @@ static ssize_t environ_read(struct file *file, char __user *buf,
+@@ -764,6 +840,13 @@ static ssize_t environ_read(struct file *file, char __user *buf,
if (!mm)
return 0;
page = (char *)__get_free_page(GFP_TEMPORARY);
if (!page)
return -ENOMEM;
-@@ -764,7 +847,7 @@ static ssize_t environ_read(struct file *file, char __user *buf,
+@@ -773,7 +856,7 @@ static ssize_t environ_read(struct file *file, char __user *buf,
goto free;
while (count > 0) {
size_t this_len, max_len;
if (src >= (mm->env_end - mm->env_start))
break;
-@@ -1378,7 +1461,7 @@ static void *proc_pid_follow_link(struct dentry *dentry, struct nameidata *nd)
+@@ -1387,7 +1470,7 @@ static void *proc_pid_follow_link(struct dentry *dentry, struct nameidata *nd)
int error = -EACCES;
/* Are we allowed to snoop on the tasks file descriptors? */
goto out;
error = PROC_I(inode)->op.proc_get_link(dentry, &path);
-@@ -1422,8 +1505,18 @@ static int proc_pid_readlink(struct dentry * dentry, char __user * buffer, int b
+@@ -1431,8 +1514,18 @@ static int proc_pid_readlink(struct dentry * dentry, char __user * buffer, int b
struct path path;
/* Are we allowed to snoop on the tasks file descriptors? */
error = PROC_I(inode)->op.proc_get_link(dentry, &path);
if (error)
-@@ -1473,7 +1566,11 @@ struct inode *proc_pid_make_inode(struct super_block * sb, struct task_struct *t
+@@ -1482,7 +1575,11 @@ struct inode *proc_pid_make_inode(struct super_block * sb, struct task_struct *t
rcu_read_lock();
cred = __task_cred(task);
inode->i_uid = cred->euid;
rcu_read_unlock();
}
security_task_to_inode(task, inode);
-@@ -1509,10 +1606,19 @@ int pid_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat)
+@@ -1518,10 +1615,19 @@ int pid_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat)
return -ENOENT;
}
if ((inode->i_mode == (S_IFDIR|S_IRUGO|S_IXUGO)) ||
}
}
rcu_read_unlock();
-@@ -1550,11 +1656,20 @@ int pid_revalidate(struct dentry *dentry, unsigned int flags)
+@@ -1559,11 +1665,20 @@ int pid_revalidate(struct dentry *dentry, unsigned int flags)
if (task) {
if ((inode->i_mode == (S_IFDIR|S_IRUGO|S_IXUGO)) ||
rcu_read_unlock();
} else {
inode->i_uid = GLOBAL_ROOT_UID;
-@@ -2085,6 +2200,9 @@ static struct dentry *proc_pident_lookup(struct inode *dir,
+@@ -2095,6 +2210,9 @@ static struct dentry *proc_pident_lookup(struct inode *dir,
if (!task)
goto out_no_task;
/*
* Yes, it does not scale. And it should not. Don't add
* new entries into /proc/<tgid>/ without very good reasons.
-@@ -2115,6 +2233,9 @@ static int proc_pident_readdir(struct file *file, struct dir_context *ctx,
+@@ -2125,6 +2243,9 @@ static int proc_pident_readdir(struct file *file, struct dir_context *ctx,
if (!task)
return -ENOENT;
if (!dir_emit_dots(file, ctx))
goto out;
-@@ -2557,7 +2678,7 @@ static const struct pid_entry tgid_base_stuff[] = {
+@@ -2569,7 +2690,7 @@ static const struct pid_entry tgid_base_stuff[] = {
REG("autogroup", S_IRUGO|S_IWUSR, proc_pid_sched_autogroup_operations),
#endif
REG("comm", S_IRUGO|S_IWUSR, proc_pid_set_comm_operations),
ONE("syscall", S_IRUSR, proc_pid_syscall),
#endif
ONE("cmdline", S_IRUGO, proc_pid_cmdline),
-@@ -2582,10 +2703,10 @@ static const struct pid_entry tgid_base_stuff[] = {
+@@ -2594,10 +2715,10 @@ static const struct pid_entry tgid_base_stuff[] = {
#ifdef CONFIG_SECURITY
DIR("attr", S_IRUGO|S_IXUGO, proc_attr_dir_inode_operations, proc_attr_dir_operations),
#endif
ONE("stack", S_IRUSR, proc_pid_stack),
#endif
#ifdef CONFIG_SCHEDSTATS
-@@ -2619,6 +2740,9 @@ static const struct pid_entry tgid_base_stuff[] = {
+@@ -2631,6 +2752,9 @@ static const struct pid_entry tgid_base_stuff[] = {
#ifdef CONFIG_HARDWALL
ONE("hardwall", S_IRUGO, proc_pid_hardwall),
#endif
#ifdef CONFIG_USER_NS
REG("uid_map", S_IRUGO|S_IWUSR, proc_uid_map_operations),
REG("gid_map", S_IRUGO|S_IWUSR, proc_gid_map_operations),
-@@ -2751,7 +2875,14 @@ static int proc_pid_instantiate(struct inode *dir,
+@@ -2763,7 +2887,14 @@ static int proc_pid_instantiate(struct inode *dir,
if (!inode)
goto out;
inode->i_op = &proc_tgid_base_inode_operations;
inode->i_fop = &proc_tgid_base_operations;
inode->i_flags|=S_IMMUTABLE;
-@@ -2789,7 +2920,11 @@ struct dentry *proc_pid_lookup(struct inode *dir, struct dentry * dentry, unsign
+@@ -2801,7 +2932,11 @@ struct dentry *proc_pid_lookup(struct inode *dir, struct dentry * dentry, unsign
if (!task)
goto out;
put_task_struct(task);
out:
return ERR_PTR(result);
-@@ -2903,7 +3038,7 @@ static const struct pid_entry tid_base_stuff[] = {
+@@ -2915,7 +3050,7 @@ static const struct pid_entry tid_base_stuff[] = {
REG("sched", S_IRUGO|S_IWUSR, proc_pid_sched_operations),
#endif
REG("comm", S_IRUGO|S_IWUSR, proc_pid_set_comm_operations),
ONE("syscall", S_IRUSR, proc_pid_syscall),
#endif
ONE("cmdline", S_IRUGO, proc_pid_cmdline),
-@@ -2930,10 +3065,10 @@ static const struct pid_entry tid_base_stuff[] = {
+@@ -2942,10 +3077,10 @@ static const struct pid_entry tid_base_stuff[] = {
#ifdef CONFIG_SECURITY
DIR("attr", S_IRUGO|S_IXUGO, proc_attr_dir_inode_operations, proc_attr_dir_operations),
#endif
}
fs_initcall(proc_devices_init);
diff --git a/fs/proc/fd.c b/fs/proc/fd.c
-index 8e5ad83..1f07a8c 100644
+index 6e5fcd0..06ea074 100644
--- a/fs/proc/fd.c
+++ b/fs/proc/fd.c
-@@ -26,7 +26,8 @@ static int seq_show(struct seq_file *m, void *v)
+@@ -27,7 +27,8 @@ static int seq_show(struct seq_file *m, void *v)
if (!task)
return -ENOENT;
put_task_struct(task);
if (files) {
-@@ -284,11 +285,21 @@ static struct dentry *proc_lookupfd(struct inode *dir, struct dentry *dentry,
+@@ -291,11 +292,21 @@ static struct dentry *proc_lookupfd(struct inode *dir, struct dentry *dentry,
*/
int proc_fd_permission(struct inode *inode, int mask)
{
}
diff --git a/fs/proc/generic.c b/fs/proc/generic.c
-index be65b20..2998ba8 100644
+index e5dee5c..dafe21b 100644
--- a/fs/proc/generic.c
+++ b/fs/proc/generic.c
@@ -22,6 +22,7 @@
static int proc_register(struct proc_dir_entry * dir, struct proc_dir_entry * dp)
{
int ret;
-@@ -441,6 +473,31 @@ struct proc_dir_entry *proc_mkdir_data(const char *name, umode_t mode,
+@@ -445,6 +477,31 @@ struct proc_dir_entry *proc_mkdir_data(const char *name, umode_t mode,
}
EXPORT_SYMBOL_GPL(proc_mkdir_data);
struct proc_dir_entry *proc_mkdir_mode(const char *name, umode_t mode,
struct proc_dir_entry *parent)
{
-@@ -455,6 +512,13 @@ struct proc_dir_entry *proc_mkdir(const char *name,
+@@ -459,6 +516,13 @@ struct proc_dir_entry *proc_mkdir(const char *name,
}
EXPORT_SYMBOL(proc_mkdir);
+}
+EXPORT_SYMBOL(proc_mkdir_restrict);
+
- struct proc_dir_entry *proc_create_data(const char *name, umode_t mode,
- struct proc_dir_entry *parent,
- const struct file_operations *proc_fops,
+ struct proc_dir_entry *proc_create_mount_point(const char *name)
+ {
+ umode_t mode = S_IFDIR | S_IRUGO | S_IXUGO;
diff --git a/fs/proc/inode.c b/fs/proc/inode.c
-index 7697b66..8d8e541 100644
+index e3eb552..bcb0f25 100644
--- a/fs/proc/inode.c
+++ b/fs/proc/inode.c
@@ -24,11 +24,17 @@
}
static struct kmem_cache * proc_inode_cachep;
-@@ -426,7 +439,11 @@ struct inode *proc_get_inode(struct super_block *sb, struct proc_dir_entry *de)
+@@ -430,7 +443,11 @@ struct inode *proc_get_inode(struct super_block *sb, struct proc_dir_entry *de)
if (de->mode) {
inode->i_mode = de->mode;
inode->i_uid = de->uid;
if (de->size)
inode->i_size = de->size;
diff --git a/fs/proc/internal.h b/fs/proc/internal.h
-index c835b94..c9e01a3 100644
+index aa27810..9f2d3b2 100644
--- a/fs/proc/internal.h
+++ b/fs/proc/internal.h
@@ -47,9 +47,10 @@ struct proc_dir_entry {
seq_putc(m, '\n');
diff --git a/fs/proc/proc_net.c b/fs/proc/proc_net.c
-index 1bde894..22ac7eb 100644
+index 350984a..0fb02a9 100644
--- a/fs/proc/proc_net.c
+++ b/fs/proc/proc_net.c
@@ -23,9 +23,27 @@
net = get_proc_net(inode);
if (net == NULL)
diff --git a/fs/proc/proc_sysctl.c b/fs/proc/proc_sysctl.c
-index f92d5dd..26398ac 100644
+index fdda62e..cd7c75f 100644
--- a/fs/proc/proc_sysctl.c
+++ b/fs/proc/proc_sysctl.c
@@ -11,13 +11,21 @@
-static const struct inode_operations proc_sys_dir_operations;
+const struct inode_operations proc_sys_dir_operations;
- void proc_sys_poll_notify(struct ctl_table_poll *poll)
+ /* Support for permanently empty directories */
+
+@@ -32,13 +40,17 @@ static bool is_empty_dir(struct ctl_table_header *head)
+
+ static void set_empty_dir(struct ctl_dir *dir)
+ {
+- dir->header.ctl_table[0].child = sysctl_mount_point;
++ pax_open_kernel();
++ *(const void **)&dir->header.ctl_table[0].child = sysctl_mount_point;
++ pax_close_kernel();
+ }
+
+ static void clear_empty_dir(struct ctl_dir *dir)
+
{
-@@ -467,6 +475,9 @@ static struct dentry *proc_sys_lookup(struct inode *dir, struct dentry *dentry,
+- dir->header.ctl_table[0].child = NULL;
++ pax_open_kernel();
++ *(void **)&dir->header.ctl_table[0].child = NULL;
++ pax_close_kernel();
+ }
+
+ void proc_sys_poll_notify(struct ctl_table_poll *poll)
+@@ -504,6 +516,9 @@ static struct dentry *proc_sys_lookup(struct inode *dir, struct dentry *dentry,
err = NULL;
d_set_d_op(dentry, &proc_sys_dentry_operations);
d_add(dentry, inode);
out:
-@@ -482,6 +493,7 @@ static ssize_t proc_sys_call_handler(struct file *filp, void __user *buf,
+@@ -519,6 +534,7 @@ static ssize_t proc_sys_call_handler(struct file *filp, void __user *buf,
struct inode *inode = file_inode(filp);
struct ctl_table_header *head = grab_header(inode);
struct ctl_table *table = PROC_I(inode)->sysctl_entry;
ssize_t error;
size_t res;
-@@ -493,7 +505,7 @@ static ssize_t proc_sys_call_handler(struct file *filp, void __user *buf,
+@@ -530,7 +546,7 @@ static ssize_t proc_sys_call_handler(struct file *filp, void __user *buf,
* and won't be until we finish.
*/
error = -EPERM;
goto out;
/* if that can happen at all, it should be -EINVAL, not -EISDIR */
-@@ -501,6 +513,27 @@ static ssize_t proc_sys_call_handler(struct file *filp, void __user *buf,
+@@ -538,6 +554,27 @@ static ssize_t proc_sys_call_handler(struct file *filp, void __user *buf,
if (!table->proc_handler)
goto out;
/* careful: calling conventions are nasty here */
res = count;
error = table->proc_handler(table, write, buf, &res, ppos);
-@@ -598,6 +631,9 @@ static bool proc_sys_fill_cache(struct file *file,
+@@ -635,6 +672,9 @@ static bool proc_sys_fill_cache(struct file *file,
return false;
} else {
d_set_d_op(child, &proc_sys_dentry_operations);
d_add(child, inode);
}
} else {
-@@ -641,6 +677,9 @@ static int scan(struct ctl_table_header *head, struct ctl_table *table,
+@@ -678,6 +718,9 @@ static int scan(struct ctl_table_header *head, struct ctl_table *table,
if ((*pos)++ < ctx->pos)
return true;
if (unlikely(S_ISLNK(table->mode)))
res = proc_sys_link_fill_cache(file, ctx, head, table);
else
-@@ -734,6 +773,9 @@ static int proc_sys_getattr(struct vfsmount *mnt, struct dentry *dentry, struct
+@@ -771,6 +814,9 @@ static int proc_sys_getattr(struct vfsmount *mnt, struct dentry *dentry, struct
if (IS_ERR(head))
return PTR_ERR(head);
generic_fillattr(inode, stat);
if (table)
stat->mode = (stat->mode & S_IFMT) | table->mode;
-@@ -756,13 +798,13 @@ static const struct file_operations proc_sys_dir_file_operations = {
+@@ -793,13 +839,13 @@ static const struct file_operations proc_sys_dir_file_operations = {
.llseek = generic_file_llseek,
};
.lookup = proc_sys_lookup,
.permission = proc_sys_permission,
.setattr = proc_sys_setattr,
-@@ -839,7 +881,7 @@ static struct ctl_dir *find_subdir(struct ctl_dir *dir,
+@@ -876,7 +922,7 @@ static struct ctl_dir *find_subdir(struct ctl_dir *dir,
static struct ctl_dir *new_dir(struct ctl_table_set *set,
const char *name, int namelen)
{
struct ctl_dir *new;
struct ctl_node *node;
char *new_name;
-@@ -851,7 +893,7 @@ static struct ctl_dir *new_dir(struct ctl_table_set *set,
+@@ -888,7 +934,7 @@ static struct ctl_dir *new_dir(struct ctl_table_set *set,
return NULL;
node = (struct ctl_node *)(new + 1);
new_name = (char *)(table + 2);
memcpy(new_name, name, namelen);
new_name[namelen] = '\0';
-@@ -1020,7 +1062,8 @@ static int sysctl_check_table(const char *path, struct ctl_table *table)
+@@ -1057,7 +1103,8 @@ static int sysctl_check_table(const char *path, struct ctl_table *table)
static struct ctl_table_header *new_links(struct ctl_dir *dir, struct ctl_table *table,
struct ctl_table_root *link_root)
{
struct ctl_table_header *links;
struct ctl_node *node;
char *link_name;
-@@ -1043,7 +1086,7 @@ static struct ctl_table_header *new_links(struct ctl_dir *dir, struct ctl_table
+@@ -1080,7 +1127,7 @@ static struct ctl_table_header *new_links(struct ctl_dir *dir, struct ctl_table
return NULL;
node = (struct ctl_node *)(links + 1);
link_name = (char *)&link_table[nr_entries + 1];
for (link = link_table, entry = table; entry->procname; link++, entry++) {
-@@ -1291,8 +1334,8 @@ static int register_leaf_sysctl_tables(const char *path, char *pos,
+@@ -1328,8 +1375,8 @@ static int register_leaf_sysctl_tables(const char *path, char *pos,
struct ctl_table_header ***subheader, struct ctl_table_set *set,
struct ctl_table *table)
{
int nr_files = 0;
int nr_dirs = 0;
int err = -ENOMEM;
-@@ -1304,10 +1347,9 @@ static int register_leaf_sysctl_tables(const char *path, char *pos,
+@@ -1341,10 +1388,9 @@ static int register_leaf_sysctl_tables(const char *path, char *pos,
nr_files++;
}
files = kzalloc(sizeof(struct ctl_table) * (nr_files + 1),
GFP_KERNEL);
if (!files)
-@@ -1325,7 +1367,7 @@ static int register_leaf_sysctl_tables(const char *path, char *pos,
+@@ -1362,7 +1408,7 @@ static int register_leaf_sysctl_tables(const char *path, char *pos,
/* Register everything except a directory full of subdirectories */
if (nr_files || !nr_dirs) {
struct ctl_table_header *header;
kfree(ctl_table_arg);
goto out;
diff --git a/fs/proc/root.c b/fs/proc/root.c
-index e74ac9f..35e89f4 100644
+index 68feb0f..2c04780 100644
--- a/fs/proc/root.c
+++ b/fs/proc/root.c
-@@ -188,7 +188,15 @@ void __init proc_root_init(void)
- proc_mkdir("openprom", NULL);
+@@ -185,7 +185,15 @@ void __init proc_root_init(void)
+ proc_create_mount_point("openprom");
#endif
proc_tty_init();
+#ifdef CONFIG_GRKERNSEC_PROC_ADD
if (!msg_head) {
printk(KERN_ERR
diff --git a/fs/read_write.c b/fs/read_write.c
-index 8e1b687..bad2eec 100644
+index 819ef3f..f07222d 100644
--- a/fs/read_write.c
+++ b/fs/read_write.c
-@@ -553,7 +553,7 @@ ssize_t __kernel_write(struct file *file, const char *buf, size_t count, loff_t
+@@ -505,7 +505,7 @@ ssize_t __kernel_write(struct file *file, const char *buf, size_t count, loff_t
old_fs = get_fs();
set_fs(get_ds());
+ p = (const char __force_user *)buf;
if (count > MAX_RW_COUNT)
count = MAX_RW_COUNT;
- if (file->f_op->write)
+ ret = __vfs_write(file, p, count, pos);
diff --git a/fs/readdir.c b/fs/readdir.c
index ced6791..936687b 100644
--- a/fs/readdir.c
SF(s_do_balance), SF(s_unneeded_left_neighbor),
SF(s_good_search_by_key_reada), SF(s_bmaps),
diff --git a/fs/reiserfs/reiserfs.h b/fs/reiserfs/reiserfs.h
-index bb79cdd..fcf49ef 100644
+index 2adcde1..7d27bc8 100644
--- a/fs/reiserfs/reiserfs.h
+++ b/fs/reiserfs/reiserfs.h
@@ -580,7 +580,7 @@ struct reiserfs_sb_info {
/* File system properties. Currently holds on-disk FS format */
unsigned long s_properties;
-@@ -2301,7 +2301,7 @@ static inline loff_t max_reiserfs_offset(struct inode *inode)
+@@ -2300,7 +2300,7 @@ static inline loff_t max_reiserfs_offset(struct inode *inode)
#define REISERFS_USER_MEM 1 /* user memory mode */
#define fs_generation(s) (REISERFS_SB(s)->s_generation_counter)
#define __fs_changed(gen,s) (gen != get_generation (s))
#define fs_changed(gen,s) \
diff --git a/fs/reiserfs/super.c b/fs/reiserfs/super.c
-index 71fbbe3..eff29ba 100644
+index 0111ad0..00f4749 100644
--- a/fs/reiserfs/super.c
+++ b/fs/reiserfs/super.c
@@ -1868,6 +1868,10 @@ static int reiserfs_fill_super(struct super_block *s, void *data, int silent)
{
const struct seq_operations *op = ((struct seq_file *)file->private_data)->op;
diff --git a/fs/splice.c b/fs/splice.c
-index 7968da9..4ce985b 100644
+index bfe62ae..a84920d 100644
--- a/fs/splice.c
+++ b/fs/splice.c
-@@ -193,7 +193,7 @@ ssize_t splice_to_pipe(struct pipe_inode_info *pipe,
+@@ -192,7 +192,7 @@ ssize_t splice_to_pipe(struct pipe_inode_info *pipe,
pipe_lock(pipe);
for (;;) {
send_sig(SIGPIPE, current, 0);
if (!ret)
ret = -EPIPE;
-@@ -216,7 +216,7 @@ ssize_t splice_to_pipe(struct pipe_inode_info *pipe,
+@@ -215,7 +215,7 @@ ssize_t splice_to_pipe(struct pipe_inode_info *pipe,
page_nr++;
ret += buf->len;
do_wakeup = 1;
if (!--spd->nr_pages)
-@@ -247,9 +247,9 @@ ssize_t splice_to_pipe(struct pipe_inode_info *pipe,
+@@ -246,9 +246,9 @@ ssize_t splice_to_pipe(struct pipe_inode_info *pipe,
do_wakeup = 0;
}
}
pipe_unlock(pipe);
-@@ -576,7 +576,7 @@ static ssize_t kernel_readv(struct file *file, const struct iovec *vec,
+@@ -578,7 +578,7 @@ static ssize_t kernel_readv(struct file *file, const struct iovec *vec,
old_fs = get_fs();
set_fs(get_ds());
/* The cast to a user pointer is valid due to the set_fs() */
set_fs(old_fs);
return res;
-@@ -591,7 +591,7 @@ ssize_t kernel_write(struct file *file, const char *buf, size_t count,
+@@ -593,7 +593,7 @@ ssize_t kernel_write(struct file *file, const char *buf, size_t count,
old_fs = get_fs();
set_fs(get_ds());
/* The cast to a user pointer is valid due to the set_fs() */
set_fs(old_fs);
return res;
-@@ -644,7 +644,7 @@ ssize_t default_file_splice_read(struct file *in, loff_t *ppos,
+@@ -646,7 +646,7 @@ ssize_t default_file_splice_read(struct file *in, loff_t *ppos,
goto err;
this_len = min_t(size_t, len, PAGE_CACHE_SIZE - offset);
vec[i].iov_len = this_len;
spd.pages[i] = page;
spd.nr_pages++;
-@@ -783,7 +783,7 @@ static int splice_from_pipe_feed(struct pipe_inode_info *pipe, struct splice_des
+@@ -785,7 +785,7 @@ static int splice_from_pipe_feed(struct pipe_inode_info *pipe, struct splice_des
ops->release(pipe, buf);
pipe->curbuf = (pipe->curbuf + 1) & (pipe->buffers - 1);
pipe->nrbufs--;
sd->need_wakeup = true;
}
-@@ -807,10 +807,10 @@ static int splice_from_pipe_feed(struct pipe_inode_info *pipe, struct splice_des
+@@ -809,10 +809,10 @@ static int splice_from_pipe_feed(struct pipe_inode_info *pipe, struct splice_des
static int splice_from_pipe_next(struct pipe_inode_info *pipe, struct splice_desc *sd)
{
while (!pipe->nrbufs) {
return 0;
if (sd->flags & SPLICE_F_NONBLOCK)
-@@ -1025,7 +1025,7 @@ iter_file_splice_write(struct pipe_inode_info *pipe, struct file *out,
+@@ -1027,7 +1027,7 @@ iter_file_splice_write(struct pipe_inode_info *pipe, struct file *out,
ops->release(pipe, buf);
pipe->curbuf = (pipe->curbuf + 1) & (pipe->buffers - 1);
pipe->nrbufs--;
sd.need_wakeup = true;
} else {
buf->offset += ret;
-@@ -1159,7 +1159,7 @@ ssize_t splice_direct_to_actor(struct file *in, struct splice_desc *sd,
- long ret, bytes;
- umode_t i_mode;
- size_t len;
-- int i, flags;
-+ int i, flags, more;
-
- /*
- * We require the input being a regular file, as we don't want to
-@@ -1185,7 +1185,7 @@ ssize_t splice_direct_to_actor(struct file *in, struct splice_desc *sd,
+@@ -1187,7 +1187,7 @@ ssize_t splice_direct_to_actor(struct file *in, struct splice_desc *sd,
* out of the pipe right after the splice_to_pipe(). So set
* PIPE_READERS appropriately.
*/
current->splice_pipe = pipe;
}
-@@ -1202,6 +1202,7 @@ ssize_t splice_direct_to_actor(struct file *in, struct splice_desc *sd,
- * Don't block on output, we have to drain the direct pipe.
- */
- sd->flags &= ~SPLICE_F_NONBLOCK;
-+ more = sd->flags & SPLICE_F_MORE;
-
- while (len) {
- size_t read_len;
-@@ -1215,6 +1216,15 @@ ssize_t splice_direct_to_actor(struct file *in, struct splice_desc *sd,
- sd->total_len = read_len;
-
- /*
-+ * If more data is pending, set SPLICE_F_MORE
-+ * If this is the last data and SPLICE_F_MORE was not set
-+ * initially, clears it.
-+ */
-+ if (read_len < len)
-+ sd->flags |= SPLICE_F_MORE;
-+ else if (!more)
-+ sd->flags &= ~SPLICE_F_MORE;
-+ /*
- * NOTE: nonblocking mode only applies to the input. We
- * must not do the output in nonblocking mode as then we
- * could get stuck data in the internal pipe:
-@@ -1482,6 +1492,7 @@ static int get_iovec_page_array(const struct iovec __user *iov,
+@@ -1494,6 +1494,7 @@ static int get_iovec_page_array(const struct iovec __user *iov,
partial[buffers].offset = off;
partial[buffers].len = plen;
off = 0;
len -= plen;
-@@ -1718,9 +1729,9 @@ static int ipipe_prep(struct pipe_inode_info *pipe, unsigned int flags)
+@@ -1725,9 +1726,9 @@ static int ipipe_prep(struct pipe_inode_info *pipe, unsigned int flags)
ret = -ERESTARTSYS;
break;
}
if (flags & SPLICE_F_NONBLOCK) {
ret = -EAGAIN;
break;
-@@ -1752,7 +1763,7 @@ static int opipe_prep(struct pipe_inode_info *pipe, unsigned int flags)
+@@ -1759,7 +1760,7 @@ static int opipe_prep(struct pipe_inode_info *pipe, unsigned int flags)
pipe_lock(pipe);
while (pipe->nrbufs >= pipe->buffers) {
send_sig(SIGPIPE, current, 0);
ret = -EPIPE;
break;
-@@ -1765,9 +1776,9 @@ static int opipe_prep(struct pipe_inode_info *pipe, unsigned int flags)
+@@ -1772,9 +1773,9 @@ static int opipe_prep(struct pipe_inode_info *pipe, unsigned int flags)
ret = -ERESTARTSYS;
break;
}
}
pipe_unlock(pipe);
-@@ -1803,14 +1814,14 @@ retry:
+@@ -1810,14 +1811,14 @@ retry:
pipe_double_lock(ipipe, opipe);
do {
break;
/*
-@@ -1907,7 +1918,7 @@ static int link_pipe(struct pipe_inode_info *ipipe,
+@@ -1914,7 +1915,7 @@ static int link_pipe(struct pipe_inode_info *ipipe,
pipe_double_lock(ipipe, opipe);
do {
send_sig(SIGPIPE, current, 0);
if (!ret)
ret = -EPIPE;
-@@ -1952,7 +1963,7 @@ static int link_pipe(struct pipe_inode_info *ipipe,
+@@ -1959,7 +1960,7 @@ static int link_pipe(struct pipe_inode_info *ipipe,
* return EAGAIN if we have the potential of some data in the
* future, otherwise just return 0
*/
pipe_unlock(ipipe);
diff --git a/fs/squashfs/xattr.c b/fs/squashfs/xattr.c
-index 92fcde7..1687329 100644
+index e5e0ddf..09598c4 100644
--- a/fs/squashfs/xattr.c
+++ b/fs/squashfs/xattr.c
@@ -46,8 +46,8 @@ ssize_t squashfs_listxattr(struct dentry *d, char *buffer,
failed:
return err;
diff --git a/fs/stat.c b/fs/stat.c
-index ae0c3ce..9ee641c 100644
+index cccc1aa..7fe8951 100644
--- a/fs/stat.c
+++ b/fs/stat.c
@@ -28,8 +28,13 @@ void generic_fillattr(struct inode *inode, struct kstat *stat)
@@ -52,9 +57,16 @@ EXPORT_SYMBOL(generic_fillattr);
int vfs_getattr_nosec(struct path *path, struct kstat *stat)
{
- struct inode *inode = path->dentry->d_inode;
+ struct inode *inode = d_backing_inode(path->dentry);
+ int retval;
- if (inode->i_op->getattr)
generic_fillattr(inode, stat);
return 0;
diff --git a/fs/sysfs/dir.c b/fs/sysfs/dir.c
-index 0b45ff4..edf9d3a 100644
+index 94374e4..b5da3a1 100644
--- a/fs/sysfs/dir.c
+++ b/fs/sysfs/dir.c
@@ -33,6 +33,10 @@ void sysfs_warn_dup(struct kernfs_node *parent, const char *name)
{
if (sbi->s_bytesex == BYTESEX_PDP)
return PDP_swab((__force __u32)n);
+diff --git a/fs/tracefs/inode.c b/fs/tracefs/inode.c
+index a43df11..c368e71 100644
+--- a/fs/tracefs/inode.c
++++ b/fs/tracefs/inode.c
+@@ -53,7 +53,7 @@ static const struct file_operations tracefs_file_operations = {
+ static struct tracefs_dir_ops {
+ int (*mkdir)(const char *name);
+ int (*rmdir)(const char *name);
+-} tracefs_ops;
++} __no_const tracefs_ops __read_only;
+
+ static char *get_dname(struct dentry *dentry)
+ {
+@@ -490,8 +490,10 @@ struct dentry *tracefs_create_instance_dir(const char *name, struct dentry *pare
+ if (!dentry)
+ return NULL;
+
+- tracefs_ops.mkdir = mkdir;
+- tracefs_ops.rmdir = rmdir;
++ pax_open_kernel();
++ *(void **)&tracefs_ops.mkdir = mkdir;
++ *(void **)&tracefs_ops.rmdir = rmdir;
++ pax_close_kernel();
+
+ return dentry;
+ }
diff --git a/fs/ubifs/io.c b/fs/ubifs/io.c
-index fb08b0c..65fcc7e 100644
+index 97be412..974b37f 100644
--- a/fs/ubifs/io.c
+++ b/fs/ubifs/io.c
@@ -155,7 +155,7 @@ int ubifs_leb_change(struct ubifs_info *c, int lnum, const void *buf, int len)
int err;
diff --git a/fs/udf/misc.c b/fs/udf/misc.c
-index c175b4d..8f36a16 100644
+index 71d1c25..084e2ad 100644
--- a/fs/udf/misc.c
+++ b/fs/udf/misc.c
-@@ -289,7 +289,7 @@ void udf_new_tag(char *data, uint16_t ident, uint16_t version, uint16_t snum,
+@@ -288,7 +288,7 @@ void udf_new_tag(char *data, uint16_t ident, uint16_t version, uint16_t snum,
u8 udf_tag_checksum(const struct tag *t)
{
}
fdput(f);
diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c
-index 61ec015..7c18807 100644
+index f1026e8..a0fbe4f 100644
--- a/fs/xfs/libxfs/xfs_bmap.c
+++ b/fs/xfs/libxfs/xfs_bmap.c
-@@ -580,7 +580,7 @@ xfs_bmap_validate_ret(
+@@ -554,7 +554,7 @@ xfs_bmap_validate_ret(
#else
#define xfs_bmap_check_leaf_extents(cur, ip, whichfork) do { } while (0)
return 0;
sfep = dp->d_ops->sf_nextentry(sfp, sfep);
diff --git a/fs/xfs/xfs_ioctl.c b/fs/xfs/xfs_ioctl.c
-index ac4feae..386d551 100644
+index 87f67c6..7e335bf 100644
--- a/fs/xfs/xfs_ioctl.c
+++ b/fs/xfs/xfs_ioctl.c
@@ -120,7 +120,7 @@ xfs_find_handle(
goto out_put;
diff --git a/fs/xfs/xfs_linux.h b/fs/xfs/xfs_linux.h
-index c31d2c2..6ec8f62 100644
+index 7c7842c..ce15222 100644
--- a/fs/xfs/xfs_linux.h
+++ b/fs/xfs/xfs_linux.h
-@@ -234,7 +234,7 @@ static inline kgid_t xfs_gid_to_kgid(__uint32_t gid)
+@@ -225,7 +225,7 @@ static inline kgid_t xfs_gid_to_kgid(__uint32_t gid)
* of the compiler which do not like us using do_div in the middle
* of large functions.
*/
{
__u32 mod;
-@@ -290,7 +290,7 @@ static inline __u32 xfs_do_mod(void *a, __u32 b, int n)
+@@ -281,7 +281,7 @@ static inline __u32 xfs_do_mod(void *a, __u32 b, int n)
return 0;
}
#else
+endif
diff --git a/grsecurity/gracl.c b/grsecurity/gracl.c
new file mode 100644
-index 0000000..811af1f
+index 0000000..7ad630a
--- /dev/null
+++ b/grsecurity/gracl.c
-@@ -0,0 +1,2749 @@
+@@ -0,0 +1,2757 @@
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/sched.h>
+
+static inline dev_t __get_dev(const struct dentry *dentry)
+{
++ struct dentry *ldentry = d_backing_dentry((struct dentry *)dentry);
++
+#if defined(CONFIG_BTRFS_FS) || defined(CONFIG_BTRFS_FS_MODULE)
-+ if (dentry->d_sb->s_magic == BTRFS_SUPER_MAGIC)
-+ return BTRFS_I(dentry->d_inode)->root->anon_dev;
++ if (ldentry->d_sb->s_magic == BTRFS_SUPER_MAGIC)
++ return BTRFS_I(d_inode(ldentry))->root->anon_dev;
+ else
+#endif
-+ return dentry->d_sb->s_dev;
++ return d_inode(ldentry)->i_sb->s_dev;
+}
+
+static inline u64 __get_ino(const struct dentry *dentry)
+{
++ struct dentry *ldentry = d_backing_dentry((struct dentry *)dentry);
++
+#if defined(CONFIG_BTRFS_FS) || defined(CONFIG_BTRFS_FS_MODULE)
-+ if (dentry->d_sb->s_magic == BTRFS_SUPER_MAGIC)
-+ return btrfs_ino(dentry->d_inode);
++ if (ldentry->d_sb->s_magic == BTRFS_SUPER_MAGIC)
++ return btrfs_ino(d_inode(dentry));
+ else
+#endif
-+ return dentry->d_inode->i_ino;
++ return d_inode(ldentry)->i_ino;
+}
+
+dev_t gr_get_dev_from_dentry(struct dentry *dentry)
+{
+ struct dentry *dentry = (struct dentry *) l_dentry;
+ struct vfsmount *mnt = (struct vfsmount *) l_mnt;
++ struct inode * inode = d_backing_inode(dentry);
+ struct mount *real_mnt = real_mount(mnt);
+ struct acl_object_label *retval;
+ struct dentry *parent;
+ read_seqlock_excl(&mount_lock);
+ write_seqlock(&rename_lock);
+
-+ if (unlikely((mnt == shm_mnt && dentry->d_inode->i_nlink == 0) || mnt == pipe_mnt ||
++ if (unlikely((mnt == shm_mnt && inode->i_nlink == 0) || mnt == pipe_mnt ||
+#ifdef CONFIG_NET
+ mnt == sock_mnt ||
+#endif
+#ifdef CONFIG_HUGETLBFS
-+ (is_hugetlbfs_mnt(mnt) && dentry->d_inode->i_nlink == 0) ||
++ (is_hugetlbfs_mnt(mnt) && inode->i_nlink == 0) ||
+#endif
+ /* ignore Eric Biederman */
-+ IS_PRIVATE(l_dentry->d_inode))) {
++ IS_PRIVATE(inode))) {
+ retval = (subj->mode & GR_SHMEXEC) ? fakefs_obj_rwx : fakefs_obj_rw;
+ goto out;
+ }
+ struct name_entry *matchn;
+ struct name_entry *matchn2 = NULL;
+ struct inodev_entry *inodev;
-+ struct inode *inode = new_dentry->d_inode;
++ struct inode *inode = d_backing_inode(new_dentry);
++ struct inode *old_inode = d_backing_inode(old_dentry);
+ u64 old_ino = __get_ino(old_dentry);
+ dev_t old_dev = __get_dev(old_dentry);
+ unsigned int exchange = flags & RENAME_EXCHANGE;
+ dev_t new_dev = __get_dev(new_dentry);
+
+ inodev = lookup_inodev_entry(new_ino, new_dev);
-+ if (inodev != NULL && ((inode->i_nlink <= 1) || S_ISDIR(inode->i_mode)))
++ if (inodev != NULL && ((inode->i_nlink <= 1) || d_is_dir(new_dentry)))
+ do_handle_delete(inodev, new_ino, new_dev);
+ }
+
+ inodev = lookup_inodev_entry(old_ino, old_dev);
-+ if (inodev != NULL && ((old_dentry->d_inode->i_nlink <= 1) || S_ISDIR(old_dentry->d_inode->i_mode)))
++ if (inodev != NULL && ((old_inode->i_nlink <= 1) || d_is_dir(old_dentry)))
+ do_handle_delete(inodev, old_ino, old_dev);
+
+ if (unlikely(matchn != NULL))
+{
+ struct task_struct *task = current;
+ struct acl_object_label *obj, *obj2;
++ struct dentry *dentry = filp->f_path.dentry;
++ struct vfsmount *mnt = filp->f_path.mnt;
++ struct inode *inode = d_backing_inode(dentry);
+
+ if (gr_status & GR_READY && !(task->acl->mode & GR_OVERRIDE) &&
-+ !task->is_writable && S_ISREG(filp->f_path.dentry->d_inode->i_mode) && (filp->f_path.mnt != shm_mnt || (filp->f_path.dentry->d_inode->i_nlink > 0))) {
-+ obj = chk_obj_label(filp->f_path.dentry, filp->f_path.mnt, running_polstate.default_role->root_label);
-+ obj2 = chk_obj_label(filp->f_path.dentry, filp->f_path.mnt,
-+ task->role->root_label);
++ !task->is_writable && d_is_reg(dentry) && (mnt != shm_mnt || (inode->i_nlink > 0))) {
++ obj = chk_obj_label(dentry, mnt, running_polstate.default_role->root_label);
++ obj2 = chk_obj_label(dentry, mnt, task->role->root_label);
+ if (unlikely((obj->mode & GR_WRITE) || (obj2->mode & GR_WRITE))) {
-+ gr_log_fs_generic(GR_DONT_AUDIT, GR_WRITLIB_ACL_MSG, filp->f_path.dentry, filp->f_path.mnt);
++ gr_log_fs_generic(GR_DONT_AUDIT, GR_WRITLIB_ACL_MSG, dentry, mnt);
+ return 1;
+ }
+ }
+ return 1;
+
+ /* ignore Eric Biederman */
-+ if (IS_PRIVATE(dentry->d_inode))
++ if (IS_PRIVATE(d_backing_inode(dentry)))
+ return 1;
+
+ subj = task->acl;
+
diff --git a/grsecurity/gracl_fs.c b/grsecurity/gracl_fs.c
new file mode 100644
-index 0000000..8ee8e4f
+index 0000000..fce7f71
--- /dev/null
+++ b/grsecurity/gracl_fs.c
-@@ -0,0 +1,447 @@
+@@ -0,0 +1,448 @@
+#include <linux/kernel.h>
+#include <linux/sched.h>
+#include <linux/types.h>
+ reqmode |= GR_APPEND;
+ else if (acc_mode & MAY_WRITE)
+ reqmode |= GR_WRITE;
-+ if ((acc_mode & MAY_READ) && !S_ISDIR(dentry->d_inode->i_mode))
++ if ((acc_mode & MAY_READ) && !d_is_dir(dentry))
+ reqmode |= GR_READ;
+
+ mode =
+ // if a directory was required or the directory already exists, then
+ // don't count this open as a read
+ if ((acc_mode & MAY_READ) &&
-+ !((open_flags & O_DIRECTORY) || (dentry->d_inode && S_ISDIR(dentry->d_inode->i_mode))))
++ !((open_flags & O_DIRECTORY) || d_is_dir(dentry)))
+ reqmode |= GR_READ;
+ if ((open_flags & O_CREAT) &&
+ ((imode & S_ISUID) || ((imode & (S_ISGID | S_IXGRP)) == (S_ISGID | S_IXGRP))))
+{
+ __u32 mode, reqmode = GR_FIND;
+
-+ if ((fmode & S_IXOTH) && !S_ISDIR(dentry->d_inode->i_mode))
++ if ((fmode & S_IXOTH) && !d_is_dir(dentry))
+ reqmode |= GR_EXEC;
+ if (fmode & S_IWOTH)
+ reqmode |= GR_WRITE;
+ umode_t *modeptr)
+{
+ umode_t mode;
++ struct inode *inode = d_backing_inode(dentry);
+
+ *modeptr &= ~gr_acl_umask();
+ mode = *modeptr;
+
-+ if (unlikely(dentry->d_inode && S_ISSOCK(dentry->d_inode->i_mode)))
++ if (unlikely(inode && S_ISSOCK(inode->i_mode)))
+ return 1;
+
-+ if (unlikely(dentry->d_inode && !S_ISDIR(dentry->d_inode->i_mode) &&
++ if (unlikely(!d_is_dir(dentry) &&
+ ((mode & S_ISUID) || ((mode & (S_ISGID | S_IXGRP)) == (S_ISGID | S_IXGRP))))) {
+ return generic_fs_handler(dentry, mnt, GR_WRITE | GR_SETID,
+ GR_CHMOD_ACL_MSG);
+}
diff --git a/grsecurity/gracl_ip.c b/grsecurity/gracl_ip.c
new file mode 100644
-index 0000000..f056b81
+index 0000000..ed6ee43
--- /dev/null
+++ b/grsecurity/gracl_ip.c
@@ -0,0 +1,386 @@
+ "unspec", "unix", "inet", "ax25", "ipx", "appletalk", "netrom", "bridge", "atmpvc", "x25",
+ "inet6", "rose", "decnet", "netbeui", "security", "key", "netlink", "packet", "ash",
+ "econet", "atmsvc", "rds", "sna", "irda", "ppox", "wanpipe", "llc", "fam_27", "fam_28",
-+ "tipc", "bluetooth", "iucv", "rxrpc", "isdn", "phonet", "ieee802154", "ciaf"
++ "tipc", "bluetooth", "iucv", "rxrpc", "isdn", "phonet", "ieee802154", "ciaf", "alg", "nfc", "vsock"
+ };
+
+const char *
+};
diff --git a/grsecurity/gracl_policy.c b/grsecurity/gracl_policy.c
new file mode 100644
-index 0000000..fd26052
+index 0000000..0773423
--- /dev/null
+++ b/grsecurity/gracl_policy.c
-@@ -0,0 +1,1781 @@
+@@ -0,0 +1,1786 @@
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/sched.h>
+ get_fs_root(reaper->fs, &gr_real_root);
+
+#ifdef CONFIG_GRKERNSEC_RBAC_DEBUG
-+ printk(KERN_ALERT "Obtained real root device=%d, inode=%lu\n", __get_dev(gr_real_root.dentry), gr_real_root.dentry->d_inode->i_ino);
++ printk(KERN_ALERT "Obtained real root device=%d, inode=%lu\n", gr_get_dev_from_dentry(gr_real_root.dentry), gr_get_ino_from_dentry(gr_real_root.dentry));
+#endif
+
+ fakefs_obj_rw = kzalloc(sizeof(struct acl_object_label), GFP_KERNEL);
+ struct files_struct *files;
+ struct fdtable *fdt;
+ struct file *our_file = NULL, *file;
++ struct inode *our_inode = NULL;
+ int i;
+
+ if (task->signal->tty == NULL)
+ if (our_file == NULL)
+ return 1;
+
++ our_inode = d_backing_inode(our_file->f_path.dentry);
++
+ read_lock(&tasklist_lock);
+ do_each_thread(p2, p) {
+ files = get_files_struct(p);
+ rcu_read_lock();
+ fdt = files_fdtable(files);
+ for (i=0; i < fdt->max_fds; i++) {
++ struct inode *inode = NULL;
+ file = fcheck_files(files, i);
-+ if (file && S_ISCHR(file->f_path.dentry->d_inode->i_mode) &&
-+ file->f_path.dentry->d_inode->i_rdev == our_file->f_path.dentry->d_inode->i_rdev) {
++ if (file)
++ inode = d_backing_inode(file->f_path.dentry);
++ if (inode && S_ISCHR(inode->i_mode) && inode->i_rdev == our_inode->i_rdev) {
+ p3 = task;
+ while (task_pid_nr(p3) > 0) {
+ if (p3 == p)
+}
diff --git a/grsecurity/gracl_segv.c b/grsecurity/gracl_segv.c
new file mode 100644
-index 0000000..35d9e65
+index 0000000..21646aa
--- /dev/null
+++ b/grsecurity/gracl_segv.c
-@@ -0,0 +1,324 @@
+@@ -0,0 +1,304 @@
+#include <linux/kernel.h>
+#include <linux/mm.h>
+#include <asm/uaccess.h>
+ lookup_acl_subj_label(const u64 inode, const dev_t dev,
+ struct acl_role_label *role);
+
-+static inline dev_t __get_dev(const struct dentry *dentry)
-+{
-+#if defined(CONFIG_BTRFS_FS) || defined(CONFIG_BTRFS_FS_MODULE)
-+ if (dentry->d_sb->s_magic == BTRFS_SUPER_MAGIC)
-+ return BTRFS_I(dentry->d_inode)->root->anon_dev;
-+ else
-+#endif
-+ return dentry->d_sb->s_dev;
-+}
-+
-+static inline u64 __get_ino(const struct dentry *dentry)
-+{
-+#if defined(CONFIG_BTRFS_FS) || defined(CONFIG_BTRFS_FS_MODULE)
-+ if (dentry->d_sb->s_magic == BTRFS_SUPER_MAGIC)
-+ return btrfs_ino(dentry->d_inode);
-+ else
-+#endif
-+ return dentry->d_inode->i_ino;
-+}
-+
+int
+gr_init_uidset(void)
+{
+
+ read_lock(&gr_inode_lock);
+ dentry = filp->f_path.dentry;
-+ curr = lookup_acl_subj_label(__get_ino(dentry), __get_dev(dentry),
++ curr = lookup_acl_subj_label(gr_get_ino_from_dentry(dentry), gr_get_dev_from_dentry(dentry),
+ current->role);
+ read_unlock(&gr_inode_lock);
+
+}
diff --git a/grsecurity/grsec_chroot.c b/grsecurity/grsec_chroot.c
new file mode 100644
-index 0000000..114ea4f
+index 0000000..652ab45
--- /dev/null
+++ b/grsecurity/grsec_chroot.c
@@ -0,0 +1,467 @@
+{
+#ifdef CONFIG_GRKERNSEC_CHROOT_CHMOD
+ /* allow chmod +s on directories, but not files */
-+ if (grsec_enable_chroot_chmod && !S_ISDIR(dentry->d_inode->i_mode) &&
++ if (grsec_enable_chroot_chmod && !d_is_dir(dentry) &&
+ ((mode & S_ISUID) || ((mode & (S_ISGID | S_IXGRP)) == (S_ISGID | S_IXGRP))) &&
+ proc_is_chrooted(current)) {
+ gr_log_fs_generic(GR_DONT_AUDIT, GR_CHMOD_CHROOT_MSG, dentry, mnt);
+}
diff --git a/grsecurity/grsec_disabled.c b/grsecurity/grsec_disabled.c
new file mode 100644
-index 0000000..946f750
+index 0000000..e723c08
--- /dev/null
+++ b/grsecurity/grsec_disabled.c
@@ -0,0 +1,445 @@
+
+dev_t gr_get_dev_from_dentry(struct dentry *dentry)
+{
-+ return dentry->d_sb->s_dev;
++ return d_backing_inode(dentry)->i_sb->s_dev;
+}
+
+u64 gr_get_ino_from_dentry(struct dentry *dentry)
+{
-+ return dentry->d_inode->i_ino;
++ return d_backing_inode(dentry)->i_ino;
+}
+
+void gr_put_exec_file(struct task_struct *task)
+EXPORT_SYMBOL_GPL(gr_task_is_capable_nolog);
diff --git a/grsecurity/grsec_fifo.c b/grsecurity/grsec_fifo.c
new file mode 100644
-index 0000000..06cc6ea
+index 0000000..cdec49b
--- /dev/null
+++ b/grsecurity/grsec_fifo.c
-@@ -0,0 +1,24 @@
+@@ -0,0 +1,26 @@
+#include <linux/kernel.h>
+#include <linux/sched.h>
+#include <linux/fs.h>
+{
+#ifdef CONFIG_GRKERNSEC_FIFO
+ const struct cred *cred = current_cred();
-+
-+ if (grsec_enable_fifo && S_ISFIFO(dentry->d_inode->i_mode) &&
-+ !(flag & O_EXCL) && (dir->d_inode->i_mode & S_ISVTX) &&
-+ !uid_eq(dentry->d_inode->i_uid, dir->d_inode->i_uid) &&
-+ !uid_eq(cred->fsuid, dentry->d_inode->i_uid)) {
-+ if (!inode_permission(dentry->d_inode, acc_mode))
-+ gr_log_fs_int2(GR_DONT_AUDIT, GR_FIFO_MSG, dentry, mnt, GR_GLOBAL_UID(dentry->d_inode->i_uid), GR_GLOBAL_GID(dentry->d_inode->i_gid));
++ struct inode *inode = d_backing_inode(dentry);
++ struct inode *dir_inode = d_backing_inode(dir);
++
++ if (grsec_enable_fifo && S_ISFIFO(inode->i_mode) &&
++ !(flag & O_EXCL) && (dir_inode->i_mode & S_ISVTX) &&
++ !uid_eq(inode->i_uid, dir_inode->i_uid) &&
++ !uid_eq(cred->fsuid, inode->i_uid)) {
++ if (!inode_permission(inode, acc_mode))
++ gr_log_fs_int2(GR_DONT_AUDIT, GR_FIFO_MSG, dentry, mnt, GR_GLOBAL_UID(inode->i_uid), GR_GLOBAL_GID(inode->i_gid));
+ return -EACCES;
+ }
+#endif
+}
diff --git a/grsecurity/grsec_init.c b/grsecurity/grsec_init.c
new file mode 100644
-index 0000000..4ed9e7d
+index 0000000..a364c58
--- /dev/null
+++ b/grsecurity/grsec_init.c
@@ -0,0 +1,290 @@
+#include <linux/percpu.h>
+#include <linux/module.h>
+
-+int grsec_enable_ptrace_readexec;
-+int grsec_enable_setxid;
-+int grsec_enable_symlinkown;
-+kgid_t grsec_symlinkown_gid;
-+int grsec_enable_brute;
-+int grsec_enable_link;
-+int grsec_enable_dmesg;
-+int grsec_enable_harden_ptrace;
-+int grsec_enable_harden_ipc;
-+int grsec_enable_fifo;
-+int grsec_enable_execlog;
-+int grsec_enable_signal;
-+int grsec_enable_forkfail;
-+int grsec_enable_audit_ptrace;
-+int grsec_enable_time;
-+int grsec_enable_group;
-+kgid_t grsec_audit_gid;
-+int grsec_enable_chdir;
-+int grsec_enable_mount;
-+int grsec_enable_rofs;
-+int grsec_deny_new_usb;
-+int grsec_enable_chroot_findtask;
-+int grsec_enable_chroot_mount;
-+int grsec_enable_chroot_shmat;
-+int grsec_enable_chroot_fchdir;
-+int grsec_enable_chroot_double;
-+int grsec_enable_chroot_pivot;
-+int grsec_enable_chroot_chdir;
-+int grsec_enable_chroot_chmod;
-+int grsec_enable_chroot_mknod;
-+int grsec_enable_chroot_nice;
-+int grsec_enable_chroot_execlog;
-+int grsec_enable_chroot_caps;
-+int grsec_enable_chroot_rename;
-+int grsec_enable_chroot_sysctl;
-+int grsec_enable_chroot_unix;
-+int grsec_enable_tpe;
-+kgid_t grsec_tpe_gid;
-+int grsec_enable_blackhole;
++int grsec_enable_ptrace_readexec __read_only;
++int grsec_enable_setxid __read_only;
++int grsec_enable_symlinkown __read_only;
++kgid_t grsec_symlinkown_gid __read_only;
++int grsec_enable_brute __read_only;
++int grsec_enable_link __read_only;
++int grsec_enable_dmesg __read_only;
++int grsec_enable_harden_ptrace __read_only;
++int grsec_enable_harden_ipc __read_only;
++int grsec_enable_fifo __read_only;
++int grsec_enable_execlog __read_only;
++int grsec_enable_signal __read_only;
++int grsec_enable_forkfail __read_only;
++int grsec_enable_audit_ptrace __read_only;
++int grsec_enable_time __read_only;
++int grsec_enable_group __read_only;
++kgid_t grsec_audit_gid __read_only;
++int grsec_enable_chdir __read_only;
++int grsec_enable_mount __read_only;
++int grsec_enable_rofs __read_only;
++int grsec_deny_new_usb __read_only;
++int grsec_enable_chroot_findtask __read_only;
++int grsec_enable_chroot_mount __read_only;
++int grsec_enable_chroot_shmat __read_only;
++int grsec_enable_chroot_fchdir __read_only;
++int grsec_enable_chroot_double __read_only;
++int grsec_enable_chroot_pivot __read_only;
++int grsec_enable_chroot_chdir __read_only;
++int grsec_enable_chroot_chmod __read_only;
++int grsec_enable_chroot_mknod __read_only;
++int grsec_enable_chroot_nice __read_only;
++int grsec_enable_chroot_execlog __read_only;
++int grsec_enable_chroot_caps __read_only;
++int grsec_enable_chroot_rename __read_only;
++int grsec_enable_chroot_sysctl __read_only;
++int grsec_enable_chroot_unix __read_only;
++int grsec_enable_tpe __read_only;
++kgid_t grsec_tpe_gid __read_only;
++int grsec_enable_blackhole __read_only;
+#ifdef CONFIG_IPV6_MODULE
+EXPORT_SYMBOL_GPL(grsec_enable_blackhole);
+#endif
-+int grsec_lastack_retries;
-+int grsec_enable_tpe_all;
-+int grsec_enable_tpe_invert;
-+int grsec_enable_socket_all;
-+kgid_t grsec_socket_all_gid;
-+int grsec_enable_socket_client;
-+kgid_t grsec_socket_client_gid;
-+int grsec_enable_socket_server;
-+kgid_t grsec_socket_server_gid;
-+int grsec_resource_logging;
-+int grsec_disable_privio;
-+int grsec_enable_log_rwxmaps;
-+int grsec_lock;
++int grsec_lastack_retries __read_only;
++int grsec_enable_tpe_all __read_only;
++int grsec_enable_tpe_invert __read_only;
++int grsec_enable_socket_all __read_only;
++kgid_t grsec_socket_all_gid __read_only;
++int grsec_enable_socket_client __read_only;
++kgid_t grsec_socket_client_gid __read_only;
++int grsec_enable_socket_server __read_only;
++kgid_t grsec_socket_server_gid __read_only;
++int grsec_resource_logging __read_only;
++int grsec_disable_privio __read_only;
++int grsec_enable_log_rwxmaps __read_only;
++int grsec_lock __read_only;
+
+DEFINE_SPINLOCK(grsec_alert_lock);
+unsigned long grsec_alert_wtime = 0;
+}
diff --git a/grsecurity/grsec_link.c b/grsecurity/grsec_link.c
new file mode 100644
-index 0000000..5e05e20
+index 0000000..8ef2b75
--- /dev/null
+++ b/grsecurity/grsec_link.c
-@@ -0,0 +1,58 @@
+@@ -0,0 +1,59 @@
+#include <linux/kernel.h>
+#include <linux/sched.h>
+#include <linux/fs.h>
+int gr_handle_symlink_owner(const struct path *link, const struct inode *target)
+{
+#ifdef CONFIG_GRKERNSEC_SYMLINKOWN
-+ const struct inode *link_inode = link->dentry->d_inode;
++ const struct inode *link_inode = d_backing_inode(link->dentry);
+
+ if (grsec_enable_symlinkown && in_group_p(grsec_symlinkown_gid) &&
+ /* ignore root-owned links, e.g. /proc/self */
+}
+
+int
-+gr_handle_follow_link(const struct inode *parent,
-+ const struct inode *inode,
-+ const struct dentry *dentry, const struct vfsmount *mnt)
++gr_handle_follow_link(const struct dentry *dentry, const struct vfsmount *mnt)
+{
+#ifdef CONFIG_GRKERNSEC_LINK
++ struct inode *inode = d_backing_inode(dentry);
++ struct inode *parent = d_backing_inode(dentry->d_parent);
+ const struct cred *cred = current_cred();
+
-+ if (grsec_enable_link && S_ISLNK(inode->i_mode) &&
++ if (grsec_enable_link && d_is_symlink(dentry) &&
+ (parent->i_mode & S_ISVTX) && !uid_eq(parent->i_uid, inode->i_uid) &&
+ (parent->i_mode & S_IWOTH) && !uid_eq(cred->fsuid, inode->i_uid)) {
+ gr_log_fs_int2(GR_DONT_AUDIT, GR_SYMLINK_MSG, dentry, mnt, inode->i_uid, inode->i_gid);
+int
+gr_handle_hardlink(const struct dentry *dentry,
+ const struct vfsmount *mnt,
-+ struct inode *inode, const int mode, const struct filename *to)
++ const struct filename *to)
+{
+#ifdef CONFIG_GRKERNSEC_LINK
++ struct inode *inode = d_backing_inode(dentry);
+ const struct cred *cred = current_cred();
+
+ if (grsec_enable_link && !uid_eq(cred->fsuid, inode->i_uid) &&
-+ (!S_ISREG(mode) || is_privileged_binary(dentry) ||
++ (!d_is_reg(dentry) || is_privileged_binary(dentry) ||
+ (inode_permission(inode, MAY_READ | MAY_WRITE))) &&
+ !capable(CAP_FOWNER) && gr_is_global_nonroot(cred->uid)) {
+ gr_log_fs_int2_str(GR_DONT_AUDIT, GR_HARDLINK_MSG, dentry, mnt, inode->i_uid, inode->i_gid, to->name);
+}
diff --git a/grsecurity/grsec_mount.c b/grsecurity/grsec_mount.c
new file mode 100644
-index 0000000..6f9eb73
+index 0000000..fe02bf4
--- /dev/null
+++ b/grsecurity/grsec_mount.c
@@ -0,0 +1,65 @@
+gr_handle_rofs_blockwrite(struct dentry *dentry, struct vfsmount *mnt, int acc_mode)
+{
+#ifdef CONFIG_GRKERNSEC_ROFS
-+ struct inode *inode = dentry->d_inode;
++ struct inode *inode = d_backing_inode(dentry);
+
+ if (grsec_enable_rofs && (acc_mode & MAY_WRITE) &&
+ inode && (S_ISBLK(inode->i_mode) || (S_ISCHR(inode->i_mode) && imajor(inode) == RAW_MAJOR))) {
+}
diff --git a/grsecurity/grsec_ptrace.c b/grsecurity/grsec_ptrace.c
new file mode 100644
-index 0000000..f7f29aa
+index 0000000..304c518
--- /dev/null
+++ b/grsecurity/grsec_ptrace.c
@@ -0,0 +1,30 @@
+ const struct vfsmount *mnt = file->f_path.mnt;
+
+ if (grsec_enable_ptrace_readexec && (unsafe_flags & LSM_UNSAFE_PTRACE) &&
-+ (inode_permission(dentry->d_inode, MAY_READ) || !gr_acl_handle_open(dentry, mnt, MAY_READ))) {
++ (inode_permission(d_backing_inode(dentry), MAY_READ) || !gr_acl_handle_open(dentry, mnt, MAY_READ))) {
+ gr_log_fs_generic(GR_DONT_AUDIT, GR_PTRACE_READEXEC_MSG, dentry, mnt);
+ return -EACCES;
+ }
+}
diff --git a/grsecurity/grsec_sysctl.c b/grsecurity/grsec_sysctl.c
new file mode 100644
-index 0000000..cce889e
+index 0000000..aaec43c
--- /dev/null
+++ b/grsecurity/grsec_sysctl.c
@@ -0,0 +1,488 @@
+ .data = &grsec_disable_privio,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec,
++ .proc_handler = &proc_dointvec_secure,
+ },
+#endif
+#endif
+ .data = &grsec_enable_link,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec,
++ .proc_handler = &proc_dointvec_secure,
+ },
+#endif
+#ifdef CONFIG_GRKERNSEC_SYMLINKOWN
+ .data = &grsec_enable_symlinkown,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec,
++ .proc_handler = &proc_dointvec_secure,
+ },
+ {
+ .procname = "symlinkown_gid",
+ .data = &grsec_symlinkown_gid,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec,
++ .proc_handler = &proc_dointvec_secure,
+ },
+#endif
+#ifdef CONFIG_GRKERNSEC_BRUTE
+ .data = &grsec_enable_brute,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec,
++ .proc_handler = &proc_dointvec_secure,
+ },
+#endif
+#ifdef CONFIG_GRKERNSEC_FIFO
+ .data = &grsec_enable_fifo,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec,
++ .proc_handler = &proc_dointvec_secure,
+ },
+#endif
+#ifdef CONFIG_GRKERNSEC_PTRACE_READEXEC
+ .data = &grsec_enable_ptrace_readexec,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec,
++ .proc_handler = &proc_dointvec_secure,
+ },
+#endif
+#ifdef CONFIG_GRKERNSEC_SETXID
+ .data = &grsec_enable_setxid,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec,
++ .proc_handler = &proc_dointvec_secure,
+ },
+#endif
+#ifdef CONFIG_GRKERNSEC_BLACKHOLE
+ .data = &grsec_enable_blackhole,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec,
++ .proc_handler = &proc_dointvec_secure,
+ },
+ {
+ .procname = "lastack_retries",
+ .data = &grsec_lastack_retries,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec,
++ .proc_handler = &proc_dointvec_secure,
+ },
+#endif
+#ifdef CONFIG_GRKERNSEC_EXECLOG
+ .data = &grsec_enable_execlog,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec,
++ .proc_handler = &proc_dointvec_secure,
+ },
+#endif
+#ifdef CONFIG_GRKERNSEC_RWXMAP_LOG
+ .data = &grsec_enable_log_rwxmaps,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec,
++ .proc_handler = &proc_dointvec_secure,
+ },
+#endif
+#ifdef CONFIG_GRKERNSEC_SIGNAL
+ .data = &grsec_enable_signal,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec,
++ .proc_handler = &proc_dointvec_secure,
+ },
+#endif
+#ifdef CONFIG_GRKERNSEC_FORKFAIL
+ .data = &grsec_enable_forkfail,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec,
++ .proc_handler = &proc_dointvec_secure,
+ },
+#endif
+#ifdef CONFIG_GRKERNSEC_TIME
+ .data = &grsec_enable_time,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec,
++ .proc_handler = &proc_dointvec_secure,
+ },
+#endif
+#ifdef CONFIG_GRKERNSEC_CHROOT_SHMAT
+ .data = &grsec_enable_chroot_shmat,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec,
++ .proc_handler = &proc_dointvec_secure,
+ },
+#endif
+#ifdef CONFIG_GRKERNSEC_CHROOT_UNIX
+ .data = &grsec_enable_chroot_unix,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec,
++ .proc_handler = &proc_dointvec_secure,
+ },
+#endif
+#ifdef CONFIG_GRKERNSEC_CHROOT_MOUNT
+ .data = &grsec_enable_chroot_mount,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec,
++ .proc_handler = &proc_dointvec_secure,
+ },
+#endif
+#ifdef CONFIG_GRKERNSEC_CHROOT_FCHDIR
+ .data = &grsec_enable_chroot_fchdir,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec,
++ .proc_handler = &proc_dointvec_secure,
+ },
+#endif
+#ifdef CONFIG_GRKERNSEC_CHROOT_DOUBLE
+ .data = &grsec_enable_chroot_double,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec,
++ .proc_handler = &proc_dointvec_secure,
+ },
+#endif
+#ifdef CONFIG_GRKERNSEC_CHROOT_PIVOT
+ .data = &grsec_enable_chroot_pivot,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec,
++ .proc_handler = &proc_dointvec_secure,
+ },
+#endif
+#ifdef CONFIG_GRKERNSEC_CHROOT_CHDIR
+ .data = &grsec_enable_chroot_chdir,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec,
++ .proc_handler = &proc_dointvec_secure,
+ },
+#endif
+#ifdef CONFIG_GRKERNSEC_CHROOT_CHMOD
+ .data = &grsec_enable_chroot_chmod,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec,
++ .proc_handler = &proc_dointvec_secure,
+ },
+#endif
+#ifdef CONFIG_GRKERNSEC_CHROOT_MKNOD
+ .data = &grsec_enable_chroot_mknod,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec,
++ .proc_handler = &proc_dointvec_secure,
+ },
+#endif
+#ifdef CONFIG_GRKERNSEC_CHROOT_NICE
+ .data = &grsec_enable_chroot_nice,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec,
++ .proc_handler = &proc_dointvec_secure,
+ },
+#endif
+#ifdef CONFIG_GRKERNSEC_CHROOT_EXECLOG
+ .data = &grsec_enable_chroot_execlog,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec,
++ .proc_handler = &proc_dointvec_secure,
+ },
+#endif
+#ifdef CONFIG_GRKERNSEC_CHROOT_CAPS
+ .data = &grsec_enable_chroot_caps,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec,
++ .proc_handler = &proc_dointvec_secure,
+ },
+#endif
+#ifdef CONFIG_GRKERNSEC_CHROOT_RENAME
+ .data = &grsec_enable_chroot_rename,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec,
++ .proc_handler = &proc_dointvec_secure,
+ },
+#endif
+#ifdef CONFIG_GRKERNSEC_CHROOT_SYSCTL
+ .data = &grsec_enable_chroot_sysctl,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec,
++ .proc_handler = &proc_dointvec_secure,
+ },
+#endif
+#ifdef CONFIG_GRKERNSEC_TPE
+ .data = &grsec_enable_tpe,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec,
++ .proc_handler = &proc_dointvec_secure,
+ },
+ {
+ .procname = "tpe_gid",
+ .data = &grsec_tpe_gid,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec,
++ .proc_handler = &proc_dointvec_secure,
+ },
+#endif
+#ifdef CONFIG_GRKERNSEC_TPE_INVERT
+ .data = &grsec_enable_tpe_invert,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec,
++ .proc_handler = &proc_dointvec_secure,
+ },
+#endif
+#ifdef CONFIG_GRKERNSEC_TPE_ALL
+ .data = &grsec_enable_tpe_all,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec,
++ .proc_handler = &proc_dointvec_secure,
+ },
+#endif
+#ifdef CONFIG_GRKERNSEC_SOCKET_ALL
+ .data = &grsec_enable_socket_all,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec,
++ .proc_handler = &proc_dointvec_secure,
+ },
+ {
+ .procname = "socket_all_gid",
+ .data = &grsec_socket_all_gid,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec,
++ .proc_handler = &proc_dointvec_secure,
+ },
+#endif
+#ifdef CONFIG_GRKERNSEC_SOCKET_CLIENT
+ .data = &grsec_enable_socket_client,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec,
++ .proc_handler = &proc_dointvec_secure,
+ },
+ {
+ .procname = "socket_client_gid",
+ .data = &grsec_socket_client_gid,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec,
++ .proc_handler = &proc_dointvec_secure,
+ },
+#endif
+#ifdef CONFIG_GRKERNSEC_SOCKET_SERVER
+ .data = &grsec_enable_socket_server,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec,
++ .proc_handler = &proc_dointvec_secure,
+ },
+ {
+ .procname = "socket_server_gid",
+ .data = &grsec_socket_server_gid,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec,
++ .proc_handler = &proc_dointvec_secure,
+ },
+#endif
+#ifdef CONFIG_GRKERNSEC_AUDIT_GROUP
+ .data = &grsec_enable_group,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec,
++ .proc_handler = &proc_dointvec_secure,
+ },
+ {
+ .procname = "audit_gid",
+ .data = &grsec_audit_gid,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec,
++ .proc_handler = &proc_dointvec_secure,
+ },
+#endif
+#ifdef CONFIG_GRKERNSEC_AUDIT_CHDIR
+ .data = &grsec_enable_chdir,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec,
++ .proc_handler = &proc_dointvec_secure,
+ },
+#endif
+#ifdef CONFIG_GRKERNSEC_AUDIT_MOUNT
+ .data = &grsec_enable_mount,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec,
++ .proc_handler = &proc_dointvec_secure,
+ },
+#endif
+#ifdef CONFIG_GRKERNSEC_DMESG
+ .data = &grsec_enable_dmesg,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec,
++ .proc_handler = &proc_dointvec_secure,
+ },
+#endif
+#ifdef CONFIG_GRKERNSEC_CHROOT_FINDTASK
+ .data = &grsec_enable_chroot_findtask,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec,
++ .proc_handler = &proc_dointvec_secure,
+ },
+#endif
+#ifdef CONFIG_GRKERNSEC_RESLOG
+ .data = &grsec_resource_logging,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec,
++ .proc_handler = &proc_dointvec_secure,
+ },
+#endif
+#ifdef CONFIG_GRKERNSEC_AUDIT_PTRACE
+ .data = &grsec_enable_audit_ptrace,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec,
++ .proc_handler = &proc_dointvec_secure,
+ },
+#endif
+#ifdef CONFIG_GRKERNSEC_HARDEN_PTRACE
+ .data = &grsec_enable_harden_ptrace,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec,
++ .proc_handler = &proc_dointvec_secure,
+ },
+#endif
+#ifdef CONFIG_GRKERNSEC_HARDEN_IPC
+ .data = &grsec_enable_harden_ipc,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec,
++ .proc_handler = &proc_dointvec_secure,
+ },
+#endif
+ {
+ .data = &grsec_lock,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec,
++ .proc_handler = &proc_dointvec_secure,
+ },
+#endif
+#ifdef CONFIG_GRKERNSEC_ROFS
+ .data = &grsec_enable_rofs,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec_minmax,
++ .proc_handler = &proc_dointvec_minmax_secure,
+ .extra1 = &one,
+ .extra2 = &one,
+ },
+ .data = &grsec_deny_new_usb,
+ .maxlen = sizeof(int),
+ .mode = 0600,
-+ .proc_handler = &proc_dointvec,
++ .proc_handler = &proc_dointvec_secure,
+ },
+#endif
+ { }
+EXPORT_SYMBOL_GPL(gr_log_timechange);
diff --git a/grsecurity/grsec_tpe.c b/grsecurity/grsec_tpe.c
new file mode 100644
-index 0000000..d1953de
+index 0000000..9786671
--- /dev/null
+++ b/grsecurity/grsec_tpe.c
@@ -0,0 +1,78 @@
+gr_tpe_allow(const struct file *file)
+{
+#ifdef CONFIG_GRKERNSEC
-+ struct inode *inode = file->f_path.dentry->d_parent->d_inode;
-+ struct inode *file_inode = file->f_path.dentry->d_inode;
++ struct inode *inode = d_backing_inode(file->f_path.dentry->d_parent);
++ struct inode *file_inode = d_backing_inode(file->f_path.dentry);
+ const struct cred *cred = current_cred();
+ char *msg = NULL;
+ char *msg2 = NULL;
* (puds are folded into pgds so this doesn't get actually called,
* but the define is needed for a generic inline function.)
diff --git a/include/asm-generic/pgtable.h b/include/asm-generic/pgtable.h
-index 4d46085..f4e92ef 100644
+index 39f1d6a..7dae6fb 100644
--- a/include/asm-generic/pgtable.h
+++ b/include/asm-generic/pgtable.h
-@@ -689,6 +689,22 @@ static inline int pmd_protnone(pmd_t pmd)
+@@ -695,6 +695,22 @@ static inline int pmd_protnone(pmd_t pmd)
}
#endif /* CONFIG_NUMA_BALANCING */
+
#endif /* CONFIG_MMU */
- #endif /* !__ASSEMBLY__ */
+ #ifdef CONFIG_HAVE_ARCH_HUGE_VMAP
diff --git a/include/asm-generic/uaccess.h b/include/asm-generic/uaccess.h
index 72d8803..cb9749c 100644
--- a/include/asm-generic/uaccess.h
+
#endif /* __ASM_GENERIC_UACCESS_H */
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
-index ac78910..8b5f068 100644
+index 8bd374d..9590e70 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
-@@ -234,6 +234,7 @@
+@@ -246,6 +246,7 @@
.rodata : AT(ADDR(.rodata) - LOAD_OFFSET) { \
VMLINUX_SYMBOL(__start_rodata) = .; \
*(.rodata) *(.rodata.*) \
*(__vermagic) /* Kernel version magic */ \
. = ALIGN(8); \
VMLINUX_SYMBOL(__start___tracepoints_ptrs) = .; \
-@@ -492,6 +493,7 @@
+@@ -504,6 +505,7 @@
KERNEL_CTORS() \
MCOUNT_REC() \
*(.init.rodata) \
FTRACE_EVENTS() \
TRACE_SYSCALLS() \
KPROBE_BLACKLIST() \
-@@ -511,6 +513,8 @@
+@@ -525,6 +527,8 @@
#define EXIT_DATA \
*(.exit.data) \
MEM_DISCARD(exit.data) \
MEM_DISCARD(exit.rodata)
-@@ -727,17 +731,18 @@
+@@ -741,17 +745,18 @@
* section in the linker script will go there too. @phdr should have
* a leading colon.
*
/**
* PERCPU_SECTION - define output section for percpu area, simple version
diff --git a/include/crypto/algapi.h b/include/crypto/algapi.h
-index 623a59c..1e79ab9 100644
+index 0ecb768..f910132 100644
--- a/include/crypto/algapi.h
+++ b/include/crypto/algapi.h
@@ -34,7 +34,7 @@ struct crypto_type {
struct crypto_instance {
struct crypto_alg alg;
diff --git a/include/drm/drmP.h b/include/drm/drmP.h
-index e928625..ff97886 100644
+index 62c40777..f980496 100644
--- a/include/drm/drmP.h
+++ b/include/drm/drmP.h
@@ -59,6 +59,7 @@
#include <asm/uaccess.h>
#include <uapi/drm/drm.h>
-@@ -133,17 +134,18 @@ void drm_err(const char *format, ...);
+@@ -137,17 +138,18 @@ void drm_err(const char *format, ...);
/*@{*/
/* driver capabilities and requirements mask */
/***********************************************************************/
/** \name Macros to make printk easier */
-@@ -224,10 +226,12 @@ void drm_err(const char *format, ...);
+@@ -233,10 +235,12 @@ void drm_err(const char *format, ...);
* \param cmd command.
* \param arg argument.
*/
unsigned long arg);
#define DRM_IOCTL_NR(n) _IOC_NR(n)
-@@ -243,10 +247,10 @@ typedef int drm_ioctl_compat_t(struct file *filp, unsigned int cmd,
+@@ -252,9 +256,9 @@ typedef int drm_ioctl_compat_t(struct file *filp, unsigned int cmd,
struct drm_ioctl_desc {
unsigned int cmd;
int flags;
- drm_ioctl_t *func;
+ drm_ioctl_t func;
- unsigned int cmd_drv;
const char *name;
-};
+} __do_const;
/**
* Creates a driver or general drm_ioctl_desc array entry for the given
-@@ -632,7 +636,8 @@ struct drm_info_list {
+@@ -645,7 +649,8 @@ struct drm_info_list {
int (*show)(struct seq_file*, void*); /** show callback */
u32 driver_features; /**< Required driver features for this entry */
void *data;
/**
* debugfs node structure. This structure represents a debugfs file.
-@@ -716,7 +721,7 @@ struct drm_device {
+@@ -729,7 +734,7 @@ struct drm_device {
/** \name Usage Counters */
/*@{ */
int buf_use; /**< Buffers in use -- cannot alloc */
atomic_t buf_alloc; /**< Buffer allocation in progress */
diff --git a/include/drm/drm_crtc_helper.h b/include/drm/drm_crtc_helper.h
-index c250a22..59d2094 100644
+index c8fc187..079d4c2 100644
--- a/include/drm/drm_crtc_helper.h
+++ b/include/drm/drm_crtc_helper.h
-@@ -160,7 +160,7 @@ struct drm_encoder_helper_funcs {
+@@ -161,7 +161,7 @@ struct drm_encoder_helper_funcs {
int (*atomic_check)(struct drm_encoder *encoder,
struct drm_crtc_state *crtc_state,
struct drm_connector_state *conn_state);
/**
* struct drm_connector_helper_funcs - helper operations for connectors
diff --git a/include/drm/i915_pciids.h b/include/drm/i915_pciids.h
-index d016dc5..3951fe0 100644
+index 6133723..4c1fccb 100644
--- a/include/drm/i915_pciids.h
+++ b/include/drm/i915_pciids.h
@@ -37,7 +37,7 @@
extern void __register_binfmt(struct linux_binfmt *fmt, int insert);
diff --git a/include/linux/bitmap.h b/include/linux/bitmap.h
-index dbfbf49..10be372 100644
+index ea17cca..dd56e56 100644
--- a/include/linux/bitmap.h
+++ b/include/linux/bitmap.h
-@@ -299,7 +299,7 @@ static inline int bitmap_full(const unsigned long *src, unsigned int nbits)
- return __bitmap_full(src, nbits);
+@@ -295,7 +295,7 @@ static inline int bitmap_full(const unsigned long *src, unsigned int nbits)
+ return find_first_zero_bit(src, nbits) == nbits;
}
-static inline int bitmap_weight(const unsigned long *src, unsigned int nbits)
if (small_const_nbits(nbits))
return hweight_long(*src & BITMAP_LAST_WORD_MASK(nbits));
diff --git a/include/linux/bitops.h b/include/linux/bitops.h
-index 5d858e0..336c1d9 100644
+index 297f5bd..0b6d1e8 100644
--- a/include/linux/bitops.h
+++ b/include/linux/bitops.h
@@ -105,7 +105,7 @@ static inline __u64 ror64(__u64 word, unsigned int shift)
if (sizeof(l) == 4)
return fls(l);
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
-index 7f9a516..8889453 100644
+index 5d93a66..978c4a0 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
-@@ -1616,7 +1616,7 @@ struct block_device_operations {
+@@ -1614,7 +1614,7 @@ struct block_device_operations {
/* this callback is with swap_lock and sometimes page table lock held */
void (*swap_slot_free_notify) (struct block_device *, unsigned long);
struct module *owner;
#define ____cacheline_aligned __attribute__((__aligned__(SMP_CACHE_BYTES)))
#endif
diff --git a/include/linux/capability.h b/include/linux/capability.h
-index aa93e5e..985a1b0 100644
+index af9f0b9..71a5e5c 100644
--- a/include/linux/capability.h
+++ b/include/linux/capability.h
-@@ -214,9 +214,14 @@ extern bool has_ns_capability_noaudit(struct task_struct *t,
- extern bool capable(int cap);
- extern bool ns_capable(struct user_namespace *ns, int cap);
+@@ -237,15 +237,28 @@ static inline bool capable(int cap)
+ {
+ return true;
+ }
++static inline bool capable_nolog(int cap)
++{
++ return true;
++}
+ static inline bool ns_capable(struct user_namespace *ns, int cap)
+ {
+ return true;
+ }
++static inline bool ns_capable_nolog(struct user_namespace *ns, int cap)
++{
++ return true;
++}
+ #endif /* CONFIG_MULTIUSER */
extern bool capable_wrt_inode_uidgid(const struct inode *inode, int cap);
+extern bool capable_wrt_inode_uidgid_nolog(const struct inode *inode, int cap);
extern bool file_ns_capable(const struct file *file, struct user_namespace *ns, int cap);
int (*generic_packet) (struct cdrom_device_info *,
struct packet_command *);
diff --git a/include/linux/cleancache.h b/include/linux/cleancache.h
-index 4ce9056..86caac6 100644
+index bda5ec0b4..51d8ea1 100644
--- a/include/linux/cleancache.h
+++ b/include/linux/cleancache.h
-@@ -31,7 +31,7 @@ struct cleancache_ops {
+@@ -35,7 +35,7 @@ struct cleancache_ops {
void (*invalidate_page)(int, struct cleancache_filekey, pgoff_t);
void (*invalidate_inode)(int, struct cleancache_filekey);
void (*invalidate_fs)(int);
-};
+} __no_const;
- extern struct cleancache_ops *
- cleancache_register_ops(struct cleancache_ops *ops);
+ extern int cleancache_register_ops(struct cleancache_ops *ops);
+ extern void __cleancache_init_fs(struct super_block *);
diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h
-index 5591ea7..61b77ce 100644
+index df69531..0180e68 100644
--- a/include/linux/clk-provider.h
+++ b/include/linux/clk-provider.h
@@ -195,6 +195,7 @@ struct clk_ops {
/**
* struct clk_init_data - holds init data that's common to all clocks and is
+@@ -209,7 +210,7 @@ struct clk_ops {
+ struct clk_init_data {
+ const char *name;
+ const struct clk_ops *ops;
+- const char **parent_names;
++ const char * const *parent_names;
+ u8 num_parents;
+ unsigned long flags;
+ };
+@@ -426,12 +427,12 @@ extern const struct clk_ops clk_mux_ops;
+ extern const struct clk_ops clk_mux_ro_ops;
+
+ struct clk *clk_register_mux(struct device *dev, const char *name,
+- const char **parent_names, u8 num_parents, unsigned long flags,
++ const char * const *parent_names, u8 num_parents, unsigned long flags,
+ void __iomem *reg, u8 shift, u8 width,
+ u8 clk_mux_flags, spinlock_t *lock);
+
+ struct clk *clk_register_mux_table(struct device *dev, const char *name,
+- const char **parent_names, u8 num_parents, unsigned long flags,
++ const char * const *parent_names, u8 num_parents, unsigned long flags,
+ void __iomem *reg, u8 shift, u32 mask,
+ u8 clk_mux_flags, u32 *table, spinlock_t *lock);
+
+diff --git a/include/linux/clkdev.h b/include/linux/clkdev.h
+index 94bad77..a39e810 100644
+--- a/include/linux/clkdev.h
++++ b/include/linux/clkdev.h
+@@ -32,7 +32,7 @@ struct clk_lookup {
+ }
+
+ struct clk_lookup *clkdev_alloc(struct clk *clk, const char *con_id,
+- const char *dev_fmt, ...);
++ const char *dev_fmt, ...) __printf(3, 4);
+
+ void clkdev_add(struct clk_lookup *cl);
+ void clkdev_drop(struct clk_lookup *cl);
+@@ -40,7 +40,8 @@ void clkdev_drop(struct clk_lookup *cl);
+ void clkdev_add_table(struct clk_lookup *, size_t);
+ int clk_add_alias(const char *, const char *, char *, struct device *);
+
+-int clk_register_clkdev(struct clk *, const char *, const char *, ...);
++int clk_register_clkdev(struct clk *, const char *, const char *, ...)
++ __printf(3, 4);
+ int clk_register_clkdevs(struct clk *, struct clk_lookup *, size_t);
+
+ #ifdef CONFIG_COMMON_CLK
diff --git a/include/linux/compat.h b/include/linux/compat.h
-index ab25814..d1540d1 100644
+index ab25814..63b52db 100644
--- a/include/linux/compat.h
+++ b/include/linux/compat.h
@@ -316,7 +316,7 @@ compat_sys_get_robust_list(int pid, compat_uptr_t __user *head_ptr,
asmlinkage long compat_sys_keyctl(u32 option,
u32 arg2, u32 arg3, u32 arg4, u32 arg5);
asmlinkage long compat_sys_ustat(unsigned dev, struct compat_ustat __user *u32);
+@@ -424,7 +424,7 @@ asmlinkage long compat_sys_settimeofday(struct compat_timeval __user *tv,
+
+ asmlinkage long compat_sys_adjtimex(struct compat_timex __user *utp);
+
+-extern int compat_printk(const char *fmt, ...);
++extern __printf(1, 2) int compat_printk(const char *fmt, ...);
+ extern void sigset_from_compat(sigset_t *set, const compat_sigset_t *compat);
+ extern void sigset_to_compat(compat_sigset_t *compat, const sigset_t *set);
+
@@ -439,7 +439,7 @@ extern int compat_ptrace_request(struct task_struct *child,
extern long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
compat_ulong_t addr, compat_ulong_t data);
asmlinkage long compat_sys_lookup_dcookie(u32, u32, char __user *, compat_size_t);
/*
diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h
-index cdf13ca..ba5e086 100644
+index 371e560..e2e4e3e 100644
--- a/include/linux/compiler-gcc.h
+++ b/include/linux/compiler-gcc.h
-@@ -94,8 +94,8 @@
+@@ -108,8 +108,8 @@
*/
#define __pure __attribute__((pure))
#define __aligned(x) __attribute__((aligned(x)))
* Mark a position in code as unreachable. This can be used to
* suppress control flow warnings after asm blocks that transfer
diff --git a/include/linux/compiler.h b/include/linux/compiler.h
-index 1b45e4a..eff29a7 100644
+index 8677225..2d49df1 100644
--- a/include/linux/compiler.h
+++ b/include/linux/compiler.h
@@ -5,11 +5,14 @@
#endif
/* Indirect macros required for expanded argument pasting, eg. __LINE__. */
-@@ -205,32 +227,32 @@ static __always_inline void data_access_exceeds_word_size(void)
+@@ -199,27 +221,27 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect);
static __always_inline void __read_once_size(const volatile void *p, void *res, int size)
{
switch (size) {
- case 1: *(__u8 *)res = *(volatile __u8 *)p; break;
- case 2: *(__u16 *)res = *(volatile __u16 *)p; break;
- case 4: *(__u32 *)res = *(volatile __u32 *)p; break;
+- case 8: *(__u64 *)res = *(volatile __u64 *)p; break;
+ case 1: *(__u8 *)res = *(const volatile __u8 *)p; break;
+ case 2: *(__u16 *)res = *(const volatile __u16 *)p; break;
+ case 4: *(__u32 *)res = *(const volatile __u32 *)p; break;
- #ifdef CONFIG_64BIT
-- case 8: *(__u64 *)res = *(volatile __u64 *)p; break;
+ case 8: *(__u64 *)res = *(const volatile __u64 *)p; break;
- #endif
default:
barrier();
- __builtin_memcpy((void *)res, (const void *)p, size);
+ __builtin_memcpy(res, (const void *)p, size);
- data_access_exceeds_word_size();
barrier();
}
}
- case 1: *(volatile __u8 *)p = *(__u8 *)res; break;
- case 2: *(volatile __u16 *)p = *(__u16 *)res; break;
- case 4: *(volatile __u32 *)p = *(__u32 *)res; break;
+- case 8: *(volatile __u64 *)p = *(__u64 *)res; break;
+ case 1: *(volatile __u8 *)p = *(const __u8 *)res; break;
+ case 2: *(volatile __u16 *)p = *(const __u16 *)res; break;
+ case 4: *(volatile __u32 *)p = *(const __u32 *)res; break;
- #ifdef CONFIG_64BIT
-- case 8: *(volatile __u64 *)p = *(__u64 *)res; break;
+ case 8: *(volatile __u64 *)p = *(const __u64 *)res; break;
- #endif
default:
barrier();
- __builtin_memcpy((void *)p, (const void *)res, size);
+ __builtin_memcpy((void *)p, res, size);
- data_access_exceeds_word_size();
barrier();
}
-@@ -364,6 +386,38 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s
+ }
+@@ -352,6 +374,38 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s
# define __attribute_const__ /* unimplemented */
#endif
/*
* Tell gcc if a function is cold. The compiler will assume any path
* directly leading to the call is unlikely.
-@@ -373,6 +427,22 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s
+@@ -361,6 +415,22 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s
#define __cold
#endif
/* Simple shorthand for a section definition */
#ifndef __section
# define __section(S) __attribute__ ((__section__(#S)))
-@@ -387,6 +457,8 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s
+@@ -375,6 +445,8 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s
# define __same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b))
#endif
/* Is this type a native word size -- useful for atomic operations */
#ifndef __native_word
# define __native_word(t) (sizeof(t) == sizeof(char) || sizeof(t) == sizeof(short) || sizeof(t) == sizeof(int) || sizeof(t) == sizeof(long))
-@@ -466,8 +538,9 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s
+@@ -454,8 +526,9 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s
*/
#define __ACCESS_ONCE(x) ({ \
__maybe_unused typeof(x) __var = (__force typeof(x)) 0; \
extern bool completion_done(struct completion *x);
diff --git a/include/linux/configfs.h b/include/linux/configfs.h
-index 34025df..d94bbbc 100644
+index 34025df..9c263df 100644
--- a/include/linux/configfs.h
+++ b/include/linux/configfs.h
-@@ -125,7 +125,7 @@ struct configfs_attribute {
+@@ -64,7 +64,8 @@ struct config_item {
+ struct dentry *ci_dentry;
+ };
+
+-extern int config_item_set_name(struct config_item *, const char *, ...);
++extern __printf(2, 3)
++int config_item_set_name(struct config_item *, const char *, ...);
+
+ static inline char *config_item_name(struct config_item * item)
+ {
+@@ -125,7 +126,7 @@ struct configfs_attribute {
const char *ca_name;
struct module *ca_owner;
umode_t ca_mode;
/*
* Users often need to create attribute structures for their configurable
+diff --git a/include/linux/cpu.h b/include/linux/cpu.h
+index c0fb6b1..23c30bd 100644
+--- a/include/linux/cpu.h
++++ b/include/linux/cpu.h
+@@ -40,9 +40,10 @@ extern void cpu_remove_dev_attr(struct device_attribute *attr);
+ extern int cpu_add_dev_attr_group(struct attribute_group *attrs);
+ extern void cpu_remove_dev_attr_group(struct attribute_group *attrs);
+
+-extern struct device *cpu_device_create(struct device *parent, void *drvdata,
+- const struct attribute_group **groups,
+- const char *fmt, ...);
++extern __printf(4, 5)
++struct device *cpu_device_create(struct device *parent, void *drvdata,
++ const struct attribute_group **groups,
++ const char *fmt, ...);
+ #ifdef CONFIG_HOTPLUG_CPU
+ extern void unregister_cpu(struct cpu *cpu);
+ extern ssize_t arch_cpu_probe(const char *, size_t);
diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h
index 2ee4888..0451f5e 100644
--- a/include/linux/cpufreq.h
#ifdef CONFIG_CPU_IDLE
extern int cpuidle_register_governor(struct cpuidle_governor *gov);
diff --git a/include/linux/cpumask.h b/include/linux/cpumask.h
-index 086549a..a572d94 100644
+index 59915ea..81ebec0 100644
--- a/include/linux/cpumask.h
+++ b/include/linux/cpumask.h
-@@ -126,17 +126,17 @@ static inline unsigned int cpumask_first(const struct cpumask *srcp)
+@@ -127,17 +127,17 @@ static inline unsigned int cpumask_first(const struct cpumask *srcp)
}
/* Valid inputs for n are -1 and 0. */
const struct cpumask *srcp,
const struct cpumask *andp)
{
-@@ -182,7 +182,7 @@ static inline unsigned int cpumask_first(const struct cpumask *srcp)
+@@ -181,7 +181,7 @@ static inline unsigned int cpumask_first(const struct cpumask *srcp)
*
* Returns >= nr_cpu_ids if no further cpus set.
*/
{
/* -1 is a legal arg here. */
if (n != -1)
-@@ -197,7 +197,7 @@ static inline unsigned int cpumask_next(int n, const struct cpumask *srcp)
+@@ -196,7 +196,7 @@ static inline unsigned int cpumask_next(int n, const struct cpumask *srcp)
*
* Returns >= nr_cpu_ids if no further cpus unset.
*/
{
/* -1 is a legal arg here. */
if (n != -1)
-@@ -205,7 +205,7 @@ static inline unsigned int cpumask_next_zero(int n, const struct cpumask *srcp)
+@@ -204,7 +204,7 @@ static inline unsigned int cpumask_next_zero(int n, const struct cpumask *srcp)
return find_next_zero_bit(cpumask_bits(srcp), nr_cpumask_bits, n+1);
}
-int cpumask_next_and(int n, const struct cpumask *, const struct cpumask *);
+int cpumask_next_and(int n, const struct cpumask *, const struct cpumask *) __intentional_overflow(-1);
int cpumask_any_but(const struct cpumask *mask, unsigned int cpu);
- int cpumask_set_cpu_local_first(int i, int numa_node, cpumask_t *dstp);
+ unsigned int cpumask_local_spread(unsigned int i, int node);
-@@ -472,7 +472,7 @@ static inline bool cpumask_full(const struct cpumask *srcp)
+@@ -471,7 +471,7 @@ static inline bool cpumask_full(const struct cpumask *srcp)
* cpumask_weight - Count of bits in *srcp
* @srcp: the cpumask to count bits (< nr_cpu_ids) in.
*/
return bitmap_weight(cpumask_bits(srcp), nr_cpumask_bits);
}
diff --git a/include/linux/cred.h b/include/linux/cred.h
-index 2fb2ca2..d6a3340 100644
+index 8b6c083..51cb9f5 100644
--- a/include/linux/cred.h
+++ b/include/linux/cred.h
@@ -35,7 +35,7 @@ struct group_info {
/**
* get_group_info - Get a reference to a group info structure
-@@ -137,7 +137,7 @@ struct cred {
+@@ -152,7 +152,7 @@ struct cred {
struct user_namespace *user_ns; /* user_ns the caps and keyrings are relative to. */
struct group_info *group_info; /* supplementary groups for euid/fsgid */
struct rcu_head rcu; /* RCU deletion hook */
extern void __put_cred(struct cred *);
extern void exit_creds(struct task_struct *);
-@@ -195,6 +195,9 @@ static inline void validate_creds_for_do_exit(struct task_struct *tsk)
+@@ -210,6 +210,9 @@ static inline void validate_creds_for_do_exit(struct task_struct *tsk)
static inline void validate_process_creds(void)
{
}
#endif
/**
-@@ -332,6 +335,7 @@ static inline void put_cred(const struct cred *_cred)
+@@ -347,6 +350,7 @@ static inline void put_cred(const struct cred *_cred)
#define task_uid(task) (task_cred_xxx((task), uid))
#define task_euid(task) (task_cred_xxx((task), euid))
#define current_cred_xxx(xxx) \
({ \
diff --git a/include/linux/crypto.h b/include/linux/crypto.h
-index fb5ef16..05d1e59 100644
+index 10df5d2..503d678 100644
--- a/include/linux/crypto.h
+++ b/include/linux/crypto.h
-@@ -626,7 +626,7 @@ struct cipher_tfm {
+@@ -632,7 +632,7 @@ struct cipher_tfm {
const u8 *key, unsigned int keylen);
void (*cit_encrypt_one)(struct crypto_tfm *tfm, u8 *dst, const u8 *src);
void (*cit_decrypt_one)(struct crypto_tfm *tfm, u8 *dst, const u8 *src);
struct hash_tfm {
int (*init)(struct hash_desc *desc);
-@@ -647,13 +647,13 @@ struct compress_tfm {
+@@ -653,13 +653,13 @@ struct compress_tfm {
int (*cot_decompress)(struct crypto_tfm *tfm,
const u8 *src, unsigned int slen,
u8 *dst, unsigned int *dlen);
return c | 0x20;
}
diff --git a/include/linux/dcache.h b/include/linux/dcache.h
-index d835879..c8e5b92 100644
+index df334cb..e730faa 100644
--- a/include/linux/dcache.h
+++ b/include/linux/dcache.h
@@ -123,6 +123,9 @@ struct dentry {
/*
* dentry->d_lock spinlock nesting subclasses:
-@@ -319,7 +322,7 @@ extern struct dentry *__d_lookup_rcu(const struct dentry *parent,
+@@ -319,13 +322,14 @@ extern struct dentry *__d_lookup_rcu(const struct dentry *parent,
static inline unsigned d_count(const struct dentry *dentry)
{
}
/*
-@@ -347,7 +350,7 @@ extern char *dentry_path(struct dentry *, char *, int);
+ * helper function for dentry_operations.d_dname() members
+ */
+-extern char *dynamic_dname(struct dentry *, char *, int, const char *, ...);
++extern __printf(4, 5)
++char *dynamic_dname(struct dentry *, char *, int, const char *, ...);
+ extern char *simple_dname(struct dentry *, char *, int);
+
+ extern char *__d_path(const struct path *, const struct path *, char *, int);
+@@ -347,7 +351,7 @@ extern char *dentry_path(struct dentry *, char *, int);
static inline struct dentry *dget_dlock(struct dentry *dentry)
{
if (dentry)
/**
* struct devfreq - Device devfreq structure
diff --git a/include/linux/device.h b/include/linux/device.h
-index 0eb8ee2..c603b6a 100644
+index 6558af9..48bce1a 100644
--- a/include/linux/device.h
+++ b/include/linux/device.h
-@@ -311,7 +311,7 @@ struct subsys_interface {
+@@ -312,7 +312,7 @@ struct subsys_interface {
struct list_head node;
int (*add_dev)(struct device *dev, struct subsys_interface *sif);
int (*remove_dev)(struct device *dev, struct subsys_interface *sif);
int subsys_interface_register(struct subsys_interface *sif);
void subsys_interface_unregister(struct subsys_interface *sif);
-@@ -507,7 +507,7 @@ struct device_type {
+@@ -508,7 +508,7 @@ struct device_type {
void (*release)(struct device *dev);
const struct dev_pm_ops *pm;
/* interface for exporting device attributes */
struct device_attribute {
-@@ -517,11 +517,12 @@ struct device_attribute {
+@@ -518,11 +518,12 @@ struct device_attribute {
ssize_t (*store)(struct device *dev, struct device_attribute *attr,
const char *buf, size_t count);
};
ssize_t device_show_ulong(struct device *dev, struct device_attribute *attr,
char *buf);
+@@ -607,8 +608,9 @@ extern int devres_release_group(struct device *dev, void *id);
+
+ /* managed devm_k.alloc/kfree for device drivers */
+ extern void *devm_kmalloc(struct device *dev, size_t size, gfp_t gfp);
+-extern char *devm_kvasprintf(struct device *dev, gfp_t gfp, const char *fmt,
+- va_list ap);
++extern __printf(3, 0)
++char *devm_kvasprintf(struct device *dev, gfp_t gfp, const char *fmt,
++ va_list ap);
+ extern __printf(3, 4)
+ char *devm_kasprintf(struct device *dev, gfp_t gfp, const char *fmt, ...);
+ static inline void *devm_kzalloc(struct device *dev, size_t size, gfp_t gfp)
+@@ -980,12 +982,10 @@ extern int __must_check device_reprobe(struct device *dev);
+ /*
+ * Easy functions for dynamically creating devices on the fly
+ */
+-extern struct device *device_create_vargs(struct class *cls,
+- struct device *parent,
+- dev_t devt,
+- void *drvdata,
+- const char *fmt,
+- va_list vargs);
++extern __printf(5, 0)
++struct device *device_create_vargs(struct class *cls, struct device *parent,
++ dev_t devt, void *drvdata,
++ const char *fmt, va_list vargs);
+ extern __printf(5, 6)
+ struct device *device_create(struct class *cls, struct device *parent,
+ dev_t devt, void *drvdata,
diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h
-index c3007cb..43efc8c 100644
+index ac07ff0..edff186 100644
--- a/include/linux/dma-mapping.h
+++ b/include/linux/dma-mapping.h
-@@ -60,7 +60,7 @@ struct dma_map_ops {
+@@ -64,7 +64,7 @@ struct dma_map_ops {
u64 (*get_required_mask)(struct device *dev);
#endif
int is_phys;
#define DMA_BIT_MASK(n) (((n) == 64) ? ~0ULL : ((1ULL<<(n))-1))
-diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h
-index b6997a0..108be6c 100644
---- a/include/linux/dmaengine.h
-+++ b/include/linux/dmaengine.h
-@@ -1133,9 +1133,9 @@ struct dma_pinned_list {
- struct dma_pinned_list *dma_pin_iovec_pages(struct iovec *iov, size_t len);
- void dma_unpin_iovec_pages(struct dma_pinned_list* pinned_list);
-
--dma_cookie_t dma_memcpy_to_iovec(struct dma_chan *chan, struct iovec *iov,
-+dma_cookie_t __intentional_overflow(0) dma_memcpy_to_iovec(struct dma_chan *chan, struct iovec *iov,
- struct dma_pinned_list *pinned_list, unsigned char *kdata, size_t len);
--dma_cookie_t dma_memcpy_pg_to_iovec(struct dma_chan *chan, struct iovec *iov,
-+dma_cookie_t __intentional_overflow(0) dma_memcpy_pg_to_iovec(struct dma_chan *chan, struct iovec *iov,
- struct dma_pinned_list *pinned_list, struct page *page,
- unsigned int offset, size_t len);
-
diff --git a/include/linux/efi.h b/include/linux/efi.h
-index cf7e431..d239dce 100644
+index af5be03..d8a6ae2 100644
--- a/include/linux/efi.h
+++ b/include/linux/efi.h
-@@ -1056,6 +1056,7 @@ struct efivar_operations {
+@@ -1057,6 +1057,7 @@ struct efivar_operations {
efi_set_variable_nonblocking_t *set_variable_nonblocking;
efi_query_variable_store_t *query_variable_store;
};
extern bool frontswap_enabled;
extern struct frontswap_ops *
diff --git a/include/linux/fs.h b/include/linux/fs.h
-index 52cc449..31f35cb 100644
+index 571aab9..03a5b06 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
-@@ -410,7 +410,7 @@ struct address_space {
+@@ -437,7 +437,7 @@ struct address_space {
spinlock_t private_lock; /* for use by the address_space */
struct list_head private_list; /* ditto */
void *private_data; /* ditto */
/*
* On most architectures that alignment is already the case; but
* must be enforced here for CRIS, to let the least significant bit
-@@ -453,7 +453,7 @@ struct block_device {
+@@ -480,7 +480,7 @@ struct block_device {
int bd_fsfreeze_count;
/* Mutex for freeze */
struct mutex bd_fsfreeze_mutex;
/*
* Radix-tree tags, for tagging dirty and writeback pages within the pagecache
-@@ -639,7 +639,7 @@ struct inode {
+@@ -666,7 +666,7 @@ struct inode {
#endif
void *i_private; /* fs or device private pointer */
static inline int inode_unhashed(struct inode *inode)
{
-@@ -834,7 +834,7 @@ struct file {
+@@ -861,7 +861,7 @@ struct file {
struct list_head f_tfile_llink;
#endif /* #ifdef CONFIG_EPOLL */
struct address_space *f_mapping;
struct file_handle {
__u32 handle_bytes;
-@@ -962,7 +962,7 @@ struct file_lock {
+@@ -990,7 +990,7 @@ struct file_lock {
int state; /* state of grant or error if -ve */
} afs;
} fl_u;
struct file_lock_context {
spinlock_t flc_lock;
-@@ -1316,7 +1316,7 @@ struct super_block {
+@@ -1351,7 +1351,7 @@ struct super_block {
* Indicates how deep in a filesystem stack this SB is
*/
int s_stack_depth;
extern struct timespec current_fs_time(struct super_block *sb);
-@@ -1570,7 +1570,8 @@ struct file_operations {
+@@ -1603,7 +1603,8 @@ struct file_operations {
#ifndef CONFIG_MMU
unsigned (*mmap_capabilities)(struct file *);
#endif
struct inode_operations {
struct dentry * (*lookup) (struct inode *,struct dentry *, unsigned int);
-@@ -2269,7 +2270,7 @@ extern int register_chrdev_region(dev_t, unsigned, const char *);
+@@ -2303,7 +2304,7 @@ extern int register_chrdev_region(dev_t, unsigned, const char *);
extern int __register_chrdev(unsigned int major, unsigned int baseminor,
unsigned int count, const char *name,
const struct file_operations *fops);
unsigned int count, const char *name);
extern void unregister_chrdev_region(dev_t, unsigned);
extern void chrdev_show(struct seq_file *,off_t);
-@@ -2918,4 +2919,14 @@ static inline bool dir_relax(struct inode *inode)
+@@ -2989,4 +2990,14 @@ static inline bool dir_relax(struct inode *inode)
return !IS_DEADDIR(inode);
}
};
diff --git a/include/linux/gfp.h b/include/linux/gfp.h
-index 51bd1e7..0486343 100644
+index 15928f0..90b31d7 100644
--- a/include/linux/gfp.h
+++ b/include/linux/gfp.h
-@@ -34,6 +34,13 @@ struct vm_area_struct;
+@@ -35,6 +35,13 @@ struct vm_area_struct;
#define ___GFP_NO_KSWAPD 0x400000u
#define ___GFP_OTHER_NODE 0x800000u
#define ___GFP_WRITE 0x1000000u
/* If the above are modified, __GFP_BITS_SHIFT may need updating */
/*
-@@ -90,6 +97,7 @@ struct vm_area_struct;
+@@ -94,6 +101,7 @@ struct vm_area_struct;
#define __GFP_NO_KSWAPD ((__force gfp_t)___GFP_NO_KSWAPD)
#define __GFP_OTHER_NODE ((__force gfp_t)___GFP_OTHER_NODE) /* On behalf of other node */
#define __GFP_WRITE ((__force gfp_t)___GFP_WRITE) /* Allocator intends to dirty page */
/*
* This may seem redundant, but it's a way of annotating false positives vs.
-@@ -97,7 +105,7 @@ struct vm_area_struct;
+@@ -101,7 +109,7 @@ struct vm_area_struct;
*/
#define __GFP_NOTRACK_FALSE_POSITIVE (__GFP_NOTRACK)
#define __GFP_BITS_MASK ((__force gfp_t)((1 << __GFP_BITS_SHIFT) - 1))
/* This equals 0, but use constants in case they ever change */
-@@ -152,6 +160,8 @@ struct vm_area_struct;
+@@ -146,6 +154,8 @@ struct vm_area_struct;
/* 4GB DMA on some platforms */
#define GFP_DMA32 __GFP_DMA32
+#define GR_MSRWRITE_MSG "denied write to CPU MSR by "
diff --git a/include/linux/grsecurity.h b/include/linux/grsecurity.h
new file mode 100644
-index 0000000..63c1850
+index 0000000..085a746
--- /dev/null
+++ b/include/linux/grsecurity.h
-@@ -0,0 +1,250 @@
+@@ -0,0 +1,247 @@
+#ifndef GR_SECURITY_H
+#define GR_SECURITY_H
+#include <linux/fs.h>
+void gr_log_rwxmmap(struct file *file);
+void gr_log_rwxmprotect(struct vm_area_struct *vma);
+
-+int gr_handle_follow_link(const struct inode *parent,
-+ const struct inode *inode,
-+ const struct dentry *dentry,
++int gr_handle_follow_link(const struct dentry *dentry,
+ const struct vfsmount *mnt);
+int gr_handle_fifo(const struct dentry *dentry,
+ const struct vfsmount *mnt,
+ const int acc_mode);
+int gr_handle_hardlink(const struct dentry *dentry,
+ const struct vfsmount *mnt,
-+ struct inode *inode,
-+ const int mode, const struct filename *to);
++ const struct filename *to);
+
+int gr_is_capable(const int cap);
+int gr_is_capable_nolog(const int cap);
container_of(_dev_attr, struct sensor_device_attribute_2, dev_attr)
diff --git a/include/linux/i2c.h b/include/linux/i2c.h
-index f17da50..2f8b203 100644
+index e83a738..8b323fa 100644
--- a/include/linux/i2c.h
+++ b/include/linux/i2c.h
@@ -409,6 +409,7 @@ struct i2c_algorithm {
/**
* struct i2c_bus_recovery_info - I2C bus recovery information
diff --git a/include/linux/if_pppox.h b/include/linux/if_pppox.h
-index aff7ad8..3942bbd 100644
+index 66a7d76..5e68d20 100644
--- a/include/linux/if_pppox.h
+++ b/include/linux/if_pppox.h
-@@ -76,7 +76,7 @@ struct pppox_proto {
+@@ -78,7 +78,7 @@ struct pppox_proto {
int (*ioctl)(struct socket *sock, unsigned int cmd,
unsigned long arg);
struct module *owner;
extern int register_pppox_proto(int proto_num, const struct pppox_proto *pp);
extern void unregister_pppox_proto(int proto_num);
diff --git a/include/linux/init.h b/include/linux/init.h
-index 2df8e8d..3e1280d 100644
+index 21b6d76..4a6775c 100644
--- a/include/linux/init.h
+++ b/include/linux/init.h
@@ -37,9 +37,17 @@
.files = &init_files, \
.signal = &init_signals, \
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h
-index 2e88580..f6a99a0 100644
+index 950ae45..df6ac60 100644
--- a/include/linux/interrupt.h
+++ b/include/linux/interrupt.h
-@@ -420,8 +420,8 @@ extern const char * const softirq_to_name[NR_SOFTIRQS];
+@@ -432,8 +432,8 @@ extern const char * const softirq_to_name[NR_SOFTIRQS];
struct softirq_action
{
asmlinkage void do_softirq(void);
asmlinkage void __do_softirq(void);
-@@ -435,7 +435,7 @@ static inline void do_softirq_own_stack(void)
+@@ -447,7 +447,7 @@ static inline void do_softirq_own_stack(void)
}
#endif
extern void __raise_softirq_irqoff(unsigned int nr);
diff --git a/include/linux/iommu.h b/include/linux/iommu.h
-index 38daa45..4de4317 100644
+index 0546b87..46fd5b6 100644
--- a/include/linux/iommu.h
+++ b/include/linux/iommu.h
-@@ -147,7 +147,7 @@ struct iommu_ops {
+@@ -174,7 +174,7 @@ struct iommu_ops {
unsigned long pgsize_bitmap;
void *priv;
#define IOMMU_GROUP_NOTIFY_ADD_DEVICE 1 /* Device added */
#define IOMMU_GROUP_NOTIFY_DEL_DEVICE 2 /* Pre Device removed */
+@@ -234,7 +234,7 @@ extern int iommu_domain_set_attr(struct iommu_domain *domain, enum iommu_attr,
+ void *data);
+ struct device *iommu_device_create(struct device *parent, void *drvdata,
+ const struct attribute_group **groups,
+- const char *fmt, ...);
++ const char *fmt, ...) __printf(4, 5);
+ void iommu_device_destroy(struct device *dev);
+ int iommu_device_link(struct device *dev, struct device *link);
+ void iommu_device_unlink(struct device *dev, struct device *link);
diff --git a/include/linux/ioport.h b/include/linux/ioport.h
-index 2c525022..345b106 100644
+index 388e3ae..d7e45a1 100644
--- a/include/linux/ioport.h
+++ b/include/linux/ioport.h
@@ -161,7 +161,7 @@ struct resource *lookup_resource(struct resource *root, resource_size_t start);
extern struct ipc_namespace init_ipc_ns;
extern atomic_t nr_ipc_ns;
diff --git a/include/linux/irq.h b/include/linux/irq.h
-index d09ec7a..f373eb5 100644
+index 62c6901..827f8f6 100644
--- a/include/linux/irq.h
+++ b/include/linux/irq.h
-@@ -364,7 +364,8 @@ struct irq_chip {
- void (*irq_write_msi_msg)(struct irq_data *data, struct msi_msg *msg);
+@@ -370,7 +370,8 @@ struct irq_chip {
+ int (*irq_set_irqchip_state)(struct irq_data *data, enum irqchip_irq_state which, bool state);
unsigned long flags;
-};
/*
* irq_chip specific flags
-diff --git a/include/linux/irqchip/arm-gic.h b/include/linux/irqchip/arm-gic.h
-index 71d706d..817cdec 100644
---- a/include/linux/irqchip/arm-gic.h
-+++ b/include/linux/irqchip/arm-gic.h
-@@ -95,7 +95,7 @@
-
- struct device_node;
-
--extern struct irq_chip gic_arch_extn;
-+extern irq_chip_no_const gic_arch_extn;
-
- void gic_init_bases(unsigned int, int, void __iomem *, void __iomem *,
- u32 offset, struct device_node *);
diff --git a/include/linux/irqdesc.h b/include/linux/irqdesc.h
index dd1109f..4f4fdda 100644
--- a/include/linux/irqdesc.h
/* This macro allows us to keep printk typechecking */
static __printf(1, 2)
diff --git a/include/linux/kernel.h b/include/linux/kernel.h
-index d6d630d..feea1f5 100644
+index 3a5b48e..240107b 100644
--- a/include/linux/kernel.h
+++ b/include/linux/kernel.h
-@@ -378,7 +378,7 @@ static inline int __must_check kstrtos32_from_user(const char __user *s, size_t
+@@ -390,7 +390,7 @@ static inline int __must_check kstrtos32_from_user(const char __user *s, size_t
/* Obsolete, do not use. Use kstrto<foo> instead */
extern unsigned long simple_strtoul(const char *,char **,unsigned int);
extern unsigned long long simple_strtoull(const char *,char **,unsigned int);
extern long long simple_strtoll(const char *,char **,unsigned int);
+@@ -410,7 +410,8 @@ extern __printf(3, 0)
+ int vscnprintf(char *buf, size_t size, const char *fmt, va_list args);
+ extern __printf(2, 3)
+ char *kasprintf(gfp_t gfp, const char *fmt, ...);
+-extern char *kvasprintf(gfp_t gfp, const char *fmt, va_list args);
++extern __printf(2, 0)
++char *kvasprintf(gfp_t gfp, const char *fmt, va_list args);
+
+ extern __scanf(2, 3)
+ int sscanf(const char *, const char *, ...);
+@@ -681,10 +682,10 @@ do { \
+ __ftrace_vprintk(_THIS_IP_, fmt, vargs); \
+ } while (0)
+
+-extern int
++extern __printf(2, 0) int
+ __ftrace_vbprintk(unsigned long ip, const char *fmt, va_list ap);
+
+-extern int
++extern __printf(2, 0) int
+ __ftrace_vprintk(unsigned long ip, const char *fmt, va_list ap);
+
+ extern void ftrace_dump(enum ftrace_dump_mode oops_dump_mode);
+@@ -704,7 +705,7 @@ int trace_printk(const char *fmt, ...)
+ {
+ return 0;
+ }
+-static inline int
++static __printf(1, 0) inline int
+ ftrace_vprintk(const char *fmt, va_list ap)
+ {
+ return 0;
diff --git a/include/linux/key-type.h b/include/linux/key-type.h
index ff9f1d3..6712be5 100644
--- a/include/linux/key-type.h
extern struct kgdb_arch arch_kgdb_ops;
diff --git a/include/linux/kmemleak.h b/include/linux/kmemleak.h
-index e705467..a92471d 100644
+index d0a1f99..0bd8b7c 100644
--- a/include/linux/kmemleak.h
+++ b/include/linux/kmemleak.h
@@ -27,7 +27,7 @@
extern void kmemleak_alloc(const void *ptr, size_t size, int min_count,
- gfp_t gfp) __ref;
+ gfp_t gfp) __ref __size_overflow(2);
- extern void kmemleak_alloc_percpu(const void __percpu *ptr, size_t size) __ref;
+ extern void kmemleak_alloc_percpu(const void __percpu *ptr, size_t size,
+ gfp_t gfp) __ref;
extern void kmemleak_free(const void *ptr) __ref;
- extern void kmemleak_free_part(const void *ptr, size_t size) __ref;
-@@ -62,7 +62,7 @@ static inline void kmemleak_erase(void **ptr)
+@@ -63,7 +63,7 @@ static inline void kmemleak_erase(void **ptr)
static inline void kmemleak_init(void)
{
}
char **envp;
int wait;
diff --git a/include/linux/kobject.h b/include/linux/kobject.h
-index 2d61b90..a1d0a13 100644
+index 2d61b90..3d69945 100644
--- a/include/linux/kobject.h
+++ b/include/linux/kobject.h
-@@ -118,7 +118,7 @@ struct kobj_type {
+@@ -80,8 +80,9 @@ struct kobject {
+
+ extern __printf(2, 3)
+ int kobject_set_name(struct kobject *kobj, const char *name, ...);
+-extern int kobject_set_name_vargs(struct kobject *kobj, const char *fmt,
+- va_list vargs);
++extern __printf(2, 0)
++int kobject_set_name_vargs(struct kobject *kobj, const char *fmt,
++ va_list vargs);
+
+ static inline const char *kobject_name(const struct kobject *kobj)
+ {
+@@ -118,7 +119,7 @@ struct kobj_type {
struct attribute **default_attrs;
const struct kobj_ns_type_operations *(*child_ns_type)(struct kobject *kobj);
const void *(*namespace)(struct kobject *kobj);
struct kobj_uevent_env {
char *argv[3];
-@@ -142,6 +142,7 @@ struct kobj_attribute {
+@@ -142,6 +143,7 @@ struct kobj_attribute {
ssize_t (*store)(struct kobject *kobj, struct kobj_attribute *attr,
const char *buf, size_t count);
};
extern const struct sysfs_ops kobj_sysfs_ops;
-@@ -169,7 +170,7 @@ struct kset {
+@@ -169,7 +171,7 @@ struct kset {
spinlock_t list_lock;
struct kobject kobj;
const struct kset_uevent_ops *uevent_ops;
if (atomic_sub_and_test((int) count, &kref->refcount)) {
release(kref);
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
-index d12b210..d91fd76 100644
+index ad45054..7c54663 100644
--- a/include/linux/kvm_host.h
+++ b/include/linux/kvm_host.h
@@ -455,7 +455,7 @@ static inline void kvm_irqfd_exit(void)
int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu);
diff --git a/include/linux/libata.h b/include/linux/libata.h
-index 6b08cc1..248c5e9 100644
+index 28aeae4..320b3bf6 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
-@@ -980,7 +980,7 @@ struct ata_port_operations {
+@@ -988,7 +988,7 @@ struct ata_port_operations {
* fields must be pointers.
*/
const struct ata_port_operations *inherits;
static inline int
vma_dup_policy(struct vm_area_struct *src, struct vm_area_struct *dst)
diff --git a/include/linux/mm.h b/include/linux/mm.h
-index 47a9392..ef645bc 100644
+index 0755b9f..2960e96 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -135,6 +135,11 @@ extern unsigned int kobjsize(const void *objp);
#define VM_ACCOUNT 0x00100000 /* Is a VM accounted object */
#define VM_NORESERVE 0x00200000 /* should the VM suppress accounting */
#define VM_HUGETLB 0x00400000 /* Huge TLB Page VM */
-@@ -254,8 +259,8 @@ struct vm_operations_struct {
+@@ -257,8 +262,8 @@ struct vm_operations_struct {
/* called by access_process_vm when get_user_pages() fails, typically
* for use by special VMAs that can switch between memory and hardware
*/
/* Called by the /proc/PID/maps code to ask the vma whether it
* has a special name. Returning non-NULL will also cause this
-@@ -293,6 +298,7 @@ struct vm_operations_struct {
+@@ -296,6 +301,7 @@ struct vm_operations_struct {
struct page *(*find_special_page)(struct vm_area_struct *vma,
unsigned long addr);
};
struct mmu_gather;
struct inode;
-@@ -1213,8 +1219,8 @@ int follow_pfn(struct vm_area_struct *vma, unsigned long address,
+@@ -1131,8 +1137,8 @@ int follow_pfn(struct vm_area_struct *vma, unsigned long address,
unsigned long *pfn);
int follow_phys(struct vm_area_struct *vma, unsigned long address,
unsigned int flags, unsigned long *prot, resource_size_t *phys);
static inline void unmap_shared_mapping_range(struct address_space *mapping,
loff_t const holebegin, loff_t const holelen)
-@@ -1254,9 +1260,9 @@ static inline int fixup_user_fault(struct task_struct *tsk,
+@@ -1172,9 +1178,9 @@ static inline int fixup_user_fault(struct task_struct *tsk,
}
#endif
long __get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
unsigned long start, unsigned long nr_pages,
-@@ -1299,34 +1305,6 @@ int set_page_dirty_lock(struct page *page);
- int clear_page_dirty_for_io(struct page *page);
+@@ -1219,34 +1225,6 @@ int clear_page_dirty_for_io(struct page *page);
+
int get_cmdline(struct task_struct *task, char *buffer, int buflen);
-/* Is the vma a continuation of the stack vma above it? */
extern struct task_struct *task_of_stack(struct task_struct *task,
struct vm_area_struct *vma, bool in_group);
-@@ -1449,8 +1427,15 @@ static inline int __pud_alloc(struct mm_struct *mm, pgd_t *pgd,
+@@ -1369,8 +1347,15 @@ static inline int __pud_alloc(struct mm_struct *mm, pgd_t *pgd,
{
return 0;
}
#endif
#if defined(__PAGETABLE_PMD_FOLDED) || !defined(CONFIG_MMU)
-@@ -1460,6 +1445,12 @@ static inline int __pmd_alloc(struct mm_struct *mm, pud_t *pud,
+@@ -1380,6 +1365,12 @@ static inline int __pmd_alloc(struct mm_struct *mm, pud_t *pud,
return 0;
}
static inline void mm_nr_pmds_init(struct mm_struct *mm) {}
static inline unsigned long mm_nr_pmds(struct mm_struct *mm)
-@@ -1472,6 +1463,7 @@ static inline void mm_dec_nr_pmds(struct mm_struct *mm) {}
+@@ -1392,6 +1383,7 @@ static inline void mm_dec_nr_pmds(struct mm_struct *mm) {}
#else
int __pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long address);
static inline void mm_nr_pmds_init(struct mm_struct *mm)
{
-@@ -1509,11 +1501,23 @@ static inline pud_t *pud_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long a
+@@ -1429,11 +1421,23 @@ static inline pud_t *pud_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long a
NULL: pud_offset(pgd, address);
}
#endif /* CONFIG_MMU && !__ARCH_HAS_4LEVEL_HACK */
#if USE_SPLIT_PTE_PTLOCKS
-@@ -1890,12 +1894,23 @@ extern struct vm_area_struct *copy_vma(struct vm_area_struct **,
+@@ -1810,12 +1814,23 @@ extern struct vm_area_struct *copy_vma(struct vm_area_struct **,
bool *need_rmap_locks);
extern void exit_mmap(struct mm_struct *);
if (rlim < RLIM_INFINITY) {
if (((new - start) + (end_data - start_data)) > rlim)
return -ENOSPC;
-@@ -1920,7 +1935,7 @@ extern int install_special_mapping(struct mm_struct *mm,
+@@ -1840,7 +1855,7 @@ extern int install_special_mapping(struct mm_struct *mm,
unsigned long addr, unsigned long len,
unsigned long flags, struct page **pages);
extern unsigned long mmap_region(struct file *file, unsigned long addr,
unsigned long len, vm_flags_t vm_flags, unsigned long pgoff);
-@@ -1928,6 +1943,7 @@ extern unsigned long do_mmap_pgoff(struct file *file, unsigned long addr,
+@@ -1848,6 +1863,7 @@ extern unsigned long do_mmap_pgoff(struct file *file, unsigned long addr,
unsigned long len, unsigned long prot, unsigned long flags,
unsigned long pgoff, unsigned long *populate);
extern int do_munmap(struct mm_struct *, unsigned long, size_t);
#ifdef CONFIG_MMU
extern int __mm_populate(unsigned long addr, unsigned long len,
-@@ -1956,10 +1972,11 @@ struct vm_unmapped_area_info {
+@@ -1876,10 +1892,11 @@ struct vm_unmapped_area_info {
unsigned long high_limit;
unsigned long align_mask;
unsigned long align_offset;
/*
* Search for an unmapped address range.
-@@ -1971,7 +1988,7 @@ extern unsigned long unmapped_area_topdown(struct vm_unmapped_area_info *info);
+@@ -1891,7 +1908,7 @@ extern unsigned long unmapped_area_topdown(struct vm_unmapped_area_info *info);
* - satisfies (begin_addr & align_mask) == (align_offset & align_mask)
*/
static inline unsigned long
-vm_unmapped_area(struct vm_unmapped_area_info *info)
+vm_unmapped_area(const struct vm_unmapped_area_info *info)
{
- if (!(info->flags & VM_UNMAPPED_AREA_TOPDOWN))
- return unmapped_area(info);
-@@ -2033,6 +2050,10 @@ extern struct vm_area_struct * find_vma(struct mm_struct * mm, unsigned long add
+ if (info->flags & VM_UNMAPPED_AREA_TOPDOWN)
+ return unmapped_area_topdown(info);
+@@ -1953,6 +1970,10 @@ extern struct vm_area_struct * find_vma(struct mm_struct * mm, unsigned long add
extern struct vm_area_struct * find_vma_prev(struct mm_struct * mm, unsigned long addr,
struct vm_area_struct **pprev);
/* Look up the first VMA which intersects the interval start_addr..end_addr-1,
NULL if none. Assume start_addr < end_addr. */
static inline struct vm_area_struct * find_vma_intersection(struct mm_struct * mm, unsigned long start_addr, unsigned long end_addr)
-@@ -2062,10 +2083,10 @@ static inline struct vm_area_struct *find_exact_vma(struct mm_struct *mm,
+@@ -1982,10 +2003,10 @@ static inline struct vm_area_struct *find_exact_vma(struct mm_struct *mm,
}
#ifdef CONFIG_MMU
{
return __pgprot(0);
}
-@@ -2127,6 +2148,11 @@ void vm_stat_account(struct mm_struct *, unsigned long, struct file *, long);
+@@ -2047,6 +2068,11 @@ void vm_stat_account(struct mm_struct *, unsigned long, struct file *, long);
static inline void vm_stat_account(struct mm_struct *mm,
unsigned long flags, struct file *file, long pages)
{
mm->total_vm += pages;
}
#endif /* CONFIG_PROC_FS */
-@@ -2229,7 +2255,7 @@ extern int unpoison_memory(unsigned long pfn);
+@@ -2149,7 +2175,7 @@ extern int unpoison_memory(unsigned long pfn);
extern int sysctl_memory_failure_early_kill;
extern int sysctl_memory_failure_recovery;
extern void shake_page(struct page *p, int access);
extern int soft_offline_page(struct page *page, int flags);
#if defined(CONFIG_TRANSPARENT_HUGEPAGE) || defined(CONFIG_HUGETLBFS)
-@@ -2280,5 +2306,11 @@ void __init setup_nr_node_ids(void);
+@@ -2200,5 +2226,11 @@ void __init setup_nr_node_ids(void);
static inline void setup_nr_node_ids(void) {}
#endif
#endif /* __KERNEL__ */
#endif /* _LINUX_MM_H */
diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h
-index 199a03a..7328440 100644
+index 8d37e26..6a6f55b 100644
--- a/include/linux/mm_types.h
+++ b/include/linux/mm_types.h
@@ -313,7 +313,9 @@ struct vm_area_struct {
struct core_thread {
struct task_struct *task;
-@@ -464,7 +466,25 @@ struct mm_struct {
+@@ -466,7 +468,25 @@ struct mm_struct {
/* address of the bounds directory */
void __user *bd_addr;
#endif
static inline void mm_init_cpumask(struct mm_struct *mm)
{
-diff --git a/include/linux/mmc/core.h b/include/linux/mmc/core.h
-index 160448f..7b332b7 100644
---- a/include/linux/mmc/core.h
-+++ b/include/linux/mmc/core.h
-@@ -79,7 +79,7 @@ struct mmc_command {
- #define mmc_cmd_type(cmd) ((cmd)->flags & MMC_CMD_MASK)
-
- unsigned int retries; /* max number of retries */
-- unsigned int error; /* command error */
-+ int error; /* command error */
-
- /*
- * Standard errno values are used for errors, but some have specific
diff --git a/include/linux/mmiotrace.h b/include/linux/mmiotrace.h
-index c5d5278..f0b68c8 100644
+index c5d5278..85cd5ce 100644
--- a/include/linux/mmiotrace.h
+++ b/include/linux/mmiotrace.h
@@ -46,7 +46,7 @@ extern int kmmio_handler(struct pt_regs *regs, unsigned long addr);
{
}
+@@ -106,6 +106,6 @@ extern void enable_mmiotrace(void);
+ extern void disable_mmiotrace(void);
+ extern void mmio_trace_rw(struct mmiotrace_rw *rw);
+ extern void mmio_trace_mapping(struct mmiotrace_map *map);
+-extern int mmio_trace_printk(const char *fmt, va_list args);
++extern __printf(1, 0) int mmio_trace_printk(const char *fmt, va_list args);
+
+ #endif /* _LINUX_MMIOTRACE_H */
diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h
-index 2782df4..abe756e 100644
+index 54d74f6..0728424 100644
--- a/include/linux/mmzone.h
+++ b/include/linux/mmzone.h
@@ -526,7 +526,7 @@ struct zone {
enum zone_flags {
diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h
-index e530533..c9620c7 100644
+index 3bfd567..72e7d8f 100644
--- a/include/linux/mod_devicetable.h
+++ b/include/linux/mod_devicetable.h
@@ -139,7 +139,7 @@ struct usb_device_id {
* struct dmi_device_id appears during expansion of
* "MODULE_DEVICE_TABLE(dmi, x)". Compiler doesn't look inside it
diff --git a/include/linux/module.h b/include/linux/module.h
-index b03485b..a26974f 100644
+index c883b86..516812e 100644
--- a/include/linux/module.h
+++ b/include/linux/module.h
@@ -17,9 +17,11 @@
/* Arch-specific module values */
struct mod_arch_specific arch;
-@@ -338,6 +338,10 @@ struct module {
- #ifdef CONFIG_EVENT_TRACING
- struct ftrace_event_call **trace_events;
+@@ -340,6 +340,10 @@ struct module {
unsigned int num_trace_events;
+ struct trace_enum_map **trace_enums;
+ unsigned int num_trace_enums;
+ struct file_operations trace_id;
+ struct file_operations trace_enable;
+ struct file_operations trace_format;
#endif
#ifdef CONFIG_FTRACE_MCOUNT_RECORD
unsigned int num_ftrace_callsites;
-@@ -365,7 +369,7 @@ struct module {
+@@ -367,7 +371,7 @@ struct module {
ctor_fn_t *ctors;
unsigned int num_ctors;
#endif
#ifndef MODULE_ARCH_INIT
#define MODULE_ARCH_INIT {}
#endif
-@@ -386,18 +390,48 @@ bool is_module_address(unsigned long addr);
+@@ -388,18 +392,48 @@ bool is_module_address(unsigned long addr);
bool is_module_percpu_address(unsigned long addr);
bool is_module_text_address(unsigned long addr);
.ops = ¶m_ops_##type, \
.elemsize = sizeof(array[0]), .elem = array }; \
diff --git a/include/linux/mount.h b/include/linux/mount.h
-index 564beee..653be6f 100644
+index f822c3c..958ca0a 100644
--- a/include/linux/mount.h
+++ b/include/linux/mount.h
@@ -67,7 +67,7 @@ struct vfsmount {
static inline void nd_terminate_link(void *name, size_t len, size_t maxlen)
{
diff --git a/include/linux/net.h b/include/linux/net.h
-index 17d8339..81656c0 100644
+index 738ea48..409dc09 100644
--- a/include/linux/net.h
+++ b/include/linux/net.h
-@@ -192,7 +192,7 @@ struct net_proto_family {
+@@ -190,7 +190,7 @@ struct net_proto_family {
int (*create)(struct net *net, struct socket *sock,
int protocol, int kern);
struct module *owner;
struct iovec;
struct kvec;
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
-index 2787388..1dd8e88 100644
+index 05b9a69..4d7e300 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
-@@ -1198,6 +1198,7 @@ struct net_device_ops {
- u8 state);
- #endif
+@@ -1208,6 +1208,7 @@ struct net_device_ops {
+ u32 maxrate);
+ int (*ndo_get_iflink)(const struct net_device *dev);
};
+typedef struct net_device_ops __no_const net_device_ops_no_const;
/**
* enum net_device_priv_flags - &struct net_device priv_flags
-@@ -1546,10 +1547,10 @@ struct net_device {
+@@ -1515,7 +1516,7 @@ struct net_device {
+ unsigned long base_addr;
+ int irq;
+
+- atomic_t carrier_changes;
++ atomic_unchecked_t carrier_changes;
+
+ /*
+ * Some hardware also needs these fields (state,dev_list,
+@@ -1554,8 +1555,8 @@ struct net_device {
struct net_device_stats stats;
+ atomic_long_unchecked_t rx_dropped;
+ atomic_long_unchecked_t tx_dropped;
-- atomic_t carrier_changes;
-+ atomic_unchecked_t carrier_changes;
-
#ifdef CONFIG_WIRELESS_EXT
const struct iw_handler_def * wireless_handlers;
diff --git a/include/linux/netfilter.h b/include/linux/netfilter.h
-index 2517ece..0bbfcfb 100644
+index 63560d0..64aba5c 100644
--- a/include/linux/netfilter.h
+++ b/include/linux/netfilter.h
-@@ -85,7 +85,7 @@ struct nf_sockopt_ops {
+@@ -113,7 +113,7 @@ struct nf_sockopt_ops {
#endif
/* Use the module struct to lock set/get code in place */
struct module *owner;
/*
diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h
-index 2b62198..2b74233 100644
+index d8a82a8..8b580f0 100644
--- a/include/linux/perf_event.h
+++ b/include/linux/perf_event.h
-@@ -343,8 +343,8 @@ struct perf_event {
+@@ -379,8 +379,8 @@ struct perf_event {
enum perf_event_active_state state;
unsigned int attach_state;
/*
* These are the total time in nanoseconds that the event
-@@ -395,8 +395,8 @@ struct perf_event {
+@@ -431,8 +431,8 @@ struct perf_event {
* These accumulate total time (in nanoseconds) that children
* events have been enabled and running, respectively.
*/
/*
* Protect attach/detach and child_list:
-@@ -752,7 +752,7 @@ static inline void perf_callchain_store(struct perf_callchain_entry *entry, u64
+@@ -812,7 +812,7 @@ static inline void perf_event_task_sched_out(struct task_struct *prev,
+
+ static inline u64 __perf_event_count(struct perf_event *event)
+ {
+- return local64_read(&event->count) + atomic64_read(&event->child_count);
++ return local64_read(&event->count) + atomic64_read_unchecked(&event->child_count);
+ }
+
+ extern void perf_event_mmap(struct vm_area_struct *vma);
+@@ -836,7 +836,7 @@ static inline void perf_callchain_store(struct perf_callchain_entry *entry, u64
entry->ip[entry->nr++] = ip;
}
extern int sysctl_perf_event_mlock;
extern int sysctl_perf_event_sample_rate;
extern int sysctl_perf_cpu_time_max_percent;
-@@ -767,19 +767,24 @@ extern int perf_cpu_time_max_percent_handler(struct ctl_table *table, int write,
+@@ -851,19 +851,24 @@ extern int perf_cpu_time_max_percent_handler(struct ctl_table *table, int write,
loff_t *ppos);
}
extern void perf_event_init(void);
-@@ -912,7 +917,7 @@ struct perf_pmu_events_attr {
+@@ -1017,7 +1022,7 @@ struct perf_pmu_events_attr {
struct device_attribute attr;
u64 id;
const char *event_str;
unsigned int w_counter;
struct page *tmp_page;
diff --git a/include/linux/pm.h b/include/linux/pm.h
-index e2f1be6..78a0506 100644
+index 2d29c64..1b25b2a 100644
--- a/include/linux/pm.h
+++ b/include/linux/pm.h
-@@ -608,6 +608,7 @@ struct dev_pm_domain {
- struct dev_pm_ops ops;
- void (*detach)(struct device *dev, bool power_off);
+@@ -616,6 +616,7 @@ struct dev_pm_domain {
+ void (*sync)(struct device *dev);
+ void (*dismiss)(struct device *dev);
};
+typedef struct dev_pm_domain __no_const dev_pm_domain_no_const;
/*
* The PM_EVENT_ messages are also used by drivers implementing the legacy
diff --git a/include/linux/pm_domain.h b/include/linux/pm_domain.h
-index 080e778..cbdaef7 100644
+index 681ccb0..a90e0b7 100644
--- a/include/linux/pm_domain.h
+++ b/include/linux/pm_domain.h
@@ -39,11 +39,11 @@ struct gpd_dev_ops {
static inline bool pm_runtime_is_irq_safe(struct device *dev)
diff --git a/include/linux/pnp.h b/include/linux/pnp.h
-index 6512e9c..ec27fa2 100644
+index 5df733b..d55f252 100644
--- a/include/linux/pnp.h
+++ b/include/linux/pnp.h
@@ -298,7 +298,7 @@ static inline void pnp_set_drvdata(struct pnp_dev *pdev, void *data)
#define preempt_set_need_resched() \
do { \
diff --git a/include/linux/printk.h b/include/linux/printk.h
-index baa3f97..168cff1 100644
+index 9b30871..1aebc2d 100644
--- a/include/linux/printk.h
+++ b/include/linux/printk.h
-@@ -121,6 +121,7 @@ void early_printk(const char *s, ...) { }
+@@ -120,7 +120,8 @@ static inline __printf(1, 2) __cold
+ void early_printk(const char *s, ...) { }
#endif
- typedef int(*printk_func_t)(const char *fmt, va_list args);
+-typedef int(*printk_func_t)(const char *fmt, va_list args);
++typedef __printf(1, 0) int (*printk_func_t)(const char *fmt, va_list args);
+extern int kptr_restrict;
#ifdef CONFIG_PRINTK
extern void wake_up_klogd(void);
+@@ -164,7 +164,7 @@ char *log_buf_addr_get(void);
+ u32 log_buf_len_get(void);
+ void log_buf_kexec_setup(void);
+ void __init setup_log_buf(int early);
+-void dump_stack_set_arch_desc(const char *fmt, ...);
++__printf(1, 2) void dump_stack_set_arch_desc(const char *fmt, ...);
+ void dump_stack_print_info(const char *log_lvl);
+ void show_regs_print_info(const char *log_lvl);
+ #else
+@@ -215,7 +215,7 @@ static inline void setup_log_buf(int early)
+ {
+ }
+
+-static inline void dump_stack_set_arch_desc(const char *fmt, ...)
++static inline __printf(1, 2) void dump_stack_set_arch_desc(const char *fmt, ...)
+ {
+ }
+
diff --git a/include/linux/proc_fs.h b/include/linux/proc_fs.h
index b97bf2e..f14c92d4 100644
--- a/include/linux/proc_fs.h
extern const struct proc_ns_operations netns_operations;
extern const struct proc_ns_operations utsns_operations;
diff --git a/include/linux/quota.h b/include/linux/quota.h
-index d534e8e..782e604 100644
+index b2505ac..5f7ab55 100644
--- a/include/linux/quota.h
+++ b/include/linux/quota.h
-@@ -75,7 +75,7 @@ struct kqid { /* Type in which we store the quota identifier */
+@@ -76,7 +76,7 @@ struct kqid { /* Type in which we store the quota identifier */
extern bool qid_eq(struct kqid left, struct kqid right);
extern bool qid_lt(struct kqid left, struct kqid right);
* hlist_del_init_rcu - deletes entry from hash list with re-initialization
* @n: the element to delete from the hash list.
diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h
-index 7809749..1cd9315 100644
+index 573a5af..de97a14 100644
--- a/include/linux/rcupdate.h
+++ b/include/linux/rcupdate.h
-@@ -333,7 +333,7 @@ extern struct srcu_struct tasks_rcu_exit_srcu;
+@@ -365,7 +365,7 @@ extern struct srcu_struct tasks_rcu_exit_srcu;
do { \
rcu_all_qs(); \
if (ACCESS_ONCE((t)->rcu_tasks_holdout)) \
#else /* #ifdef CONFIG_TASKS_RCU */
#define TASKS_RCU(x) do { } while (0)
diff --git a/include/linux/reboot.h b/include/linux/reboot.h
-index 67fc8fc..a90f7d8 100644
+index a7ff409..03e2fa8 100644
--- a/include/linux/reboot.h
+++ b/include/linux/reboot.h
@@ -47,9 +47,9 @@ extern void do_kernel_restart(char *cmd);
extern int C_A_D; /* for sysctl */
void ctrl_alt_del(void);
-@@ -76,7 +76,7 @@ extern int orderly_poweroff(bool force);
+@@ -77,7 +77,7 @@ extern void orderly_reboot(void);
* Emergency restart, callable from an interrupt handler.
*/
#define RIO_RESOURCE_MEM 0x00000100
#define RIO_RESOURCE_DOORBELL 0x00000200
diff --git a/include/linux/rmap.h b/include/linux/rmap.h
-index c4c559a..6ba9a26 100644
+index c89c53a..aa0a65a 100644
--- a/include/linux/rmap.h
+++ b/include/linux/rmap.h
-@@ -154,8 +154,8 @@ static inline void anon_vma_unlock_read(struct anon_vma *anon_vma)
+@@ -146,8 +146,8 @@ static inline void anon_vma_unlock_read(struct anon_vma *anon_vma)
void anon_vma_init(void); /* create anon_vma_cachep */
int anon_vma_prepare(struct vm_area_struct *);
void unlink_anon_vmas(struct vm_area_struct *);
static inline void anon_vma_merge(struct vm_area_struct *vma,
struct vm_area_struct *next)
diff --git a/include/linux/scatterlist.h b/include/linux/scatterlist.h
-index ed8f9e70..999bc96 100644
+index ed8f9e70..2e627f2 100644
--- a/include/linux/scatterlist.h
+++ b/include/linux/scatterlist.h
@@ -1,6 +1,7 @@
#include <linux/string.h>
#include <linux/bug.h>
#include <linux/mm.h>
-@@ -114,6 +115,12 @@ static inline void sg_set_buf(struct scatterlist *sg, const void *buf,
- #ifdef CONFIG_DEBUG_SG
- BUG_ON(!virt_addr_valid(buf));
- #endif
+@@ -111,10 +112,17 @@ static inline struct page *sg_page(struct scatterlist *sg)
+ static inline void sg_set_buf(struct scatterlist *sg, const void *buf,
+ unsigned int buflen)
+ {
++ const void *realbuf = buf;
++
+#ifdef CONFIG_GRKERNSEC_KSTACKOVERFLOW
-+ if (object_starts_on_stack(buf)) {
-+ void *adjbuf = buf - current->stack + current->lowmem_stack;
-+ sg_set_page(sg, virt_to_page(adjbuf), buflen, offset_in_page(adjbuf));
-+ } else
++ if (object_starts_on_stack(buf))
++ realbuf = buf - current->stack + current->lowmem_stack;
+#endif
- sg_set_page(sg, virt_to_page(buf), buflen, offset_in_page(buf));
++
+ #ifdef CONFIG_DEBUG_SG
+- BUG_ON(!virt_addr_valid(buf));
++ BUG_ON(!virt_addr_valid(realbuf));
+ #endif
+- sg_set_page(sg, virt_to_page(buf), buflen, offset_in_page(buf));
++ sg_set_page(sg, virt_to_page(realbuf), buflen, offset_in_page(realbuf));
}
+ /*
diff --git a/include/linux/sched.h b/include/linux/sched.h
-index 51348f7..8c8b0ba 100644
+index 26a2e61..36bbf4b 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
-@@ -133,6 +133,7 @@ struct fs_struct;
+@@ -132,6 +132,7 @@ struct fs_struct;
struct perf_event_context;
struct blk_plug;
struct filename;
#define VMACACHE_BITS 2
#define VMACACHE_SIZE (1U << VMACACHE_BITS)
-@@ -420,7 +421,7 @@ extern char __sched_text_start[], __sched_text_end[];
+@@ -413,7 +414,7 @@ extern char __sched_text_start[], __sched_text_end[];
extern int in_sched_functions(unsigned long addr);
#define MAX_SCHEDULE_TIMEOUT LONG_MAX
extern signed long schedule_timeout_interruptible(signed long timeout);
extern signed long schedule_timeout_killable(signed long timeout);
extern signed long schedule_timeout_uninterruptible(signed long timeout);
-@@ -438,6 +439,19 @@ struct nsproxy;
+@@ -431,6 +432,19 @@ struct nsproxy;
struct user_namespace;
#ifdef CONFIG_MMU
extern void arch_pick_mmap_layout(struct mm_struct *mm);
extern unsigned long
arch_get_unmapped_area(struct file *, unsigned long, unsigned long,
-@@ -736,6 +750,17 @@ struct signal_struct {
+@@ -729,6 +743,17 @@ struct signal_struct {
#ifdef CONFIG_TASKSTATS
struct taskstats *stats;
#endif
#ifdef CONFIG_AUDIT
unsigned audit_tty;
unsigned audit_tty_log_passwd;
-@@ -762,7 +787,7 @@ struct signal_struct {
+@@ -755,7 +780,7 @@ struct signal_struct {
struct mutex cred_guard_mutex; /* guard against foreign influences on
* credential calculations
* (notably. ptrace) */
/*
* Bits in flags field of signal_struct.
-@@ -815,6 +840,14 @@ struct user_struct {
+@@ -808,6 +833,14 @@ struct user_struct {
struct key *session_keyring; /* UID's default session keyring */
#endif
/* Hash table maintenance information */
struct hlist_node uidhash_node;
kuid_t uid;
-@@ -822,7 +855,7 @@ struct user_struct {
+@@ -815,7 +848,7 @@ struct user_struct {
#ifdef CONFIG_PERF_EVENTS
atomic_long_t locked_vm;
#endif
extern int uids_sysfs_init(void);
-@@ -1286,6 +1319,9 @@ enum perf_event_task_context {
+@@ -1292,6 +1325,9 @@ enum perf_event_task_context {
struct task_struct {
volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */
void *stack;
atomic_t usage;
unsigned int flags; /* per process flags, defined below */
unsigned int ptrace;
-@@ -1419,8 +1455,8 @@ struct task_struct {
+@@ -1425,8 +1461,8 @@ struct task_struct {
struct list_head thread_node;
struct completion *vfork_done; /* for vfork() */
cputime_t utime, stime, utimescaled, stimescaled;
cputime_t gtime;
-@@ -1445,11 +1481,6 @@ struct task_struct {
+@@ -1451,11 +1487,6 @@ struct task_struct {
struct task_cputime cputime_expires;
struct list_head cpu_timers[3];
char comm[TASK_COMM_LEN]; /* executable name excluding path
- access with [gs]et_task_comm (which lock
it with task_lock())
-@@ -1467,6 +1498,10 @@ struct task_struct {
+@@ -1473,6 +1504,10 @@ struct task_struct {
#endif
/* CPU-specific state of this task */
struct thread_struct thread;
/* filesystem information */
struct fs_struct *fs;
/* open file information */
-@@ -1541,6 +1576,10 @@ struct task_struct {
+@@ -1547,6 +1582,10 @@ struct task_struct {
gfp_t lockdep_reclaim_gfp;
#endif
/* journalling filesystem info */
void *journal_info;
-@@ -1579,6 +1618,10 @@ struct task_struct {
+@@ -1585,6 +1624,10 @@ struct task_struct {
/* cg_list protected by css_set_lock and tsk->alloc_lock */
struct list_head cg_list;
#endif
#ifdef CONFIG_FUTEX
struct robust_list_head __user *robust_list;
#ifdef CONFIG_COMPAT
-@@ -1690,7 +1733,7 @@ struct task_struct {
+@@ -1696,7 +1739,7 @@ struct task_struct {
* Number of functions that haven't been traced
* because of depth overrun.
*/
/* Pause for the tracing */
atomic_t tracing_graph_pause;
#endif
-@@ -1718,7 +1761,78 @@ struct task_struct {
+@@ -1724,7 +1767,78 @@ struct task_struct {
#ifdef CONFIG_DEBUG_ATOMIC_SLEEP
unsigned long task_state_change;
#endif
/* Future-safe accessor for struct task_struct's cpus_allowed. */
#define tsk_cpus_allowed(tsk) (&(tsk)->cpus_allowed)
-@@ -1801,7 +1915,7 @@ struct pid_namespace;
+@@ -1807,7 +1921,7 @@ struct pid_namespace;
pid_t __task_pid_nr_ns(struct task_struct *task, enum pid_type type,
struct pid_namespace *ns);
{
return tsk->pid;
}
-@@ -2169,6 +2283,25 @@ extern u64 sched_clock_cpu(int cpu);
+@@ -2175,6 +2289,25 @@ extern u64 sched_clock_cpu(int cpu);
extern void sched_clock_init(void);
#ifndef CONFIG_HAVE_UNSTABLE_SCHED_CLOCK
static inline void sched_clock_tick(void)
{
-@@ -2302,7 +2435,9 @@ void yield(void);
- extern struct exec_domain default_exec_domain;
+@@ -2303,7 +2436,9 @@ extern void set_curr_task(int cpu, struct task_struct *p);
+ void yield(void);
union thread_union {
+#ifndef CONFIG_X86
unsigned long stack[THREAD_SIZE/sizeof(long)];
};
-@@ -2335,6 +2470,7 @@ extern struct pid_namespace init_pid_ns;
+@@ -2336,6 +2471,7 @@ extern struct pid_namespace init_pid_ns;
*/
extern struct task_struct *find_task_by_vpid(pid_t nr);
extern struct task_struct *find_task_by_pid_ns(pid_t nr,
struct pid_namespace *ns);
-@@ -2499,7 +2635,7 @@ extern void __cleanup_sighand(struct sighand_struct *);
+@@ -2500,7 +2636,7 @@ extern void __cleanup_sighand(struct sighand_struct *);
extern void exit_itimers(struct signal_struct *);
extern void flush_itimer_signals(void);
extern int do_execve(struct filename *,
const char __user * const __user *,
-@@ -2720,9 +2856,9 @@ static inline unsigned long *end_of_stack(struct task_struct *p)
+@@ -2721,9 +2857,9 @@ static inline unsigned long *end_of_stack(struct task_struct *p)
#define task_stack_end_corrupted(task) \
(*(end_of_stack(task)) != STACK_END_MAGIC)
extern unsigned int sysctl_sched_latency;
extern unsigned int sysctl_sched_min_granularity;
diff --git a/include/linux/security.h b/include/linux/security.h
-index a1b7dbd..036f47f 100644
+index 18264ea..e0238e4 100644
--- a/include/linux/security.h
+++ b/include/linux/security.h
@@ -27,6 +27,7 @@
#ifdef CONFIG_MMU
extern unsigned long mmap_min_addr;
extern unsigned long dac_mmap_min_addr;
-@@ -1756,7 +1755,7 @@ struct security_operations {
+@@ -1755,7 +1754,7 @@ struct security_operations {
struct audit_context *actx);
void (*audit_rule_free) (void *lsmrule);
#endif /* CONFIG_AUDIT */
static inline void disallow_signal(int sig)
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
-index bdccc4b..e9f8670 100644
+index f15154a..72cf02c 100644
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
-@@ -771,7 +771,7 @@ struct sk_buff *__alloc_skb(unsigned int size, gfp_t priority, int flags,
+@@ -776,7 +776,7 @@ struct sk_buff *__alloc_skb(unsigned int size, gfp_t priority, int flags,
int node);
struct sk_buff *__build_skb(void *data, unsigned int frag_size);
struct sk_buff *build_skb(void *data, unsigned int frag_size);
gfp_t priority)
{
return __alloc_skb(size, priority, 0, NUMA_NO_NODE);
-@@ -1967,7 +1967,7 @@ static inline u32 skb_inner_network_header_len(const struct sk_buff *skb)
+@@ -1971,7 +1971,7 @@ static inline u32 skb_inner_network_header_len(const struct sk_buff *skb)
return skb->inner_transport_header - skb->inner_network_header;
}
{
return skb_network_header(skb) - skb->data;
}
-@@ -2027,7 +2027,7 @@ static inline int pskb_network_may_pull(struct sk_buff *skb, unsigned int len)
+@@ -2031,7 +2031,7 @@ static inline int pskb_network_may_pull(struct sk_buff *skb, unsigned int len)
* NET_IP_ALIGN(2) + ethernet_header(14) + IP_header(20/40) + ports(8)
*/
#ifndef NET_SKB_PAD
#endif
int ___pskb_trim(struct sk_buff *skb, unsigned int len);
-@@ -2669,9 +2669,9 @@ struct sk_buff *skb_recv_datagram(struct sock *sk, unsigned flags, int noblock,
+@@ -2673,9 +2673,9 @@ struct sk_buff *skb_recv_datagram(struct sock *sk, unsigned flags, int noblock,
int *err);
unsigned int datagram_poll(struct file *file, struct socket *sock,
struct poll_table_struct *wait);
struct msghdr *msg, int size)
{
return skb_copy_datagram_iter(from, offset, &msg->msg_iter, size);
-@@ -3193,6 +3193,9 @@ static inline void nf_reset(struct sk_buff *skb)
+@@ -3197,6 +3197,9 @@ static inline void nf_reset(struct sk_buff *skb)
nf_bridge_put(skb->nf_bridge);
skb->nf_bridge = NULL;
#endif
static inline void nf_reset_trace(struct sk_buff *skb)
diff --git a/include/linux/slab.h b/include/linux/slab.h
-index 76f1fee..d95e6d2 100644
+index ffd24c8..cbbe7de 100644
--- a/include/linux/slab.h
+++ b/include/linux/slab.h
-@@ -14,15 +14,29 @@
- #include <linux/gfp.h>
+@@ -15,14 +15,29 @@
#include <linux/types.h>
#include <linux/workqueue.h>
--
+
+#include <linux/err.h>
/*
* Flags to pass to kmem_cache_create().
- * The ones marked DEBUG are only valid if CONFIG_SLAB_DEBUG is set.
+ * The ones marked DEBUG are only valid if CONFIG_DEBUG_SLAB is set.
*/
#define SLAB_DEBUG_FREE 0x00000100UL /* DEBUG: Perform (expensive) checks on free */
+
#define SLAB_HWCACHE_ALIGN 0x00002000UL /* Align objs on cache lines */
#define SLAB_CACHE_DMA 0x00004000UL /* Use GFP_DMA memory */
#define SLAB_STORE_USER 0x00010000UL /* DEBUG: Store the last owner for bug hunting */
-@@ -98,10 +112,13 @@
+@@ -98,10 +113,13 @@
* ZERO_SIZE_PTR can be passed to kfree though in the same way that NULL can.
* Both make kfree a no-op.
*/
#include <linux/kmemleak.h>
#include <linux/kasan.h>
-@@ -143,6 +160,8 @@ void * __must_check krealloc(const void *, size_t, gfp_t);
+@@ -143,6 +161,8 @@ void * __must_check krealloc(const void *, size_t, gfp_t);
void kfree(const void *);
void kzfree(const void *);
size_t ksize(const void *);
/*
* Some archs want to perform DMA into kmalloc caches and need a guaranteed
-@@ -235,6 +254,10 @@ extern struct kmem_cache *kmalloc_caches[KMALLOC_SHIFT_HIGH + 1];
+@@ -235,6 +255,10 @@ extern struct kmem_cache *kmalloc_caches[KMALLOC_SHIFT_HIGH + 1];
extern struct kmem_cache *kmalloc_dma_caches[KMALLOC_SHIFT_HIGH + 1];
#endif
/*
* Figure out which kmalloc slab an allocation of a certain size
* belongs to.
-@@ -243,7 +266,7 @@ extern struct kmem_cache *kmalloc_dma_caches[KMALLOC_SHIFT_HIGH + 1];
+@@ -243,7 +267,7 @@ extern struct kmem_cache *kmalloc_dma_caches[KMALLOC_SHIFT_HIGH + 1];
* 2 = 120 .. 192 bytes
* n = 2^(n-1) .. 2^n -1
*/
{
if (!size)
return 0;
-@@ -286,15 +309,15 @@ static __always_inline int kmalloc_index(size_t size)
+@@ -286,15 +310,15 @@ static __always_inline int kmalloc_index(size_t size)
}
#endif /* !CONFIG_SLOB */
int inuse; /* Offset to metadata */
int align; /* Alignment */
diff --git a/include/linux/smp.h b/include/linux/smp.h
-index be91db2..3f23232 100644
+index c441407..f487b83 100644
--- a/include/linux/smp.h
+++ b/include/linux/smp.h
@@ -183,7 +183,9 @@ static inline void smp_init(void) { }
/*
* Callback to arch code if there's nosmp or maxcpus=0 on the
diff --git a/include/linux/sock_diag.h b/include/linux/sock_diag.h
-index 46cca4c..3323536 100644
+index 083ac38..b23e3e8 100644
--- a/include/linux/sock_diag.h
+++ b/include/linux/sock_diag.h
@@ -11,7 +11,7 @@ struct sock;
extern void register_syscore_ops(struct syscore_ops *ops);
extern void unregister_syscore_ops(struct syscore_ops *ops);
diff --git a/include/linux/sysctl.h b/include/linux/sysctl.h
-index b7361f8..341a15a 100644
+index fa7bc29..0d96561 100644
--- a/include/linux/sysctl.h
+++ b/include/linux/sysctl.h
-@@ -39,6 +39,8 @@ typedef int proc_handler (struct ctl_table *ctl, int write,
+@@ -39,10 +39,16 @@ typedef int proc_handler (struct ctl_table *ctl, int write,
extern int proc_dostring(struct ctl_table *, int,
void __user *, size_t *, loff_t *);
+ void __user *, size_t *, loff_t *);
extern int proc_dointvec(struct ctl_table *, int,
void __user *, size_t *, loff_t *);
++extern int proc_dointvec_secure(struct ctl_table *, int,
++ void __user *, size_t *, loff_t *);
extern int proc_dointvec_minmax(struct ctl_table *, int,
-@@ -113,7 +115,8 @@ struct ctl_table
+ void __user *, size_t *, loff_t *);
++extern int proc_dointvec_minmax_secure(struct ctl_table *, int,
++ void __user *, size_t *, loff_t *);
+ extern int proc_dointvec_jiffies(struct ctl_table *, int,
+ void __user *, size_t *, loff_t *);
+ extern int proc_dointvec_userhz_jiffies(struct ctl_table *, int,
+@@ -113,7 +119,8 @@ struct ctl_table
struct ctl_table_poll *poll;
void *extra1;
void *extra2;
struct ctl_node {
struct rb_node node;
diff --git a/include/linux/sysfs.h b/include/linux/sysfs.h
-index ddad161..a3efd26 100644
+index 9f65758..487a6f1 100644
--- a/include/linux/sysfs.h
+++ b/include/linux/sysfs.h
@@ -34,7 +34,8 @@ struct attribute {
/**
* sysfs_attr_init - initialize a dynamically allocated sysfs attribute
-@@ -63,7 +64,8 @@ struct attribute_group {
+@@ -78,7 +79,8 @@ struct attribute_group {
struct attribute *, int);
struct attribute **attrs;
struct bin_attribute **bin_attrs;
/**
* Use these macros to make defining attributes easier. See include/linux/device.h
-@@ -137,7 +139,8 @@ struct bin_attribute {
+@@ -152,7 +154,8 @@ struct bin_attribute {
char *, loff_t, size_t);
int (*mmap)(struct file *, struct kobject *, struct bin_attribute *attr,
struct vm_area_struct *vma);
#endif /* _LINUX_THREAD_INFO_H */
diff --git a/include/linux/tty.h b/include/linux/tty.h
-index 358a337..8829c1f 100644
+index d76631f..de91e82 100644
--- a/include/linux/tty.h
+++ b/include/linux/tty.h
@@ -225,7 +225,7 @@ struct tty_port {
/* Each of a tty's open files has private_data pointing to tty_file_private */
struct tty_file_private {
-@@ -572,7 +572,7 @@ extern int tty_port_open(struct tty_port *port,
+@@ -573,7 +573,7 @@ extern int tty_port_open(struct tty_port *port,
struct tty_struct *tty, struct file *filp);
static inline int tty_port_users(struct tty_port *port)
{
struct tty_ldisc {
diff --git a/include/linux/types.h b/include/linux/types.h
-index 6747247..fc7ec8b 100644
+index 8715287..1be77ee 100644
--- a/include/linux/types.h
+++ b/include/linux/types.h
-@@ -174,10 +174,26 @@ typedef struct {
+@@ -176,10 +176,26 @@ typedef struct {
int counter;
} atomic_t;
})
diff --git a/include/linux/uidgid.h b/include/linux/uidgid.h
-index 2d1f9b6..d7a9fce 100644
+index 0383552..a0125dd 100644
--- a/include/linux/uidgid.h
+++ b/include/linux/uidgid.h
-@@ -175,4 +175,9 @@ static inline bool kgid_has_mapping(struct user_namespace *ns, kgid_t gid)
+@@ -187,4 +187,9 @@ static inline bool kgid_has_mapping(struct user_namespace *ns, kgid_t gid)
#endif /* CONFIG_USER_NS */
void *data, int len, int *actual_length, int timeout);
extern int usb_bulk_msg(struct usb_device *usb_dev, unsigned int pipe,
diff --git a/include/linux/usb/renesas_usbhs.h b/include/linux/usb/renesas_usbhs.h
-index 9fd9e48..e2c5f35 100644
+index f06529c..dfeabd8 100644
--- a/include/linux/usb/renesas_usbhs.h
+++ b/include/linux/usb/renesas_usbhs.h
@@ -39,7 +39,7 @@ enum {
Returns the number of bytes that needs to be allocated for a per-
stream workspace with the specified parameters. A pointer to this
diff --git a/include/media/v4l2-dev.h b/include/media/v4l2-dev.h
-index 3e4fddf..5ec9104 100644
+index acbcd2f..c3abe84 100644
--- a/include/media/v4l2-dev.h
+++ b/include/media/v4l2-dev.h
-@@ -75,7 +75,7 @@ struct v4l2_file_operations {
+@@ -74,7 +74,7 @@ struct v4l2_file_operations {
int (*mmap) (struct file *, struct vm_area_struct *);
int (*open) (struct file *);
int (*release) (struct file *);
/*
* Newer version of video_device, handled by videodev2.c
diff --git a/include/media/v4l2-device.h b/include/media/v4l2-device.h
-index ffb69da..040393e 100644
+index 9c58157..d86ebf5 100644
--- a/include/media/v4l2-device.h
+++ b/include/media/v4l2-device.h
-@@ -95,7 +95,7 @@ int __must_check v4l2_device_register(struct device *dev, struct v4l2_device *v4
+@@ -93,7 +93,7 @@ int __must_check v4l2_device_register(struct device *dev, struct v4l2_device *v4
this function returns 0. If the name ends with a digit (e.g. cx18),
then the name will be set to cx18-0 since cx180 looks really odd. */
int v4l2_device_set_name(struct v4l2_device *v4l2_dev, const char *basename,
/* Set v4l2_dev->dev to NULL. Call when the USB parent disconnects.
Since the parent disappears this ensures that v4l2_dev doesn't have an
diff --git a/include/net/9p/transport.h b/include/net/9p/transport.h
-index 2a25dec..bf6dd8a 100644
+index 5122b5e..598b440 100644
--- a/include/net/9p/transport.h
+++ b/include/net/9p/transport.h
@@ -62,7 +62,7 @@ struct p9_trans_module {
int (*cancelled)(struct p9_client *, struct p9_req_t *req);
int (*zc_request)(struct p9_client *, struct p9_req_t *,
- char *, char *, int , int, int, int);
+ struct iov_iter *, struct iov_iter *, int , int, int);
-};
+} __do_const;
struct l2cap_conn {
struct hci_conn *hcon;
diff --git a/include/net/bonding.h b/include/net/bonding.h
-index fda6fee..dbdf83c 100644
+index 78ed135..2f53667 100644
--- a/include/net/bonding.h
+++ b/include/net/bonding.h
-@@ -665,7 +665,7 @@ extern struct rtnl_link_ops bond_link_ops;
+@@ -658,7 +658,7 @@ extern struct rtnl_link_ops bond_link_ops;
static inline void bond_tx_drop(struct net_device *dev, struct sk_buff *skb)
{
#endif
diff --git a/include/net/genetlink.h b/include/net/genetlink.h
-index 0574abd..0f16881 100644
+index a9af1cc..1f3fa7b 100644
--- a/include/net/genetlink.h
+++ b/include/net/genetlink.h
-@@ -130,7 +130,7 @@ struct genl_ops {
+@@ -128,7 +128,7 @@ struct genl_ops {
u8 cmd;
u8 internal_flags;
u8 flags;
return;
}
diff --git a/include/net/inet_connection_sock.h b/include/net/inet_connection_sock.h
-index 5976bde..3a81660 100644
+index 0320bbb..938789c 100644
--- a/include/net/inet_connection_sock.h
+++ b/include/net/inet_connection_sock.h
@@ -63,7 +63,7 @@ struct inet_connection_sock_af_ops {
/** inet_connection_sock - INET connection oriented sock
*
diff --git a/include/net/inetpeer.h b/include/net/inetpeer.h
-index 80479ab..0c3f647 100644
+index d5332dd..10a5c3c 100644
--- a/include/net/inetpeer.h
+++ b/include/net/inetpeer.h
-@@ -47,7 +47,7 @@ struct inet_peer {
+@@ -48,7 +48,7 @@ struct inet_peer {
*/
union {
struct {
struct rcu_head rcu;
struct inet_peer *gc_next;
diff --git a/include/net/ip.h b/include/net/ip.h
-index 6cc1eaf..14059b0 100644
+index d14af7e..52816c2 100644
--- a/include/net/ip.h
+++ b/include/net/ip.h
-@@ -317,7 +317,7 @@ static inline unsigned int ip_skb_dst_mtu(const struct sk_buff *skb)
+@@ -318,7 +318,7 @@ static inline unsigned int ip_skb_dst_mtu(const struct sk_buff *skb)
}
}
-u32 ip_idents_reserve(u32 hash, int segs);
+u32 ip_idents_reserve(u32 hash, int segs) __intentional_overflow(-1);
- void __ip_select_ident(struct iphdr *iph, int segs);
+ void __ip_select_ident(struct net *net, struct iphdr *iph, int segs);
- static inline void ip_select_ident_segs(struct sk_buff *skb, struct sock *sk, int segs)
+ static inline void ip_select_ident_segs(struct net *net, struct sk_buff *skb,
diff --git a/include/net/ip_fib.h b/include/net/ip_fib.h
-index 5bd120e4..03fb812 100644
+index 54271ed..eb7e0e6 100644
--- a/include/net/ip_fib.h
+++ b/include/net/ip_fib.h
@@ -170,7 +170,7 @@ __be32 fib_info_update_nh_saddr(struct net *net, struct fib_nh *nh);
fib_info_update_nh_saddr((net), &FIB_RES_NH(res)))
#define FIB_RES_GW(res) (FIB_RES_NH(res).nh_gw)
diff --git a/include/net/ip_vs.h b/include/net/ip_vs.h
-index 615b20b..fd4cbd8 100644
+index 4e3731e..a242e28 100644
--- a/include/net/ip_vs.h
+++ b/include/net/ip_vs.h
-@@ -534,7 +534,7 @@ struct ip_vs_conn {
+@@ -551,7 +551,7 @@ struct ip_vs_conn {
struct ip_vs_conn *control; /* Master control connection */
atomic_t n_control; /* Number of controlled ones */
struct ip_vs_dest *dest; /* real server */
/* Packet transmitter for different forwarding methods. If it
* mangles the packet, it must return NF_DROP or better NF_STOLEN,
-@@ -682,7 +682,7 @@ struct ip_vs_dest {
+@@ -699,7 +699,7 @@ struct ip_vs_dest {
__be16 port; /* port number of the server */
union nf_inet_addr addr; /* IP address of the server */
volatile unsigned int flags; /* dest status flags */
atomic_t weight; /* server weight */
atomic_t refcnt; /* reference counter */
-@@ -928,11 +928,11 @@ struct netns_ipvs {
+@@ -946,11 +946,11 @@ struct netns_ipvs {
/* ip_vs_lblc */
int sysctl_lblc_expiration;
struct ctl_table_header *lblc_ctl_header;
struct llc_sap_state {
u8 curr_state;
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
-index d52914b..2b13cec 100644
+index fc57f6b..9c1fdb2 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
-@@ -4915,7 +4915,7 @@ struct rate_control_ops {
+@@ -5104,7 +5104,7 @@ struct rate_control_ops {
void (*remove_sta_debugfs)(void *priv, void *priv_sta);
u32 (*get_expected_throughput)(void *priv_sta);
static inline int rate_supported(struct ieee80211_sta *sta,
enum ieee80211_band band,
diff --git a/include/net/neighbour.h b/include/net/neighbour.h
-index 76f7084..8f36e39 100644
+index bd33e66..6508d00 100644
--- a/include/net/neighbour.h
+++ b/include/net/neighbour.h
-@@ -163,7 +163,7 @@ struct neigh_ops {
+@@ -162,7 +162,7 @@ struct neigh_ops {
void (*error_report)(struct neighbour *, struct sk_buff *);
int (*output)(struct neighbour *, struct sk_buff *);
int (*connected_output)(struct neighbour *, struct sk_buff *);
struct pneigh_entry {
struct pneigh_entry *next;
-@@ -217,7 +217,7 @@ struct neigh_table {
+@@ -216,7 +216,7 @@ struct neigh_table {
struct neigh_statistics __percpu *stats;
struct neigh_hash_table __rcu *nht;
struct pneigh_entry **phash_buckets;
enum {
NEIGH_ARP_TABLE = 0,
diff --git a/include/net/net_namespace.h b/include/net/net_namespace.h
-index 36faf49..6927638 100644
+index f733656..54053db 100644
--- a/include/net/net_namespace.h
+++ b/include/net/net_namespace.h
-@@ -131,8 +131,8 @@ struct net {
- struct netns_ipvs *ipvs;
+@@ -132,8 +132,8 @@ struct net {
+ struct netns_mpls mpls;
#endif
struct sock *diag_nlsk;
- atomic_t fnhe_genid;
#include <linux/seq_file_net.h>
-@@ -288,7 +288,11 @@ static inline struct net *read_pnet(struct net * const *pnet)
+@@ -268,7 +268,11 @@ static inline struct net *read_pnet(const possible_net_t *pnet)
#define __net_init __init
#define __net_exit __exit_refok
#define __net_initdata __initdata
#endif
int peernet2id(struct net *net, struct net *peer);
-@@ -301,7 +305,7 @@ struct pernet_operations {
+@@ -281,7 +285,7 @@ struct pernet_operations {
void (*exit_batch)(struct list_head *net_exit_list);
int *id;
size_t size;
/*
* Use these carefully. If you implement a network device and it
-@@ -349,12 +353,12 @@ static inline void unregister_net_sysctl_table(struct ctl_table_header *header)
+@@ -329,12 +333,12 @@ static inline void unregister_net_sysctl_table(struct ctl_table_header *header)
static inline int rt_genid_ipv4(struct net *net)
{
}
extern void (*__fib6_flush_trees)(struct net *net);
-@@ -381,12 +385,12 @@ static inline void rt_genid_bump_all(struct net *net)
+@@ -361,12 +365,12 @@ static inline void rt_genid_bump_all(struct net *net)
static inline int fnhe_genid(struct net *net)
{
#endif /* __NET_NET_NAMESPACE_H */
diff --git a/include/net/netlink.h b/include/net/netlink.h
-index e010ee8..405b9f4 100644
+index 2a5dbcc..8243656 100644
--- a/include/net/netlink.h
+++ b/include/net/netlink.h
-@@ -518,7 +518,7 @@ static inline void nlmsg_trim(struct sk_buff *skb, const void *mark)
+@@ -521,7 +521,7 @@ static inline void nlmsg_trim(struct sk_buff *skb, const void *mark)
{
if (mark) {
WARN_ON((unsigned char *) mark < skb->data);
};
diff --git a/include/net/netns/ipv4.h b/include/net/netns/ipv4.h
-index dbe2254..ed0c151 100644
+index 614a49b..0b94386 100644
--- a/include/net/netns/ipv4.h
+++ b/include/net/netns/ipv4.h
-@@ -87,7 +87,7 @@ struct netns_ipv4 {
+@@ -90,7 +90,7 @@ struct netns_ipv4 {
struct ping_group_range ping_group_range;
#ifdef CONFIG_SYSCTL
unsigned long *sysctl_local_reserved_ports;
-@@ -101,6 +101,6 @@ struct netns_ipv4 {
+@@ -104,6 +104,6 @@ struct netns_ipv4 {
struct fib_rules_ops *mr_rules_ops;
#endif
#endif
};
#endif
diff --git a/include/net/netns/ipv6.h b/include/net/netns/ipv6.h
-index 69ae41f..4f94868 100644
+index d2527bf..2c802d5 100644
--- a/include/net/netns/ipv6.h
+++ b/include/net/netns/ipv6.h
-@@ -75,8 +75,8 @@ struct netns_ipv6 {
+@@ -78,8 +78,8 @@ struct netns_ipv6 {
struct fib_rules_ops *mr6_rules_ops;
#endif
#endif
spinlock_t flow_cache_gc_lock;
struct work_struct flow_cache_gc_work;
diff --git a/include/net/ping.h b/include/net/ping.h
-index cc16d41..664f40b 100644
+index ac80cb4..ec1ed09 100644
--- a/include/net/ping.h
+++ b/include/net/ping.h
@@ -54,7 +54,7 @@ struct ping_iter_state {
#define INET6_PROTO_NOPOLICY 0x1
#define INET6_PROTO_FINAL 0x2
diff --git a/include/net/rtnetlink.h b/include/net/rtnetlink.h
-index 6c6d539..af70817 100644
+index 343d922..7959cde 100644
--- a/include/net/rtnetlink.h
+++ b/include/net/rtnetlink.h
@@ -95,7 +95,7 @@ struct rtnl_link_ops {
/* Get the size of a DATA chunk payload. */
diff --git a/include/net/sctp/structs.h b/include/net/sctp/structs.h
-index 2bb2fcf..d17c291 100644
+index 495c87e..5b327ff 100644
--- a/include/net/sctp/structs.h
+++ b/include/net/sctp/structs.h
-@@ -509,7 +509,7 @@ struct sctp_pf {
+@@ -513,7 +513,7 @@ struct sctp_pf {
void (*to_sk_saddr)(union sctp_addr *, struct sock *sk);
void (*to_sk_daddr)(union sctp_addr *, struct sock *sk);
struct sctp_af *af;
/* Structure to track chunk fragments that have been acked, but peer
diff --git a/include/net/sock.h b/include/net/sock.h
-index e4079c2..79c5d3a 100644
+index 3a4898e..67456ac 100644
--- a/include/net/sock.h
+++ b/include/net/sock.h
-@@ -362,7 +362,7 @@ struct sock {
+@@ -363,7 +363,7 @@ struct sock {
unsigned int sk_napi_id;
unsigned int sk_ll_usec;
#endif
sk_memory_allocated(const struct sock *sk)
{
struct proto *prot = sk->sk_prot;
-@@ -1778,7 +1778,7 @@ static inline void sk_nocaps_add(struct sock *sk, netdev_features_t flags)
+@@ -1777,7 +1777,7 @@ static inline void sk_nocaps_add(struct sock *sk, netdev_features_t flags)
}
static inline int skb_do_copy_data_nocache(struct sock *sk, struct sk_buff *skb,
int copy, int offset)
{
if (skb->ip_summed == CHECKSUM_NONE) {
-@@ -2025,7 +2025,7 @@ static inline void sk_stream_moderate_sndbuf(struct sock *sk)
+@@ -2024,7 +2024,7 @@ static inline void sk_stream_moderate_sndbuf(struct sock *sk)
}
}
/**
* sk_page_frag - return an appropriate page_frag
+@@ -2099,7 +2099,7 @@ struct sock_skb_cb {
+ static inline void
+ sock_skb_set_dropcount(const struct sock *sk, struct sk_buff *skb)
+ {
+- SOCK_SKB_CB(skb)->dropcount = atomic_read(&sk->sk_drops);
++ SOCK_SKB_CB(skb)->dropcount = atomic_read_unchecked(&sk->sk_drops);
+ }
+
+ void __sock_recv_timestamp(struct msghdr *msg, struct sock *sk,
diff --git a/include/net/tcp.h b/include/net/tcp.h
-index 8d6b983..5813205 100644
+index 6d204f3..d5a8ff0 100644
--- a/include/net/tcp.h
+++ b/include/net/tcp.h
-@@ -516,7 +516,7 @@ void tcp_retransmit_timer(struct sock *sk);
+@@ -523,7 +523,7 @@ void tcp_retransmit_timer(struct sock *sk);
void tcp_xmit_retransmit_queue(struct sock *);
void tcp_simple_retransmit(struct sock *);
int tcp_trim_head(struct sock *, struct sk_buff *, u32);
void tcp_send_probe0(struct sock *);
void tcp_send_partial(struct sock *);
-@@ -694,8 +694,8 @@ static inline u32 tcp_skb_timestamp(const struct sk_buff *skb)
+@@ -699,8 +699,8 @@ static inline u32 tcp_skb_timestamp(const struct sk_buff *skb)
* If this grows please adjust skbuff.h:skbuff->cb[xxx] size appropriately.
*/
struct tcp_skb_cb {
union {
/* Note : tcp_tw_isn is used in input path only
* (isn chosen by tcp_timewait_state_process())
-@@ -720,7 +720,7 @@ struct tcp_skb_cb {
+@@ -725,7 +725,7 @@ struct tcp_skb_cb {
__u8 ip_dsfield; /* IPv4 tos or IPv6 dsfield */
/* 1 byte hole */
struct inet_skb_parm h4;
#if IS_ENABLED(CONFIG_IPV6)
diff --git a/include/net/xfrm.h b/include/net/xfrm.h
-index dc4865e..152ee4c 100644
+index 36ac102..6e8b34b 100644
--- a/include/net/xfrm.h
+++ b/include/net/xfrm.h
-@@ -285,7 +285,6 @@ struct xfrm_dst;
+@@ -283,7 +283,6 @@ struct xfrm_dst;
struct xfrm_policy_afinfo {
unsigned short family;
struct dst_ops *dst_ops;
struct dst_entry *(*dst_lookup)(struct net *net, int tos,
const xfrm_address_t *saddr,
const xfrm_address_t *daddr);
-@@ -303,7 +302,7 @@ struct xfrm_policy_afinfo {
+@@ -301,7 +300,7 @@ struct xfrm_policy_afinfo {
struct net_device *dev,
const struct flowi *fl);
struct dst_entry *(*blackhole_route)(struct net *net, struct dst_entry *orig);
int xfrm_policy_register_afinfo(struct xfrm_policy_afinfo *afinfo);
int xfrm_policy_unregister_afinfo(struct xfrm_policy_afinfo *afinfo);
-@@ -342,7 +341,7 @@ struct xfrm_state_afinfo {
+@@ -340,7 +339,7 @@ struct xfrm_state_afinfo {
int (*transport_finish)(struct sk_buff *skb,
int async);
void (*local_error)(struct sk_buff *skb, u32 mtu);
int xfrm_state_register_afinfo(struct xfrm_state_afinfo *afinfo);
int xfrm_state_unregister_afinfo(struct xfrm_state_afinfo *afinfo);
-@@ -437,7 +436,7 @@ struct xfrm_mode {
+@@ -435,7 +434,7 @@ struct xfrm_mode {
struct module *owner;
unsigned int encap;
int flags;
/* Flags for xfrm_mode. */
enum {
-@@ -534,7 +533,7 @@ struct xfrm_policy {
+@@ -530,7 +529,7 @@ struct xfrm_policy {
struct timer_list timer;
struct flow_cache_object flo;
u32 priority;
u32 index;
struct xfrm_mark mark;
-@@ -1167,6 +1166,7 @@ static inline void xfrm_sk_free_policy(struct sock *sk)
+@@ -1163,6 +1162,7 @@ static inline void xfrm_sk_free_policy(struct sock *sk)
}
void xfrm_garbage_collect(struct net *net);
#else
-@@ -1205,6 +1205,9 @@ static inline int xfrm6_policy_check_reverse(struct sock *sk, int dir,
+@@ -1201,6 +1201,9 @@ static inline int xfrm6_policy_check_reverse(struct sock *sk, int dir,
static inline void xfrm_garbage_collect(struct net *net)
{
}
struct device sdev_gendev,
sdev_dev;
+diff --git a/include/scsi/scsi_driver.h b/include/scsi/scsi_driver.h
+index 891a658..fcd68df 100644
+--- a/include/scsi/scsi_driver.h
++++ b/include/scsi/scsi_driver.h
+@@ -14,7 +14,7 @@ struct scsi_driver {
+ void (*rescan)(struct device *);
+ int (*init_command)(struct scsi_cmnd *);
+ void (*uninit_command)(struct scsi_cmnd *);
+- int (*done)(struct scsi_cmnd *);
++ unsigned int (*done)(struct scsi_cmnd *);
+ int (*eh_action)(struct scsi_cmnd *, int);
+ };
+ #define to_scsi_driver(drv) \
diff --git a/include/scsi/scsi_transport_fc.h b/include/scsi/scsi_transport_fc.h
-index 007a0bc..7188db8 100644
+index 784bc2c..855a04c 100644
--- a/include/scsi/scsi_transport_fc.h
+++ b/include/scsi/scsi_transport_fc.h
-@@ -756,7 +756,8 @@ struct fc_function_template {
+@@ -757,7 +757,8 @@ struct fc_function_template {
unsigned long show_host_system_hostname:1;
unsigned long disable_target_scan:1;
/**
diff --git a/include/sound/compress_driver.h b/include/sound/compress_driver.h
-index f48089d..73abe48 100644
+index fa1d055..3647940 100644
--- a/include/sound/compress_driver.h
+++ b/include/sound/compress_driver.h
@@ -130,7 +130,7 @@ struct snd_compr_ops {
/**
* struct snd_compr: Compressed device
diff --git a/include/sound/soc.h b/include/sound/soc.h
-index 0d1ade1..34e77d3 100644
+index f6226914..e919a2e 100644
--- a/include/sound/soc.h
+++ b/include/sound/soc.h
-@@ -856,7 +856,7 @@ struct snd_soc_codec_driver {
+@@ -870,7 +870,7 @@ struct snd_soc_codec_driver {
enum snd_soc_dapm_type, int);
bool ignore_pmdown_time; /* Doesn't benefit from pmdown delay */
/* SoC platform interface */
struct snd_soc_platform_driver {
-@@ -883,7 +883,7 @@ struct snd_soc_platform_driver {
+@@ -897,7 +897,7 @@ struct snd_soc_platform_driver {
const struct snd_compr_ops *compr_ops;
int (*bespoke_trigger)(struct snd_pcm_substream *, int);
struct snd_soc_dai_link_component {
const char *name;
diff --git a/include/target/target_core_base.h b/include/target/target_core_base.h
-index 985ca4c..b55b54a 100644
+index 480e9f8..2d59c93 100644
--- a/include/target/target_core_base.h
+++ b/include/target/target_core_base.h
@@ -767,7 +767,7 @@ struct se_device {
+/* This part must be outside protection */
+#include <trace/define_trace.h>
diff --git a/include/trace/events/irq.h b/include/trace/events/irq.h
-index 3608beb..df39d8a 100644
+index ff8f6c0..6b6bae3 100644
--- a/include/trace/events/irq.h
+++ b/include/trace/events/irq.h
-@@ -36,7 +36,7 @@ struct softirq_action;
+@@ -51,7 +51,7 @@ SOFTIRQ_NAME_LIST
*/
TRACE_EVENT(irq_handler_entry,
TP_ARGS(irq, action),
-@@ -66,7 +66,7 @@ TRACE_EVENT(irq_handler_entry,
+@@ -81,7 +81,7 @@ TRACE_EVENT(irq_handler_entry,
*/
TRACE_EVENT(irq_handler_exit,
TP_ARGS(irq, action, ret),
diff --git a/include/uapi/drm/i915_drm.h b/include/uapi/drm/i915_drm.h
-index 6eed16b..3e05750 100644
+index 551b673..9c680df 100644
--- a/include/uapi/drm/i915_drm.h
+++ b/include/uapi/drm/i915_drm.h
-@@ -347,6 +347,7 @@ typedef struct drm_i915_irq_wait {
- #define I915_PARAM_HAS_COHERENT_PHYS_GTT 29
- #define I915_PARAM_MMAP_VERSION 30
- #define I915_PARAM_HAS_BSD2 31
+@@ -350,6 +350,7 @@ typedef struct drm_i915_irq_wait {
+ #define I915_PARAM_REVISION 32
+ #define I915_PARAM_SUBSLICE_TOTAL 33
+ #define I915_PARAM_EU_TOTAL 34
+#define I915_PARAM_HAS_LEGACY_CONTEXT 35
typedef struct drm_i915_getparam {
void *pmi_pal;
u8 *vbe_state_orig; /*
diff --git a/init/Kconfig b/init/Kconfig
-index f5dbc6d..8259396 100644
+index dc24dec..b77638f 100644
--- a/init/Kconfig
+++ b/init/Kconfig
-@@ -1136,6 +1136,7 @@ endif # CGROUPS
+@@ -1145,6 +1145,7 @@ endif # CGROUPS
config CHECKPOINT_RESTORE
bool "Checkpoint/restore support" if EXPERT
default n
help
Enables additional kernel features in a sake of checkpoint/restore.
-@@ -1646,7 +1647,7 @@ config SLUB_DEBUG
+@@ -1670,7 +1671,7 @@ config SLUB_DEBUG
config COMPAT_BRK
bool "Disable heap randomization"
help
Randomizing heap placement makes heap exploits harder, but it
also breaks ancient binaries (including anything libc5 based).
-@@ -1977,7 +1978,7 @@ config INIT_ALL_POSSIBLE
+@@ -2001,7 +2002,7 @@ config INIT_ALL_POSSIBLE
config STOP_MACHINE
bool
default y
ifneq ($(CONFIG_BLK_DEV_INITRD),y)
obj-y += noinitramfs.o
diff --git a/init/do_mounts.c b/init/do_mounts.c
-index eb41008..f5dbbf9 100644
+index a95bbdb..82c48fd 100644
--- a/init/do_mounts.c
+++ b/init/do_mounts.c
-@@ -360,11 +360,11 @@ static void __init get_fs_names(char *page)
+@@ -363,11 +363,11 @@ static void __init get_fs_names(char *page)
static int __init do_mount_root(char *name, char *fs, int flags, void *data)
{
struct super_block *s;
s = current->fs->pwd.dentry->d_sb;
ROOT_DEV = s->s_dev;
printk(KERN_INFO
-@@ -487,18 +487,18 @@ void __init change_floppy(char *fmt, ...)
+@@ -490,18 +490,18 @@ void __init change_floppy(char *fmt, ...)
va_start(args, fmt);
vsprintf(buf, fmt, args);
va_end(args);
termios.c_lflag |= ICANON;
sys_ioctl(fd, TCSETSF, (long)&termios);
sys_close(fd);
-@@ -592,8 +592,8 @@ void __init prepare_namespace(void)
+@@ -595,8 +595,8 @@ void __init prepare_namespace(void)
mount_root();
out:
devtmpfs_mount("dev");
next_state = Reset;
return 0;
diff --git a/init/main.c b/init/main.c
-index 6f0f1c5f..a542824 100644
+index 2a89545..eb9203f 100644
--- a/init/main.c
+++ b/init/main.c
-@@ -96,6 +96,8 @@ extern void radix_tree_init(void);
+@@ -97,6 +97,8 @@ extern void radix_tree_init(void);
static inline void mark_rodata_ro(void) { }
#endif
/*
* Debug helper: via this flag we know that we are in 'early bootup code'
* where only the boot processor is running with IRQ disabled. This means
-@@ -157,6 +159,85 @@ static int __init set_reset_devices(char *str)
+@@ -158,6 +160,84 @@ static int __init set_reset_devices(char *str)
__setup("reset_devices", set_reset_devices);
+ memcpy(pax_exit_kernel_user, (unsigned char []){0xc3}, 1);
+ clone_pgd_mask = ~(pgdval_t)0UL;
+ pax_user_shadow_base = 0UL;
-+ setup_clear_cpu_cap(X86_FEATURE_PCID);
-+ setup_clear_cpu_cap(X86_FEATURE_INVPCID);
++ setup_clear_cpu_cap(X86_FEATURE_PCIDUDEREF);
+#endif
+
+ return 0;
static const char *argv_init[MAX_INIT_ARGS+2] = { "init", NULL, };
const char *envp_init[MAX_INIT_ENVS+2] = { "HOME=/", "TERM=linux", NULL, };
static const char *panic_later, *panic_param;
-@@ -722,7 +803,7 @@ static bool __init_or_module initcall_blacklisted(initcall_t fn)
+@@ -726,7 +806,7 @@ static bool __init_or_module initcall_blacklisted(initcall_t fn)
struct blacklist_entry *entry;
char *fn_name;
if (!fn_name)
return false;
-@@ -774,7 +855,7 @@ int __init_or_module do_one_initcall(initcall_t fn)
+@@ -778,7 +858,7 @@ int __init_or_module do_one_initcall(initcall_t fn)
{
int count = preempt_count();
int ret;
if (initcall_blacklisted(fn))
return -EPERM;
-@@ -784,18 +865,17 @@ int __init_or_module do_one_initcall(initcall_t fn)
+@@ -788,18 +868,17 @@ int __init_or_module do_one_initcall(initcall_t fn)
else
ret = fn();
return ret;
}
-@@ -901,8 +981,8 @@ static int run_init_process(const char *init_filename)
+@@ -905,8 +984,8 @@ static int run_init_process(const char *init_filename)
{
argv_init[0] = init_filename;
return do_execve(getname_kernel(init_filename),
}
static int try_to_run_init_process(const char *init_filename)
-@@ -919,6 +999,10 @@ static int try_to_run_init_process(const char *init_filename)
+@@ -923,6 +1002,10 @@ static int try_to_run_init_process(const char *init_filename)
return ret;
}
static noinline void __init kernel_init_freeable(void);
static int __ref kernel_init(void *unused)
-@@ -943,6 +1027,11 @@ static int __ref kernel_init(void *unused)
+@@ -947,6 +1030,11 @@ static int __ref kernel_init(void *unused)
ramdisk_execute_command, ret);
}
/*
* We try each of these until one succeeds.
*
-@@ -998,7 +1087,7 @@ static noinline void __init kernel_init_freeable(void)
+@@ -1002,7 +1090,7 @@ static noinline void __init kernel_init_freeable(void)
do_basic_setup();
/* Open the /dev/console on the rootfs, this should never fail */
pr_err("Warning: unable to open an initial console.\n");
(void) sys_dup(0);
-@@ -1011,11 +1100,13 @@ static noinline void __init kernel_init_freeable(void)
+@@ -1015,11 +1103,13 @@ static noinline void __init kernel_init_freeable(void)
if (!ramdisk_execute_command)
ramdisk_execute_command = "/init";
mq_table.data = get_mq(table);
diff --git a/ipc/mqueue.c b/ipc/mqueue.c
-index 7635a1c..7432cb6 100644
+index 3aaea7f..e8a13d6 100644
--- a/ipc/mqueue.c
+++ b/ipc/mqueue.c
@@ -278,6 +278,7 @@ static struct inode *mqueue_get_inode(struct super_block *sb,
if (u->mq_bytes + mq_bytes < u->mq_bytes ||
u->mq_bytes + mq_bytes > rlimit(RLIMIT_MSGQUEUE)) {
diff --git a/ipc/sem.c b/ipc/sem.c
-index 9284211..bca5b1b 100644
+index d1a6edd..ef08b40 100644
--- a/ipc/sem.c
+++ b/ipc/sem.c
@@ -1780,7 +1780,7 @@ static int get_queue_result(struct sem_queue *q)
return sys_semtimedop(semid, tsops, nsops, NULL);
}
diff --git a/ipc/shm.c b/ipc/shm.c
-index 19633b4..d454904 100644
+index 6d76707..b646bbe 100644
--- a/ipc/shm.c
+++ b/ipc/shm.c
@@ -72,6 +72,14 @@ static void shm_destroy(struct ipc_namespace *ns, struct shmid_kernel *shp);
+#ifdef CONFIG_GRKERNSEC
+ shp->shm_lapid = current->pid;
+#endif
- size = i_size_read(path.dentry->d_inode);
+ size = i_size_read(d_inode(path.dentry));
ipc_unlock_object(&shp->shm_perm);
rcu_read_unlock();
diff --git a/ipc/util.c b/ipc/util.c
-index 106bed0..f851429 100644
+index ff3323e..d6d63d1 100644
--- a/ipc/util.c
+++ b/ipc/util.c
@@ -71,6 +71,8 @@ struct ipc_proc_iface {
if ((requested_mode & ~granted_mode & 0007) &&
!ns_capable(ns->user_ns, CAP_IPC_OWNER))
diff --git a/kernel/audit.c b/kernel/audit.c
-index 72ab759..757deba 100644
+index 1c13e42..6c171ab 100644
--- a/kernel/audit.c
+++ b/kernel/audit.c
-@@ -122,7 +122,7 @@ u32 audit_sig_sid = 0;
+@@ -124,7 +124,7 @@ u32 audit_sig_sid = 0;
3) suppressed due to audit_rate_limit
4) suppressed due to audit_backlog_limit
*/
/* The netlink socket. */
static struct sock *audit_sock;
-@@ -256,7 +256,7 @@ void audit_log_lost(const char *message)
+@@ -258,7 +258,7 @@ void audit_log_lost(const char *message)
unsigned long now;
int print;
print = (audit_failure == AUDIT_FAIL_PANIC || !audit_rate_limit);
-@@ -273,7 +273,7 @@ void audit_log_lost(const char *message)
+@@ -275,7 +275,7 @@ void audit_log_lost(const char *message)
if (print) {
if (printk_ratelimit())
pr_warn("audit_lost=%u audit_rate_limit=%u audit_backlog_limit=%u\n",
audit_rate_limit,
audit_backlog_limit);
audit_panic(message);
-@@ -831,7 +831,7 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
+@@ -833,7 +833,7 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
s.pid = audit_pid;
s.rate_limit = audit_rate_limit;
s.backlog_limit = audit_backlog_limit;
+ s.lost = atomic_read_unchecked(&audit_lost);
s.backlog = skb_queue_len(&audit_skb_queue);
s.feature_bitmap = AUDIT_FEATURE_BITMAP_ALL;
- s.backlog_wait_time = audit_backlog_wait_time;
+ s.backlog_wait_time = audit_backlog_wait_time_master;
diff --git a/kernel/auditsc.c b/kernel/auditsc.c
-index dc4ae70..2a2bddc 100644
+index 9fb9d1c..afb1610 100644
--- a/kernel/auditsc.c
+++ b/kernel/auditsc.c
+@@ -1023,7 +1023,7 @@ static int audit_log_single_execve_arg(struct audit_context *context,
+ * for strings that are too long, we should not have created
+ * any.
+ */
+- if (unlikely((len == -1) || len > MAX_ARG_STRLEN - 1)) {
++ if (unlikely(len > MAX_ARG_STRLEN - 1)) {
+ WARN_ON(1);
+ send_sig(SIGKILL, current, 0);
+ return -1;
@@ -1955,7 +1955,7 @@ int auditsc_get_stamp(struct audit_context *ctx,
}
task->sessionid = sessionid;
task->loginuid = loginuid;
diff --git a/kernel/bpf/core.c b/kernel/bpf/core.c
-index 0c5796e..a9414e2 100644
+index 54f0e7f..fed997b 100644
--- a/kernel/bpf/core.c
+++ b/kernel/bpf/core.c
@@ -143,14 +143,17 @@ bpf_jit_binary_alloc(unsigned int proglen, u8 **image_ptr,
#endif /* CONFIG_BPF_JIT */
diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c
-index 536edc2..d28c85d 100644
+index 3bae6c5..59ea175 100644
--- a/kernel/bpf/syscall.c
+++ b/kernel/bpf/syscall.c
-@@ -548,11 +548,15 @@ SYSCALL_DEFINE3(bpf, int, cmd, union bpf_attr __user *, uattr, unsigned int, siz
+@@ -554,11 +554,15 @@ SYSCALL_DEFINE3(bpf, int, cmd, union bpf_attr __user *, uattr, unsigned int, siz
int err;
/* the syscall is limited to root temporarily. This restriction will be
if (!access_ok(VERIFY_READ, uattr, 1))
return -EFAULT;
diff --git a/kernel/capability.c b/kernel/capability.c
-index 989f5bf..d317ca0 100644
+index 45432b5..988f1e4 100644
--- a/kernel/capability.c
+++ b/kernel/capability.c
-@@ -192,6 +192,9 @@ SYSCALL_DEFINE2(capget, cap_user_header_t, header, cap_user_data_t, dataptr)
+@@ -193,6 +193,9 @@ SYSCALL_DEFINE2(capget, cap_user_header_t, header, cap_user_data_t, dataptr)
* before modification is attempted and the application
* fails.
*/
if (copy_to_user(dataptr, kdata, tocopy
* sizeof(struct __user_cap_data_struct))) {
return -EFAULT;
-@@ -297,10 +300,11 @@ bool has_ns_capability(struct task_struct *t,
+@@ -298,10 +301,11 @@ bool has_ns_capability(struct task_struct *t,
int ret;
rcu_read_lock();
}
/**
-@@ -337,10 +341,10 @@ bool has_ns_capability_noaudit(struct task_struct *t,
+@@ -338,10 +342,10 @@ bool has_ns_capability_noaudit(struct task_struct *t,
int ret;
rcu_read_lock();
}
/**
-@@ -378,7 +382,7 @@ bool ns_capable(struct user_namespace *ns, int cap)
+@@ -379,7 +383,7 @@ bool ns_capable(struct user_namespace *ns, int cap)
BUG();
}
current->flags |= PF_SUPERPRIV;
return true;
}
-@@ -386,6 +390,21 @@ bool ns_capable(struct user_namespace *ns, int cap)
+@@ -387,6 +391,20 @@ bool ns_capable(struct user_namespace *ns, int cap)
}
EXPORT_SYMBOL(ns_capable);
+bool ns_capable_nolog(struct user_namespace *ns, int cap)
+{
+ if (unlikely(!cap_valid(cap))) {
-+ printk(KERN_CRIT "capable_nolog() called with invalid cap=%u\n", cap);
++ pr_crit("capable_nolog() called with invalid cap=%u\n", cap);
+ BUG();
+ }
+
+ return false;
+}
+EXPORT_SYMBOL(ns_capable_nolog);
-+
+
/**
- * file_ns_capable - Determine if the file's opener had a capability in effect
- * @file: The file we want to check
-@@ -427,6 +446,12 @@ bool capable(int cap)
+ * capable - Determine if the current task has a superior capability in effect
+@@ -403,6 +421,13 @@ bool capable(int cap)
+ return ns_capable(&init_user_ns, cap);
}
EXPORT_SYMBOL(capable);
-
++
+bool capable_nolog(int cap)
+{
+ return ns_capable_nolog(&init_user_ns, cap);
+}
+EXPORT_SYMBOL(capable_nolog);
+
+ #endif /* CONFIG_MULTIUSER */
+
/**
- * capable_wrt_inode_uidgid - Check nsown_capable and uid and gid mapped
- * @inode: The inode in question
-@@ -444,3 +469,12 @@ bool capable_wrt_inode_uidgid(const struct inode *inode, int cap)
+@@ -447,3 +472,12 @@ bool capable_wrt_inode_uidgid(const struct inode *inode, int cap)
kgid_has_mapping(ns, inode->i_gid);
}
EXPORT_SYMBOL(capable_wrt_inode_uidgid);
+}
+EXPORT_SYMBOL(capable_wrt_inode_uidgid_nolog);
diff --git a/kernel/cgroup.c b/kernel/cgroup.c
-index 29a7b2c..a64e30a 100644
+index e8a5491..ab4bfa3 100644
--- a/kernel/cgroup.c
+++ b/kernel/cgroup.c
@@ -5347,6 +5347,9 @@ static void cgroup_release_agent(struct work_struct *work)
list_for_each_entry(task, &cset->tasks, cg_list) {
if (count++ > MAX_TASKS_SHOWN_PER_CSS)
diff --git a/kernel/compat.c b/kernel/compat.c
-index 24f0061..ea80802 100644
+index 333d364..762ec00 100644
--- a/kernel/compat.c
+++ b/kernel/compat.c
@@ -13,6 +13,7 @@
set_fs(oldfs);
if ((err == -ERESTART_RESTARTBLOCK) && rmtp &&
-@@ -1145,7 +1146,7 @@ COMPAT_SYSCALL_DEFINE2(sched_rr_get_interval,
+@@ -1147,7 +1148,7 @@ COMPAT_SYSCALL_DEFINE2(sched_rr_get_interval,
mm_segment_t old_fs = get_fs();
set_fs(KERNEL_DS);
return -ENOMEM;
diff --git a/kernel/cred.c b/kernel/cred.c
-index e0573a4..26c0fd3 100644
+index ec1c076..7da8a0e 100644
--- a/kernel/cred.c
+++ b/kernel/cred.c
-@@ -164,6 +164,16 @@ void exit_creds(struct task_struct *tsk)
+@@ -167,6 +167,15 @@ void exit_creds(struct task_struct *tsk)
validate_creds(cred);
alter_cred_subscribers(cred, -1);
put_cred(cred);
+ if (cred != NULL) {
+ tsk->delayed_cred = NULL;
+ validate_creds(cred);
-+ alter_cred_subscribers(cred, -1);
+ put_cred(cred);
+ }
+#endif
}
/**
-@@ -411,7 +421,7 @@ static bool cred_cap_issubset(const struct cred *set, const struct cred *subset)
+@@ -414,7 +423,7 @@ static bool cred_cap_issubset(const struct cred *set, const struct cred *subset)
* Always returns 0 thus allowing this function to be tail-called at the end
* of, say, sys_setgid().
*/
{
struct task_struct *task = current;
const struct cred *old = task->real_cred;
-@@ -430,6 +440,8 @@ int commit_creds(struct cred *new)
+@@ -433,6 +442,8 @@ int commit_creds(struct cred *new)
get_cred(new); /* we will require a ref for the subj creds too */
/* dumpability changes */
if (!uid_eq(old->euid, new->euid) ||
!gid_eq(old->egid, new->egid) ||
-@@ -479,6 +491,105 @@ int commit_creds(struct cred *new)
+@@ -482,6 +493,105 @@ int commit_creds(struct cred *new)
put_cred(old);
return 0;
}
#ifdef CONFIG_MODULE_UNLOAD
{
diff --git a/kernel/events/core.c b/kernel/events/core.c
-index 2fabc06..79cceec 100644
+index 0ceb386..ddaf008 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
-@@ -170,8 +170,15 @@ static struct srcu_struct pmus_srcu;
+@@ -172,8 +172,15 @@ static struct srcu_struct pmus_srcu;
* 0 - disallow raw tracepoint access for unpriv
* 1 - disallow cpu events for unpriv
* 2 - disallow kernel profiling for unpriv
*/
-int sysctl_perf_event_paranoid __read_mostly = 1;
+#ifdef CONFIG_GRKERNSEC_PERF_HARDEN
-+int sysctl_perf_event_legitimately_concerned __read_mostly = 3;
++int sysctl_perf_event_legitimately_concerned __read_only = 3;
+#elif defined(CONFIG_GRKERNSEC_HIDESYM)
-+int sysctl_perf_event_legitimately_concerned __read_mostly = 2;
++int sysctl_perf_event_legitimately_concerned __read_only = 2;
+#else
-+int sysctl_perf_event_legitimately_concerned __read_mostly = 1;
++int sysctl_perf_event_legitimately_concerned __read_only = 1;
+#endif
/* Minimum for 512 kiB + 1 user control page */
int sysctl_perf_event_mlock __read_mostly = 512 + (PAGE_SIZE / 1024); /* 'free' kiB per user */
-@@ -197,7 +204,7 @@ void update_perf_cpu_limits(void)
+@@ -199,7 +206,7 @@ void update_perf_cpu_limits(void)
tmp *= sysctl_perf_cpu_time_max_percent;
do_div(tmp, 100);
}
static int perf_rotate_context(struct perf_cpu_context *cpuctx);
-@@ -303,7 +310,7 @@ void perf_sample_event_took(u64 sample_len_ns)
+@@ -305,7 +312,7 @@ void perf_sample_event_took(u64 sample_len_ns)
}
}
static void cpu_ctx_sched_out(struct perf_cpu_context *cpuctx,
enum event_type_t event_type);
-@@ -3220,7 +3227,7 @@ static void __perf_event_read(void *info)
-
- static inline u64 perf_event_count(struct perf_event *event)
- {
-- return local64_read(&event->count) + atomic64_read(&event->child_count);
-+ return local64_read(&event->count) + atomic64_read_unchecked(&event->child_count);
- }
-
- static u64 perf_event_read(struct perf_event *event)
-@@ -3656,9 +3663,9 @@ u64 perf_event_read_value(struct perf_event *event, u64 *enabled, u64 *running)
+@@ -3771,9 +3778,9 @@ u64 perf_event_read_value(struct perf_event *event, u64 *enabled, u64 *running)
mutex_lock(&event->child_mutex);
total += perf_event_read(event);
*enabled += event->total_time_enabled +
list_for_each_entry(child, &event->child_list, child_list) {
total += perf_event_read(child);
-@@ -4147,10 +4154,10 @@ void perf_event_update_userpage(struct perf_event *event)
+@@ -4268,10 +4275,10 @@ void perf_event_update_userpage(struct perf_event *event)
userpg->offset -= local64_read(&event->hw.prev_count);
userpg->time_enabled = enabled +
arch_perf_update_userpage(event, userpg, now);
-@@ -4740,7 +4747,7 @@ perf_output_sample_ustack(struct perf_output_handle *handle, u64 dump_size,
+@@ -4946,7 +4953,7 @@ perf_output_sample_ustack(struct perf_output_handle *handle, u64 dump_size,
/* Data. */
sp = perf_user_stack_pointer(regs);
dyn_size = dump_size - rem;
perf_output_skip(handle, rem);
-@@ -4831,11 +4838,11 @@ static void perf_output_read_one(struct perf_output_handle *handle,
+@@ -5037,11 +5044,11 @@ static void perf_output_read_one(struct perf_output_handle *handle,
values[n++] = perf_event_count(event);
if (read_format & PERF_FORMAT_TOTAL_TIME_ENABLED) {
values[n++] = enabled +
}
if (read_format & PERF_FORMAT_ID)
values[n++] = primary_event_id(event);
-@@ -7180,7 +7187,7 @@ perf_event_alloc(struct perf_event_attr *attr, int cpu,
+@@ -7533,7 +7540,7 @@ perf_event_alloc(struct perf_event_attr *attr, int cpu,
event->parent = parent_event;
event->ns = get_pid_ns(task_active_pid_ns(current));
event->state = PERF_EVENT_STATE_INACTIVE;
-@@ -7470,6 +7477,11 @@ SYSCALL_DEFINE5(perf_event_open,
+@@ -7892,6 +7899,11 @@ SYSCALL_DEFINE5(perf_event_open,
if (flags & ~PERF_FLAG_ALL)
return -EINVAL;
err = perf_copy_attr(attr_uptr, &attr);
if (err)
return err;
-@@ -7892,10 +7904,10 @@ static void sync_child_event(struct perf_event *child_event,
+@@ -8340,10 +8352,10 @@ static void sync_child_event(struct perf_event *child_event,
/*
* Add back the child's count to the parent's count:
*/
/*
diff --git a/kernel/events/internal.h b/kernel/events/internal.h
-index 569b2187..19940d9 100644
+index 9f6ce9b..e4f2cbb 100644
--- a/kernel/events/internal.h
+++ b/kernel/events/internal.h
-@@ -81,10 +81,10 @@ static inline unsigned long perf_data_size(struct ring_buffer *rb)
- return rb->nr_pages << (PAGE_SHIFT + page_order(rb));
+@@ -114,10 +114,10 @@ static inline unsigned long perf_aux_size(struct ring_buffer *rb)
+ return rb->aux_nr_pages << PAGE_SHIFT;
}
-#define DEFINE_OUTPUT_COPY(func_name, memcpy_func) \
{ \
unsigned long size, written; \
\
-@@ -117,7 +117,7 @@ memcpy_common(void *dst, const void *src, unsigned long n)
+@@ -150,7 +150,7 @@ memcpy_common(void *dst, const void *src, unsigned long n)
return 0;
}
static inline unsigned long
memcpy_skip(void *dst, const void *src, unsigned long n)
-@@ -125,7 +125,7 @@ memcpy_skip(void *dst, const void *src, unsigned long n)
+@@ -158,7 +158,7 @@ memcpy_skip(void *dst, const void *src, unsigned long n)
return 0;
}
#ifndef arch_perf_out_copy_user
#define arch_perf_out_copy_user arch_perf_out_copy_user
-@@ -143,7 +143,7 @@ arch_perf_out_copy_user(void *dst, const void *src, unsigned long n)
+@@ -176,7 +176,7 @@ arch_perf_out_copy_user(void *dst, const void *src, unsigned long n)
}
#endif
pagefault_disable();
result = __copy_from_user_inatomic(&opcode, (void __user*)vaddr,
diff --git a/kernel/exit.c b/kernel/exit.c
-index feff10b..f623dd5 100644
+index 22fcc05..5f07dbc 100644
--- a/kernel/exit.c
+++ b/kernel/exit.c
@@ -171,6 +171,10 @@ void release_task(struct task_struct *p)
exit_mm(tsk);
if (group_dead)
-@@ -849,7 +857,7 @@ SYSCALL_DEFINE1(exit, int, error_code)
+@@ -847,7 +855,7 @@ SYSCALL_DEFINE1(exit, int, error_code)
* Take down every thread in the group. This is called by fatal signals
* as well as by sys_exit_group (below).
*/
{
struct signal_struct *sig = current->signal;
diff --git a/kernel/fork.c b/kernel/fork.c
-index cf65139..704476e 100644
+index 03c1eaa..461be4c 100644
--- a/kernel/fork.c
+++ b/kernel/fork.c
-@@ -177,12 +177,54 @@ static void free_thread_info(struct thread_info *ti)
+@@ -188,12 +188,54 @@ static void free_thread_info(struct thread_info *ti)
void thread_info_cache_init(void)
{
thread_info_cache = kmem_cache_create("thread_info", THREAD_SIZE,
/* SLAB cache for signal_struct structures (tsk->signal) */
static struct kmem_cache *signal_cachep;
-@@ -201,18 +243,22 @@ struct kmem_cache *vm_area_cachep;
+@@ -212,18 +254,22 @@ struct kmem_cache *vm_area_cachep;
/* SLAB cache for mm_struct structures (tsk->mm) */
static struct kmem_cache *mm_cachep;
rt_mutex_debug_task_free(tsk);
ftrace_graph_exit_task(tsk);
put_seccomp_filter(tsk);
-@@ -306,6 +352,7 @@ static struct task_struct *dup_task_struct(struct task_struct *orig)
+@@ -329,6 +375,7 @@ static struct task_struct *dup_task_struct(struct task_struct *orig)
{
struct task_struct *tsk;
struct thread_info *ti;
int node = tsk_fork_get_node(orig);
int err;
-@@ -313,7 +360,7 @@ static struct task_struct *dup_task_struct(struct task_struct *orig)
+@@ -336,7 +383,7 @@ static struct task_struct *dup_task_struct(struct task_struct *orig)
if (!tsk)
return NULL;
if (!ti)
goto free_tsk;
-@@ -322,6 +369,9 @@ static struct task_struct *dup_task_struct(struct task_struct *orig)
+@@ -345,6 +392,9 @@ static struct task_struct *dup_task_struct(struct task_struct *orig)
goto free_ti;
tsk->stack = ti;
#ifdef CONFIG_SECCOMP
/*
* We must handle setting up seccomp filters once we're under
-@@ -338,7 +388,7 @@ static struct task_struct *dup_task_struct(struct task_struct *orig)
+@@ -361,7 +411,7 @@ static struct task_struct *dup_task_struct(struct task_struct *orig)
set_task_stack_end_magic(tsk);
#ifdef CONFIG_CC_STACKPROTECTOR
#endif
/*
-@@ -352,24 +402,89 @@ static struct task_struct *dup_task_struct(struct task_struct *orig)
+@@ -375,24 +425,89 @@ static struct task_struct *dup_task_struct(struct task_struct *orig)
tsk->splice_pipe = NULL;
tsk->task_frag.page = NULL;
uprobe_start_dup_mmap();
down_write(&oldmm->mmap_sem);
-@@ -397,51 +512,15 @@ static int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm)
+@@ -423,51 +538,15 @@ static int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm)
prev = NULL;
for (mpnt = oldmm->mmap; mpnt; mpnt = mpnt->vm_next) {
}
/*
-@@ -473,6 +552,31 @@ static int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm)
+@@ -499,6 +578,31 @@ static int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm)
if (retval)
goto out;
}
/* a new mm has just been created */
arch_dup_mmap(oldmm, mm);
retval = 0;
-@@ -482,14 +586,6 @@ out:
+@@ -508,14 +612,6 @@ out:
up_write(&oldmm->mmap_sem);
uprobe_end_dup_mmap();
return retval;
}
static inline int mm_alloc_pgd(struct mm_struct *mm)
-@@ -739,8 +835,8 @@ struct mm_struct *mm_access(struct task_struct *task, unsigned int mode)
+@@ -790,8 +886,8 @@ struct mm_struct *mm_access(struct task_struct *task, unsigned int mode)
return ERR_PTR(err);
mm = get_task_mm(task);
mmput(mm);
mm = ERR_PTR(-EACCES);
}
-@@ -943,13 +1039,20 @@ static int copy_fs(unsigned long clone_flags, struct task_struct *tsk)
+@@ -992,13 +1088,20 @@ static int copy_fs(unsigned long clone_flags, struct task_struct *tsk)
spin_unlock(&fs->lock);
return -EAGAIN;
}
return 0;
}
-@@ -1187,7 +1290,7 @@ init_task_pid(struct task_struct *task, enum pid_type type, struct pid *pid)
+@@ -1236,7 +1339,7 @@ init_task_pid(struct task_struct *task, enum pid_type type, struct pid *pid)
* parts of the process environment (as per the clone
* flags). The actual kick-off is left to the caller.
*/
unsigned long stack_start,
unsigned long stack_size,
int __user *child_tidptr,
-@@ -1258,6 +1361,9 @@ static struct task_struct *copy_process(unsigned long clone_flags,
+@@ -1307,6 +1410,9 @@ static struct task_struct *copy_process(unsigned long clone_flags,
DEBUG_LOCKS_WARN_ON(!p->softirqs_enabled);
#endif
retval = -EAGAIN;
if (atomic_read(&p->real_cred->user->processes) >=
task_rlimit(p, RLIMIT_NPROC)) {
if (p->real_cred->user != INIT_USER &&
-@@ -1507,6 +1613,11 @@ static struct task_struct *copy_process(unsigned long clone_flags,
+@@ -1554,6 +1660,11 @@ static struct task_struct *copy_process(unsigned long clone_flags,
goto bad_fork_free_pid;
}
if (likely(p->pid)) {
ptrace_init_task(p, (clone_flags & CLONE_PTRACE) || trace);
-@@ -1597,6 +1708,8 @@ bad_fork_cleanup_count:
+@@ -1643,6 +1754,8 @@ bad_fork_cleanup_count:
bad_fork_free:
free_task(p);
fork_out:
return ERR_PTR(retval);
}
-@@ -1658,6 +1771,7 @@ long do_fork(unsigned long clone_flags,
+@@ -1704,6 +1817,7 @@ long do_fork(unsigned long clone_flags,
p = copy_process(clone_flags, stack_start, stack_size,
child_tidptr, NULL, trace);
/*
* Do this prior waking up the new thread - the thread pointer
* might get invalid after that point, if the thread exits quickly.
-@@ -1674,6 +1788,8 @@ long do_fork(unsigned long clone_flags,
+@@ -1720,6 +1834,8 @@ long do_fork(unsigned long clone_flags,
if (clone_flags & CLONE_PARENT_SETTID)
put_user(nr, parent_tidptr);
if (clone_flags & CLONE_VFORK) {
p->vfork_done = &vfork;
init_completion(&vfork);
-@@ -1792,7 +1908,7 @@ void __init proc_caches_init(void)
+@@ -1838,7 +1954,7 @@ void __init proc_caches_init(void)
mm_cachep = kmem_cache_create("mm_struct",
sizeof(struct mm_struct), ARCH_MIN_MMSTRUCT_ALIGN,
SLAB_HWCACHE_ALIGN|SLAB_PANIC|SLAB_NOTRACK, NULL);
mmap_init();
nsproxy_cache_init();
}
-@@ -1832,7 +1948,7 @@ static int unshare_fs(unsigned long unshare_flags, struct fs_struct **new_fsp)
+@@ -1878,7 +1994,7 @@ static int unshare_fs(unsigned long unshare_flags, struct fs_struct **new_fsp)
return 0;
/* don't need lock here; in the worst case we'll do useless copy */
return 0;
*new_fsp = copy_fs_struct(fs);
-@@ -1944,7 +2060,8 @@ SYSCALL_DEFINE1(unshare, unsigned long, unshare_flags)
+@@ -1990,7 +2106,8 @@ SYSCALL_DEFINE1(unshare, unsigned long, unshare_flags)
fs = current->fs;
spin_lock(&fs->lock);
current->fs = new_fs;
new_fs = NULL;
else
new_fs = fs;
+@@ -2054,7 +2171,7 @@ int unshare_files(struct files_struct **displaced)
+ int sysctl_max_threads(struct ctl_table *table, int write,
+ void __user *buffer, size_t *lenp, loff_t *ppos)
+ {
+- struct ctl_table t;
++ ctl_table_no_const t;
+ int ret;
+ int threads = max_threads;
+ int min = MIN_THREADS;
diff --git a/kernel/futex.c b/kernel/futex.c
-index 2a5e383..878bac6 100644
+index 2579e40..c33f33e 100644
--- a/kernel/futex.c
+++ b/kernel/futex.c
@@ -201,7 +201,7 @@ struct futex_pi_state {
{
compat_uptr_t base = ptr_to_compat(entry);
diff --git a/kernel/gcov/base.c b/kernel/gcov/base.c
-index b358a80..fc25240 100644
+index a744098..539f7b6 100644
--- a/kernel/gcov/base.c
+++ b/kernel/gcov/base.c
-@@ -114,11 +114,6 @@ void gcov_enable_events(void)
+@@ -117,11 +117,6 @@ void gcov_enable_events(void)
}
#ifdef CONFIG_MODULES
/* Update list and generate events when modules are unloaded. */
static int gcov_module_notifier(struct notifier_block *nb, unsigned long event,
void *data)
-@@ -133,7 +128,7 @@ static int gcov_module_notifier(struct notifier_block *nb, unsigned long event,
+@@ -136,7 +131,7 @@ static int gcov_module_notifier(struct notifier_block *nb, unsigned long event,
/* Remove entries located in module from linked list. */
while ((info = gcov_info_next(info))) {
if (gcov_events_enabled)
gcov_event(GCOV_REMOVE, info);
diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c
-index 886d09e..c7ff4e5 100644
+index e68932b..2247e06 100644
--- a/kernel/irq/manage.c
+++ b/kernel/irq/manage.c
-@@ -874,7 +874,7 @@ static int irq_thread(void *data)
+@@ -906,7 +906,7 @@ static int irq_thread(void *data)
action_ret = handler_fn(desc, action);
if (action_ret == IRQ_HANDLED)
/*
diff --git a/kernel/kexec.c b/kernel/kexec.c
-index 38c25b1..12b3f69 100644
+index 7a36fdc..de8c4ed 100644
--- a/kernel/kexec.c
+++ b/kernel/kexec.c
+@@ -1232,7 +1232,7 @@ static int kimage_load_segment(struct kimage *image,
+ */
+ struct kimage *kexec_image;
+ struct kimage *kexec_crash_image;
+-int kexec_load_disabled;
++int kexec_load_disabled __read_only;
+
+ static DEFINE_MUTEX(kexec_mutex);
+
@@ -1348,7 +1348,8 @@ COMPAT_SYSCALL_DEFINE4(kexec_load, compat_ulong_t, entry,
compat_ulong_t, flags)
{
.name = "notes",
.mode = S_IRUGO,
diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c
-index ba77ab5..d6a3e20 100644
+index aaeae88..10f3663 100644
--- a/kernel/locking/lockdep.c
+++ b/kernel/locking/lockdep.c
-@@ -599,6 +599,10 @@ static int static_obj(void *obj)
+@@ -613,6 +613,10 @@ static int static_obj(void *obj)
end = (unsigned long) &_end,
addr = (unsigned long) obj;
/*
* static variable?
*/
-@@ -743,6 +747,7 @@ register_lock_class(struct lockdep_map *lock, unsigned int subclass, int force)
+@@ -757,6 +761,7 @@ register_lock_class(struct lockdep_map *lock, unsigned int subclass, int force)
if (!static_obj(lock->key)) {
debug_locks_off();
printk("INFO: trying to register non-static key.\n");
printk("the code is fine but needs lockdep annotation.\n");
printk("turning off the locking correctness validator.\n");
dump_stack();
-@@ -3088,7 +3093,7 @@ static int __lock_acquire(struct lockdep_map *lock, unsigned int subclass,
+@@ -3102,7 +3107,7 @@ static int __lock_acquire(struct lockdep_map *lock, unsigned int subclass,
if (!class)
return 0;
}
printk("\nacquire class [%p] %s", class->key, class->name);
if (class->name_version > 1)
diff --git a/kernel/locking/lockdep_proc.c b/kernel/locking/lockdep_proc.c
-index ef43ac4..2720dfa 100644
+index d83d798..ea3120d 100644
--- a/kernel/locking/lockdep_proc.c
+++ b/kernel/locking/lockdep_proc.c
@@ -65,7 +65,7 @@ static int l_show(struct seq_file *m, void *v)
print_name(m, class);
seq_puts(m, "\n");
}
-@@ -496,7 +496,7 @@ static void seq_stats(struct seq_file *m, struct lock_stat_data *data)
+@@ -508,7 +508,7 @@ static void seq_stats(struct seq_file *m, struct lock_stat_data *data)
if (!i)
seq_line(m, '-', 40-namelen, namelen);
(void *)class->contention_point[i]);
seq_printf(m, "%40s %14lu %29s %pS\n",
name, stats->contention_point[i],
-@@ -511,7 +511,7 @@ static void seq_stats(struct seq_file *m, struct lock_stat_data *data)
+@@ -523,7 +523,7 @@ static void seq_stats(struct seq_file *m, struct lock_stat_data *data)
if (!i)
seq_line(m, '-', 40-namelen, namelen);
(void *)class->contending_point[i]);
seq_printf(m, "%40s %14lu %29s %pS\n",
name, stats->contending_point[i],
-diff --git a/kernel/locking/mcs_spinlock.h b/kernel/locking/mcs_spinlock.h
-index d1fe2ba..180cd65e 100644
---- a/kernel/locking/mcs_spinlock.h
-+++ b/kernel/locking/mcs_spinlock.h
-@@ -78,7 +78,7 @@ void mcs_spin_lock(struct mcs_spinlock **lock, struct mcs_spinlock *node)
- */
- return;
- }
-- ACCESS_ONCE(prev->next) = node;
-+ ACCESS_ONCE_RW(prev->next) = node;
-
- /* Wait until the lock holder passes the lock down. */
- arch_mcs_spin_lock_contended(&node->locked);
diff --git a/kernel/locking/mutex-debug.c b/kernel/locking/mutex-debug.c
index 3ef3736..9c951fa 100644
--- a/kernel/locking/mutex-debug.c
extern void debug_mutex_init(struct mutex *lock, const char *name,
struct lock_class_key *key);
diff --git a/kernel/locking/mutex.c b/kernel/locking/mutex.c
-index 94674e5..de4966f 100644
+index 4cccea6..4382db9 100644
--- a/kernel/locking/mutex.c
+++ b/kernel/locking/mutex.c
-@@ -542,7 +542,7 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass,
+@@ -533,7 +533,7 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass,
goto skip_wait;
debug_mutex_lock_common(lock, &waiter);
/* add waiting tasks to the end of the waitqueue (FIFO): */
list_add_tail(&waiter.list, &lock->wait_list);
-@@ -589,7 +589,7 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass,
+@@ -580,7 +580,7 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass,
}
__set_task_state(task, TASK_RUNNING);
/* set it to 0 if there are no waiters left: */
if (likely(list_empty(&lock->wait_list)))
atomic_set(&lock->count, 0);
-@@ -610,7 +610,7 @@ skip_wait:
+@@ -601,7 +601,7 @@ skip_wait:
return 0;
err:
spin_unlock_mutex(&lock->wait_lock, flags);
debug_mutex_free_waiter(&waiter);
mutex_release(&lock->dep_map, 1, ip);
-diff --git a/kernel/locking/osq_lock.c b/kernel/locking/osq_lock.c
-index c112d00..1946ad9 100644
---- a/kernel/locking/osq_lock.c
-+++ b/kernel/locking/osq_lock.c
-@@ -98,7 +98,7 @@ bool osq_lock(struct optimistic_spin_queue *lock)
-
- prev = decode_cpu(old);
- node->prev = prev;
-- ACCESS_ONCE(prev->next) = node;
-+ ACCESS_ONCE_RW(prev->next) = node;
-
- /*
- * Normally @prev is untouchable after the above store; because at that
-@@ -170,8 +170,8 @@ unqueue:
- * it will wait in Step-A.
- */
-
-- ACCESS_ONCE(next->prev) = prev;
-- ACCESS_ONCE(prev->next) = next;
-+ ACCESS_ONCE_RW(next->prev) = prev;
-+ ACCESS_ONCE_RW(prev->next) = next;
-
- return false;
- }
-@@ -193,11 +193,11 @@ void osq_unlock(struct optimistic_spin_queue *lock)
- node = this_cpu_ptr(&osq_node);
- next = xchg(&node->next, NULL);
- if (next) {
-- ACCESS_ONCE(next->locked) = 1;
-+ ACCESS_ONCE_RW(next->locked) = 1;
- return;
- }
-
- next = osq_wait_next(lock, node, NULL);
- if (next)
-- ACCESS_ONCE(next->locked) = 1;
-+ ACCESS_ONCE_RW(next->locked) = 1;
- }
diff --git a/kernel/locking/rtmutex-tester.c b/kernel/locking/rtmutex-tester.c
index 1d96dd0..994ff19 100644
--- a/kernel/locking/rtmutex-tester.c
default:
diff --git a/kernel/module.c b/kernel/module.c
-index ec53f59..67d9655 100644
+index cfc9e84..a058697 100644
--- a/kernel/module.c
+++ b/kernel/module.c
@@ -59,6 +59,7 @@
#include <uapi/linux/module.h>
#include "module-internal.h"
+@@ -145,7 +146,7 @@ module_param(sig_enforce, bool_enable_only, 0644);
+ #endif /* CONFIG_MODULE_SIG */
+
+ /* Block module loading/unloading? */
+-int modules_disabled = 0;
++int modules_disabled __read_only = 0;
+ core_param(nomodule, modules_disabled, bint, 0);
+
+ /* Waiting for a module to finish initializing? */
@@ -155,7 +156,8 @@ static BLOCKING_NOTIFIER_HEAD(module_notify_list);
/* Bounds of module allocation, for speeding __module_address.
mutex_unlock(&module_mutex);
}
return ret;
-@@ -2665,7 +2728,15 @@ static struct module *setup_load_info(struct load_info *info, int flags)
+@@ -2666,7 +2729,15 @@ static struct module *setup_load_info(struct load_info *info, int flags)
mod = (void *)info->sechdrs[info->index.mod].sh_addr;
if (info->index.sym == 0) {
return ERR_PTR(-ENOEXEC);
}
-@@ -2681,8 +2752,14 @@ static struct module *setup_load_info(struct load_info *info, int flags)
+@@ -2682,8 +2753,14 @@ static struct module *setup_load_info(struct load_info *info, int flags)
static int check_modinfo(struct module *mod, struct load_info *info, int flags)
{
const char *modmagic = get_modinfo(info, "vermagic");
if (flags & MODULE_INIT_IGNORE_VERMAGIC)
modmagic = NULL;
-@@ -2707,7 +2784,7 @@ static int check_modinfo(struct module *mod, struct load_info *info, int flags)
+@@ -2708,7 +2785,7 @@ static int check_modinfo(struct module *mod, struct load_info *info, int flags)
}
/* Set up license info based on the info section */
return 0;
}
-@@ -2801,7 +2878,7 @@ static int move_module(struct module *mod, struct load_info *info)
+@@ -2805,7 +2882,7 @@ static int move_module(struct module *mod, struct load_info *info)
void *ptr;
/* Do the allocs. */
/*
* The pointer to this block is stored in the module structure
* which is inside the block. Just mark it as not being a
-@@ -2811,11 +2888,11 @@ static int move_module(struct module *mod, struct load_info *info)
+@@ -2815,11 +2892,11 @@ static int move_module(struct module *mod, struct load_info *info)
if (!ptr)
return -ENOMEM;
/*
* The pointer to this block is stored in the module structure
* which is inside the block. This block doesn't need to be
-@@ -2824,13 +2901,45 @@ static int move_module(struct module *mod, struct load_info *info)
+@@ -2828,13 +2905,45 @@ static int move_module(struct module *mod, struct load_info *info)
*/
kmemleak_ignore(ptr);
if (!ptr) {
/* Transfer each section which specifies SHF_ALLOC */
pr_debug("final section addresses:\n");
-@@ -2841,16 +2950,45 @@ static int move_module(struct module *mod, struct load_info *info)
+@@ -2845,16 +2954,45 @@ static int move_module(struct module *mod, struct load_info *info)
if (!(shdr->sh_flags & SHF_ALLOC))
continue;
pr_debug("\t0x%lx %s\n",
(long)shdr->sh_addr, info->secstrings + shdr->sh_name);
}
-@@ -2907,12 +3045,12 @@ static void flush_module_icache(const struct module *mod)
+@@ -2911,12 +3049,12 @@ static void flush_module_icache(const struct module *mod)
* Do it before processing of module parameters, so the module
* can provide parameter accessor functions of its own.
*/
set_fs(old_fs);
}
-@@ -2970,8 +3108,10 @@ static void module_deallocate(struct module *mod, struct load_info *info)
+@@ -2974,8 +3112,10 @@ static void module_deallocate(struct module *mod, struct load_info *info)
{
percpu_modfree(mod);
module_arch_freeing_init(mod);
}
int __weak module_finalize(const Elf_Ehdr *hdr,
-@@ -2984,7 +3124,9 @@ int __weak module_finalize(const Elf_Ehdr *hdr,
+@@ -2988,7 +3128,9 @@ int __weak module_finalize(const Elf_Ehdr *hdr,
static int post_relocation(struct module *mod, const struct load_info *info)
{
/* Sort exception table now relocations are done. */
/* Copy relocated percpu area over. */
percpu_modcopy(mod, (void *)info->sechdrs[info->index.pcpu].sh_addr,
-@@ -3032,13 +3174,15 @@ static void do_mod_ctors(struct module *mod)
+@@ -3036,13 +3178,15 @@ static void do_mod_ctors(struct module *mod)
/* For freeing module_init on success, in case kallsyms traversing */
struct mod_initfree {
struct rcu_head rcu;
kfree(m);
}
-@@ -3058,7 +3202,8 @@ static noinline int do_init_module(struct module *mod)
+@@ -3062,7 +3206,8 @@ static noinline int do_init_module(struct module *mod)
ret = -ENOMEM;
goto fail;
}
/*
* We want to find out whether @mod uses async during init. Clear
-@@ -3117,10 +3262,10 @@ static noinline int do_init_module(struct module *mod)
+@@ -3121,10 +3266,10 @@ static noinline int do_init_module(struct module *mod)
#endif
unset_module_init_ro_nx(mod);
module_arch_freeing_init(mod);
/*
* We want to free module_init, but be aware that kallsyms may be
* walking this with preempt disabled. In all the failure paths,
-@@ -3208,16 +3353,16 @@ static int complete_formation(struct module *mod, struct load_info *info)
+@@ -3212,16 +3357,16 @@ static int complete_formation(struct module *mod, struct load_info *info)
module_bug_finalize(info->hdr, info->sechdrs, mod);
/* Set RO and NX regions for core */
/* Mark state as coming so strong_try_module_get() ignores us,
* but kallsyms etc. can see us. */
-@@ -3301,9 +3446,38 @@ static int load_module(struct load_info *info, const char __user *uargs,
+@@ -3305,9 +3450,38 @@ static int load_module(struct load_info *info, const char __user *uargs,
if (err)
goto free_unload;
/* Fix up syms, so that st_value is a pointer to location. */
err = simplify_symbols(mod, info);
if (err < 0)
-@@ -3319,13 +3493,6 @@ static int load_module(struct load_info *info, const char __user *uargs,
+@@ -3323,13 +3497,6 @@ static int load_module(struct load_info *info, const char __user *uargs,
flush_module_icache(mod);
dynamic_debug_setup(info->debug, info->num_debug);
/* Ftrace init must be called in the MODULE_STATE_UNFORMED state */
-@@ -3373,11 +3540,10 @@ static int load_module(struct load_info *info, const char __user *uargs,
+@@ -3380,11 +3547,10 @@ static int load_module(struct load_info *info, const char __user *uargs,
ddebug_cleanup:
dynamic_debug_remove(info->debug);
synchronize_sched();
free_unload:
module_unload_free(mod);
unlink_mod:
-@@ -3390,7 +3556,8 @@ static int load_module(struct load_info *info, const char __user *uargs,
+@@ -3397,7 +3563,8 @@ static int load_module(struct load_info *info, const char __user *uargs,
mutex_unlock(&module_mutex);
free_module:
/* Free lock-classes; relies on the preceding sync_rcu() */
module_deallocate(mod, info);
free_copy:
-@@ -3467,10 +3634,16 @@ static const char *get_ksymbol(struct module *mod,
+@@ -3474,10 +3641,16 @@ static const char *get_ksymbol(struct module *mod,
unsigned long nextval;
/* At worse, next value is at end of module */
/* Scan for closest preceding symbol, and next symbol. (ELF
starts real symbols at 1). */
-@@ -3718,7 +3891,7 @@ static int m_show(struct seq_file *m, void *p)
+@@ -3725,7 +3898,7 @@ static int m_show(struct seq_file *m, void *p)
return 0;
seq_printf(m, "%s %u",
print_unload_info(m, mod);
/* Informative for users. */
-@@ -3727,7 +3900,7 @@ static int m_show(struct seq_file *m, void *p)
+@@ -3734,7 +3907,7 @@ static int m_show(struct seq_file *m, void *p)
mod->state == MODULE_STATE_COMING ? "Loading" :
"Live");
/* Used by oprofile and other similar tools. */
/* Taints info */
if (mod->taints)
-@@ -3763,7 +3936,17 @@ static const struct file_operations proc_modules_operations = {
+@@ -3770,7 +3943,17 @@ static const struct file_operations proc_modules_operations = {
static int __init proc_modules_init(void)
{
return 0;
}
module_init(proc_modules_init);
-@@ -3824,7 +4007,8 @@ struct module *__module_address(unsigned long addr)
+@@ -3831,7 +4014,8 @@ struct module *__module_address(unsigned long addr)
{
struct module *mod;
return NULL;
list_for_each_entry_rcu(mod, &modules, list) {
-@@ -3865,11 +4049,20 @@ bool is_module_text_address(unsigned long addr)
+@@ -3872,11 +4056,20 @@ bool is_module_text_address(unsigned long addr)
*/
struct module *__module_text_address(unsigned long addr)
{
}
EXPORT_SYMBOL(__stack_chk_fail);
diff --git a/kernel/pid.c b/kernel/pid.c
-index cd36a5e..11f185d 100644
+index 4fd07d5..02bce4f 100644
--- a/kernel/pid.c
+++ b/kernel/pid.c
@@ -33,6 +33,7 @@
int pid_max_min = RESERVED_PIDS + 1;
int pid_max_max = PID_MAX_LIMIT;
-@@ -450,10 +451,18 @@ EXPORT_SYMBOL(pid_task);
+@@ -451,10 +452,18 @@ EXPORT_SYMBOL(pid_task);
*/
struct task_struct *find_task_by_pid_ns(pid_t nr, struct pid_namespace *ns)
{
}
struct task_struct *find_task_by_vpid(pid_t vnr)
-@@ -461,6 +470,14 @@ struct task_struct *find_task_by_vpid(pid_t vnr)
+@@ -462,6 +471,14 @@ struct task_struct *find_task_by_vpid(pid_t vnr)
return find_task_by_pid_ns(vnr, task_active_pid_ns(current));
}
if (pm_wakeup_pending()) {
diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
-index bb0635b..9aff9f3 100644
+index c099b08..54bcfe8 100644
--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
+@@ -463,7 +463,7 @@ static int log_store(int facility, int level,
+ return msg->text_len;
+ }
+
+-int dmesg_restrict = IS_ENABLED(CONFIG_SECURITY_DMESG_RESTRICT);
++int dmesg_restrict __read_only = IS_ENABLED(CONFIG_SECURITY_DMESG_RESTRICT);
+
+ static int syslog_action_restricted(int type)
+ {
@@ -486,6 +486,11 @@ int check_syslog_permissions(int type, bool from_file)
if (from_file && type != SYSLOG_ACTION_OPEN)
return 0;
}
diff --git a/kernel/ptrace.c b/kernel/ptrace.c
-index 9a34bd8..38d90e5 100644
+index c8e0e05..2be5614 100644
--- a/kernel/ptrace.c
+++ b/kernel/ptrace.c
@@ -321,7 +321,7 @@ static int ptrace_attach(struct task_struct *task, long request,
flags |= PT_PTRACE_CAP;
rcu_read_unlock();
task->ptrace = flags;
-@@ -515,7 +515,7 @@ int ptrace_readdata(struct task_struct *tsk, unsigned long src, char __user *dst
+@@ -514,7 +514,7 @@ int ptrace_readdata(struct task_struct *tsk, unsigned long src, char __user *dst
break;
return -EIO;
}
return -EFAULT;
copied += retval;
src += retval;
-@@ -803,7 +803,7 @@ int ptrace_request(struct task_struct *child, long request,
+@@ -802,7 +802,7 @@ int ptrace_request(struct task_struct *child, long request,
bool seized = child->ptrace & PT_SEIZED;
int ret = -EIO;
siginfo_t siginfo, *si;
unsigned long __user *datalp = datavp;
unsigned long flags;
-@@ -1049,14 +1049,21 @@ SYSCALL_DEFINE4(ptrace, long, request, long, pid, unsigned long, addr,
+@@ -1048,14 +1048,21 @@ SYSCALL_DEFINE4(ptrace, long, request, long, pid, unsigned long, addr,
goto out;
}
goto out_put_task_struct;
}
-@@ -1084,7 +1091,7 @@ int generic_ptrace_peekdata(struct task_struct *tsk, unsigned long addr,
+@@ -1083,7 +1090,7 @@ int generic_ptrace_peekdata(struct task_struct *tsk, unsigned long addr,
copied = access_process_vm(tsk, addr, &tmp, sizeof(tmp), 0);
if (copied != sizeof(tmp))
return -EIO;
}
int generic_ptrace_pokedata(struct task_struct *tsk, unsigned long addr,
-@@ -1177,7 +1184,7 @@ int compat_ptrace_request(struct task_struct *child, compat_long_t request,
+@@ -1176,7 +1183,7 @@ int compat_ptrace_request(struct task_struct *child, compat_long_t request,
}
COMPAT_SYSCALL_DEFINE4(ptrace, compat_long_t, request, compat_long_t, pid,
{
struct task_struct *child;
long ret;
-@@ -1193,14 +1200,21 @@ COMPAT_SYSCALL_DEFINE4(ptrace, compat_long_t, request, compat_long_t, pid,
+@@ -1192,14 +1199,21 @@ COMPAT_SYSCALL_DEFINE4(ptrace, compat_long_t, request, compat_long_t, pid,
goto out;
}
}
diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c
-index 30d42aa..cac5d66 100644
+index 8dbe276..8e87dbd 100644
--- a/kernel/rcu/rcutorture.c
+++ b/kernel/rcu/rcutorture.c
@@ -134,12 +134,12 @@ static DEFINE_PER_CPU(long [RCU_TORTURE_PIPE_LEN + 1],
WARN_ON(signal_pending(current));
for (i = 0; i < cbflood_n_burst; i++) {
for (j = 0; j < cbflood_n_per_burst; j++) {
-@@ -915,7 +915,7 @@ rcu_torture_writer(void *arg)
+@@ -923,7 +923,7 @@ rcu_torture_writer(void *arg)
i = old_rp->rtort_pipe_count;
if (i > RCU_TORTURE_PIPE_LEN)
i = RCU_TORTURE_PIPE_LEN;
old_rp->rtort_pipe_count++;
switch (synctype[torture_random(&rand) % nsynctypes]) {
case RTWS_DEF_FREE:
-@@ -1036,7 +1036,7 @@ static void rcu_torture_timer(unsigned long unused)
+@@ -1061,7 +1061,7 @@ static void rcu_torture_timer(unsigned long unused)
return;
}
if (p->rtort_mbtest == 0)
spin_lock(&rand_lock);
cur_ops->read_delay(&rand);
n_rcu_torture_timers++;
-@@ -1111,7 +1111,7 @@ rcu_torture_reader(void *arg)
+@@ -1136,7 +1136,7 @@ rcu_torture_reader(void *arg)
continue;
}
if (p->rtort_mbtest == 0)
cur_ops->read_delay(&rand);
preempt_disable();
pipe_count = p->rtort_pipe_count;
-@@ -1180,11 +1180,11 @@ rcu_torture_stats_print(void)
+@@ -1205,11 +1205,11 @@ rcu_torture_stats_print(void)
rcu_torture_current,
rcu_torture_current_version,
list_empty(&rcu_torture_freelist),
n_rcu_torture_boost_ktrerror,
n_rcu_torture_boost_rterror);
pr_cont("rtbf: %ld rtb: %ld nt: %ld ",
-@@ -1196,17 +1196,17 @@ rcu_torture_stats_print(void)
+@@ -1221,17 +1221,17 @@ rcu_torture_stats_print(void)
n_barrier_successes,
n_barrier_attempts,
n_rcu_torture_barrier_error);
WARN_ON_ONCE(1);
}
pr_cont("Reader Pipe: ");
-@@ -1223,7 +1223,7 @@ rcu_torture_stats_print(void)
+@@ -1248,7 +1248,7 @@ rcu_torture_stats_print(void)
pr_alert("%s%s ", torture_type, TORTURE_FLAG);
pr_cont("Free-Block Circulation: ");
for (i = 0; i < RCU_TORTURE_PIPE_LEN + 1; i++) {
}
pr_cont("\n");
-@@ -1570,7 +1570,7 @@ rcu_torture_cleanup(void)
+@@ -1595,7 +1595,7 @@ rcu_torture_cleanup(void)
rcu_torture_stats_print(); /* -After- the stats thread is stopped! */
rcu_torture_print_module_parms(cur_ops, "End of test: FAILURE");
else if (torture_onoff_failures())
rcu_torture_print_module_parms(cur_ops,
-@@ -1695,18 +1695,18 @@ rcu_torture_init(void)
+@@ -1720,18 +1720,18 @@ rcu_torture_init(void)
rcu_torture_current = NULL;
rcu_torture_current_version = 0;
for (i = 0; i < RCU_TORTURE_PIPE_LEN + 1; i++) {
per_cpu(rcu_torture_count, cpu)[i] = 0;
diff --git a/kernel/rcu/tiny.c b/kernel/rcu/tiny.c
-index cc9ceca..ce075a6 100644
+index ec30868..89752ff 100644
--- a/kernel/rcu/tiny.c
+++ b/kernel/rcu/tiny.c
@@ -42,7 +42,7 @@
static void __call_rcu(struct rcu_head *head,
void (*func)(struct rcu_head *rcu),
struct rcu_ctrlblk *rcp);
-@@ -210,7 +210,7 @@ static void __rcu_process_callbacks(struct rcu_ctrlblk *rcp)
+@@ -203,7 +203,7 @@ static void __rcu_process_callbacks(struct rcu_ctrlblk *rcp)
false));
}
static void check_cpu_stalls(void)
diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
-index 48d640c..9401d30 100644
+index 8cf7304..953f8ad 100644
--- a/kernel/rcu/tree.c
+++ b/kernel/rcu/tree.c
-@@ -268,7 +268,7 @@ static void rcu_momentary_dyntick_idle(void)
+@@ -290,7 +290,7 @@ static void rcu_momentary_dyntick_idle(void)
*/
rdtp = this_cpu_ptr(&rcu_dynticks);
smp_mb__before_atomic(); /* Earlier stuff before QS. */
smp_mb__after_atomic(); /* Later stuff after QS. */
break;
}
-@@ -580,9 +580,9 @@ static void rcu_eqs_enter_common(long long oldval, bool user)
+@@ -602,9 +602,9 @@ static void rcu_eqs_enter_common(long long oldval, bool user)
rcu_prepare_for_idle();
/* CPUs seeing atomic_inc() must see prior RCU read-side crit sects */
smp_mb__before_atomic(); /* See above. */
rcu_dynticks_task_enter();
/*
-@@ -703,10 +703,10 @@ static void rcu_eqs_exit_common(long long oldval, int user)
+@@ -725,10 +725,10 @@ static void rcu_eqs_exit_common(long long oldval, int user)
rcu_dynticks_task_exit();
smp_mb__before_atomic(); /* Force ordering w/previous sojourn. */
rcu_cleanup_after_idle();
trace_rcu_dyntick(TPS("End"), oldval, rdtp->dynticks_nesting);
if (!user && !is_idle_task(current)) {
-@@ -840,12 +840,12 @@ void rcu_nmi_enter(void)
+@@ -862,12 +862,12 @@ void rcu_nmi_enter(void)
* to be in the outermost NMI handler that interrupted an RCU-idle
* period (observation due to Andy Lutomirski).
*/
incby = 1;
}
rdtp->dynticks_nmi_nesting += incby;
-@@ -870,7 +870,7 @@ void rcu_nmi_exit(void)
+@@ -892,7 +892,7 @@ void rcu_nmi_exit(void)
* to us!)
*/
WARN_ON_ONCE(rdtp->dynticks_nmi_nesting <= 0);
/*
* If the nesting level is not 1, the CPU wasn't RCU-idle, so
-@@ -885,9 +885,9 @@ void rcu_nmi_exit(void)
+@@ -907,9 +907,9 @@ void rcu_nmi_exit(void)
rdtp->dynticks_nmi_nesting = 0;
/* CPUs seeing atomic_inc() must see prior RCU read-side crit sects */
smp_mb__before_atomic(); /* See above. */
}
/**
-@@ -900,7 +900,7 @@ void rcu_nmi_exit(void)
+@@ -922,7 +922,7 @@ void rcu_nmi_exit(void)
*/
bool notrace __rcu_is_watching(void)
{
}
/**
-@@ -983,7 +983,7 @@ static int rcu_is_cpu_rrupt_from_idle(void)
+@@ -1005,7 +1005,7 @@ static int rcu_is_cpu_rrupt_from_idle(void)
static int dyntick_save_progress_counter(struct rcu_data *rdp,
bool *isidle, unsigned long *maxj)
{
rcu_sysidle_check_cpu(rdp, isidle, maxj);
if ((rdp->dynticks_snap & 0x1) == 0) {
trace_rcu_fqs(rdp->rsp->name, rdp->gpnum, rdp->cpu, TPS("dti"));
-@@ -991,7 +991,7 @@ static int dyntick_save_progress_counter(struct rcu_data *rdp,
+@@ -1013,7 +1013,7 @@ static int dyntick_save_progress_counter(struct rcu_data *rdp,
} else {
if (ULONG_CMP_LT(ACCESS_ONCE(rdp->gpnum) + ULONG_MAX / 4,
rdp->mynode->gpnum))
return 0;
}
}
-@@ -1009,7 +1009,7 @@ static int rcu_implicit_dynticks_qs(struct rcu_data *rdp,
+@@ -1031,7 +1031,7 @@ static int rcu_implicit_dynticks_qs(struct rcu_data *rdp,
int *rcrmp;
unsigned int snap;
snap = (unsigned int)rdp->dynticks_snap;
/*
-@@ -1072,10 +1072,10 @@ static int rcu_implicit_dynticks_qs(struct rcu_data *rdp,
+@@ -1094,10 +1094,10 @@ static int rcu_implicit_dynticks_qs(struct rcu_data *rdp,
rdp->rsp->gp_start + jiffies_till_sched_qs) ||
ULONG_CMP_GE(jiffies, rdp->rsp->jiffies_resched)) {
if (!(ACCESS_ONCE(*rcrmp) & rdp->rsp->flavor_mask)) {
ACCESS_ONCE(*rcrmp) + rdp->rsp->flavor_mask;
resched_cpu(rdp->cpu); /* Force CPU into scheduler. */
rdp->rsp->jiffies_resched += 5; /* Enable beating. */
-@@ -1097,7 +1097,7 @@ static void record_gp_stall_check_time(struct rcu_state *rsp)
+@@ -1119,7 +1119,7 @@ static void record_gp_stall_check_time(struct rcu_state *rsp)
rsp->gp_start = j;
smp_wmb(); /* Record start time before stall time. */
j1 = rcu_jiffies_till_stall_check();
rsp->jiffies_resched = j + j1 / 2;
rsp->n_force_qs_gpstart = ACCESS_ONCE(rsp->n_force_qs);
}
-@@ -1156,7 +1156,7 @@ static void print_other_cpu_stall(struct rcu_state *rsp, unsigned long gpnum)
+@@ -1178,7 +1178,7 @@ static void print_other_cpu_stall(struct rcu_state *rsp, unsigned long gpnum)
raw_spin_unlock_irqrestore(&rnp->lock, flags);
return;
}
raw_spin_unlock_irqrestore(&rnp->lock, flags);
/*
-@@ -1240,7 +1240,7 @@ static void print_cpu_stall(struct rcu_state *rsp)
+@@ -1263,7 +1263,7 @@ static void print_cpu_stall(struct rcu_state *rsp)
raw_spin_lock_irqsave(&rnp->lock, flags);
if (ULONG_CMP_GE(jiffies, ACCESS_ONCE(rsp->jiffies_stall)))
3 * rcu_jiffies_till_stall_check() + 3;
raw_spin_unlock_irqrestore(&rnp->lock, flags);
-@@ -1324,7 +1324,7 @@ void rcu_cpu_stall_reset(void)
+@@ -1347,7 +1347,7 @@ void rcu_cpu_stall_reset(void)
struct rcu_state *rsp;
for_each_rcu_flavor(rsp)
}
/*
-@@ -1671,7 +1671,7 @@ static bool __note_gp_changes(struct rcu_state *rsp, struct rcu_node *rnp,
+@@ -1704,7 +1704,7 @@ static bool __note_gp_changes(struct rcu_state *rsp, struct rcu_node *rnp,
rdp->rcu_qs_ctr_snap = __this_cpu_read(rcu_qs_ctr);
rdp->qs_pending = !!(rnp->qsmask & rdp->grpmask);
zero_cpu_stall_ticks(rdp);
}
return ret;
}
-@@ -1706,7 +1706,7 @@ static int rcu_gp_init(struct rcu_state *rsp)
+@@ -1740,7 +1740,7 @@ static int rcu_gp_init(struct rcu_state *rsp)
struct rcu_data *rdp;
struct rcu_node *rnp = rcu_get_root(rsp);
- ACCESS_ONCE(rsp->gp_activity) = jiffies;
+ ACCESS_ONCE_RW(rsp->gp_activity) = jiffies;
- rcu_bind_gp_kthread();
raw_spin_lock_irq(&rnp->lock);
smp_mb__after_unlock_lock();
-@@ -1715,7 +1715,7 @@ static int rcu_gp_init(struct rcu_state *rsp)
+ if (!ACCESS_ONCE(rsp->gp_flags)) {
+@@ -1748,7 +1748,7 @@ static int rcu_gp_init(struct rcu_state *rsp)
raw_spin_unlock_irq(&rnp->lock);
return 0;
}
if (WARN_ON_ONCE(rcu_gp_in_progress(rsp))) {
/*
-@@ -1756,9 +1756,9 @@ static int rcu_gp_init(struct rcu_state *rsp)
+@@ -1834,9 +1834,9 @@ static int rcu_gp_init(struct rcu_state *rsp)
rdp = this_cpu_ptr(rsp->rda);
rcu_preempt_check_blocked_tasks(rnp);
rnp->qsmask = rnp->qsmaskinit;
- ACCESS_ONCE(rnp->gpnum) = rsp->gpnum;
+ ACCESS_ONCE_RW(rnp->gpnum) = rsp->gpnum;
- WARN_ON_ONCE(rnp->completed != rsp->completed);
-- ACCESS_ONCE(rnp->completed) = rsp->completed;
-+ ACCESS_ONCE_RW(rnp->completed) = rsp->completed;
+ if (WARN_ON_ONCE(rnp->completed != rsp->completed))
+- ACCESS_ONCE(rnp->completed) = rsp->completed;
++ ACCESS_ONCE_RW(rnp->completed) = rsp->completed;
if (rnp == rdp->mynode)
(void)__note_gp_changes(rsp, rnp, rdp);
rcu_preempt_boost_start_gp(rnp);
-@@ -1767,7 +1767,7 @@ static int rcu_gp_init(struct rcu_state *rsp)
+@@ -1845,7 +1845,7 @@ static int rcu_gp_init(struct rcu_state *rsp)
rnp->grphi, rnp->qsmask);
raw_spin_unlock_irq(&rnp->lock);
cond_resched_rcu_qs();
- ACCESS_ONCE(rsp->gp_activity) = jiffies;
+ ACCESS_ONCE_RW(rsp->gp_activity) = jiffies;
- }
-
- mutex_unlock(&rsp->onoff_mutex);
-@@ -1784,7 +1784,7 @@ static int rcu_gp_fqs(struct rcu_state *rsp, int fqs_state_in)
+ if (gp_init_delay > 0 &&
+ !(rsp->gpnum % (rcu_num_nodes * PER_RCU_NODE_PERIOD)))
+ schedule_timeout_uninterruptible(gp_init_delay);
+@@ -1864,7 +1864,7 @@ static int rcu_gp_fqs(struct rcu_state *rsp, int fqs_state_in)
unsigned long maxj;
struct rcu_node *rnp = rcu_get_root(rsp);
rsp->n_force_qs++;
if (fqs_state == RCU_SAVE_DYNTICK) {
/* Collect dyntick-idle snapshots. */
-@@ -1805,7 +1805,7 @@ static int rcu_gp_fqs(struct rcu_state *rsp, int fqs_state_in)
+@@ -1885,7 +1885,7 @@ static int rcu_gp_fqs(struct rcu_state *rsp, int fqs_state_in)
if (ACCESS_ONCE(rsp->gp_flags) & RCU_GP_FLAG_FQS) {
raw_spin_lock_irq(&rnp->lock);
smp_mb__after_unlock_lock();
ACCESS_ONCE(rsp->gp_flags) & ~RCU_GP_FLAG_FQS;
raw_spin_unlock_irq(&rnp->lock);
}
-@@ -1823,7 +1823,7 @@ static void rcu_gp_cleanup(struct rcu_state *rsp)
+@@ -1903,7 +1903,7 @@ static void rcu_gp_cleanup(struct rcu_state *rsp)
struct rcu_data *rdp;
struct rcu_node *rnp = rcu_get_root(rsp);
raw_spin_lock_irq(&rnp->lock);
smp_mb__after_unlock_lock();
gp_duration = jiffies - rsp->gp_start;
-@@ -1852,7 +1852,7 @@ static void rcu_gp_cleanup(struct rcu_state *rsp)
- rcu_for_each_node_breadth_first(rsp, rnp) {
- raw_spin_lock_irq(&rnp->lock);
+@@ -1934,7 +1934,7 @@ static void rcu_gp_cleanup(struct rcu_state *rsp)
smp_mb__after_unlock_lock();
+ WARN_ON_ONCE(rcu_preempt_blocked_readers_cgp(rnp));
+ WARN_ON_ONCE(rnp->qsmask);
- ACCESS_ONCE(rnp->completed) = rsp->gpnum;
+ ACCESS_ONCE_RW(rnp->completed) = rsp->gpnum;
rdp = this_cpu_ptr(rsp->rda);
if (rnp == rdp->mynode)
needgp = __note_gp_changes(rsp, rnp, rdp) || needgp;
-@@ -1860,7 +1860,7 @@ static void rcu_gp_cleanup(struct rcu_state *rsp)
+@@ -1942,7 +1942,7 @@ static void rcu_gp_cleanup(struct rcu_state *rsp)
nocb += rcu_future_gp_cleanup(rsp, rnp);
raw_spin_unlock_irq(&rnp->lock);
cond_resched_rcu_qs();
}
rnp = rcu_get_root(rsp);
raw_spin_lock_irq(&rnp->lock);
-@@ -1868,14 +1868,14 @@ static void rcu_gp_cleanup(struct rcu_state *rsp)
+@@ -1950,14 +1950,14 @@ static void rcu_gp_cleanup(struct rcu_state *rsp)
rcu_nocb_gp_set(rnp, nocb);
/* Declare grace period done. */
trace_rcu_grace_period(rsp->name,
ACCESS_ONCE(rsp->gpnum),
TPS("newreq"));
-@@ -1910,7 +1910,7 @@ static int __noreturn rcu_gp_kthread(void *arg)
+@@ -1993,7 +1993,7 @@ static int __noreturn rcu_gp_kthread(void *arg)
if (rcu_gp_init(rsp))
break;
cond_resched_rcu_qs();
WARN_ON(signal_pending(current));
trace_rcu_grace_period(rsp->name,
ACCESS_ONCE(rsp->gpnum),
-@@ -1954,11 +1954,11 @@ static int __noreturn rcu_gp_kthread(void *arg)
+@@ -2037,11 +2037,11 @@ static int __noreturn rcu_gp_kthread(void *arg)
ACCESS_ONCE(rsp->gpnum),
TPS("fqsend"));
cond_resched_rcu_qs();
WARN_ON(signal_pending(current));
trace_rcu_grace_period(rsp->name,
ACCESS_ONCE(rsp->gpnum),
-@@ -2003,7 +2003,7 @@ rcu_start_gp_advanced(struct rcu_state *rsp, struct rcu_node *rnp,
+@@ -2086,7 +2086,7 @@ rcu_start_gp_advanced(struct rcu_state *rsp, struct rcu_node *rnp,
*/
return false;
}
trace_rcu_grace_period(rsp->name, ACCESS_ONCE(rsp->gpnum),
TPS("newreq"));
-@@ -2228,7 +2228,7 @@ rcu_send_cbs_to_orphanage(int cpu, struct rcu_state *rsp,
+@@ -2359,7 +2359,7 @@ rcu_send_cbs_to_orphanage(int cpu, struct rcu_state *rsp,
rsp->qlen += rdp->qlen;
rdp->n_cbs_orphaned += rdp->qlen;
rdp->qlen_lazy = 0;
}
/*
-@@ -2490,7 +2490,7 @@ static void rcu_do_batch(struct rcu_state *rsp, struct rcu_data *rdp)
+@@ -2636,7 +2636,7 @@ static void rcu_do_batch(struct rcu_state *rsp, struct rcu_data *rdp)
}
smp_mb(); /* List handling before counting for rcu_barrier(). */
rdp->qlen_lazy -= count_lazy;
rdp->n_cbs_invoked += count;
/* Reinstate batch limit if we have worked down the excess. */
-@@ -2647,7 +2647,7 @@ static void force_quiescent_state(struct rcu_state *rsp)
+@@ -2814,7 +2814,7 @@ static void force_quiescent_state(struct rcu_state *rsp)
raw_spin_unlock_irqrestore(&rnp_old->lock, flags);
return; /* Someone beat us to it. */
}
ACCESS_ONCE(rsp->gp_flags) | RCU_GP_FLAG_FQS;
raw_spin_unlock_irqrestore(&rnp_old->lock, flags);
rcu_gp_kthread_wake(rsp);
-@@ -2693,7 +2693,7 @@ __rcu_process_callbacks(struct rcu_state *rsp)
+@@ -2860,7 +2860,7 @@ __rcu_process_callbacks(struct rcu_state *rsp)
/*
* Do RCU core processing for the current CPU.
*/
{
struct rcu_state *rsp;
-@@ -2805,7 +2805,7 @@ __call_rcu(struct rcu_head *head, void (*func)(struct rcu_head *rcu),
+@@ -2972,7 +2972,7 @@ __call_rcu(struct rcu_head *head, void (*func)(struct rcu_head *rcu),
WARN_ON_ONCE((unsigned long)head & 0x1); /* Misaligned rcu_head! */
if (debug_rcu_head_queue(head)) {
/* Probable double call_rcu(), so leak the callback. */
WARN_ONCE(1, "__call_rcu(): Leaked duplicate callback\n");
return;
}
-@@ -2833,7 +2833,7 @@ __call_rcu(struct rcu_head *head, void (*func)(struct rcu_head *rcu),
- local_irq_restore(flags);
- return;
+@@ -3011,7 +3011,7 @@ __call_rcu(struct rcu_head *head, void (*func)(struct rcu_head *rcu),
+ if (!likely(rdp->nxtlist))
+ init_default_callback_list(rdp);
}
- ACCESS_ONCE(rdp->qlen) = rdp->qlen + 1;
+ ACCESS_ONCE_RW(rdp->qlen) = rdp->qlen + 1;
if (lazy)
rdp->qlen_lazy++;
else
-@@ -3106,11 +3106,11 @@ void synchronize_sched_expedited(void)
+@@ -3284,11 +3284,11 @@ void synchronize_sched_expedited(void)
* counter wrap on a 32-bit system. Quite a few more CPUs would of
* course be required on a 64-bit system.
*/
return;
}
-@@ -3118,12 +3118,12 @@ void synchronize_sched_expedited(void)
+@@ -3296,12 +3296,12 @@ void synchronize_sched_expedited(void)
* Take a ticket. Note that atomic_inc_return() implies a
* full memory barrier.
*/
return;
}
WARN_ON_ONCE(cpu_is_offline(raw_smp_processor_id()));
-@@ -3136,7 +3136,7 @@ void synchronize_sched_expedited(void)
+@@ -3314,7 +3314,7 @@ void synchronize_sched_expedited(void)
for_each_cpu(cpu, cm) {
struct rcu_dynticks *rdtp = &per_cpu(rcu_dynticks, cpu);
cpumask_clear_cpu(cpu, cm);
}
if (cpumask_weight(cm) == 0)
-@@ -3151,14 +3151,14 @@ void synchronize_sched_expedited(void)
+@@ -3329,14 +3329,14 @@ void synchronize_sched_expedited(void)
synchronize_sched_expedited_cpu_stop,
NULL) == -EAGAIN) {
put_online_cpus();
free_cpumask_var(cm);
return;
}
-@@ -3168,7 +3168,7 @@ void synchronize_sched_expedited(void)
+@@ -3346,7 +3346,7 @@ void synchronize_sched_expedited(void)
udelay(trycount * num_online_cpus());
} else {
wait_rcu_gp(call_rcu_sched);
free_cpumask_var(cm);
return;
}
-@@ -3178,7 +3178,7 @@ void synchronize_sched_expedited(void)
+@@ -3356,7 +3356,7 @@ void synchronize_sched_expedited(void)
if (ULONG_CMP_GE((ulong)s, (ulong)firstsnap)) {
/* ensure test happens before caller kfree */
smp_mb__before_atomic(); /* ^^^ */
free_cpumask_var(cm);
return;
}
-@@ -3193,14 +3193,14 @@ void synchronize_sched_expedited(void)
+@@ -3371,14 +3371,14 @@ void synchronize_sched_expedited(void)
if (!try_get_online_cpus()) {
/* CPU hotplug operation in flight, use normal GP. */
wait_rcu_gp(call_rcu_sched);
all_cpus_idle:
free_cpumask_var(cm);
-@@ -3212,16 +3212,16 @@ all_cpus_idle:
+@@ -3390,16 +3390,16 @@ all_cpus_idle:
* than we did already did their update.
*/
do {
put_online_cpus();
}
-@@ -3431,7 +3431,7 @@ static void _rcu_barrier(struct rcu_state *rsp)
+@@ -3609,7 +3609,7 @@ static void _rcu_barrier(struct rcu_state *rsp)
* ACCESS_ONCE() to prevent the compiler from speculating
* the increment to precede the early-exit check.
*/
WARN_ON_ONCE((rsp->n_barrier_done & 0x1) != 1);
_rcu_barrier_trace(rsp, "Inc1", -1, rsp->n_barrier_done);
smp_mb(); /* Order ->n_barrier_done increment with below mechanism. */
-@@ -3487,7 +3487,7 @@ static void _rcu_barrier(struct rcu_state *rsp)
+@@ -3665,7 +3665,7 @@ static void _rcu_barrier(struct rcu_state *rsp)
/* Increment ->n_barrier_done to prevent duplicate work. */
smp_mb(); /* Keep increment after above mechanism. */
WARN_ON_ONCE((rsp->n_barrier_done & 0x1) != 0);
_rcu_barrier_trace(rsp, "Inc2", -1, rsp->n_barrier_done);
smp_mb(); /* Keep increment before caller's subsequent code. */
-@@ -3532,7 +3532,7 @@ rcu_boot_init_percpu_data(int cpu, struct rcu_state *rsp)
+@@ -3732,7 +3732,7 @@ rcu_boot_init_percpu_data(int cpu, struct rcu_state *rsp)
rdp->grpmask = 1UL << (cpu - rdp->mynode->grplo);
rdp->dynticks = &per_cpu(rcu_dynticks, cpu);
WARN_ON_ONCE(rdp->dynticks->dynticks_nesting != DYNTICK_TASK_EXIT_IDLE);
rdp->cpu = cpu;
rdp->rsp = rsp;
rcu_boot_init_nocb_percpu_data(rdp);
-@@ -3565,8 +3565,8 @@ rcu_init_percpu_data(int cpu, struct rcu_state *rsp)
- init_callback_list(rdp); /* Re-enable callbacks on this CPU. */
+@@ -3763,8 +3763,8 @@ rcu_init_percpu_data(int cpu, struct rcu_state *rsp)
+ init_callback_list(rdp); /* Re-enable callbacks on this CPU. */
rdp->dynticks->dynticks_nesting = DYNTICK_TASK_EXIT_IDLE;
rcu_sysidle_init_percpu_data(rdp->dynticks);
- atomic_set(&rdp->dynticks->dynticks,
+ (atomic_read_unchecked(&rdp->dynticks->dynticks) & ~0x1) + 1);
raw_spin_unlock(&rnp->lock); /* irqs remain disabled. */
- /* Add CPU to rcu_node bitmasks. */
+ /*
diff --git a/kernel/rcu/tree.h b/kernel/rcu/tree.h
-index 119de39..f07d31a 100644
+index a69d3da..51993c4 100644
--- a/kernel/rcu/tree.h
+++ b/kernel/rcu/tree.h
@@ -86,11 +86,11 @@ struct rcu_dynticks {
/* "Idle" excludes userspace execution. */
unsigned long dynticks_idle_jiffies;
/* End of last non-NMI non-idle period. */
-@@ -457,17 +457,17 @@ struct rcu_state {
+@@ -463,17 +463,17 @@ struct rcu_state {
/* _rcu_barrier(). */
/* End of fields guarded by barrier_mutex. */
unsigned long jiffies_force_qs; /* Time at which to invoke */
/* force_quiescent_state(). */
diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h
-index 0a571e9..fbfd611 100644
+index 8c0ec0f..99d52c5 100644
--- a/kernel/rcu/tree_plugin.h
+++ b/kernel/rcu/tree_plugin.h
-@@ -619,7 +619,7 @@ static int rcu_preempted_readers_exp(struct rcu_node *rnp)
+@@ -570,7 +570,7 @@ static int rcu_preempted_readers_exp(struct rcu_node *rnp)
static int sync_rcu_preempt_exp_done(struct rcu_node *rnp)
{
return !rcu_preempted_readers_exp(rnp) &&
sync_rcu_preempt_exp_count + 1;
unlock_mb_ret:
mutex_unlock(&sync_rcu_preempt_exp_mutex);
-@@ -1290,7 +1290,7 @@ static void rcu_boost_kthread_setaffinity(struct rcu_node *rnp, int outgoingcpu)
+@@ -1286,7 +1286,7 @@ static void rcu_boost_kthread_setaffinity(struct rcu_node *rnp, int outgoingcpu)
free_cpumask_var(cm);
}
.store = &rcu_cpu_kthread_task,
.thread_should_run = rcu_cpu_kthread_should_run,
.thread_fn = rcu_cpu_kthread,
-@@ -1761,7 +1761,7 @@ static void print_cpu_stall_info(struct rcu_state *rsp, int cpu)
+@@ -1757,7 +1757,7 @@ static void print_cpu_stall_info(struct rcu_state *rsp, int cpu)
print_cpu_stall_fast_no_hz(fast_no_hz, cpu);
pr_err("\t%d: (%lu %s) idle=%03x/%llx/%d softirq=%u/%u fqs=%ld %s\n",
cpu, ticks_value, ticks_title,
rdtp->dynticks_nesting, rdtp->dynticks_nmi_nesting,
rdp->softirq_snap, kstat_softirqs_cpu(RCU_SOFTIRQ, cpu),
ACCESS_ONCE(rsp->n_force_qs) - rsp->n_force_qs_gpstart,
-@@ -1906,7 +1906,7 @@ static void wake_nocb_leader(struct rcu_data *rdp, bool force)
+@@ -1902,7 +1902,7 @@ static void wake_nocb_leader(struct rcu_data *rdp, bool force)
return;
if (ACCESS_ONCE(rdp_leader->nocb_leader_sleep) || force) {
/* Prior smp_mb__after_atomic() orders against prior enqueue. */
wake_up(&rdp_leader->nocb_wq);
}
}
-@@ -1978,7 +1978,7 @@ static void __call_rcu_nocb_enqueue(struct rcu_data *rdp,
+@@ -1975,7 +1975,7 @@ static void __call_rcu_nocb_enqueue(struct rcu_data *rdp,
atomic_long_add(rhcount, &rdp->nocb_q_count);
/* rcu_barrier() relies on ->nocb_q_count add before xchg. */
old_rhpp = xchg(&rdp->nocb_tail, rhtp);
atomic_long_add(rhcount_lazy, &rdp->nocb_q_count_lazy);
smp_mb__after_atomic(); /* Store *old_rhpp before _wake test. */
-@@ -2167,7 +2167,7 @@ wait_again:
+@@ -2164,7 +2164,7 @@ wait_again:
continue; /* No CBs here, try next follower. */
/* Move callbacks to wait-for-GP list, which is empty. */
rdp->nocb_gp_tail = xchg(&rdp->nocb_tail, &rdp->nocb_head);
gotcbs = true;
}
-@@ -2288,7 +2288,7 @@ static int rcu_nocb_kthread(void *arg)
+@@ -2285,7 +2285,7 @@ static int rcu_nocb_kthread(void *arg)
list = ACCESS_ONCE(rdp->nocb_follower_head);
BUG_ON(!list);
trace_rcu_nocb_wake(rdp->rsp->name, rdp->cpu, "WokeNonEmpty");
tail = xchg(&rdp->nocb_follower_tail, &rdp->nocb_follower_head);
/* Each pass through the following loop invokes a callback. */
-@@ -2338,7 +2338,7 @@ static void do_nocb_deferred_wakeup(struct rcu_data *rdp)
+@@ -2335,7 +2335,7 @@ static void do_nocb_deferred_wakeup(struct rcu_data *rdp)
if (!rcu_nocb_need_deferred_wakeup(rdp))
return;
ndw = ACCESS_ONCE(rdp->nocb_defer_wakeup);
wake_nocb_leader(rdp, ndw == RCU_NOGP_WAKE_FORCE);
trace_rcu_nocb_wake(rdp->rsp->name, rdp->cpu, TPS("DeferredWake"));
}
-@@ -2461,7 +2461,7 @@ static void rcu_spawn_one_nocb_kthread(struct rcu_state *rsp, int cpu)
+@@ -2448,7 +2448,7 @@ static void rcu_spawn_one_nocb_kthread(struct rcu_state *rsp, int cpu)
t = kthread_run(rcu_nocb_kthread, rdp_spawn,
"rcuo%c/%d", rsp->abbr, cpu);
BUG_ON(IS_ERR(t));
}
/*
-@@ -2666,11 +2666,11 @@ static void rcu_sysidle_enter(int irq)
+@@ -2663,11 +2663,11 @@ static void rcu_sysidle_enter(int irq)
/* Record start of fully idle period. */
j = jiffies;
}
/*
-@@ -2741,9 +2741,9 @@ static void rcu_sysidle_exit(int irq)
+@@ -2738,9 +2738,9 @@ static void rcu_sysidle_exit(int irq)
/* Record end of idle period. */
smp_mb__before_atomic();
/*
* If we are the timekeeping CPU, we are permitted to be non-idle
-@@ -2788,7 +2788,7 @@ static void rcu_sysidle_check_cpu(struct rcu_data *rdp, bool *isidle,
- WARN_ON_ONCE(smp_processor_id() != tick_do_timer_cpu);
+@@ -2786,7 +2786,7 @@ static void rcu_sysidle_check_cpu(struct rcu_data *rdp, bool *isidle,
+ WARN_ON_ONCE(smp_processor_id() != tick_do_timer_cpu);
/* Pick up current idle and NMI-nesting counter and check. */
- cur = atomic_read(&rdtp->dynticks_idle);
if (cur & 0x1) {
*isidle = false; /* We are not idle! */
return;
-@@ -2837,7 +2837,7 @@ static void rcu_sysidle(unsigned long j)
+@@ -2835,7 +2835,7 @@ static void rcu_sysidle(unsigned long j)
case RCU_SYSIDLE_NOT:
/* First time all are idle, so note a short idle period. */
break;
case RCU_SYSIDLE_SHORT:
-@@ -2875,7 +2875,7 @@ static void rcu_sysidle_cancel(void)
+@@ -2873,7 +2873,7 @@ static void rcu_sysidle_cancel(void)
{
smp_mb();
if (full_sysidle_state > RCU_SYSIDLE_SHORT)
}
/*
-@@ -2927,7 +2927,7 @@ static void rcu_sysidle_cb(struct rcu_head *rhp)
+@@ -2925,7 +2925,7 @@ static void rcu_sysidle_cb(struct rcu_head *rhp)
smp_mb(); /* grace period precedes setting inuse. */
rshp = container_of(rhp, struct rcu_sysidle_head, rh);
}
/*
-@@ -3080,7 +3080,7 @@ static void rcu_bind_gp_kthread(void)
+@@ -3077,7 +3077,7 @@ static void rcu_bind_gp_kthread(void)
static void rcu_dynticks_task_enter(void)
{
#if defined(CONFIG_TASKS_RCU) && defined(CONFIG_NO_HZ_FULL)
#endif /* #if defined(CONFIG_TASKS_RCU) && defined(CONFIG_NO_HZ_FULL) */
}
-@@ -3088,6 +3088,6 @@ static void rcu_dynticks_task_enter(void)
+@@ -3085,6 +3085,6 @@ static void rcu_dynticks_task_enter(void)
static void rcu_dynticks_task_exit(void)
{
#if defined(CONFIG_TASKS_RCU) && defined(CONFIG_NO_HZ_FULL)
#endif /* #if defined(CONFIG_TASKS_RCU) && defined(CONFIG_NO_HZ_FULL) */
}
diff --git a/kernel/rcu/tree_trace.c b/kernel/rcu/tree_trace.c
-index fbb6240..f6c5097 100644
+index f92361e..0052f88 100644
--- a/kernel/rcu/tree_trace.c
+++ b/kernel/rcu/tree_trace.c
@@ -125,7 +125,7 @@ static void print_one_rcu_data(struct seq_file *m, struct rcu_data *rdp)
}
diff --git a/kernel/rcu/update.c b/kernel/rcu/update.c
-index e0d31a3..f4dafe3 100644
+index 1f13335..77ebb7f 100644
--- a/kernel/rcu/update.c
+++ b/kernel/rcu/update.c
-@@ -342,10 +342,10 @@ int rcu_jiffies_till_stall_check(void)
+@@ -396,10 +396,10 @@ int rcu_jiffies_till_stall_check(void)
* for CONFIG_RCU_CPU_STALL_TIMEOUT.
*/
if (till_stall_check < 3) {
till_stall_check = 300;
}
return till_stall_check * HZ + RCU_STALL_DELAY_DELTA;
-@@ -501,7 +501,7 @@ static void check_holdout_task(struct task_struct *t,
+@@ -555,7 +555,7 @@ static void check_holdout_task(struct task_struct *t,
!ACCESS_ONCE(t->on_rq) ||
(IS_ENABLED(CONFIG_NO_HZ_FULL) &&
!is_idle_task(t) && t->rcu_tasks_idle_cpu >= 0)) {
list_del_init(&t->rcu_tasks_holdout_list);
put_task_struct(t);
return;
-@@ -589,7 +589,7 @@ static int __noreturn rcu_tasks_kthread(void *arg)
+@@ -643,7 +643,7 @@ static int __noreturn rcu_tasks_kthread(void *arg)
!is_idle_task(t)) {
get_task_struct(t);
t->rcu_tasks_nvcsw = ACCESS_ONCE(t->nvcsw);
list_add(&t->rcu_tasks_holdout_list,
&rcu_tasks_holdouts);
}
-@@ -686,7 +686,7 @@ static void rcu_spawn_tasks_kthread(void)
+@@ -740,7 +740,7 @@ static void rcu_spawn_tasks_kthread(void)
t = kthread_run(rcu_tasks_kthread, NULL, "rcu_tasks_kthread");
BUG_ON(IS_ERR(t));
smp_mb(); /* Ensure others see full kthread. */
}
diff --git a/kernel/resource.c b/kernel/resource.c
-index 19f2357..ebe7f35 100644
+index 90552aa..8c02098 100644
--- a/kernel/resource.c
+++ b/kernel/resource.c
@@ -162,8 +162,18 @@ static const struct file_operations proc_iomem_operations = {
unsigned long timeout)
{
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
-index 3d5f6f6..a94298f 100644
+index 1236732..df281d6 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
-@@ -1862,7 +1862,7 @@ void set_numabalancing_state(bool enabled)
+@@ -1867,7 +1867,7 @@ void set_numabalancing_state(bool enabled)
int sysctl_numa_balancing(struct ctl_table *table, int write,
void __user *buffer, size_t *lenp, loff_t *ppos)
{
int err;
int state = numabalancing_enabled;
-@@ -2312,8 +2312,10 @@ context_switch(struct rq *rq, struct task_struct *prev,
+@@ -2317,8 +2317,10 @@ context_switch(struct rq *rq, struct task_struct *prev,
next->active_mm = oldmm;
atomic_inc(&oldmm->mm_count);
enter_lazy_tlb(oldmm, next);
if (!prev->mm) {
prev->active_mm = NULL;
-@@ -3124,6 +3126,8 @@ int can_nice(const struct task_struct *p, const int nice)
+@@ -3129,6 +3131,8 @@ int can_nice(const struct task_struct *p, const int nice)
/* convert nice value [19,-20] to rlimit style value [1,40] */
int nice_rlim = nice_to_rlimit(nice);
return (nice_rlim <= task_rlimit(p, RLIMIT_NICE) ||
capable(CAP_SYS_NICE));
}
-@@ -3150,7 +3154,8 @@ SYSCALL_DEFINE1(nice, int, increment)
+@@ -3155,7 +3159,8 @@ SYSCALL_DEFINE1(nice, int, increment)
nice = task_nice(current) + increment;
nice = clamp_val(nice, MIN_NICE, MAX_NICE);
return -EPERM;
retval = security_task_setnice(current, nice);
-@@ -3459,6 +3464,7 @@ recheck:
+@@ -3467,6 +3472,7 @@ recheck:
if (policy != p->policy && !rlim_rtprio)
return -EPERM;
/* can't increase priority */
if (attr->sched_priority > p->rt_priority &&
attr->sched_priority > rlim_rtprio)
-@@ -4946,6 +4952,7 @@ void idle_task_exit(void)
+@@ -4950,6 +4956,7 @@ void idle_task_exit(void)
if (mm != &init_mm) {
switch_mm(mm, &init_mm, current);
finish_arch_post_lock_switch();
}
mmdrop(mm);
-@@ -5041,7 +5048,7 @@ static void migrate_tasks(unsigned int dead_cpu)
+@@ -5045,7 +5052,7 @@ static void migrate_tasks(unsigned int dead_cpu)
#if defined(CONFIG_SCHED_DEBUG) && defined(CONFIG_SYSCTL)
{
.procname = "sched_domain",
.mode = 0555,
-@@ -5058,17 +5065,17 @@ static struct ctl_table sd_ctl_root[] = {
+@@ -5062,17 +5069,17 @@ static struct ctl_table sd_ctl_root[] = {
{}
};
/*
* In the intermediate directories, both the child directory and
-@@ -5076,22 +5083,25 @@ static void sd_free_ctl_entry(struct ctl_table **tablep)
+@@ -5080,22 +5087,25 @@ static void sd_free_ctl_entry(struct ctl_table **tablep)
* will always be set. In the lowest directory the names are
* static strings and all have proc handlers.
*/
const char *procname, void *data, int maxlen,
umode_t mode, proc_handler *proc_handler,
bool load_idx)
-@@ -5111,7 +5121,7 @@ set_table_entry(struct ctl_table *entry,
+@@ -5115,7 +5125,7 @@ set_table_entry(struct ctl_table *entry,
static struct ctl_table *
sd_alloc_ctl_domain_table(struct sched_domain *sd)
{
if (table == NULL)
return NULL;
-@@ -5149,9 +5159,9 @@ sd_alloc_ctl_domain_table(struct sched_domain *sd)
+@@ -5153,9 +5163,9 @@ sd_alloc_ctl_domain_table(struct sched_domain *sd)
return table;
}
struct sched_domain *sd;
int domain_num = 0, i;
char buf[32];
-@@ -5178,11 +5188,13 @@ static struct ctl_table_header *sd_sysctl_header;
+@@ -5182,11 +5192,13 @@ static struct ctl_table_header *sd_sysctl_header;
static void register_sched_domain_sysctl(void)
{
int i, cpu_num = num_possible_cpus();
if (entry == NULL)
return;
-@@ -5205,8 +5217,12 @@ static void unregister_sched_domain_sysctl(void)
+@@ -5209,8 +5221,12 @@ static void unregister_sched_domain_sysctl(void)
if (sd_sysctl_header)
unregister_sysctl_table(sd_sysctl_header);
sd_sysctl_header = NULL;
#else
static void register_sched_domain_sysctl(void)
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
-index 241213b..6a64c91 100644
+index c2980e8..4737a6d 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
-@@ -2092,7 +2092,7 @@ void task_numa_fault(int last_cpupid, int mem_node, int pages, int flags)
+@@ -2107,7 +2107,7 @@ void task_numa_fault(int last_cpupid, int mem_node, int pages, int flags)
static void reset_ptenuma_scan(struct task_struct *p)
{
p->mm->numa_scan_offset = 0;
}
-@@ -7656,7 +7656,7 @@ static void nohz_idle_balance(struct rq *this_rq, enum cpu_idle_type idle) { }
+@@ -7753,7 +7753,7 @@ static void nohz_idle_balance(struct rq *this_rq, enum cpu_idle_type idle) { }
* run_rebalance_domains is triggered when needed from the scheduler tick.
* Also triggered for nohz idle balancing (with nohz_balancing_kick set).
*/
struct rq *this_rq = this_rq();
enum cpu_idle_type idle = this_rq->idle_balance ?
diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h
-index dc0f435..ae2e085 100644
+index e0e1299..e1e896b 100644
--- a/kernel/sched/sched.h
+++ b/kernel/sched/sched.h
-@@ -1200,7 +1200,7 @@ struct sched_class {
+@@ -1219,7 +1219,7 @@ struct sched_class {
#ifdef CONFIG_FAIR_GROUP_SCHED
void (*task_move_group) (struct task_struct *p, int on_rq);
#endif
static inline void put_prev_task(struct rq *rq, struct task_struct *prev)
{
diff --git a/kernel/signal.c b/kernel/signal.c
-index a390499..ebe9a21 100644
+index d51c5dd..065c4c8 100644
--- a/kernel/signal.c
+++ b/kernel/signal.c
@@ -53,12 +53,12 @@ static struct kmem_cache *sigqueue_cachep;
if (p && (tgid <= 0 || task_tgid_vnr(p) == tgid)) {
error = check_kill_permission(sig, info, p);
/*
-@@ -3248,8 +3279,8 @@ COMPAT_SYSCALL_DEFINE2(sigaltstack,
+@@ -3244,8 +3275,8 @@ COMPAT_SYSCALL_DEFINE2(sigaltstack,
}
seg = get_fs();
set_fs(KERNEL_DS);
set_fs(seg);
if (ret >= 0 && uoss_ptr) {
diff --git a/kernel/smpboot.c b/kernel/smpboot.c
-index 40190f2..8861d40 100644
+index c697f73..4ef1c25 100644
--- a/kernel/smpboot.c
+++ b/kernel/smpboot.c
-@@ -290,7 +290,7 @@ int smpboot_register_percpu_thread(struct smp_hotplug_thread *plug_thread)
+@@ -291,7 +291,7 @@ int smpboot_register_percpu_thread(struct smp_hotplug_thread *plug_thread)
}
smpboot_unpark_thread(plug_thread, cpu);
}
out:
mutex_unlock(&smpboot_threads_lock);
put_online_cpus();
-@@ -308,7 +308,7 @@ void smpboot_unregister_percpu_thread(struct smp_hotplug_thread *plug_thread)
+@@ -309,7 +309,7 @@ void smpboot_unregister_percpu_thread(struct smp_hotplug_thread *plug_thread)
{
get_online_cpus();
mutex_lock(&smpboot_threads_lock);
.thread_should_run = ksoftirqd_should_run,
.thread_fn = run_ksoftirqd,
diff --git a/kernel/sys.c b/kernel/sys.c
-index a03d9cd..55dbe9c 100644
+index a4e372b..766810e 100644
--- a/kernel/sys.c
+++ b/kernel/sys.c
@@ -160,6 +160,12 @@ static int set_one_prio(struct task_struct *p, int niceval, int error)
no_nice = security_task_setnice(p, niceval);
if (no_nice) {
error = no_nice;
-@@ -365,6 +371,20 @@ SYSCALL_DEFINE2(setregid, gid_t, rgid, gid_t, egid)
+@@ -366,6 +372,20 @@ SYSCALL_DEFINE2(setregid, gid_t, rgid, gid_t, egid)
goto error;
}
if (rgid != (gid_t) -1 ||
(egid != (gid_t) -1 && !gid_eq(kegid, old->gid)))
new->sgid = new->egid;
-@@ -400,6 +420,10 @@ SYSCALL_DEFINE1(setgid, gid_t, gid)
+@@ -401,6 +421,10 @@ SYSCALL_DEFINE1(setgid, gid_t, gid)
old = current_cred();
retval = -EPERM;
if (ns_capable(old->user_ns, CAP_SETGID))
new->gid = new->egid = new->sgid = new->fsgid = kgid;
else if (gid_eq(kgid, old->gid) || gid_eq(kgid, old->sgid))
-@@ -417,7 +441,7 @@ error:
+@@ -418,7 +442,7 @@ error:
/*
* change the user struct in a credentials set to match the new UID
*/
{
struct user_struct *new_user;
-@@ -497,7 +521,18 @@ SYSCALL_DEFINE2(setreuid, uid_t, ruid, uid_t, euid)
+@@ -498,7 +522,18 @@ SYSCALL_DEFINE2(setreuid, uid_t, ruid, uid_t, euid)
goto error;
}
retval = set_user(new);
if (retval < 0)
goto error;
-@@ -547,6 +582,12 @@ SYSCALL_DEFINE1(setuid, uid_t, uid)
+@@ -548,6 +583,12 @@ SYSCALL_DEFINE1(setuid, uid_t, uid)
old = current_cred();
retval = -EPERM;
if (ns_capable(old->user_ns, CAP_SETUID)) {
new->suid = new->uid = kuid;
if (!uid_eq(kuid, old->uid)) {
-@@ -616,6 +657,9 @@ SYSCALL_DEFINE3(setresuid, uid_t, ruid, uid_t, euid, uid_t, suid)
+@@ -617,6 +658,9 @@ SYSCALL_DEFINE3(setresuid, uid_t, ruid, uid_t, euid, uid_t, suid)
goto error;
}
if (ruid != (uid_t) -1) {
new->uid = kruid;
if (!uid_eq(kruid, old->uid)) {
-@@ -700,6 +744,9 @@ SYSCALL_DEFINE3(setresgid, gid_t, rgid, gid_t, egid, gid_t, sgid)
+@@ -701,6 +745,9 @@ SYSCALL_DEFINE3(setresgid, gid_t, rgid, gid_t, egid, gid_t, sgid)
goto error;
}
if (rgid != (gid_t) -1)
new->gid = krgid;
if (egid != (gid_t) -1)
-@@ -764,12 +811,16 @@ SYSCALL_DEFINE1(setfsuid, uid_t, uid)
+@@ -765,12 +812,16 @@ SYSCALL_DEFINE1(setfsuid, uid_t, uid)
uid_eq(kuid, old->suid) || uid_eq(kuid, old->fsuid) ||
ns_capable(old->user_ns, CAP_SETUID)) {
if (!uid_eq(kuid, old->fsuid)) {
abort_creds(new);
return old_fsuid;
-@@ -802,12 +853,16 @@ SYSCALL_DEFINE1(setfsgid, gid_t, gid)
+@@ -803,12 +854,16 @@ SYSCALL_DEFINE1(setfsgid, gid_t, gid)
if (gid_eq(kgid, old->gid) || gid_eq(kgid, old->egid) ||
gid_eq(kgid, old->sgid) || gid_eq(kgid, old->fsgid) ||
ns_capable(old->user_ns, CAP_SETGID)) {
abort_creds(new);
return old_fsgid;
-@@ -1185,19 +1240,19 @@ SYSCALL_DEFINE1(olduname, struct oldold_utsname __user *, name)
+@@ -1187,19 +1242,19 @@ SYSCALL_DEFINE1(olduname, struct oldold_utsname __user *, name)
return -EFAULT;
down_read(&uts_sem);
__OLD_UTS_LEN);
error |= __put_user(0, name->machine + __OLD_UTS_LEN);
up_read(&uts_sem);
-@@ -1398,6 +1453,13 @@ int do_prlimit(struct task_struct *tsk, unsigned int resource,
+@@ -1400,6 +1455,13 @@ int do_prlimit(struct task_struct *tsk, unsigned int resource,
*/
new_rlim->rlim_cur = 1;
}
if (!retval) {
if (old_rlim)
diff --git a/kernel/sysctl.c b/kernel/sysctl.c
-index ce410bb..cd276f0 100644
+index c3eee4c..586e4a0 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -94,7 +94,6 @@
-
+ #endif
#if defined(CONFIG_SYSCTL)
-
/* External variables not in a header file. */
- extern int max_threads;
extern int suid_dumpable;
-@@ -115,19 +114,20 @@ extern int sysctl_nr_trim_pages;
+ #ifdef CONFIG_COREDUMP
+@@ -111,22 +110,24 @@ extern int sysctl_nr_open_min, sysctl_nr_open_max;
+ #ifndef CONFIG_MMU
+ extern int sysctl_nr_trim_pages;
+ #endif
++extern int sysctl_modify_ldt;
/* Constants used for minimum and maximum */
#ifdef CONFIG_LOCKUP_DETECTOR
#endif
/* this is needed for the proc_doulongvec_minmax of vm_dirty_bytes */
-@@ -181,10 +181,8 @@ static int proc_taint(struct ctl_table *table, int write,
+@@ -180,10 +181,8 @@ static int proc_taint(struct ctl_table *table, int write,
void __user *buffer, size_t *lenp, loff_t *ppos);
#endif
-#ifdef CONFIG_PRINTK
- static int proc_dointvec_minmax_sysadmin(struct ctl_table *table, int write,
+-static int proc_dointvec_minmax_sysadmin(struct ctl_table *table, int write,
++static int proc_dointvec_minmax_secure_sysadmin(struct ctl_table *table, int write,
void __user *buffer, size_t *lenp, loff_t *ppos);
-#endif
static int proc_dointvec_minmax_coredump(struct ctl_table *table, int write,
void __user *buffer, size_t *lenp, loff_t *ppos);
-@@ -215,6 +213,8 @@ static int sysrq_sysctl_handler(struct ctl_table *table, int write,
+@@ -214,6 +213,8 @@ static int sysrq_sysctl_handler(struct ctl_table *table, int write,
#endif
static struct ctl_table kern_table[];
static struct ctl_table vm_table[];
static struct ctl_table fs_table[];
-@@ -229,6 +229,20 @@ extern struct ctl_table epoll_table[];
+@@ -228,6 +229,20 @@ extern struct ctl_table epoll_table[];
int sysctl_legacy_va_layout;
#endif
/* The default sysctl tables: */
static struct ctl_table sysctl_base_table[] = {
-@@ -277,6 +291,22 @@ static int max_extfrag_threshold = 1000;
+@@ -276,6 +291,22 @@ static int max_extfrag_threshold = 1000;
#endif
static struct ctl_table kern_table[] = {
{
.procname = "sched_child_runs_first",
.data = &sysctl_sched_child_runs_first,
-@@ -649,7 +679,7 @@ static struct ctl_table kern_table[] = {
+@@ -637,7 +668,7 @@ static struct ctl_table kern_table[] = {
+ .maxlen = sizeof(int),
+ .mode = 0644,
+ /* only handle a transition from default "0" to "1" */
+- .proc_handler = proc_dointvec_minmax,
++ .proc_handler = proc_dointvec_minmax_secure,
+ .extra1 = &one,
+ .extra2 = &one,
+ },
+@@ -648,7 +679,7 @@ static struct ctl_table kern_table[] = {
.data = &modprobe_path,
.maxlen = KMOD_PATH_LEN,
.mode = 0644,
},
{
.procname = "modules_disabled",
-@@ -816,16 +846,20 @@ static struct ctl_table kern_table[] = {
+@@ -656,7 +687,7 @@ static struct ctl_table kern_table[] = {
+ .maxlen = sizeof(int),
+ .mode = 0644,
+ /* only handle a transition from default "0" to "1" */
+- .proc_handler = proc_dointvec_minmax,
++ .proc_handler = proc_dointvec_minmax_secure,
+ .extra1 = &one,
+ .extra2 = &one,
+ },
+@@ -811,20 +842,24 @@ static struct ctl_table kern_table[] = {
+ .data = &dmesg_restrict,
+ .maxlen = sizeof(int),
+ .mode = 0644,
+- .proc_handler = proc_dointvec_minmax_sysadmin,
++ .proc_handler = proc_dointvec_minmax_secure_sysadmin,
.extra1 = &zero,
.extra2 = &one,
},
.data = &kptr_restrict,
.maxlen = sizeof(int),
.mode = 0644,
- .proc_handler = proc_dointvec_minmax_sysadmin,
+- .proc_handler = proc_dointvec_minmax_sysadmin,
++ .proc_handler = proc_dointvec_minmax_secure_sysadmin,
+#ifdef CONFIG_GRKERNSEC_HIDESYM
+ .extra1 = &two,
+#else
{
.procname = "ngroups_max",
.data = &ngroups_max,
-@@ -1072,10 +1106,17 @@ static struct ctl_table kern_table[] = {
+@@ -962,6 +997,15 @@ static struct ctl_table kern_table[] = {
+ .mode = 0644,
+ .proc_handler = proc_dointvec,
+ },
++ {
++ .procname = "modify_ldt",
++ .data = &sysctl_modify_ldt,
++ .maxlen = sizeof(int),
++ .mode = 0644,
++ .proc_handler = proc_dointvec_minmax_secure_sysadmin,
++ .extra1 = &zero,
++ .extra2 = &one,
++ },
+ #endif
+ #if defined(CONFIG_MMU)
+ {
+@@ -1084,10 +1128,17 @@ static struct ctl_table kern_table[] = {
*/
{
.procname = "perf_event_paranoid",
.mode = 0644,
- .proc_handler = proc_dointvec,
+ /* go ahead, be a hero */
-+ .proc_handler = proc_dointvec_minmax_sysadmin,
++ .proc_handler = proc_dointvec_minmax_secure_sysadmin,
+ .extra1 = &neg_one,
+#ifdef CONFIG_GRKERNSEC_PERF_HARDEN
+ .extra2 = &three,
},
{
.procname = "perf_event_mlock_kb",
-@@ -1348,6 +1389,13 @@ static struct ctl_table vm_table[] = {
+@@ -1369,6 +1420,13 @@ static struct ctl_table vm_table[] = {
.proc_handler = proc_dointvec_minmax,
.extra1 = &zero,
},
#else
{
.procname = "nr_trim_pages",
-@@ -1830,6 +1878,16 @@ int proc_dostring(struct ctl_table *table, int write,
+@@ -1845,6 +1903,16 @@ int proc_dostring(struct ctl_table *table, int write,
(char __user *)buffer, lenp, ppos);
}
static size_t proc_skip_spaces(char **buf)
{
size_t ret;
-@@ -1935,6 +1993,8 @@ static int proc_put_long(void __user **buf, size_t *size, unsigned long val,
+@@ -1950,6 +2018,8 @@ static int proc_put_long(void __user **buf, size_t *size, unsigned long val,
len = strlen(tmp);
if (len > *size)
len = *size;
if (copy_to_user(*buf, tmp, len))
return -EFAULT;
*size -= len;
-@@ -2112,7 +2172,7 @@ int proc_dointvec(struct ctl_table *table, int write,
+@@ -2128,6 +2198,44 @@ int proc_dointvec(struct ctl_table *table, int write,
+ NULL,NULL);
+ }
+
++static int do_proc_dointvec_conv_secure(bool *negp, unsigned long *lvalp,
++ int *valp,
++ int write, void *data)
++{
++ if (write) {
++ if (*negp) {
++ if (*lvalp > (unsigned long) INT_MAX + 1)
++ return -EINVAL;
++ pax_open_kernel();
++ *valp = -*lvalp;
++ pax_close_kernel();
++ } else {
++ if (*lvalp > (unsigned long) INT_MAX)
++ return -EINVAL;
++ pax_open_kernel();
++ *valp = *lvalp;
++ pax_close_kernel();
++ }
++ } else {
++ int val = *valp;
++ if (val < 0) {
++ *negp = true;
++ *lvalp = (unsigned long)-val;
++ } else {
++ *negp = false;
++ *lvalp = (unsigned long)val;
++ }
++ }
++ return 0;
++}
++
++int proc_dointvec_secure(struct ctl_table *table, int write,
++ void __user *buffer, size_t *lenp, loff_t *ppos)
++{
++ return do_proc_dointvec(table,write,buffer,lenp,ppos,
++ do_proc_dointvec_conv_secure,NULL);
++}
++
+ /*
+ * Taint values can only be increased
+ * This means we can safely use a temporary.
+@@ -2135,7 +2243,7 @@ int proc_dointvec(struct ctl_table *table, int write,
static int proc_taint(struct ctl_table *table, int write,
void __user *buffer, size_t *lenp, loff_t *ppos)
{
unsigned long tmptaint = get_taint();
int err;
-@@ -2140,7 +2200,6 @@ static int proc_taint(struct ctl_table *table, int write,
+@@ -2163,16 +2271,14 @@ static int proc_taint(struct ctl_table *table, int write,
return err;
}
-#ifdef CONFIG_PRINTK
- static int proc_dointvec_minmax_sysadmin(struct ctl_table *table, int write,
+-static int proc_dointvec_minmax_sysadmin(struct ctl_table *table, int write,
++static int proc_dointvec_minmax_secure_sysadmin(struct ctl_table *table, int write,
void __user *buffer, size_t *lenp, loff_t *ppos)
{
-@@ -2149,7 +2208,6 @@ static int proc_dointvec_minmax_sysadmin(struct ctl_table *table, int write,
+ if (write && !capable(CAP_SYS_ADMIN))
+ return -EPERM;
- return proc_dointvec_minmax(table, write, buffer, lenp, ppos);
+- return proc_dointvec_minmax(table, write, buffer, lenp, ppos);
++ return proc_dointvec_minmax_secure(table, write, buffer, lenp, ppos);
}
-#endif
struct do_proc_dointvec_minmax_conv_param {
int *min;
-@@ -2709,6 +2767,12 @@ int proc_dostring(struct ctl_table *table, int write,
+@@ -2203,6 +2309,32 @@ static int do_proc_dointvec_minmax_conv(bool *negp, unsigned long *lvalp,
+ return 0;
+ }
+
++static int do_proc_dointvec_minmax_conv_secure(bool *negp, unsigned long *lvalp,
++ int *valp,
++ int write, void *data)
++{
++ struct do_proc_dointvec_minmax_conv_param *param = data;
++ if (write) {
++ int val = *negp ? -*lvalp : *lvalp;
++ if ((param->min && *param->min > val) ||
++ (param->max && *param->max < val))
++ return -EINVAL;
++ pax_open_kernel();
++ *valp = val;
++ pax_close_kernel();
++ } else {
++ int val = *valp;
++ if (val < 0) {
++ *negp = true;
++ *lvalp = (unsigned long)-val;
++ } else {
++ *negp = false;
++ *lvalp = (unsigned long)val;
++ }
++ }
++ return 0;
++}
++
+ /**
+ * proc_dointvec_minmax - read a vector of integers with min/max values
+ * @table: the sysctl table
+@@ -2230,6 +2362,17 @@ int proc_dointvec_minmax(struct ctl_table *table, int write,
+ do_proc_dointvec_minmax_conv, ¶m);
+ }
+
++int proc_dointvec_minmax_secure(struct ctl_table *table, int write,
++ void __user *buffer, size_t *lenp, loff_t *ppos)
++{
++ struct do_proc_dointvec_minmax_conv_param param = {
++ .min = (int *) table->extra1,
++ .max = (int *) table->extra2,
++ };
++ return do_proc_dointvec(table, write, buffer, lenp, ppos,
++ do_proc_dointvec_minmax_conv_secure, ¶m);
++}
++
+ static void validate_coredump_safety(void)
+ {
+ #ifdef CONFIG_COREDUMP
+@@ -2732,6 +2875,12 @@ int proc_dostring(struct ctl_table *table, int write,
return -ENOSYS;
}
int proc_dointvec(struct ctl_table *table, int write,
void __user *buffer, size_t *lenp, loff_t *ppos)
{
-@@ -2765,5 +2829,6 @@ EXPORT_SYMBOL(proc_dointvec_minmax);
+@@ -2788,5 +2937,6 @@ EXPORT_SYMBOL(proc_dointvec_minmax);
EXPORT_SYMBOL(proc_dointvec_userhz_jiffies);
EXPORT_SYMBOL(proc_dointvec_ms_jiffies);
EXPORT_SYMBOL(proc_dostring);
.clock_get = alarm_clock_get,
.timer_create = alarm_timer_create,
diff --git a/kernel/time/hrtimer.c b/kernel/time/hrtimer.c
-index bee0c1f..a23fe2d 100644
+index 93ef7190..7c85701 100644
--- a/kernel/time/hrtimer.c
+++ b/kernel/time/hrtimer.c
-@@ -1391,7 +1391,7 @@ void hrtimer_peek_ahead_timers(void)
+@@ -1393,7 +1393,7 @@ void hrtimer_peek_ahead_timers(void)
local_irq_restore(flags);
}
update_vsyscall_tz();
if (firsttime) {
diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c
-index 91db941..a371671 100644
+index 946acb7..1e13c0f 100644
--- a/kernel/time/timekeeping.c
+++ b/kernel/time/timekeeping.c
@@ -15,6 +15,7 @@
#include <linux/syscore_ops.h>
#include <linux/clocksource.h>
#include <linux/jiffies.h>
-@@ -802,6 +803,8 @@ int do_settimeofday64(const struct timespec64 *ts)
+@@ -915,6 +916,8 @@ int do_settimeofday64(const struct timespec64 *ts)
if (!timespec64_valid_strict(ts))
return -EINVAL;
write_seqcount_begin(&tk_core.seq);
diff --git a/kernel/time/timer.c b/kernel/time/timer.c
-index 2d3f5c5..7ed7dc5 100644
+index 2ece3aa..055a295 100644
--- a/kernel/time/timer.c
+++ b/kernel/time/timer.c
-@@ -1393,7 +1393,7 @@ void update_process_times(int user_tick)
+@@ -1405,7 +1405,7 @@ void update_process_times(int user_tick)
/*
* This function runs timers and the timer-tq in bottom half context.
*/
{
struct tvec_base *base = __this_cpu_read(tvec_bases);
-@@ -1456,7 +1456,7 @@ static void process_timeout(unsigned long __data)
+@@ -1468,7 +1468,7 @@ static void process_timeout(unsigned long __data)
*
* In all cases the return value is guaranteed to be non-negative.
*/
struct timer_list timer;
unsigned long expire;
diff --git a/kernel/time/timer_list.c b/kernel/time/timer_list.c
-index 61ed862..3b52c65 100644
+index e878c2e..cf1546bb 100644
--- a/kernel/time/timer_list.c
+++ b/kernel/time/timer_list.c
@@ -45,12 +45,16 @@ DECLARE_PER_CPU(struct hrtimer_cpu_base, hrtimer_bases);
SEQ_printf(m, " .index: %d\n",
base->index);
SEQ_printf(m, " .resolution: %Lu nsecs\n",
-@@ -362,7 +370,11 @@ static int __init init_timer_list_procfs(void)
+@@ -388,7 +396,11 @@ static int __init init_timer_list_procfs(void)
{
struct proc_dir_entry *pe;
ret = -EIO;
diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
-index 4f22802..bd268b1 100644
+index 02bece4..f9b05af 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
-@@ -2382,12 +2382,17 @@ ftrace_code_disable(struct module *mod, struct dyn_ftrace *rec)
+@@ -2395,12 +2395,17 @@ ftrace_code_disable(struct module *mod, struct dyn_ftrace *rec)
if (unlikely(ftrace_disabled))
return 0;
}
/*
-@@ -4776,8 +4781,10 @@ static int ftrace_process_locs(struct module *mod,
+@@ -4789,8 +4794,10 @@ static int ftrace_process_locs(struct module *mod,
if (!count)
return 0;
start_pg = ftrace_allocate_pages(count);
if (!start_pg)
-@@ -5653,7 +5660,7 @@ static int alloc_retstack_tasklist(struct ftrace_ret_stack **ret_stack_list)
+@@ -5659,7 +5666,7 @@ static int alloc_retstack_tasklist(struct ftrace_ret_stack **ret_stack_list)
if (t->ret_stack == NULL) {
atomic_set(&t->tracing_graph_pause, 0);
t->curr_ret_stack = -1;
/* Make sure the tasks see the -1 first: */
smp_wmb();
-@@ -5876,7 +5883,7 @@ static void
+@@ -5882,7 +5889,7 @@ static void
graph_init_task(struct task_struct *t, struct ftrace_ret_stack *ret_stack)
{
atomic_set(&t->tracing_graph_pause, 0);
/* make curr_ret_stack visible before we add the ret_stack */
smp_wmb();
diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
-index 922048a..bb71a55 100644
+index 0315d43..2e5e9a2 100644
--- a/kernel/trace/ring_buffer.c
+++ b/kernel/trace/ring_buffer.c
@@ -348,9 +348,9 @@ struct buffer_data_page {
return NULL;
}
#endif
-@@ -2901,7 +2901,7 @@ rb_decrement_entry(struct ring_buffer_per_cpu *cpu_buffer,
+@@ -2898,7 +2898,7 @@ rb_decrement_entry(struct ring_buffer_per_cpu *cpu_buffer,
/* Do the likely case first */
if (likely(bpage->page == (void *)addr)) {
return;
}
-@@ -2913,7 +2913,7 @@ rb_decrement_entry(struct ring_buffer_per_cpu *cpu_buffer,
+@@ -2910,7 +2910,7 @@ rb_decrement_entry(struct ring_buffer_per_cpu *cpu_buffer,
start = bpage;
do {
if (bpage->page == (void *)addr) {
return;
}
rb_inc_page(cpu_buffer, &bpage);
-@@ -3197,7 +3197,7 @@ static inline unsigned long
+@@ -3194,7 +3194,7 @@ static inline unsigned long
rb_num_of_entries(struct ring_buffer_per_cpu *cpu_buffer)
{
return local_read(&cpu_buffer->entries) -
}
/**
-@@ -3286,7 +3286,7 @@ unsigned long ring_buffer_overrun_cpu(struct ring_buffer *buffer, int cpu)
+@@ -3283,7 +3283,7 @@ unsigned long ring_buffer_overrun_cpu(struct ring_buffer *buffer, int cpu)
return 0;
cpu_buffer = buffer->buffers[cpu];
return ret;
}
-@@ -3309,7 +3309,7 @@ ring_buffer_commit_overrun_cpu(struct ring_buffer *buffer, int cpu)
+@@ -3306,7 +3306,7 @@ ring_buffer_commit_overrun_cpu(struct ring_buffer *buffer, int cpu)
return 0;
cpu_buffer = buffer->buffers[cpu];
return ret;
}
-@@ -3331,7 +3331,7 @@ ring_buffer_dropped_events_cpu(struct ring_buffer *buffer, int cpu)
+@@ -3328,7 +3328,7 @@ ring_buffer_dropped_events_cpu(struct ring_buffer *buffer, int cpu)
return 0;
cpu_buffer = buffer->buffers[cpu];
return ret;
}
-@@ -3394,7 +3394,7 @@ unsigned long ring_buffer_overruns(struct ring_buffer *buffer)
+@@ -3391,7 +3391,7 @@ unsigned long ring_buffer_overruns(struct ring_buffer *buffer)
/* if you care about this being correct, lock the buffer */
for_each_buffer_cpu(buffer, cpu) {
cpu_buffer = buffer->buffers[cpu];
}
return overruns;
-@@ -3565,8 +3565,8 @@ rb_get_reader_page(struct ring_buffer_per_cpu *cpu_buffer)
+@@ -3562,8 +3562,8 @@ rb_get_reader_page(struct ring_buffer_per_cpu *cpu_buffer)
/*
* Reset the reader page to size zero.
*/
local_set(&cpu_buffer->reader_page->page->commit, 0);
cpu_buffer->reader_page->real_end = 0;
-@@ -3600,7 +3600,7 @@ rb_get_reader_page(struct ring_buffer_per_cpu *cpu_buffer)
+@@ -3597,7 +3597,7 @@ rb_get_reader_page(struct ring_buffer_per_cpu *cpu_buffer)
* want to compare with the last_overrun.
*/
smp_mb();
/*
* Here's the tricky part.
-@@ -4172,8 +4172,8 @@ rb_reset_cpu(struct ring_buffer_per_cpu *cpu_buffer)
+@@ -4169,8 +4169,8 @@ rb_reset_cpu(struct ring_buffer_per_cpu *cpu_buffer)
cpu_buffer->head_page
= list_entry(cpu_buffer->pages, struct buffer_page, list);
local_set(&cpu_buffer->head_page->page->commit, 0);
cpu_buffer->head_page->read = 0;
-@@ -4183,18 +4183,18 @@ rb_reset_cpu(struct ring_buffer_per_cpu *cpu_buffer)
+@@ -4180,18 +4180,18 @@ rb_reset_cpu(struct ring_buffer_per_cpu *cpu_buffer)
INIT_LIST_HEAD(&cpu_buffer->reader_page->list);
INIT_LIST_HEAD(&cpu_buffer->new_pages);
cpu_buffer->read = 0;
cpu_buffer->read_bytes = 0;
-@@ -4595,8 +4595,8 @@ int ring_buffer_read_page(struct ring_buffer *buffer,
+@@ -4592,8 +4592,8 @@ int ring_buffer_read_page(struct ring_buffer *buffer,
rb_init_page(bpage);
bpage = reader->page;
reader->page = *data_page;
*data_page = bpage;
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
-index 62c6506..5c25989 100644
+index 0533049..85e27f0 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
-@@ -3500,7 +3500,7 @@ int trace_keep_overwrite(struct tracer *tracer, u32 mask, int set)
+@@ -3538,7 +3538,7 @@ int trace_keep_overwrite(struct tracer *tracer, u32 mask, int set)
return 0;
}
/* do nothing if flag is already set */
if (!!(trace_flags & mask) == !!enabled)
diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h
-index dd8205a..1aae87a 100644
+index d261201..da10429 100644
--- a/kernel/trace/trace.h
+++ b/kernel/trace/trace.h
@@ -1271,7 +1271,7 @@ extern const char *__stop___tracepoint_str[];
+ return atomic64_inc_return_unchecked(&trace_counter);
}
diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
-index a9c10a3..1864f6b 100644
+index c4de47f..5f134b8 100644
--- a/kernel/trace/trace_events.c
+++ b/kernel/trace/trace_events.c
-@@ -1762,7 +1762,6 @@ __trace_early_add_new_event(struct ftrace_event_call *call,
+@@ -1887,7 +1887,6 @@ __trace_early_add_new_event(struct ftrace_event_call *call,
return 0;
}
static void __add_event_to_tracers(struct ftrace_event_call *call);
/* Add an additional event_call dynamically */
+diff --git a/kernel/trace/trace_events_filter.c b/kernel/trace/trace_events_filter.c
+index 7f2e97c..085a257 100644
+--- a/kernel/trace/trace_events_filter.c
++++ b/kernel/trace/trace_events_filter.c
+@@ -1056,6 +1056,9 @@ static void parse_init(struct filter_parse_state *ps,
+
+ static char infix_next(struct filter_parse_state *ps)
+ {
++ if (!ps->infix.cnt)
++ return 0;
++
+ ps->infix.cnt--;
+
+ return ps->infix.string[ps->infix.tail++];
+@@ -1071,6 +1074,9 @@ static char infix_peek(struct filter_parse_state *ps)
+
+ static void infix_advance(struct filter_parse_state *ps)
+ {
++ if (!ps->infix.cnt)
++ return;
++
+ ps->infix.cnt--;
+ ps->infix.tail++;
+ }
diff --git a/kernel/trace/trace_functions_graph.c b/kernel/trace/trace_functions_graph.c
-index b6fce36..d9f11a3 100644
+index a51e796..1f32ebd 100644
--- a/kernel/trace/trace_functions_graph.c
+++ b/kernel/trace/trace_functions_graph.c
-@@ -133,7 +133,7 @@ ftrace_push_return_trace(unsigned long ret, unsigned long func, int *depth,
+@@ -132,7 +132,7 @@ ftrace_push_return_trace(unsigned long ret, unsigned long func, int *depth,
/* The return trace stack is full */
if (current->curr_ret_stack == FTRACE_RETFUNC_DEPTH - 1) {
return -EBUSY;
}
-@@ -230,7 +230,7 @@ ftrace_pop_return_trace(struct ftrace_graph_ret *trace, unsigned long *ret,
+@@ -229,7 +229,7 @@ ftrace_pop_return_trace(struct ftrace_graph_ret *trace, unsigned long *ret,
*ret = current->ret_stack[index].ret;
trace->func = current->ret_stack[index].func;
trace->calltime = current->ret_stack[index].calltime;
}
entry = ring_buffer_event_data(event);
diff --git a/kernel/trace/trace_output.c b/kernel/trace/trace_output.c
-index 692bf71..6d9a9cd 100644
+index 25a086b..a918131 100644
--- a/kernel/trace/trace_output.c
+++ b/kernel/trace/trace_output.c
-@@ -751,14 +751,16 @@ int register_ftrace_event(struct trace_event *event)
+@@ -752,14 +752,16 @@ int register_ftrace_event(struct trace_event *event)
goto out;
}
if (unlikely(seq_buf_has_overflowed(&s->seq))) {
s->seq.len = save_len;
diff --git a/kernel/trace/trace_stack.c b/kernel/trace/trace_stack.c
-index c3e4fcf..ef6cc43 100644
+index 3f34496..0492d95 100644
--- a/kernel/trace/trace_stack.c
+++ b/kernel/trace/trace_stack.c
@@ -88,7 +88,7 @@ check_stack(unsigned long ip, unsigned long *stack)
memcpy(&uts_table, table, sizeof(uts_table));
uts_table.data = get_uts(table, write);
diff --git a/kernel/watchdog.c b/kernel/watchdog.c
-index 3174bf8..3553520 100644
+index 581a68a..7ff6a89 100644
--- a/kernel/watchdog.c
+++ b/kernel/watchdog.c
-@@ -572,7 +572,7 @@ static int watchdog_nmi_enable(unsigned int cpu) { return 0; }
- static void watchdog_nmi_disable(unsigned int cpu) { return; }
+@@ -648,7 +648,7 @@ void watchdog_nmi_enable_all(void) {}
+ void watchdog_nmi_disable_all(void) {}
#endif /* CONFIG_HARDLOCKUP_DETECTOR */
-static struct smp_hotplug_thread watchdog_threads = {
.thread_should_run = watchdog_should_run,
.thread_fn = watchdog,
diff --git a/kernel/workqueue.c b/kernel/workqueue.c
-index 41ff75b..5ad683a 100644
+index 586ad91..5f8844a 100644
--- a/kernel/workqueue.c
+++ b/kernel/workqueue.c
-@@ -4564,7 +4564,7 @@ static void rebind_workers(struct worker_pool *pool)
+@@ -4428,7 +4428,7 @@ static void rebind_workers(struct worker_pool *pool)
WARN_ON_ONCE(!(worker_flags & WORKER_UNBOUND));
worker_flags |= WORKER_REBOUND;
worker_flags &= ~WORKER_UNBOUND;
spin_unlock_irq(&pool->lock);
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
-index c5cefb3..a4241e3 100644
+index ba2b0c8..a571efc 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
-@@ -923,7 +923,7 @@ config DEBUG_MUTEXES
+@@ -936,7 +936,7 @@ config DEBUG_MUTEXES
config DEBUG_WW_MUTEX_SLOWPATH
bool "Wait/wound mutex debugging: Slowpath testing"
select DEBUG_LOCK_ALLOC
select DEBUG_SPINLOCK
select DEBUG_MUTEXES
-@@ -940,7 +940,7 @@ config DEBUG_WW_MUTEX_SLOWPATH
+@@ -953,7 +953,7 @@ config DEBUG_WW_MUTEX_SLOWPATH
config DEBUG_LOCK_ALLOC
bool "Lock debugging: detect incorrect freeing of live locks"
select DEBUG_SPINLOCK
select DEBUG_MUTEXES
select LOCKDEP
-@@ -954,7 +954,7 @@ config DEBUG_LOCK_ALLOC
+@@ -967,7 +967,7 @@ config DEBUG_LOCK_ALLOC
config PROVE_LOCKING
bool "Lock debugging: prove locking correctness"
select LOCKDEP
select DEBUG_SPINLOCK
select DEBUG_MUTEXES
-@@ -1005,7 +1005,7 @@ config LOCKDEP
+@@ -1018,7 +1018,7 @@ config LOCKDEP
config LOCK_STAT
bool "Lock usage statistics"
select LOCKDEP
select DEBUG_SPINLOCK
select DEBUG_MUTEXES
-@@ -1467,6 +1467,7 @@ config LATENCYTOP
+@@ -1496,6 +1496,7 @@ config LATENCYTOP
depends on DEBUG_KERNEL
depends on STACKTRACE_SUPPORT
depends on PROC_FS
select FRAME_POINTER if !MIPS && !PPC && !S390 && !MICROBLAZE && !ARM_UNWIND && !ARC
select KALLSYMS
select KALLSYMS_ALL
-@@ -1483,7 +1484,7 @@ config ARCH_HAS_DEBUG_STRICT_USER_COPY_CHECKS
+@@ -1512,7 +1513,7 @@ config ARCH_HAS_DEBUG_STRICT_USER_COPY_CHECKS
config DEBUG_STRICT_USER_COPY_CHECKS
bool "Strict user copy size checks"
depends on ARCH_HAS_DEBUG_STRICT_USER_COPY_CHECKS
help
Enabling this option turns a certain set of sanity checks for user
copy operations into compile time failures.
-@@ -1614,7 +1615,7 @@ endmenu # runtime tests
+@@ -1643,7 +1644,7 @@ endmenu # runtime tests
config PROVIDE_OHCI1394_DMA_INIT
bool "Remote debugging over FireWire early on boot"
If you want to debug problems which hang or crash the kernel early
on boot and the crashing machine has a FireWire port, you can use
diff --git a/lib/Makefile b/lib/Makefile
-index 58f74d2..08e011f 100644
+index 6c37933..d48e7ca 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -59,7 +59,7 @@ obj-$(CONFIG_BTREE) += btree.o
(val << avg->factor)) >> avg->weight :
(val << avg->factor);
diff --git a/lib/bitmap.c b/lib/bitmap.c
-index d456f4c1..29a0308 100644
+index 64c0926f..9de1a1f 100644
--- a/lib/bitmap.c
+++ b/lib/bitmap.c
-@@ -264,7 +264,7 @@ int __bitmap_subset(const unsigned long *bitmap1,
+@@ -234,7 +234,7 @@ int __bitmap_subset(const unsigned long *bitmap1,
}
EXPORT_SYMBOL(__bitmap_subset);
{
unsigned int k, lim = bits/BITS_PER_LONG;
int w = 0;
-@@ -391,7 +391,7 @@ int __bitmap_parse(const char *buf, unsigned int buflen,
+@@ -361,7 +361,7 @@ int __bitmap_parse(const char *buf, unsigned int buflen,
{
int c, old_c, totaldigits, ndigits, nchunks, nbits;
u32 chunk;
bitmap_zero(maskp, nmaskbits);
-@@ -476,7 +476,7 @@ int bitmap_parse_user(const char __user *ubuf,
+@@ -446,7 +446,7 @@ int bitmap_parse_user(const char __user *ubuf,
{
if (!access_ok(VERIFY_READ, ubuf, ulen))
return -EFAULT;
ulen, 1, maskp, nmaskbits);
}
-@@ -535,7 +535,7 @@ static int __bitmap_parselist(const char *buf, unsigned int buflen,
+@@ -505,7 +505,7 @@ static int __bitmap_parselist(const char *buf, unsigned int buflen,
{
unsigned a, b;
int c, old_c, totaldigits;
int exp_digit, in_range;
totaldigits = c = 0;
-@@ -630,7 +630,7 @@ int bitmap_parselist_user(const char __user *ubuf,
+@@ -600,7 +600,7 @@ int bitmap_parselist_user(const char __user *ubuf,
{
if (!access_ok(VERIFY_READ, ubuf, ulen))
return -EFAULT;
bd->dbuf = large_malloc(bd->dbufSize * sizeof(int));
if (!bd->dbuf)
+diff --git a/lib/decompress_unlzma.c b/lib/decompress_unlzma.c
+index 0be83af..4605e93 100644
+--- a/lib/decompress_unlzma.c
++++ b/lib/decompress_unlzma.c
+@@ -39,10 +39,10 @@
+
+ #define MIN(a, b) (((a) < (b)) ? (a) : (b))
+
+-static long long INIT read_int(unsigned char *ptr, int size)
++static unsigned long long INIT read_int(unsigned char *ptr, int size)
+ {
+ int i;
+- long long ret = 0;
++ unsigned long long ret = 0;
+
+ for (i = 0; i < size; i++)
+ ret = (ret << 8) | ptr[size-i-1];
diff --git a/lib/div64.c b/lib/div64.c
-index 4382ad7..08aa558 100644
+index 19ea7ed..20cac21 100644
--- a/lib/div64.c
+++ b/lib/div64.c
@@ -59,7 +59,7 @@ uint32_t __attribute__((weak)) __div64_32(uint64_t *n, uint32_t base)
u64 quotient;
@@ -130,7 +130,7 @@ EXPORT_SYMBOL(div64_u64_rem);
- * 'http://www.hackersdelight.org/HDcode/newCode/divDouble.c.txt'
+ * 'http://www.hackersdelight.org/hdcodetxt/divDouble.c.txt'
*/
#ifndef div64_u64
-u64 div64_u64(u64 dividend, u64 divisor)
u32 high = divisor >> 32;
u64 quot;
diff --git a/lib/dma-debug.c b/lib/dma-debug.c
-index 9722bd2..0d826f4 100644
+index ae4b65e..daf0230 100644
--- a/lib/dma-debug.c
+++ b/lib/dma-debug.c
@@ -979,7 +979,7 @@ static int dma_debug_device_change(struct notifier_block *nb, unsigned long acti
#endif
diff --git a/lib/ioremap.c b/lib/ioremap.c
-index 0c9216c..863bd89 100644
+index 86c8911..f5bfc34 100644
--- a/lib/ioremap.c
+++ b/lib/ioremap.c
-@@ -38,7 +38,7 @@ static inline int ioremap_pmd_range(pud_t *pud, unsigned long addr,
+@@ -75,7 +75,7 @@ static inline int ioremap_pmd_range(pud_t *pud, unsigned long addr,
unsigned long next;
phys_addr -= addr;
if (!pmd)
return -ENOMEM;
do {
-@@ -56,7 +56,7 @@ static inline int ioremap_pud_range(pgd_t *pgd, unsigned long addr,
+@@ -101,7 +101,7 @@ static inline int ioremap_pud_range(pgd_t *pgd, unsigned long addr,
unsigned long next;
phys_addr -= addr;
return false;
diff --git a/lib/kobject.c b/lib/kobject.c
-index 03d4ab3..46f6374 100644
+index 3b841b9..7c215aa 100644
--- a/lib/kobject.c
+++ b/lib/kobject.c
-@@ -931,9 +931,9 @@ EXPORT_SYMBOL_GPL(kset_create_and_add);
+@@ -340,8 +340,9 @@ error:
+ }
+ EXPORT_SYMBOL(kobject_init);
+
+-static int kobject_add_varg(struct kobject *kobj, struct kobject *parent,
+- const char *fmt, va_list vargs)
++static __printf(3, 0) int kobject_add_varg(struct kobject *kobj,
++ struct kobject *parent,
++ const char *fmt, va_list vargs)
+ {
+ int retval;
+
+@@ -936,9 +937,9 @@ EXPORT_SYMBOL_GPL(kset_create_and_add);
static DEFINE_SPINLOCK(kobj_ns_type_lock);
+}
+EXPORT_SYMBOL(pax_list_del_rcu);
diff --git a/lib/lockref.c b/lib/lockref.c
-index ecb9a66..a044fc5 100644
+index 494994b..65caf94 100644
--- a/lib/lockref.c
+++ b/lib/lockref.c
@@ -48,13 +48,13 @@
/*
diff --git a/lib/strnlen_user.c b/lib/strnlen_user.c
-index a28df52..3d55877 100644
+index fe9a325..85cd8aa 100644
--- a/lib/strnlen_user.c
+++ b/lib/strnlen_user.c
@@ -26,7 +26,7 @@
unsigned long c;
diff --git a/lib/swiotlb.c b/lib/swiotlb.c
-index 4abda07..b9d3765 100644
+index 3c365ab..75b43df 100644
--- a/lib/swiotlb.c
+++ b/lib/swiotlb.c
-@@ -682,7 +682,7 @@ EXPORT_SYMBOL(swiotlb_alloc_coherent);
+@@ -683,7 +683,7 @@ EXPORT_SYMBOL(swiotlb_alloc_coherent);
void
swiotlb_free_coherent(struct device *hwdev, size_t size, void *vaddr,
phys_addr_t paddr = dma_to_phys(hwdev, dev_addr);
diff --git a/lib/test-hexdump.c b/lib/test-hexdump.c
-index daf29a39..56f44ac 100644
+index c227cc4..5241df3 100644
--- a/lib/test-hexdump.c
+++ b/lib/test-hexdump.c
-@@ -18,26 +18,26 @@ static const unsigned char data_b[] = {
-
- static const unsigned char data_a[] = ".2.{....p..$}.4...1.....L...C...";
-
--static const char *test_data_1_le[] __initconst = {
-+static const char * const test_data_1_le[] __initconst = {
- "be", "32", "db", "7b", "0a", "18", "93", "b2",
- "70", "ba", "c4", "24", "7d", "83", "34", "9b",
- "a6", "9c", "31", "ad", "9c", "0f", "ac", "e9",
+@@ -25,19 +25,19 @@ static const char * const test_data_1_le[] __initconst = {
"4c", "d1", "19", "99", "43", "b1", "af", "0c",
};
--static const char *test_data_2_le[] __initconst = {
+-static const char *test_data_2_le[] __initdata = {
+static const char * const test_data_2_le[] __initconst = {
"32be", "7bdb", "180a", "b293",
"ba70", "24c4", "837d", "9b34",
"d14c", "9919", "b143", "0caf",
};
--static const char *test_data_4_le[] __initconst = {
+-static const char *test_data_4_le[] __initdata = {
+static const char * const test_data_4_le[] __initconst = {
"7bdb32be", "b293180a", "24c4ba70", "9b34837d",
"ad319ca6", "e9ac0f9c", "9919d14c", "0cafb143",
};
--static const char *test_data_8_le[] __initconst = {
+-static const char *test_data_8_le[] __initdata = {
+static const char * const test_data_8_le[] __initconst = {
"b293180a7bdb32be", "9b34837d24c4ba70",
"e9ac0f9cad319ca6", "0cafb1439919d14c",
+}
+EXPORT_SYMBOL(copy_to_user_overflow);
diff --git a/lib/vsprintf.c b/lib/vsprintf.c
-index b235c96..343ffc1 100644
+index da39c60..ac91239 100644
--- a/lib/vsprintf.c
+++ b/lib/vsprintf.c
@@ -16,6 +16,9 @@
+#define __INCLUDED_BY_HIDESYM 1
+#endif
#include <stdarg.h>
+ #include <linux/clk-provider.h>
#include <linux/module.h> /* for KSYM_SYMBOL_LEN */
- #include <linux/types.h>
-@@ -626,7 +629,7 @@ char *symbol_string(char *buf, char *end, void *ptr,
+@@ -628,7 +631,7 @@ char *symbol_string(char *buf, char *end, void *ptr,
#ifdef CONFIG_KALLSYMS
if (*fmt == 'B')
sprint_backtrace(sym, value);
sprint_symbol(sym, value);
else
sprint_symbol_no_offset(sym, value);
-@@ -1322,7 +1325,11 @@ char *address_val(char *buf, char *end, const void *addr,
- return number(buf, end, num, spec);
+@@ -1360,7 +1363,11 @@ char *clock(char *buf, char *end, struct clk *clk, struct printf_spec spec,
+ }
}
+-int kptr_restrict __read_mostly;
+#ifdef CONFIG_GRKERNSEC_HIDESYM
-+int kptr_restrict __read_mostly = 2;
++int kptr_restrict __read_only = 2;
+#else
- int kptr_restrict __read_mostly;
++int kptr_restrict __read_only;
+#endif
/*
* Show a '%p' thing. A kernel extension is that the '%p' is followed
-@@ -1333,8 +1340,10 @@ int kptr_restrict __read_mostly;
+@@ -1371,8 +1378,10 @@ int kptr_restrict __read_mostly;
*
* - 'F' For symbolic function descriptor pointers with offset
* - 'f' For simple symbolic function names without offset
* - '[FfSs]R' as above with __builtin_extract_return_addr() translation
* - 'B' For backtraced symbolic direct pointers with offset
* - 'R' For decoded struct resource, e.g., [mem 0x0-0x1f 64bit pref]
-@@ -1417,12 +1426,12 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
+@@ -1460,12 +1469,12 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
if (!ptr && *fmt != 'K') {
/*
}
switch (*fmt) {
-@@ -1432,6 +1441,14 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
+@@ -1475,6 +1484,14 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
/* Fallthrough */
case 'S':
case 's':
case 'B':
return symbol_string(buf, end, ptr, spec, fmt);
case 'R':
-@@ -1496,6 +1513,8 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
+@@ -1539,6 +1556,8 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
va_end(va);
return buf;
}
case 'K':
/*
* %pK cannot be used in IRQ context because its test
-@@ -1553,6 +1572,22 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
+@@ -1598,6 +1617,22 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
((const struct file *)ptr)->f_path.dentry,
spec, fmt);
}
spec.flags |= SMALL;
if (spec.field_width == -1) {
spec.field_width = default_width;
-@@ -2254,11 +2289,11 @@ int bstr_printf(char *buf, size_t size, const char *fmt, const u32 *bin_buf)
+@@ -2296,11 +2331,11 @@ int bstr_printf(char *buf, size_t size, const char *fmt, const u32 *bin_buf)
typeof(type) value; \
if (sizeof(type) == 8) { \
args = PTR_ALIGN(args, sizeof(u32)); \
} \
args += sizeof(type); \
value; \
-@@ -2321,7 +2356,7 @@ int bstr_printf(char *buf, size_t size, const char *fmt, const u32 *bin_buf)
+@@ -2363,7 +2398,7 @@ int bstr_printf(char *buf, size_t size, const char *fmt, const u32 *bin_buf)
case FORMAT_TYPE_STR: {
const char *str_arg = args;
args += strlen(str_arg) + 1;
@@ -0,0 +1 @@
+-grsec
diff --git a/mm/Kconfig b/mm/Kconfig
-index a03131b..1b1bafb 100644
+index 390214d..f96e3b8 100644
--- a/mm/Kconfig
+++ b/mm/Kconfig
@@ -342,10 +342,11 @@ config KSM
depends on !KMEMCHECK
select PAGE_EXTENSION
diff --git a/mm/backing-dev.c b/mm/backing-dev.c
-index 6dc4580..e031ec1 100644
+index 000e7b3..aad2605 100644
--- a/mm/backing-dev.c
+++ b/mm/backing-dev.c
@@ -12,7 +12,7 @@
struct backing_dev_info noop_backing_dev_info = {
.name = "noop",
-@@ -474,7 +474,7 @@ int bdi_setup_and_register(struct backing_dev_info *bdi, char *name)
+@@ -458,7 +458,7 @@ int bdi_setup_and_register(struct backing_dev_info *bdi, char *name)
return err;
err = bdi_register(bdi, NULL, "%.28s-%ld", name,
if (err) {
bdi_destroy(bdi);
return err;
+diff --git a/mm/cma_debug.c b/mm/cma_debug.c
+index 7621ee3..f8e4b60 100644
+--- a/mm/cma_debug.c
++++ b/mm/cma_debug.c
+@@ -39,7 +39,7 @@ static int cma_used_get(void *data, u64 *val)
+
+ mutex_lock(&cma->lock);
+ /* pages counter is smaller than sizeof(int) */
+- used = bitmap_weight(cma->bitmap, (int)cma->count);
++ used = bitmap_weight(cma->bitmap, (int)cma_bitmap_maxno(cma));
+ mutex_unlock(&cma->lock);
+ *val = (u64)used << cma->order_per_bit;
+
+@@ -52,13 +52,14 @@ static int cma_maxchunk_get(void *data, u64 *val)
+ struct cma *cma = data;
+ unsigned long maxchunk = 0;
+ unsigned long start, end = 0;
++ unsigned long bitmap_maxno = cma_bitmap_maxno(cma);
+
+ mutex_lock(&cma->lock);
+ for (;;) {
+- start = find_next_zero_bit(cma->bitmap, cma->count, end);
++ start = find_next_zero_bit(cma->bitmap, bitmap_maxno, end);
+ if (start >= cma->count)
+ break;
+- end = find_next_bit(cma->bitmap, cma->count, start);
++ end = find_next_bit(cma->bitmap, bitmap_maxno, start);
+ maxchunk = max(end - start, maxchunk);
+ }
+ mutex_unlock(&cma->lock);
+@@ -170,10 +171,10 @@ static void cma_debugfs_add_one(struct cma *cma, int idx)
+
+ tmp = debugfs_create_dir(name, cma_debugfs_root);
+
+- debugfs_create_file("alloc", S_IWUSR, cma_debugfs_root, cma,
++ debugfs_create_file("alloc", S_IWUSR, tmp, cma,
+ &cma_alloc_fops);
+
+- debugfs_create_file("free", S_IWUSR, cma_debugfs_root, cma,
++ debugfs_create_file("free", S_IWUSR, tmp, cma,
+ &cma_free_fops);
+
+ debugfs_create_file("base_pfn", S_IRUGO, tmp,
diff --git a/mm/filemap.c b/mm/filemap.c
-index ad72420..0a20ef2 100644
+index 6bf5e42..1e631ee 100644
--- a/mm/filemap.c
+++ b/mm/filemap.c
-@@ -2097,7 +2097,7 @@ int generic_file_mmap(struct file * file, struct vm_area_struct * vma)
+@@ -2095,7 +2095,7 @@ int generic_file_mmap(struct file * file, struct vm_area_struct * vma)
struct address_space *mapping = file->f_mapping;
if (!mapping->a_ops->readpage)
file_accessed(file);
vma->vm_ops = &generic_file_vm_ops;
return 0;
-@@ -2275,6 +2275,7 @@ inline int generic_write_checks(struct file *file, loff_t *pos, size_t *count, i
- *pos = i_size_read(inode);
-
- if (limit != RLIM_INFINITY) {
-+ gr_learn_resource(current, RLIMIT_FSIZE,*pos, 0);
- if (*pos >= limit) {
- send_sig(SIGXFSZ, current, 0);
- return -EFBIG;
+@@ -2276,6 +2276,7 @@ inline ssize_t generic_write_checks(struct kiocb *iocb, struct iov_iter *from)
+ pos = iocb->ki_pos;
+
+ if (limit != RLIM_INFINITY) {
++ gr_learn_resource(current, RLIMIT_FSIZE, iocb->ki_pos, 0);
+ if (iocb->ki_pos >= limit) {
+ send_sig(SIGXFSZ, current, 0);
+ return -EFBIG;
diff --git a/mm/gup.c b/mm/gup.c
-index a6e24e2..72dd2cf 100644
+index 6297f6b..7652403 100644
--- a/mm/gup.c
+++ b/mm/gup.c
@@ -265,11 +265,6 @@ static int faultin_page(struct task_struct *tsk, struct vm_area_struct *vma,
unsigned int fault_flags = 0;
int ret;
-- /* For mlock, just skip the stack guard page. */
-- if ((*flags & FOLL_MLOCK) &&
+- /* For mm_populate(), just skip the stack guard page. */
+- if ((*flags & FOLL_POPULATE) &&
- (stack_guard_page_start(vma, address) ||
- stack_guard_page_end(vma, address + PAGE_SIZE)))
- return -ENOENT;
set_page_address(page, (void *)vaddr);
diff --git a/mm/hugetlb.c b/mm/hugetlb.c
-index caad3c5..4f68807 100644
+index 271e443..c582971 100644
--- a/mm/hugetlb.c
+++ b/mm/hugetlb.c
-@@ -2260,6 +2260,7 @@ static int hugetlb_sysctl_handler_common(bool obey_mempolicy,
+@@ -2362,6 +2362,7 @@ static int hugetlb_sysctl_handler_common(bool obey_mempolicy,
struct ctl_table *table, int write,
void __user *buffer, size_t *length, loff_t *ppos)
{
struct hstate *h = &default_hstate;
unsigned long tmp = h->max_huge_pages;
int ret;
-@@ -2267,9 +2268,10 @@ static int hugetlb_sysctl_handler_common(bool obey_mempolicy,
+@@ -2369,9 +2370,10 @@ static int hugetlb_sysctl_handler_common(bool obey_mempolicy,
if (!hugepages_supported())
return -ENOTSUPP;
if (ret)
goto out;
-@@ -2304,6 +2306,7 @@ int hugetlb_overcommit_handler(struct ctl_table *table, int write,
+@@ -2406,6 +2408,7 @@ int hugetlb_overcommit_handler(struct ctl_table *table, int write,
struct hstate *h = &default_hstate;
unsigned long tmp;
int ret;
if (!hugepages_supported())
return -ENOTSUPP;
-@@ -2313,9 +2316,10 @@ int hugetlb_overcommit_handler(struct ctl_table *table, int write,
+@@ -2415,9 +2418,10 @@ int hugetlb_overcommit_handler(struct ctl_table *table, int write,
if (write && hstate_is_gigantic(h))
return -EINVAL;
if (ret)
goto out;
-@@ -2800,6 +2804,27 @@ static void unmap_ref_private(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2907,6 +2911,27 @@ static void unmap_ref_private(struct mm_struct *mm, struct vm_area_struct *vma,
i_mmap_unlock_write(mapping);
}
/*
* Hugetlb_cow() should be called with page lock of the original hugepage held.
* Called with hugetlb_instantiation_mutex held and pte_page locked so we
-@@ -2912,6 +2937,11 @@ retry_avoidcopy:
+@@ -3020,6 +3045,11 @@ retry_avoidcopy:
make_huge_pte(vma, new_page, 1));
page_remove_rmap(old_page);
hugepage_add_new_anon_rmap(new_page, vma, address);
/* Make the old page be freed below */
new_page = old_page;
}
-@@ -3072,6 +3102,10 @@ retry:
+@@ -3181,6 +3211,10 @@ retry:
&& (vma->vm_flags & VM_SHARED)));
set_huge_pte_at(mm, address, ptep, new_pte);
if ((flags & FAULT_FLAG_WRITE) && !(vma->vm_flags & VM_SHARED)) {
/* Optimization, do the COW without a second fault */
ret = hugetlb_cow(mm, vma, address, ptep, new_pte, page, ptl);
-@@ -3139,6 +3173,10 @@ int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -3248,6 +3282,10 @@ int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma,
struct address_space *mapping;
int need_wait_lock = 0;
address &= huge_page_mask(h);
ptep = huge_pte_offset(mm, address);
-@@ -3152,6 +3190,26 @@ int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -3261,6 +3299,26 @@ int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma,
VM_FAULT_SET_HINDEX(hstate_index(h));
}
if (!ptep)
return VM_FAULT_OOM;
diff --git a/mm/internal.h b/mm/internal.h
-index a96da5b..42ebd54 100644
+index a25e359..e2c96e9 100644
--- a/mm/internal.h
+++ b/mm/internal.h
@@ -156,6 +156,7 @@ __find_buddy_index(unsigned long page_idx, unsigned int order)
extern void prep_compound_page(struct page *page, unsigned long order);
#ifdef CONFIG_MEMORY_FAILURE
extern bool is_free_buddy_page(struct page *page);
-@@ -411,7 +412,7 @@ extern u32 hwpoison_filter_enable;
+@@ -413,7 +414,7 @@ extern u32 hwpoison_filter_enable;
extern unsigned long vm_mmap_pgoff(struct file *, unsigned long,
unsigned long, unsigned long,
extern void set_pageblock_order(void);
unsigned long reclaim_clean_pages_from_list(struct zone *zone,
diff --git a/mm/kmemleak.c b/mm/kmemleak.c
-index 5405aff..483406d 100644
+index 3716cdb..25b97dc 100644
--- a/mm/kmemleak.c
+++ b/mm/kmemleak.c
-@@ -365,7 +365,7 @@ static void print_unreferenced(struct seq_file *seq,
+@@ -368,7 +368,7 @@ static void print_unreferenced(struct seq_file *seq,
for (i = 0; i < object->trace_len; i++) {
void *ptr = (void *)object->trace[i];
}
}
-@@ -1911,7 +1911,7 @@ static int __init kmemleak_late_init(void)
+@@ -1926,7 +1926,7 @@ static int __init kmemleak_late_init(void)
return -ENOMEM;
}
if (end == start)
return error;
diff --git a/mm/memory-failure.c b/mm/memory-failure.c
-index 72a5224..51ba846 100644
+index 501820c..9612bcf 100644
--- a/mm/memory-failure.c
+++ b/mm/memory-failure.c
@@ -61,7 +61,7 @@ int sysctl_memory_failure_early_kill __read_mostly = 0;
#ifdef __ARCH_SI_TRAPNO
si.si_trapno = trapno;
#endif
-@@ -779,7 +779,7 @@ static struct page_state {
+@@ -825,7 +825,7 @@ static struct page_state {
unsigned long res;
- char *msg;
+ enum action_page_type type;
int (*action)(struct page *p, unsigned long pfn);
-} error_states[] = {
+} __do_const error_states[] = {
- { reserved, reserved, "reserved kernel", me_kernel },
+ { reserved, reserved, MSG_KERNEL, me_kernel },
/*
* free pages are specially detected outside this table:
-@@ -1087,7 +1087,7 @@ int memory_failure(unsigned long pfn, int trapno, int flags)
+@@ -1133,7 +1133,7 @@ int memory_failure(unsigned long pfn, int trapno, int flags)
nr_pages = 1 << compound_order(hpage);
else /* normal page or thp */
nr_pages = 1;
/*
* We need/can do nothing about count=0 pages.
-@@ -1116,7 +1116,7 @@ int memory_failure(unsigned long pfn, int trapno, int flags)
+@@ -1162,7 +1162,7 @@ int memory_failure(unsigned long pfn, int trapno, int flags)
if (PageHWPoison(hpage)) {
if ((hwpoison_filter(p) && TestClearPageHWPoison(p))
|| (p != hpage && TestSetPageHWPoison(hpage))) {
unlock_page(hpage);
return 0;
}
-@@ -1184,14 +1184,14 @@ int memory_failure(unsigned long pfn, int trapno, int flags)
+@@ -1231,14 +1231,14 @@ int memory_failure(unsigned long pfn, int trapno, int flags)
*/
if (!PageHWPoison(p)) {
printk(KERN_ERR "MCE %#lx: just unpoisoned\n", pfn);
unlock_page(hpage);
put_page(hpage);
return 0;
-@@ -1421,7 +1421,7 @@ int unpoison_memory(unsigned long pfn)
+@@ -1467,7 +1467,7 @@ int unpoison_memory(unsigned long pfn)
return 0;
}
if (TestClearPageHWPoison(p))
pr_info("MCE: Software-unpoisoned free page %#lx\n", pfn);
return 0;
}
-@@ -1435,7 +1435,7 @@ int unpoison_memory(unsigned long pfn)
+@@ -1481,7 +1481,7 @@ int unpoison_memory(unsigned long pfn)
*/
if (TestClearPageHWPoison(page)) {
pr_info("MCE: Software-unpoisoned page %#lx\n", pfn);
freeit = 1;
if (PageHuge(page))
clear_page_hwpoison_huge_page(page);
-@@ -1560,11 +1560,11 @@ static int soft_offline_huge_page(struct page *page, int flags)
+@@ -1616,11 +1616,11 @@ static int soft_offline_huge_page(struct page *page, int flags)
if (PageHuge(page)) {
set_page_hwpoison_huge_page(hpage);
dequeue_hwpoisoned_huge_page(hpage);
}
}
return ret;
-@@ -1603,7 +1603,7 @@ static int __soft_offline_page(struct page *page, int flags)
+@@ -1659,7 +1659,7 @@ static int __soft_offline_page(struct page *page, int flags)
put_page(page);
pr_info("soft_offline: %#lx: invalidated\n", pfn);
SetPageHWPoison(page);
return 0;
}
-@@ -1652,7 +1652,7 @@ static int __soft_offline_page(struct page *page, int flags)
+@@ -1708,7 +1708,7 @@ static int __soft_offline_page(struct page *page, int flags)
if (!is_free_buddy_page(page))
pr_info("soft offline: %#lx: page leaked\n",
pfn);
}
} else {
pr_info("soft offline: %#lx: isolation failed: %d, page count %d, type %lx\n",
-@@ -1722,11 +1722,11 @@ int soft_offline_page(struct page *page, int flags)
+@@ -1778,11 +1778,11 @@ int soft_offline_page(struct page *page, int flags)
if (PageHuge(page)) {
set_page_hwpoison_huge_page(hpage);
if (!dequeue_hwpoisoned_huge_page(hpage))
}
unset_migratetype_isolate(page, MIGRATE_MOVABLE);
diff --git a/mm/memory.c b/mm/memory.c
-index 97839f5..4bc5530 100644
+index 22e037e..347d230 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -414,6 +414,7 @@ static inline void free_pmd_range(struct mmu_gather *tlb, pud_t *pud,
}
/*
-@@ -691,10 +696,10 @@ static void print_bad_pte(struct vm_area_struct *vma, unsigned long addr,
+@@ -690,7 +695,7 @@ static void print_bad_pte(struct vm_area_struct *vma, unsigned long addr,
+ /*
* Choose text because data symbols depend on CONFIG_KALLSYMS_ALL=y
*/
- if (vma->vm_ops)
-- printk(KERN_ALERT "vma->vm_ops->fault: %pSR\n",
-+ printk(KERN_ALERT "vma->vm_ops->fault: %pAR\n",
- vma->vm_ops->fault);
- if (vma->vm_file)
-- printk(KERN_ALERT "vma->vm_file->f_op->mmap: %pSR\n",
-+ printk(KERN_ALERT "vma->vm_file->f_op->mmap: %pAR\n",
- vma->vm_file->f_op->mmap);
- dump_stack();
- add_taint(TAINT_BAD_PAGE, LOCKDEP_NOW_UNRELIABLE);
-@@ -1464,6 +1469,10 @@ static int insert_page(struct vm_area_struct *vma, unsigned long addr,
+- pr_alert("file:%pD fault:%pf mmap:%pf readpage:%pf\n",
++ pr_alert("file:%pD fault:%pX mmap:%pX readpage:%pX\n",
+ vma->vm_file,
+ vma->vm_ops ? vma->vm_ops->fault : NULL,
+ vma->vm_file ? vma->vm_file->f_op->mmap : NULL,
+@@ -1463,6 +1468,10 @@ static int insert_page(struct vm_area_struct *vma, unsigned long addr,
page_add_file_rmap(page);
set_pte_at(mm, addr, pte, mk_pte(page, prot));
retval = 0;
pte_unmap_unlock(pte, ptl);
return retval;
-@@ -1508,9 +1517,21 @@ int vm_insert_page(struct vm_area_struct *vma, unsigned long addr,
+@@ -1507,9 +1516,21 @@ int vm_insert_page(struct vm_area_struct *vma, unsigned long addr,
if (!page_count(page))
return -EINVAL;
if (!(vma->vm_flags & VM_MIXEDMAP)) {
}
return insert_page(vma, addr, page, vma->vm_page_prot);
}
-@@ -1593,6 +1614,7 @@ int vm_insert_mixed(struct vm_area_struct *vma, unsigned long addr,
+@@ -1592,6 +1613,7 @@ int vm_insert_mixed(struct vm_area_struct *vma, unsigned long addr,
unsigned long pfn)
{
BUG_ON(!(vma->vm_flags & VM_MIXEDMAP));
if (addr < vma->vm_start || addr >= vma->vm_end)
return -EFAULT;
-@@ -1840,7 +1862,9 @@ static int apply_to_pmd_range(struct mm_struct *mm, pud_t *pud,
+@@ -1839,7 +1861,9 @@ static int apply_to_pmd_range(struct mm_struct *mm, pud_t *pud,
BUG_ON(pud_huge(*pud));
if (!pmd)
return -ENOMEM;
do {
-@@ -1860,7 +1884,9 @@ static int apply_to_pud_range(struct mm_struct *mm, pgd_t *pgd,
+@@ -1859,7 +1883,9 @@ static int apply_to_pud_range(struct mm_struct *mm, pgd_t *pgd,
unsigned long next;
int err;
if (!pud)
return -ENOMEM;
do {
-@@ -1982,6 +2008,185 @@ static int do_page_mkwrite(struct vm_area_struct *vma, struct page *page,
- return ret;
+@@ -2040,6 +2066,185 @@ static inline int wp_page_reuse(struct mm_struct *mm,
+ return VM_FAULT_WRITE;
}
+#ifdef CONFIG_PAX_SEGMEXEC
+#endif
+
/*
- * This routine handles present pages, when users try to write
- * to a shared page. It is done by copying the page to a new address
-@@ -2172,6 +2377,12 @@ gotten:
+ * Handle the case of a page which we actually need to copy to a new page.
+ *
+@@ -2093,6 +2298,12 @@ static int wp_page_copy(struct mm_struct *mm, struct vm_area_struct *vma,
*/
page_table = pte_offset_map_lock(mm, pmd, address, &ptl);
if (likely(pte_same(*page_table, orig_pte))) {
if (old_page) {
if (!PageAnon(old_page)) {
dec_mm_counter_fast(mm, MM_FILEPAGES);
-@@ -2225,6 +2436,10 @@ gotten:
+@@ -2147,6 +2358,10 @@ static int wp_page_copy(struct mm_struct *mm, struct vm_area_struct *vma,
page_remove_rmap(old_page);
}
+
/* Free the old page.. */
new_page = old_page;
- ret |= VM_FAULT_WRITE;
-@@ -2483,6 +2698,11 @@ static int do_swap_page(struct mm_struct *mm, struct vm_area_struct *vma,
+ page_copied = 1;
+@@ -2578,6 +2793,11 @@ static int do_swap_page(struct mm_struct *mm, struct vm_area_struct *vma,
swap_free(entry);
if (vm_swap_full() || (vma->vm_flags & VM_LOCKED) || PageMlocked(page))
try_to_free_swap(page);
unlock_page(page);
if (page != swapcache) {
/*
-@@ -2506,6 +2726,11 @@ static int do_swap_page(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2601,6 +2821,11 @@ static int do_swap_page(struct mm_struct *mm, struct vm_area_struct *vma,
/* No need to invalidate - it was non-present before */
update_mmu_cache(vma, address, page_table);
unlock:
pte_unmap_unlock(page_table, ptl);
out:
-@@ -2525,40 +2750,6 @@ out_release:
+@@ -2620,40 +2845,6 @@ out_release:
}
/*
* We enter with non-exclusive mmap_sem (to exclude vma changes,
* but allow concurrent faults), and pte mapped but not yet locked.
* We return with mmap_sem still held, but pte unmapped and unlocked.
-@@ -2568,27 +2759,23 @@ static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2663,27 +2854,23 @@ static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma,
unsigned int flags)
{
struct mem_cgroup *memcg;
if (unlikely(anon_vma_prepare(vma)))
goto oom;
page = alloc_zeroed_user_highpage_movable(vma, address);
-@@ -2612,6 +2799,11 @@ static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2707,6 +2894,11 @@ static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma,
if (!pte_none(*page_table))
goto release;
inc_mm_counter_fast(mm, MM_ANONPAGES);
page_add_new_anon_rmap(page, vma, address);
mem_cgroup_commit_charge(page, memcg, false);
-@@ -2621,6 +2813,12 @@ setpte:
+@@ -2716,6 +2908,12 @@ setpte:
/* No need to invalidate - it was non-present before */
update_mmu_cache(vma, address, page_table);
unlock:
pte_unmap_unlock(page_table, ptl);
return 0;
-@@ -2853,6 +3051,11 @@ static int do_read_fault(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2948,6 +3146,11 @@ static int do_read_fault(struct mm_struct *mm, struct vm_area_struct *vma,
return ret;
}
do_set_pte(vma, address, fault_page, pte, false, false);
unlock_page(fault_page);
unlock_out:
pte_unmap_unlock(pte, ptl);
-@@ -2904,7 +3107,18 @@ static int do_cow_fault(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2999,7 +3202,18 @@ static int do_cow_fault(struct mm_struct *mm, struct vm_area_struct *vma,
}
goto uncharge_out;
}
mem_cgroup_commit_charge(new_page, memcg, false);
lru_cache_add_active_or_unevictable(new_page, vma);
pte_unmap_unlock(pte, ptl);
-@@ -2962,6 +3176,11 @@ static int do_shared_fault(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -3057,6 +3271,11 @@ static int do_shared_fault(struct mm_struct *mm, struct vm_area_struct *vma,
return ret;
}
do_set_pte(vma, address, fault_page, pte, true, false);
pte_unmap_unlock(pte, ptl);
if (set_page_dirty(fault_page))
-@@ -3185,6 +3404,12 @@ static int handle_pte_fault(struct mm_struct *mm,
+@@ -3280,6 +3499,12 @@ static int handle_pte_fault(struct mm_struct *mm,
if (flags & FAULT_FLAG_WRITE)
flush_tlb_fix_spurious_fault(vma, address);
}
unlock:
pte_unmap_unlock(pte, ptl);
return 0;
-@@ -3204,9 +3429,41 @@ static int __handle_mm_fault(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -3299,9 +3524,41 @@ static int __handle_mm_fault(struct mm_struct *mm, struct vm_area_struct *vma,
pmd_t *pmd;
pte_t *pte;
pgd = pgd_offset(mm, address);
pud = pud_alloc(mm, pgd, address);
if (!pud)
-@@ -3341,6 +3598,23 @@ int __pud_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address)
+@@ -3436,6 +3693,23 @@ int __pud_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address)
spin_unlock(&mm->page_table_lock);
return 0;
}
#endif /* __PAGETABLE_PUD_FOLDED */
#ifndef __PAGETABLE_PMD_FOLDED
-@@ -3373,6 +3647,32 @@ int __pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long address)
+@@ -3468,6 +3742,32 @@ int __pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long address)
spin_unlock(&mm->page_table_lock);
return 0;
}
#endif /* __PAGETABLE_PMD_FOLDED */
static int __follow_pte(struct mm_struct *mm, unsigned long address,
-@@ -3482,8 +3782,8 @@ out:
+@@ -3577,8 +3877,8 @@ out:
return ret;
}
{
resource_size_t phys_addr;
unsigned long prot = 0;
-@@ -3509,8 +3809,8 @@ EXPORT_SYMBOL_GPL(generic_access_phys);
+@@ -3604,8 +3904,8 @@ EXPORT_SYMBOL_GPL(generic_access_phys);
* Access another process' address space as given in mm. If non-NULL, use the
* given task for page fault accounting.
*/
{
struct vm_area_struct *vma;
void *old_buf = buf;
-@@ -3518,7 +3818,7 @@ static int __access_remote_vm(struct task_struct *tsk, struct mm_struct *mm,
+@@ -3613,7 +3913,7 @@ static int __access_remote_vm(struct task_struct *tsk, struct mm_struct *mm,
down_read(&mm->mmap_sem);
/* ignore errors, just check how much was successfully transferred */
while (len) {
void *maddr;
struct page *page = NULL;
-@@ -3579,8 +3879,8 @@ static int __access_remote_vm(struct task_struct *tsk, struct mm_struct *mm,
+@@ -3674,8 +3974,8 @@ static int __access_remote_vm(struct task_struct *tsk, struct mm_struct *mm,
*
* The caller must hold a reference on @mm.
*/
{
return __access_remote_vm(NULL, mm, addr, buf, len, write);
}
-@@ -3590,11 +3890,11 @@ int access_remote_vm(struct mm_struct *mm, unsigned long addr,
+@@ -3685,11 +3985,11 @@ int access_remote_vm(struct mm_struct *mm, unsigned long addr,
* Source/target buffer must be kernel space,
* Do not walk the page table directly, use get_user_pages
*/
mm = get_task_mm(tsk);
if (!mm)
diff --git a/mm/mempolicy.c b/mm/mempolicy.c
-index de5dc5e..68a4ea3 100644
+index 99d4c1d..a577817 100644
--- a/mm/mempolicy.c
+++ b/mm/mempolicy.c
@@ -703,6 +703,10 @@ static int mbind_range(struct mm_struct *mm, unsigned long start,
}
out:
-@@ -1160,6 +1174,17 @@ static long do_mbind(unsigned long start, unsigned long len,
+@@ -1161,6 +1175,17 @@ static long do_mbind(unsigned long start, unsigned long len,
if (end < start)
return -EINVAL;
if (end == start)
return 0;
-@@ -1385,8 +1410,7 @@ SYSCALL_DEFINE4(migrate_pages, pid_t, pid, unsigned long, maxnode,
+@@ -1386,8 +1411,7 @@ SYSCALL_DEFINE4(migrate_pages, pid_t, pid, unsigned long, maxnode,
*/
tcred = __task_cred(task);
if (!uid_eq(cred->euid, tcred->suid) && !uid_eq(cred->euid, tcred->uid) &&
rcu_read_unlock();
err = -EPERM;
goto out_put;
-@@ -1417,6 +1441,15 @@ SYSCALL_DEFINE4(migrate_pages, pid_t, pid, unsigned long, maxnode,
+@@ -1418,6 +1442,15 @@ SYSCALL_DEFINE4(migrate_pages, pid_t, pid, unsigned long, maxnode,
goto out;
}
capable(CAP_SYS_NICE) ? MPOL_MF_MOVE_ALL : MPOL_MF_MOVE);
diff --git a/mm/migrate.c b/mm/migrate.c
-index 85e0426..be49beb 100644
+index f53838f..a26fa94 100644
--- a/mm/migrate.c
+++ b/mm/migrate.c
-@@ -1472,8 +1472,7 @@ SYSCALL_DEFINE6(move_pages, pid_t, pid, unsigned long, nr_pages,
+@@ -1484,8 +1484,7 @@ SYSCALL_DEFINE6(move_pages, pid_t, pid, unsigned long, nr_pages,
*/
tcred = __task_cred(task);
if (!uid_eq(cred->euid, tcred->suid) && !uid_eq(cred->euid, tcred->uid) &&
err = -EPERM;
goto out;
diff --git a/mm/mlock.c b/mm/mlock.c
-index 8a54cd2..92f1747 100644
+index 6fd2cf1..cbae765 100644
--- a/mm/mlock.c
+++ b/mm/mlock.c
@@ -14,6 +14,7 @@
#include <linux/sched.h>
#include <linux/export.h>
#include <linux/rmap.h>
-@@ -613,7 +614,7 @@ static int do_mlock(unsigned long start, size_t len, int on)
+@@ -557,7 +558,7 @@ static int do_mlock(unsigned long start, size_t len, int on)
{
unsigned long nstart, end, tmp;
struct vm_area_struct * vma, * prev;
VM_BUG_ON(start & ~PAGE_MASK);
VM_BUG_ON(len != PAGE_ALIGN(len));
-@@ -622,6 +623,9 @@ static int do_mlock(unsigned long start, size_t len, int on)
+@@ -566,6 +567,9 @@ static int do_mlock(unsigned long start, size_t len, int on)
return -EINVAL;
if (end == start)
return 0;
vma = find_vma(current->mm, start);
if (!vma || vma->vm_start > start)
return -ENOMEM;
-@@ -633,6 +637,11 @@ static int do_mlock(unsigned long start, size_t len, int on)
+@@ -577,6 +581,11 @@ static int do_mlock(unsigned long start, size_t len, int on)
for (nstart = start ; ; ) {
vm_flags_t newflags;
/* Here we know that vma->vm_start <= nstart < vma->vm_end. */
newflags = vma->vm_flags & ~VM_LOCKED;
-@@ -746,6 +755,7 @@ SYSCALL_DEFINE2(mlock, unsigned long, start, size_t, len)
+@@ -627,6 +636,7 @@ SYSCALL_DEFINE2(mlock, unsigned long, start, size_t, len)
locked += current->mm->locked_vm;
/* check against resource limits */
if ((locked <= lock_limit) || capable(CAP_IPC_LOCK))
error = do_mlock(start, len, 1);
-@@ -783,6 +793,11 @@ static int do_mlockall(int flags)
+@@ -668,6 +678,11 @@ static int do_mlockall(int flags)
for (vma = current->mm->mmap; vma ; vma = prev->vm_next) {
vm_flags_t newflags;
newflags = vma->vm_flags & ~VM_LOCKED;
if (flags & MCL_CURRENT)
newflags |= VM_LOCKED;
-@@ -814,8 +829,10 @@ SYSCALL_DEFINE1(mlockall, int, flags)
+@@ -699,8 +714,10 @@ SYSCALL_DEFINE1(mlockall, int, flags)
lock_limit >>= PAGE_SHIFT;
ret = -ENOMEM;
.priority = IPC_CALLBACK_PRI, /* use lowest priority */
};
diff --git a/mm/mmap.c b/mm/mmap.c
-index 9ec50a3..0476e2d 100644
+index bb50cac..6d50a9f 100644
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -41,6 +41,7 @@
if (!may_expand_vm(mm, len >> PAGE_SHIFT)) {
unsigned long nr_pages;
-@@ -1551,11 +1696,10 @@ unsigned long mmap_region(struct file *file, unsigned long addr,
-
- /* Clear old maps */
- error = -ENOMEM;
--munmap_back:
- if (find_vma_links(mm, addr, addr + len, &prev, &rb_link, &rb_parent)) {
+@@ -1555,6 +1700,7 @@ unsigned long mmap_region(struct file *file, unsigned long addr,
+ &rb_parent)) {
if (do_munmap(mm, addr, len))
return -ENOMEM;
-- goto munmap_back;
+ BUG_ON(find_vma_links(mm, addr, addr + len, &prev, &rb_link, &rb_parent));
}
/*
-@@ -1586,6 +1730,16 @@ munmap_back:
+@@ -1586,6 +1732,16 @@ unsigned long mmap_region(struct file *file, unsigned long addr,
goto unacct_error;
}
vma->vm_mm = mm;
vma->vm_start = addr;
vma->vm_end = addr + len;
-@@ -1616,6 +1770,13 @@ munmap_back:
+@@ -1616,6 +1772,13 @@ unsigned long mmap_region(struct file *file, unsigned long addr,
if (error)
goto unmap_and_free_vma;
/* Can addr have changed??
*
* Answer: Yes, several device drivers can do it in their
-@@ -1634,6 +1795,12 @@ munmap_back:
+@@ -1634,6 +1797,12 @@ unsigned long mmap_region(struct file *file, unsigned long addr,
}
vma_link(mm, vma, prev, rb_link, rb_parent);
/* Once vma denies write, undo our temporary denial count */
if (file) {
if (vm_flags & VM_SHARED)
-@@ -1646,6 +1813,7 @@ out:
+@@ -1646,6 +1815,7 @@ out:
perf_event_mmap(vma);
vm_stat_account(mm, vm_flags, file, len >> PAGE_SHIFT);
if (vm_flags & VM_LOCKED) {
if (!((vm_flags & VM_SPECIAL) || is_vm_hugetlb_page(vma) ||
vma == get_gate_vma(current->mm)))
-@@ -1683,6 +1851,12 @@ allow_write_and_free_vma:
+@@ -1683,6 +1853,12 @@ allow_write_and_free_vma:
if (vm_flags & VM_DENYWRITE)
allow_write_access(file);
free_vma:
kmem_cache_free(vm_area_cachep, vma);
unacct_error:
if (charged)
-@@ -1690,7 +1864,63 @@ unacct_error:
+@@ -1690,7 +1866,63 @@ unacct_error:
return error;
}
{
/*
* We implement the search by looking for an rbtree node that
-@@ -1738,11 +1968,29 @@ unsigned long unmapped_area(struct vm_unmapped_area_info *info)
+@@ -1738,11 +1970,29 @@ unsigned long unmapped_area(struct vm_unmapped_area_info *info)
}
}
if (gap_end >= low_limit && gap_end - gap_start >= length)
goto found;
-@@ -1792,7 +2040,7 @@ found:
+@@ -1792,7 +2042,7 @@ found:
return gap_start;
}
{
struct mm_struct *mm = current->mm;
struct vm_area_struct *vma;
-@@ -1846,6 +2094,24 @@ check_current:
+@@ -1846,6 +2096,24 @@ check_current:
gap_end = vma->vm_start;
if (gap_end < low_limit)
return -ENOMEM;
if (gap_start <= high_limit && gap_end - gap_start >= length)
goto found;
-@@ -1909,6 +2175,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
+@@ -1909,6 +2177,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
struct mm_struct *mm = current->mm;
struct vm_area_struct *vma;
struct vm_unmapped_area_info info;
if (len > TASK_SIZE - mmap_min_addr)
return -ENOMEM;
-@@ -1916,11 +2183,15 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
+@@ -1916,11 +2185,15 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
if (flags & MAP_FIXED)
return addr;
return addr;
}
-@@ -1929,6 +2200,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
+@@ -1929,6 +2202,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
info.low_limit = mm->mmap_base;
info.high_limit = TASK_SIZE;
info.align_mask = 0;
return vm_unmapped_area(&info);
}
#endif
-@@ -1947,6 +2219,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
+@@ -1947,6 +2221,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
struct mm_struct *mm = current->mm;
unsigned long addr = addr0;
struct vm_unmapped_area_info info;
/* requested length too big for entire address space */
if (len > TASK_SIZE - mmap_min_addr)
-@@ -1955,12 +2228,16 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
+@@ -1955,12 +2230,16 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
if (flags & MAP_FIXED)
return addr;
return addr;
}
-@@ -1969,6 +2246,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
+@@ -1969,6 +2248,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
info.low_limit = max(PAGE_SIZE, mmap_min_addr);
info.high_limit = mm->mmap_base;
info.align_mask = 0;
addr = vm_unmapped_area(&info);
/*
-@@ -1981,6 +2259,12 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
+@@ -1981,6 +2261,12 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
VM_BUG_ON(addr != -ENOMEM);
info.flags = 0;
info.low_limit = TASK_UNMAPPED_BASE;
info.high_limit = TASK_SIZE;
addr = vm_unmapped_area(&info);
}
-@@ -2081,6 +2365,28 @@ find_vma_prev(struct mm_struct *mm, unsigned long addr,
+@@ -2081,6 +2367,28 @@ find_vma_prev(struct mm_struct *mm, unsigned long addr,
return vma;
}
/*
* Verify that the stack growth is acceptable and
* update accounting. This is shared with both the
-@@ -2098,8 +2404,7 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns
+@@ -2098,8 +2406,7 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns
/* Stack limit test */
actual_size = size;
- if (size && (vma->vm_flags & (VM_GROWSUP | VM_GROWSDOWN)))
- actual_size -= PAGE_SIZE;
+ gr_learn_resource(current, RLIMIT_STACK, actual_size, 1);
- if (actual_size > ACCESS_ONCE(rlim[RLIMIT_STACK].rlim_cur))
+ if (actual_size > READ_ONCE(rlim[RLIMIT_STACK].rlim_cur))
return -ENOMEM;
-@@ -2110,6 +2415,7 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns
+@@ -2110,6 +2417,7 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns
locked = mm->locked_vm + grow;
- limit = ACCESS_ONCE(rlim[RLIMIT_MEMLOCK].rlim_cur);
+ limit = READ_ONCE(rlim[RLIMIT_MEMLOCK].rlim_cur);
limit >>= PAGE_SHIFT;
+ gr_learn_resource(current, RLIMIT_MEMLOCK, locked << PAGE_SHIFT, 1);
if (locked > limit && !capable(CAP_IPC_LOCK))
return -ENOMEM;
}
-@@ -2139,37 +2445,48 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns
+@@ -2139,37 +2447,48 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns
* PA-RISC uses this for its stack; IA64 for its Register Backing Store.
* vma is the last one with address > vma->vm_end. Have to extend vma.
*/
unsigned long size, grow;
size = address - vma->vm_start;
-@@ -2204,6 +2521,8 @@ int expand_upwards(struct vm_area_struct *vma, unsigned long address)
+@@ -2204,6 +2523,8 @@ int expand_upwards(struct vm_area_struct *vma, unsigned long address)
}
}
}
vma_unlock_anon_vma(vma);
khugepaged_enter_vma_merge(vma, vma->vm_flags);
validate_mm(vma->vm_mm);
-@@ -2218,6 +2537,8 @@ int expand_downwards(struct vm_area_struct *vma,
+@@ -2218,6 +2539,8 @@ int expand_downwards(struct vm_area_struct *vma,
unsigned long address)
{
int error;
/*
* We must make sure the anon_vma is allocated
-@@ -2231,6 +2552,15 @@ int expand_downwards(struct vm_area_struct *vma,
+@@ -2231,6 +2554,15 @@ int expand_downwards(struct vm_area_struct *vma,
if (error)
return error;
vma_lock_anon_vma(vma);
/*
-@@ -2240,9 +2570,17 @@ int expand_downwards(struct vm_area_struct *vma,
+@@ -2240,9 +2572,17 @@ int expand_downwards(struct vm_area_struct *vma,
*/
/* Somebody else might have raced and expanded it already */
size = vma->vm_end - address;
grow = (vma->vm_start - address) >> PAGE_SHIFT;
-@@ -2267,13 +2605,27 @@ int expand_downwards(struct vm_area_struct *vma,
+@@ -2267,13 +2607,27 @@ int expand_downwards(struct vm_area_struct *vma,
vma->vm_pgoff -= grow;
anon_vma_interval_tree_post_update_vma(vma);
vma_gap_update(vma);
khugepaged_enter_vma_merge(vma, vma->vm_flags);
validate_mm(vma->vm_mm);
return error;
-@@ -2373,6 +2725,13 @@ static void remove_vma_list(struct mm_struct *mm, struct vm_area_struct *vma)
+@@ -2373,6 +2727,13 @@ static void remove_vma_list(struct mm_struct *mm, struct vm_area_struct *vma)
do {
long nrpages = vma_pages(vma);
if (vma->vm_flags & VM_ACCOUNT)
nr_accounted += nrpages;
vm_stat_account(mm, vma->vm_flags, vma->vm_file, -nrpages);
-@@ -2417,6 +2776,16 @@ detach_vmas_to_be_unmapped(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2417,6 +2778,16 @@ detach_vmas_to_be_unmapped(struct mm_struct *mm, struct vm_area_struct *vma,
insertion_point = (prev ? &prev->vm_next : &mm->mmap);
vma->vm_prev = NULL;
do {
vma_rb_erase(vma, &mm->mm_rb);
mm->map_count--;
tail_vma = vma;
-@@ -2444,14 +2813,33 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2444,14 +2815,33 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
struct vm_area_struct *new;
int err = -ENOMEM;
/* most fields are the same, copy all, and then fixup */
*new = *vma;
-@@ -2464,6 +2852,22 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2464,6 +2854,22 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
new->vm_pgoff += ((addr - vma->vm_start) >> PAGE_SHIFT);
}
err = vma_dup_policy(vma, new);
if (err)
goto out_free_vma;
-@@ -2484,6 +2888,38 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2484,6 +2890,38 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
else
err = vma_adjust(vma, vma->vm_start, addr, vma->vm_pgoff, new);
/* Success. */
if (!err)
return 0;
-@@ -2493,10 +2929,18 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2493,10 +2931,18 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
new->vm_ops->close(new);
if (new->vm_file)
fput(new->vm_file);
kmem_cache_free(vm_area_cachep, new);
out_err:
return err;
-@@ -2509,6 +2953,15 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2509,6 +2955,15 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
int split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
unsigned long addr, int new_below)
{
if (mm->map_count >= sysctl_max_map_count)
return -ENOMEM;
-@@ -2520,11 +2973,30 @@ int split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2520,11 +2975,30 @@ int split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
* work. This now handles partial unmappings.
* Jeremy Fitzhardinge <jeremy@goop.org>
*/
if ((start & ~PAGE_MASK) || start > TASK_SIZE || len > TASK_SIZE-start)
return -EINVAL;
-@@ -2602,6 +3074,8 @@ int do_munmap(struct mm_struct *mm, unsigned long start, size_t len)
+@@ -2602,6 +3076,8 @@ int do_munmap(struct mm_struct *mm, unsigned long start, size_t len)
/* Fix up all other VM information */
remove_vma_list(mm, vma);
return 0;
}
-@@ -2610,6 +3084,13 @@ int vm_munmap(unsigned long start, size_t len)
+@@ -2610,6 +3086,13 @@ int vm_munmap(unsigned long start, size_t len)
int ret;
struct mm_struct *mm = current->mm;
down_write(&mm->mmap_sem);
ret = do_munmap(mm, start, len);
up_write(&mm->mmap_sem);
-@@ -2656,6 +3137,11 @@ SYSCALL_DEFINE5(remap_file_pages, unsigned long, start, unsigned long, size,
+@@ -2656,6 +3139,11 @@ SYSCALL_DEFINE5(remap_file_pages, unsigned long, start, unsigned long, size,
down_write(&mm->mmap_sem);
vma = find_vma(mm, start);
if (!vma || !(vma->vm_flags & VM_SHARED))
goto out;
-@@ -2692,16 +3178,6 @@ out:
+@@ -2692,16 +3180,6 @@ out:
return ret;
}
/*
* this is really a simplified "do_mmap". it only handles
* anonymous maps. eventually we may be able to do some
-@@ -2715,6 +3191,7 @@ static unsigned long do_brk(unsigned long addr, unsigned long len)
+@@ -2715,6 +3193,7 @@ static unsigned long do_brk(unsigned long addr, unsigned long len)
struct rb_node **rb_link, *rb_parent;
pgoff_t pgoff = addr >> PAGE_SHIFT;
int error;
len = PAGE_ALIGN(len);
if (!len)
-@@ -2722,10 +3199,24 @@ static unsigned long do_brk(unsigned long addr, unsigned long len)
+@@ -2722,10 +3201,24 @@ static unsigned long do_brk(unsigned long addr, unsigned long len)
flags = VM_DATA_DEFAULT_FLAGS | VM_ACCOUNT | mm->def_flags;
error = mlock_future_check(mm, mm->def_flags, len);
if (error)
return error;
-@@ -2739,21 +3230,20 @@ static unsigned long do_brk(unsigned long addr, unsigned long len)
- /*
- * Clear old maps. this also does some error checking for us
- */
-- munmap_back:
- if (find_vma_links(mm, addr, addr + len, &prev, &rb_link, &rb_parent)) {
+@@ -2743,16 +3236,17 @@ static unsigned long do_brk(unsigned long addr, unsigned long len)
+ &rb_parent)) {
if (do_munmap(mm, addr, len))
return -ENOMEM;
-- goto munmap_back;
+ BUG_ON(find_vma_links(mm, addr, addr + len, &prev, &rb_link, &rb_parent));
}
return -ENOMEM;
/* Can we just expand an old private anonymous mapping? */
-@@ -2767,7 +3257,7 @@ static unsigned long do_brk(unsigned long addr, unsigned long len)
+@@ -2766,7 +3260,7 @@ static unsigned long do_brk(unsigned long addr, unsigned long len)
*/
vma = kmem_cache_zalloc(vm_area_cachep, GFP_KERNEL);
if (!vma) {
return -ENOMEM;
}
-@@ -2781,10 +3271,11 @@ static unsigned long do_brk(unsigned long addr, unsigned long len)
+@@ -2780,10 +3274,11 @@ static unsigned long do_brk(unsigned long addr, unsigned long len)
vma_link(mm, vma, prev, rb_link, rb_parent);
out:
perf_event_mmap(vma);
return addr;
}
-@@ -2846,6 +3337,7 @@ void exit_mmap(struct mm_struct *mm)
+@@ -2845,6 +3340,7 @@ void exit_mmap(struct mm_struct *mm)
while (vma) {
if (vma->vm_flags & VM_ACCOUNT)
nr_accounted += vma_pages(vma);
vma = remove_vma(vma);
}
vm_unacct_memory(nr_accounted);
-@@ -2860,6 +3352,13 @@ int insert_vm_struct(struct mm_struct *mm, struct vm_area_struct *vma)
+@@ -2859,6 +3355,13 @@ int insert_vm_struct(struct mm_struct *mm, struct vm_area_struct *vma)
struct vm_area_struct *prev;
struct rb_node **rb_link, *rb_parent;
/*
* The vm_pgoff of a purely anonymous vma should be irrelevant
* until its first write fault, when page's anon_vma and index
-@@ -2883,7 +3382,21 @@ int insert_vm_struct(struct mm_struct *mm, struct vm_area_struct *vma)
+@@ -2882,7 +3385,21 @@ int insert_vm_struct(struct mm_struct *mm, struct vm_area_struct *vma)
security_vm_enough_memory_mm(mm, vma_pages(vma)))
return -ENOMEM;
return 0;
}
-@@ -2902,6 +3415,8 @@ struct vm_area_struct *copy_vma(struct vm_area_struct **vmap,
+@@ -2901,6 +3418,8 @@ struct vm_area_struct *copy_vma(struct vm_area_struct **vmap,
struct rb_node **rb_link, *rb_parent;
bool faulted_in_anon_vma = true;
/*
* If anonymous vma has not yet been faulted, update new pgoff
* to match new location, to increase its chance of merging.
-@@ -2966,6 +3481,39 @@ struct vm_area_struct *copy_vma(struct vm_area_struct **vmap,
+@@ -2965,6 +3484,39 @@ struct vm_area_struct *copy_vma(struct vm_area_struct **vmap,
return NULL;
}
/*
* Return true if the calling process may expand its vm space by the passed
* number of pages
-@@ -2977,6 +3525,7 @@ int may_expand_vm(struct mm_struct *mm, unsigned long npages)
+@@ -2976,6 +3528,7 @@ int may_expand_vm(struct mm_struct *mm, unsigned long npages)
lim = rlimit(RLIMIT_AS) >> PAGE_SHIFT;
if (cur + npages > lim)
return 0;
return 1;
-@@ -3059,6 +3608,22 @@ static struct vm_area_struct *__install_special_mapping(
+@@ -3058,6 +3611,22 @@ static struct vm_area_struct *__install_special_mapping(
vma->vm_start = addr;
vma->vm_end = addr + len;
vma->vm_page_prot = vm_get_page_prot(vma->vm_flags);
diff --git a/mm/mprotect.c b/mm/mprotect.c
-index 8858483..8145fa5 100644
+index 8858483..72f2464 100644
--- a/mm/mprotect.c
+++ b/mm/mprotect.c
@@ -24,10 +24,18 @@
+
+#ifdef CONFIG_SMP
+ wmb();
-+ cpus_clear(mm->context.cpu_user_cs_mask);
-+ cpu_set(smp_processor_id(), mm->context.cpu_user_cs_mask);
++ cpumask_clear(&mm->context.cpu_user_cs_mask);
++ cpumask_set_cpu(smp_processor_id(), &mm->context.cpu_user_cs_mask);
+#endif
+
+ set_user_cs(mm->context.user_cs_base, mm->context.user_cs_limit, smp_processor_id());
if (nstart < prev->vm_end)
diff --git a/mm/mremap.c b/mm/mremap.c
-index 2dc44b1..caa1819 100644
+index 034e2d3..81deca5 100644
--- a/mm/mremap.c
+++ b/mm/mremap.c
@@ -142,6 +142,12 @@ static void move_ptes(struct vm_area_struct *vma, pmd_t *old_pmd,
}
@@ -350,6 +356,11 @@ static struct vm_area_struct *vma_to_resize(unsigned long addr,
if (is_vm_hugetlb_page(vma))
- goto Einval;
+ return ERR_PTR(-EINVAL);
+#ifdef CONFIG_PAX_SEGMEXEC
+ if (pax_find_mirror_vma(vma))
-+ goto Einval;
++ return ERR_PTR(-EINVAL);
+#endif
+
/* We can't remap across vm area boundaries */
if (old_len > vma->vm_end - addr)
- goto Efault;
-@@ -405,20 +416,25 @@ static unsigned long mremap_to(unsigned long addr, unsigned long old_len,
+ return ERR_PTR(-EFAULT);
+@@ -396,20 +407,25 @@ static unsigned long mremap_to(unsigned long addr, unsigned long old_len,
unsigned long ret = -EINVAL;
unsigned long charged = 0;
unsigned long map_flags;
goto out;
ret = do_munmap(mm, new_addr, new_len);
-@@ -487,6 +503,7 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len,
+@@ -478,6 +494,7 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len,
unsigned long ret = -EINVAL;
unsigned long charged = 0;
bool locked = false;
if (flags & ~(MREMAP_FIXED | MREMAP_MAYMOVE))
return ret;
-@@ -508,6 +525,17 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len,
+@@ -499,6 +516,17 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len,
if (!new_len)
return ret;
down_write(¤t->mm->mmap_sem);
if (flags & MREMAP_FIXED) {
-@@ -558,6 +586,7 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len,
+@@ -549,6 +577,7 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len,
new_addr = addr;
}
ret = addr;
goto out;
}
}
-@@ -581,7 +610,12 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len,
+@@ -572,7 +601,12 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len,
goto out;
}
out:
if (ret & ~PAGE_MASK)
diff --git a/mm/nommu.c b/mm/nommu.c
-index 3fba2dc..fdad748 100644
+index e544508..b56ce7a 100644
--- a/mm/nommu.c
+++ b/mm/nommu.c
@@ -72,7 +72,6 @@ int sysctl_max_map_count = DEFAULT_MAX_MAP_COUNT;
struct mm_struct *mm;
diff --git a/mm/page-writeback.c b/mm/page-writeback.c
-index ad05f2f..cee723a 100644
+index eb59f7e..b23a2a8 100644
--- a/mm/page-writeback.c
+++ b/mm/page-writeback.c
@@ -664,7 +664,7 @@ static long long pos_ratio_polynom(unsigned long setpoint,
unsigned long bg_thresh,
unsigned long dirty,
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
-index 40e2942..0eb29a2 100644
+index ebffa0e..c61160a 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -61,6 +61,7 @@
if (order && (gfp_flags & __GFP_COMP))
prep_compound_page(page, order);
-@@ -1699,7 +1739,7 @@ struct page *buffered_rmqueue(struct zone *preferred_zone,
+@@ -1649,6 +1689,8 @@ int __isolate_free_page(struct page *page, unsigned int order)
+ zone->free_area[order].nr_free--;
+ rmv_page_order(page);
+
++ set_page_owner(page, order, 0);
++
+ /* Set the pageblock if the isolated page is at least a pageblock */
+ if (order >= pageblock_order - 1) {
+ struct page *endpage = page + (1 << order) - 1;
+@@ -1660,7 +1702,7 @@ int __isolate_free_page(struct page *page, unsigned int order)
+ }
+ }
+
+- set_page_owner(page, order, 0);
++
+ return 1UL << order;
+ }
+
+@@ -1749,7 +1791,7 @@ struct page *buffered_rmqueue(struct zone *preferred_zone,
}
__mod_zone_page_state(zone, NR_ALLOC_BATCH, -(1 << order));
!test_bit(ZONE_FAIR_DEPLETED, &zone->flags))
set_bit(ZONE_FAIR_DEPLETED, &zone->flags);
-@@ -2018,7 +2058,7 @@ static void reset_alloc_batches(struct zone *preferred_zone)
+@@ -2068,7 +2110,7 @@ static void reset_alloc_batches(struct zone *preferred_zone)
do {
mod_zone_page_state(zone, NR_ALLOC_BATCH,
high_wmark_pages(zone) - low_wmark_pages(zone) -
clear_bit(ZONE_FAIR_DEPLETED, &zone->flags);
} while (zone++ != preferred_zone);
}
-@@ -5738,7 +5778,7 @@ static void __setup_per_zone_wmarks(void)
+@@ -5781,7 +5823,7 @@ static void __setup_per_zone_wmarks(void)
__mod_zone_page_state(zone, NR_ALLOC_BATCH,
high_wmark_pages(zone) - low_wmark_pages(zone) -
setup_zone_migrate_reserve(zone);
spin_unlock_irqrestore(&zone->lock, flags);
diff --git a/mm/percpu.c b/mm/percpu.c
-index 73c97a5..508ee25 100644
+index 2dd7448..9bb6305 100644
--- a/mm/percpu.c
+++ b/mm/percpu.c
@@ -131,7 +131,7 @@ static unsigned int pcpu_low_unit_cpu __read_mostly;
static const int *pcpu_unit_map __read_mostly; /* cpu -> unit */
diff --git a/mm/process_vm_access.c b/mm/process_vm_access.c
-index b159769..d07037f 100644
+index e88d071..d80e01a 100644
--- a/mm/process_vm_access.c
+++ b/mm/process_vm_access.c
@@ -13,6 +13,7 @@
if (!mm || IS_ERR(mm)) {
rc = IS_ERR(mm) ? PTR_ERR(mm) : -ESRCH;
diff --git a/mm/rmap.c b/mm/rmap.c
-index c161a14..8a069bb 100644
+index 24dd3f9..4eb43f4 100644
--- a/mm/rmap.c
+++ b/mm/rmap.c
@@ -166,6 +166,10 @@ int anon_vma_prepare(struct vm_area_struct *vma)
/*
diff --git a/mm/shmem.c b/mm/shmem.c
-index cf2d0ca..ec06b8b 100644
+index 47d536e..8321b4e 100644
--- a/mm/shmem.c
+++ b/mm/shmem.c
@@ -33,7 +33,7 @@
#include <linux/swap.h>
- #include <linux/aio.h>
+ #include <linux/uio.h>
-static struct vfsmount *shm_mnt;
+struct vfsmount *shm_mnt;
return -ENOMEM;
diff --git a/mm/slab.c b/mm/slab.c
-index c4b89ea..20990be 100644
+index 7eb38dd..a5172b1 100644
--- a/mm/slab.c
+++ b/mm/slab.c
@@ -314,10 +314,12 @@ static void kmem_cache_node_init(struct kmem_cache_node *parent)
{
u32 offset = (obj - page->s_mem);
return reciprocal_divide(offset, cache->reciprocal_buffer_size);
-@@ -1438,7 +1442,7 @@ void __init kmem_cache_init(void)
+@@ -1452,7 +1456,7 @@ void __init kmem_cache_init(void)
* structures first. Without this, further allocations will bug.
*/
kmalloc_caches[INDEX_NODE] = create_kmalloc_cache("kmalloc-node",
slab_state = PARTIAL_NODE;
slab_early_init = 0;
-@@ -2059,7 +2063,7 @@ __kmem_cache_alias(const char *name, size_t size, size_t align,
+@@ -2073,7 +2077,7 @@ __kmem_cache_alias(const char *name, size_t size, size_t align,
cachep = find_mergeable(size, align, flags, name, ctor);
if (cachep) {
/*
* Adjust the object sizes so that we clear
-@@ -3357,6 +3361,20 @@ static inline void __cache_free(struct kmem_cache *cachep, void *objp,
+@@ -3371,6 +3375,20 @@ static inline void __cache_free(struct kmem_cache *cachep, void *objp,
struct array_cache *ac = cpu_cache_get(cachep);
check_irq_off();
kmemleak_free_recursive(objp, cachep->flags);
objp = cache_free_debugcheck(cachep, objp, caller);
-@@ -3469,7 +3487,7 @@ __do_kmalloc_node(size_t size, gfp_t flags, int node, unsigned long caller)
+@@ -3483,7 +3501,7 @@ __do_kmalloc_node(size_t size, gfp_t flags, int node, unsigned long caller)
return kmem_cache_alloc_node_trace(cachep, flags, node, size);
}
{
return __do_kmalloc_node(size, flags, node, _RET_IP_);
}
-@@ -3489,7 +3507,7 @@ EXPORT_SYMBOL(__kmalloc_node_track_caller);
+@@ -3503,7 +3521,7 @@ EXPORT_SYMBOL(__kmalloc_node_track_caller);
* @flags: the type of memory to allocate (see kmalloc).
* @caller: function caller for debug tracking of the caller
*/
unsigned long caller)
{
struct kmem_cache *cachep;
-@@ -3562,6 +3580,7 @@ void kfree(const void *objp)
+@@ -3576,6 +3594,7 @@ void kfree(const void *objp)
if (unlikely(ZERO_OR_NULL_PTR(objp)))
return;
local_irq_save(flags);
kfree_debugcheck(objp);
c = virt_to_cache(objp);
-@@ -3981,14 +4000,22 @@ void slabinfo_show_stats(struct seq_file *m, struct kmem_cache *cachep)
+@@ -3995,14 +4014,22 @@ void slabinfo_show_stats(struct seq_file *m, struct kmem_cache *cachep)
}
/* cpu stats */
{
#endif
}
-@@ -4196,13 +4223,69 @@ static const struct file_operations proc_slabstats_operations = {
+@@ -4210,13 +4237,69 @@ static const struct file_operations proc_slabstats_operations = {
static int __init slab_proc_init(void)
{
#ifdef CONFIG_DEBUG_SLAB_LEAK
{
void *ret;
diff --git a/mm/slob.c b/mm/slob.c
-index 94a7fed..cf3fb1a 100644
+index 4765f65..fafa9d5 100644
--- a/mm/slob.c
+++ b/mm/slob.c
@@ -157,7 +157,7 @@ static void set_slob(slob_t *s, slobidx_t size, slob_t *next)
@@ -534,23 +636,33 @@ int __kmem_cache_create(struct kmem_cache *c, unsigned long flags)
- void *slob_alloc_node(struct kmem_cache *c, gfp_t flags, int node)
+ static void *slob_alloc_node(struct kmem_cache *c, gfp_t flags, int node)
{
- void *b;
+ void *b = NULL;
if (b && c->ctor)
c->ctor(b);
-@@ -567,7 +679,7 @@ void *kmem_cache_alloc(struct kmem_cache *cachep, gfp_t flags)
+@@ -566,7 +678,7 @@ void *kmem_cache_alloc(struct kmem_cache *cachep, gfp_t flags)
EXPORT_SYMBOL(kmem_cache_alloc);
#ifdef CONFIG_NUMA
{
return __do_kmalloc_node(size, gfp, node, _RET_IP_);
}
-@@ -580,12 +692,16 @@ void *kmem_cache_alloc_node(struct kmem_cache *cachep, gfp_t gfp, int node)
+@@ -579,12 +691,16 @@ void *kmem_cache_alloc_node(struct kmem_cache *cachep, gfp_t gfp, int node)
EXPORT_SYMBOL(kmem_cache_alloc_node);
#endif
}
static void kmem_rcu_free(struct rcu_head *head)
-@@ -593,22 +709,36 @@ static void kmem_rcu_free(struct rcu_head *head)
+@@ -592,22 +708,36 @@ static void kmem_rcu_free(struct rcu_head *head)
struct slob_rcu *slob_rcu = (struct slob_rcu *)head;
void *b = (void *)slob_rcu - (slob_rcu->size - sizeof(struct slob_rcu));
EXPORT_SYMBOL(kmem_cache_free);
diff --git a/mm/slub.c b/mm/slub.c
-index 82c4737..55c316a 100644
+index 54c0876..31383a1 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -198,7 +198,7 @@ struct track {
s, (void *)t->addr, jiffies - t->when, t->cpu, t->pid);
#ifdef CONFIG_STACKTRACE
{
-@@ -2709,6 +2709,14 @@ static __always_inline void slab_free(struct kmem_cache *s,
+@@ -2707,6 +2707,14 @@ static __always_inline void slab_free(struct kmem_cache *s,
slab_free_hook(s, x);
redo:
/*
* Determine the currently cpus per cpu slab.
-@@ -3050,6 +3058,9 @@ static int calculate_sizes(struct kmem_cache *s, int forced_order)
+@@ -3048,6 +3056,9 @@ static int calculate_sizes(struct kmem_cache *s, int forced_order)
s->inuse = size;
if (((flags & (SLAB_DESTROY_BY_RCU | SLAB_POISON)) ||
s->ctor)) {
/*
* Relocate free pointer after the object if it is not
-@@ -3304,7 +3315,7 @@ static int __init setup_slub_min_objects(char *str)
+@@ -3302,7 +3313,7 @@ static int __init setup_slub_min_objects(char *str)
__setup("slub_min_objects=", setup_slub_min_objects);
{
struct kmem_cache *s;
void *ret;
-@@ -3342,7 +3353,7 @@ static void *kmalloc_large_node(size_t size, gfp_t flags, int node)
+@@ -3340,7 +3351,7 @@ static void *kmalloc_large_node(size_t size, gfp_t flags, int node)
return ptr;
}
{
struct kmem_cache *s;
void *ret;
-@@ -3390,6 +3401,59 @@ static size_t __ksize(const void *object)
+@@ -3388,6 +3399,59 @@ static size_t __ksize(const void *object)
return slab_ksize(page->slab_cache);
}
size_t ksize(const void *object)
{
size_t size = __ksize(object);
-@@ -3410,6 +3474,7 @@ void kfree(const void *x)
+@@ -3408,6 +3472,7 @@ void kfree(const void *x)
if (unlikely(ZERO_OR_NULL_PTR(x)))
return;
page = virt_to_head_page(x);
if (unlikely(!PageSlab(page))) {
BUG_ON(!PageCompound(page));
-@@ -3726,7 +3791,7 @@ __kmem_cache_alias(const char *name, size_t size, size_t align,
+@@ -3724,7 +3789,7 @@ __kmem_cache_alias(const char *name, size_t size, size_t align,
s = find_mergeable(size, align, flags, name, ctor);
if (s) {
/*
* Adjust the object sizes so that we clear
-@@ -3742,7 +3807,7 @@ __kmem_cache_alias(const char *name, size_t size, size_t align,
+@@ -3740,7 +3805,7 @@ __kmem_cache_alias(const char *name, size_t size, size_t align,
}
if (sysfs_slab_alias(s, name)) {
s = NULL;
}
}
-@@ -3859,7 +3924,7 @@ void *__kmalloc_node_track_caller(size_t size, gfp_t gfpflags,
+@@ -3857,7 +3922,7 @@ void *__kmalloc_node_track_caller(size_t size, gfp_t gfpflags,
}
#endif
static int count_inuse(struct page *page)
{
return page->inuse;
-@@ -4140,7 +4205,11 @@ static int list_locations(struct kmem_cache *s, char *buf,
+@@ -4138,7 +4203,11 @@ static int list_locations(struct kmem_cache *s, char *buf,
len += sprintf(buf + len, "%7ld ", l->count);
if (l->addr)
else
len += sprintf(buf + len, "<not-available>");
-@@ -4238,12 +4307,12 @@ static void __init resiliency_test(void)
+@@ -4236,12 +4305,12 @@ static void __init resiliency_test(void)
validate_slab_cache(kmalloc_caches[9]);
}
#else
enum slab_stat_type {
SL_ALL, /* All slabs */
SL_PARTIAL, /* Only partially allocated slabs */
-@@ -4480,13 +4549,17 @@ static ssize_t ctor_show(struct kmem_cache *s, char *buf)
+@@ -4478,13 +4547,17 @@ static ssize_t ctor_show(struct kmem_cache *s, char *buf)
{
if (!s->ctor)
return 0;
}
SLAB_ATTR_RO(aliases);
-@@ -4574,6 +4647,22 @@ static ssize_t cache_dma_show(struct kmem_cache *s, char *buf)
+@@ -4572,6 +4645,22 @@ static ssize_t cache_dma_show(struct kmem_cache *s, char *buf)
SLAB_ATTR_RO(cache_dma);
#endif
static ssize_t destroy_by_rcu_show(struct kmem_cache *s, char *buf)
{
return sprintf(buf, "%d\n", !!(s->flags & SLAB_DESTROY_BY_RCU));
-@@ -4629,7 +4718,7 @@ static ssize_t trace_store(struct kmem_cache *s, const char *buf,
+@@ -4627,7 +4716,7 @@ static ssize_t trace_store(struct kmem_cache *s, const char *buf,
* as well as cause other issues like converting a mergeable
* cache into an umergeable one.
*/
return -EINVAL;
s->flags &= ~SLAB_TRACE;
-@@ -4749,7 +4838,7 @@ static ssize_t failslab_show(struct kmem_cache *s, char *buf)
+@@ -4747,7 +4836,7 @@ static ssize_t failslab_show(struct kmem_cache *s, char *buf)
static ssize_t failslab_store(struct kmem_cache *s, const char *buf,
size_t length)
{
return -EINVAL;
s->flags &= ~SLAB_FAILSLAB;
-@@ -4916,6 +5005,12 @@ static struct attribute *slab_attrs[] = {
+@@ -4914,6 +5003,12 @@ static struct attribute *slab_attrs[] = {
#ifdef CONFIG_ZONE_DMA
&cache_dma_attr.attr,
#endif
#ifdef CONFIG_NUMA
&remote_node_defrag_ratio_attr.attr,
#endif
-@@ -5157,6 +5252,7 @@ static char *create_unique_id(struct kmem_cache *s)
+@@ -5155,6 +5250,7 @@ static char *create_unique_id(struct kmem_cache *s)
return name;
}
static int sysfs_slab_add(struct kmem_cache *s)
{
int err;
-@@ -5230,6 +5326,7 @@ void sysfs_slab_remove(struct kmem_cache *s)
+@@ -5228,6 +5324,7 @@ void sysfs_slab_remove(struct kmem_cache *s)
kobject_del(&s->kobj);
kobject_put(&s->kobj);
}
/*
* Need to buffer aliases during bootup until sysfs becomes
-@@ -5243,6 +5340,7 @@ struct saved_alias {
+@@ -5241,6 +5338,7 @@ struct saved_alias {
static struct saved_alias *alias_list;
static int sysfs_slab_alias(struct kmem_cache *s, const char *name)
{
struct saved_alias *al;
-@@ -5265,6 +5363,7 @@ static int sysfs_slab_alias(struct kmem_cache *s, const char *name)
+@@ -5263,6 +5361,7 @@ static int sysfs_slab_alias(struct kmem_cache *s, const char *name)
alias_list = al;
return 0;
}
}
}
diff --git a/mm/swap.c b/mm/swap.c
-index cd3a5e6..40c0c8f 100644
+index a7251a8..ac754a9 100644
--- a/mm/swap.c
+++ b/mm/swap.c
-@@ -31,6 +31,7 @@
- #include <linux/memcontrol.h>
- #include <linux/gfp.h>
- #include <linux/uio.h>
-+#include <linux/hugetlb.h>
-
- #include "internal.h"
-
-@@ -77,6 +78,8 @@ static void __put_compound_page(struct page *page)
-
- __page_cache_release(page);
+@@ -85,6 +85,8 @@ static void __put_compound_page(struct page *page)
+ if (!PageHuge(page))
+ __page_cache_release(page);
dtor = get_compound_page_dtor(page);
+ if (!PageHuge(page))
+ BUG_ON(dtor != free_compound_page);
}
diff --git a/mm/swapfile.c b/mm/swapfile.c
-index 63f55cc..31874e6 100644
+index a7e7210..b286e7d 100644
--- a/mm/swapfile.c
+++ b/mm/swapfile.c
@@ -84,7 +84,7 @@ static DEFINE_MUTEX(swapon_mutex);
if (S_ISREG(inode->i_mode))
diff --git a/mm/util.c b/mm/util.c
-index 3981ae9..28b585b 100644
+index 68ff8a5..40c7a70 100644
--- a/mm/util.c
+++ b/mm/util.c
@@ -233,6 +233,12 @@ struct task_struct *task_of_stack(struct task_struct *task,
mm->get_unmapped_area = arch_get_unmapped_area;
}
#endif
-@@ -403,6 +409,9 @@ int get_cmdline(struct task_struct *task, char *buffer, int buflen)
+@@ -434,6 +440,9 @@ int get_cmdline(struct task_struct *task, char *buffer, int buflen)
if (!mm->arg_end)
goto out_mm; /* Shh! No looking before we're done */
if (len > buflen)
diff --git a/mm/vmalloc.c b/mm/vmalloc.c
-index 49abccf..7bd1931 100644
+index 2faaa29..9744185 100644
--- a/mm/vmalloc.c
+++ b/mm/vmalloc.c
-@@ -39,20 +39,65 @@ struct vfree_deferred {
+@@ -40,20 +40,65 @@ struct vfree_deferred {
struct work_struct wq;
};
static DEFINE_PER_CPU(struct vfree_deferred, vfree_deferred);
/*** Page table manipulation functions ***/
static void vunmap_pte_range(pmd_t *pmd, unsigned long addr, unsigned long end)
-@@ -61,8 +106,19 @@ static void vunmap_pte_range(pmd_t *pmd, unsigned long addr, unsigned long end)
+@@ -62,8 +107,19 @@ static void vunmap_pte_range(pmd_t *pmd, unsigned long addr, unsigned long end)
pte = pte_offset_kernel(pmd, addr);
do {
} while (pte++, addr += PAGE_SIZE, addr != end);
}
-@@ -122,16 +178,29 @@ static int vmap_pte_range(pmd_t *pmd, unsigned long addr,
+@@ -127,16 +183,29 @@ static int vmap_pte_range(pmd_t *pmd, unsigned long addr,
pte = pte_alloc_kernel(pmd, addr);
if (!pte)
return -ENOMEM;
return 0;
}
-@@ -141,7 +210,7 @@ static int vmap_pmd_range(pud_t *pud, unsigned long addr,
+@@ -146,7 +215,7 @@ static int vmap_pmd_range(pud_t *pud, unsigned long addr,
pmd_t *pmd;
unsigned long next;
if (!pmd)
return -ENOMEM;
do {
-@@ -158,7 +227,7 @@ static int vmap_pud_range(pgd_t *pgd, unsigned long addr,
+@@ -163,7 +232,7 @@ static int vmap_pud_range(pgd_t *pgd, unsigned long addr,
pud_t *pud;
unsigned long next;
if (!pud)
return -ENOMEM;
do {
-@@ -218,6 +287,12 @@ int is_vmalloc_or_module_addr(const void *x)
+@@ -223,6 +292,12 @@ int is_vmalloc_or_module_addr(const void *x)
if (addr >= MODULES_VADDR && addr < MODULES_END)
return 1;
#endif
return is_vmalloc_addr(x);
}
-@@ -238,8 +313,14 @@ struct page *vmalloc_to_page(const void *vmalloc_addr)
+@@ -243,8 +318,14 @@ struct page *vmalloc_to_page(const void *vmalloc_addr)
if (!pgd_none(*pgd)) {
pud_t *pud = pud_offset(pgd, addr);
if (!pmd_none(*pmd)) {
pte_t *ptep, pte;
-@@ -341,7 +422,7 @@ static void purge_vmap_area_lazy(void);
+@@ -346,7 +427,7 @@ static void purge_vmap_area_lazy(void);
* Allocate a region of KVA of the specified size and alignment, within the
* vstart and vend.
*/
unsigned long align,
unsigned long vstart, unsigned long vend,
int node, gfp_t gfp_mask)
-@@ -1182,13 +1263,27 @@ void __init vmalloc_init(void)
+@@ -1202,13 +1283,27 @@ void __init vmalloc_init(void)
for_each_possible_cpu(i) {
struct vmap_block_queue *vbq;
struct vfree_deferred *p;
}
/* Import existing vmlist entries. */
-@@ -1313,6 +1408,16 @@ static struct vm_struct *__get_vm_area_node(unsigned long size,
+@@ -1333,6 +1428,16 @@ static struct vm_struct *__get_vm_area_node(unsigned long size,
struct vm_struct *area;
BUG_ON(in_interrupt());
+#endif
+
if (flags & VM_IOREMAP)
- align = 1ul << clamp(fls(size), PAGE_SHIFT, IOREMAP_MAX_ORDER);
-
-@@ -1510,13 +1615,36 @@ EXPORT_SYMBOL(vfree);
+ align = 1ul << clamp_t(int, fls_long(size),
+ PAGE_SHIFT, IOREMAP_MAX_ORDER);
+@@ -1531,13 +1636,36 @@ EXPORT_SYMBOL(vfree);
*/
void vunmap(const void *addr)
{
/**
* vmap - map an array of pages into virtually contiguous space
* @pages: array of page pointers
-@@ -1537,6 +1665,11 @@ void *vmap(struct page **pages, unsigned int count,
+@@ -1558,6 +1686,11 @@ void *vmap(struct page **pages, unsigned int count,
if (count > totalram_pages)
return NULL;
area = get_vm_area_caller((count << PAGE_SHIFT), flags,
__builtin_return_address(0));
if (!area)
-@@ -1641,6 +1774,14 @@ void *__vmalloc_node_range(unsigned long size, unsigned long align,
+@@ -1662,6 +1795,14 @@ void *__vmalloc_node_range(unsigned long size, unsigned long align,
if (!size || (size >> PAGE_SHIFT) > totalram_pages)
goto fail;
area = __get_vm_area_node(size, align, VM_ALLOC | VM_UNINITIALIZED |
vm_flags, start, end, node, gfp_mask, caller);
if (!area)
-@@ -1817,10 +1958,9 @@ EXPORT_SYMBOL(vzalloc_node);
+@@ -1838,10 +1979,9 @@ EXPORT_SYMBOL(vzalloc_node);
* For tight control over page level allocator and protection flags
* use __vmalloc() instead.
*/
NUMA_NO_NODE, __builtin_return_address(0));
}
-@@ -2127,6 +2267,8 @@ int remap_vmalloc_range_partial(struct vm_area_struct *vma, unsigned long uaddr,
+@@ -2148,6 +2288,8 @@ int remap_vmalloc_range_partial(struct vm_area_struct *vma, unsigned long uaddr,
{
struct vm_struct *area;
size = PAGE_ALIGN(size);
if (!PAGE_ALIGNED(uaddr) || !PAGE_ALIGNED(kaddr))
-@@ -2609,7 +2751,11 @@ static int s_show(struct seq_file *m, void *p)
+@@ -2630,7 +2772,11 @@ static int s_show(struct seq_file *m, void *p)
v->addr, v->addr + v->size, v->size);
if (v->caller)
return 0;
}
diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c
-index 64c6bed..b79a5de 100644
+index 59555f0..fd7ade9 100644
--- a/net/8021q/vlan.c
+++ b/net/8021q/vlan.c
-@@ -481,7 +481,7 @@ out:
+@@ -491,7 +491,7 @@ out:
return NOTIFY_DONE;
}
.notifier_call = vlan_device_event,
};
-@@ -556,8 +556,7 @@ static int vlan_ioctl_handler(struct net *net, void __user *arg)
+@@ -566,8 +566,7 @@ static int vlan_ioctl_handler(struct net *net, void __user *arg)
err = -EPERM;
if (!ns_capable(net->user_ns, CAP_NET_ADMIN))
break;
.kind = "vlan",
.maxtype = IFLA_VLAN_MAX,
.policy = vlan_policy,
-diff --git a/net/9p/client.c b/net/9p/client.c
-index e86a9bea..e91f70e 100644
---- a/net/9p/client.c
-+++ b/net/9p/client.c
-@@ -596,7 +596,7 @@ static int p9_check_zc_errors(struct p9_client *c, struct p9_req_t *req,
- len - inline_len);
- } else {
- err = copy_from_user(ename + inline_len,
-- uidata, len - inline_len);
-+ (char __force_user *)uidata, len - inline_len);
- if (err) {
- err = -EFAULT;
- goto out_err;
-@@ -1570,7 +1570,7 @@ p9_client_read(struct p9_fid *fid, char *data, char __user *udata, u64 offset,
- kernel_buf = 1;
- indata = data;
- } else
-- indata = (__force char *)udata;
-+ indata = (__force_kernel char *)udata;
- /*
- * response header len is 11
- * PDU Header(7) + IO Size (4)
-@@ -1645,7 +1645,7 @@ p9_client_write(struct p9_fid *fid, char *data, const char __user *udata,
- kernel_buf = 1;
- odata = data;
- } else
-- odata = (char *)udata;
-+ odata = (char __force_kernel *)udata;
- req = p9_client_zc_rpc(clnt, P9_TWRITE, NULL, odata, 0, rsize,
- P9_ZC_HDR_SZ, kernel_buf, "dqd",
- fid->fid, offset, rsize);
diff --git a/net/9p/mod.c b/net/9p/mod.c
index 6ab36ae..6f1841b 100644
--- a/net/9p/mod.c
}
EXPORT_SYMBOL(v9fs_unregister_trans);
diff --git a/net/9p/trans_fd.c b/net/9p/trans_fd.c
-index 80d08f6..de63fd1 100644
+index bced8c0..ef253b7 100644
--- a/net/9p/trans_fd.c
+++ b/net/9p/trans_fd.c
@@ -428,7 +428,7 @@ static int p9_fd_write(struct p9_client *client, void *v, int len)
#undef __HANDLE_ITEM
}
diff --git a/net/atm/lec.c b/net/atm/lec.c
-index 4b98f89..5a2f6cb 100644
+index cd3b379..977a3c9 100644
--- a/net/atm/lec.c
+++ b/net/atm/lec.c
@@ -111,9 +111,9 @@ static inline void lec_arp_put(struct lec_arp_table *entry)
__AAL_STAT_ITEMS
#undef __HANDLE_ITEM
}
+diff --git a/net/ax25/ax25_subr.c b/net/ax25/ax25_subr.c
+index 1997538..3b78e84 100644
+--- a/net/ax25/ax25_subr.c
++++ b/net/ax25/ax25_subr.c
+@@ -264,6 +264,7 @@ void ax25_disconnect(ax25_cb *ax25, int reason)
+ {
+ ax25_clear_queues(ax25);
+
++ ax25_stop_heartbeat(ax25);
+ ax25_stop_t1timer(ax25);
+ ax25_stop_t2timer(ax25);
+ ax25_stop_t3timer(ax25);
diff --git a/net/ax25/sysctl_net_ax25.c b/net/ax25/sysctl_net_ax25.c
index 919a5ce..cc6b444 100644
--- a/net/ax25/sysctl_net_ax25.c
atomic_t batman_queue_left;
char num_ifaces;
diff --git a/net/bluetooth/hci_sock.c b/net/bluetooth/hci_sock.c
-index 1d65c5b..43e55fd 100644
+index 56f9edb..0a13cd1 100644
--- a/net/bluetooth/hci_sock.c
+++ b/net/bluetooth/hci_sock.c
-@@ -1042,7 +1042,7 @@ static int hci_sock_setsockopt(struct socket *sock, int level, int optname,
+@@ -1241,7 +1241,7 @@ static int hci_sock_setsockopt(struct socket *sock, int level, int optname,
uf.event_mask[1] = *((u32 *) f->event_mask + 1);
}
err = -EFAULT;
break;
diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
-index 6ba33f9..4afc26f 100644
+index dad4197..253bbdf 100644
--- a/net/bluetooth/l2cap_core.c
+++ b/net/bluetooth/l2cap_core.c
-@@ -3534,8 +3534,10 @@ static int l2cap_parse_conf_rsp(struct l2cap_chan *chan, void *rsp, int len,
+@@ -3541,8 +3541,10 @@ static int l2cap_parse_conf_rsp(struct l2cap_chan *chan, void *rsp, int len,
break;
case L2CAP_CONF_RFC:
if (test_bit(CONF_STATE2_DEVICE, &chan->conf_state) &&
rfc.mode != chan->mode)
diff --git a/net/bluetooth/l2cap_sock.c b/net/bluetooth/l2cap_sock.c
-index 60694f0..32623ed 100644
+index a7278f0..3443626 100644
--- a/net/bluetooth/l2cap_sock.c
+++ b/net/bluetooth/l2cap_sock.c
@@ -633,7 +633,8 @@ static int l2cap_sock_setsockopt_old(struct socket *sock, int optname,
err = -EFAULT;
break;
diff --git a/net/bluetooth/rfcomm/sock.c b/net/bluetooth/rfcomm/sock.c
-index 3c6d2c8..6afc970 100644
+index 825e8fb..efc24a4 100644
--- a/net/bluetooth/rfcomm/sock.c
+++ b/net/bluetooth/rfcomm/sock.c
@@ -686,7 +686,7 @@ static int rfcomm_sock_setsockopt(struct socket *sock, int level, int optname, c
tty_port_close(&dev->port, tty, filp);
}
+diff --git a/net/bridge/br_mdb.c b/net/bridge/br_mdb.c
+index e29ad70b..cc00066 100644
+--- a/net/bridge/br_mdb.c
++++ b/net/bridge/br_mdb.c
+@@ -371,6 +371,7 @@ static int __br_mdb_add(struct net *net, struct net_bridge *br,
+ if (!p || p->br != br || p->state == BR_STATE_DISABLED)
+ return -EINVAL;
+
++ memset(&ip, 0, sizeof(ip));
+ ip.proto = entry->addr.proto;
+ if (ip.proto == htons(ETH_P_IP))
+ ip.u.ip4 = entry->addr.u.ip4;
+@@ -417,6 +418,7 @@ static int __br_mdb_del(struct net_bridge *br, struct br_mdb_entry *entry)
+ if (!netif_running(br->dev) || br->multicast_disabled)
+ return -EINVAL;
+
++ memset(&ip, 0, sizeof(ip));
+ ip.proto = entry->addr.proto;
+ if (ip.proto == htons(ETH_P_IP)) {
+ if (timer_pending(&br->ip4_other_query.timer))
diff --git a/net/bridge/br_netlink.c b/net/bridge/br_netlink.c
-index 4fbcea0..69a6786 100644
+index 4b5c236..0627070 100644
--- a/net/bridge/br_netlink.c
+++ b/net/bridge/br_netlink.c
-@@ -726,7 +726,7 @@ static struct rtnl_af_ops br_af_ops __read_mostly = {
+@@ -841,7 +841,7 @@ static struct rtnl_af_ops br_af_ops __read_mostly = {
.get_link_af_size = br_get_link_af_size,
};
.priv_size = sizeof(struct chnl_net),
.setup = ipcaif_net_setup,
diff --git a/net/can/af_can.c b/net/can/af_can.c
-index 32d710e..93bcf05 100644
+index 689c818..6323851 100644
--- a/net/can/af_can.c
+++ b/net/can/af_can.c
-@@ -884,7 +884,7 @@ static const struct net_proto_family can_family_ops = {
+@@ -888,7 +888,7 @@ static const struct net_proto_family can_family_ops = {
};
/* notifier block for netdevice event */
};
diff --git a/net/can/bcm.c b/net/can/bcm.c
-index ee9ffd9..dfdf3d4 100644
+index b523453..f96e639 100644
--- a/net/can/bcm.c
+++ b/net/can/bcm.c
-@@ -1619,7 +1619,7 @@ static int __init bcm_module_init(void)
+@@ -1618,7 +1618,7 @@ static int __init bcm_module_init(void)
}
/* create /proc/net/can-bcm directory */
if (!can_dir) {
printk(KERN_INFO "can: failed to create /proc/net/can . "
diff --git a/net/ceph/messenger.c b/net/ceph/messenger.c
-index a9f4ae4..ee19b92 100644
+index 967080a..5e75f04 100644
--- a/net/ceph/messenger.c
+++ b/net/ceph/messenger.c
@@ -188,7 +188,7 @@ static void con_fault(struct ceph_connection *con);
switch (ss->ss_family) {
diff --git a/net/compat.c b/net/compat.c
-index f7bd286..76ea56a 100644
+index 5cfd26a..7e43828 100644
--- a/net/compat.c
+++ b/net/compat.c
-@@ -100,20 +100,20 @@ ssize_t get_compat_msghdr(struct msghdr *kmsg,
+@@ -98,20 +98,20 @@ int get_compat_msghdr(struct msghdr *kmsg,
#define CMSG_COMPAT_FIRSTHDR(msg) \
(((msg)->msg_controllen) >= sizeof(struct compat_cmsghdr) ? \
msg->msg_controllen)
return NULL;
return (struct compat_cmsghdr __user *)ptr;
-@@ -203,7 +203,7 @@ Efault:
+@@ -201,7 +201,7 @@ Efault:
int put_cmsg_compat(struct msghdr *kmsg, int level, int type, int len, void *data)
{
struct compat_cmsghdr cmhdr;
struct compat_timeval ctv;
struct compat_timespec cts[3];
-@@ -259,7 +259,7 @@ int put_cmsg_compat(struct msghdr *kmsg, int level, int type, int len, void *dat
+@@ -257,7 +257,7 @@ int put_cmsg_compat(struct msghdr *kmsg, int level, int type, int len, void *dat
void scm_detach_fds_compat(struct msghdr *kmsg, struct scm_cookie *scm)
{
int fdmax = (kmsg->msg_controllen - sizeof(struct compat_cmsghdr)) / sizeof(int);
int fdnum = scm->fp->count;
struct file **fp = scm->fp->fp;
-@@ -347,7 +347,7 @@ static int do_set_sock_timeout(struct socket *sock, int level,
+@@ -345,7 +345,7 @@ static int do_set_sock_timeout(struct socket *sock, int level,
return -EFAULT;
old_fs = get_fs();
set_fs(KERNEL_DS);
set_fs(old_fs);
return err;
-@@ -408,7 +408,7 @@ static int do_get_sock_timeout(struct socket *sock, int level, int optname,
+@@ -406,7 +406,7 @@ static int do_get_sock_timeout(struct socket *sock, int level, int optname,
len = sizeof(ktime);
old_fs = get_fs();
set_fs(KERNEL_DS);
set_fs(old_fs);
if (!err) {
-@@ -551,7 +551,7 @@ int compat_mc_setsockopt(struct sock *sock, int level, int optname,
+@@ -549,7 +549,7 @@ int compat_mc_setsockopt(struct sock *sock, int level, int optname,
case MCAST_JOIN_GROUP:
case MCAST_LEAVE_GROUP:
{
struct group_req __user *kgr =
compat_alloc_user_space(sizeof(struct group_req));
u32 interface;
-@@ -572,7 +572,7 @@ int compat_mc_setsockopt(struct sock *sock, int level, int optname,
+@@ -570,7 +570,7 @@ int compat_mc_setsockopt(struct sock *sock, int level, int optname,
case MCAST_BLOCK_SOURCE:
case MCAST_UNBLOCK_SOURCE:
{
struct group_source_req __user *kgsr = compat_alloc_user_space(
sizeof(struct group_source_req));
u32 interface;
-@@ -593,7 +593,7 @@ int compat_mc_setsockopt(struct sock *sock, int level, int optname,
+@@ -591,7 +591,7 @@ int compat_mc_setsockopt(struct sock *sock, int level, int optname,
}
case MCAST_MSFILTER:
{
struct group_filter __user *kgf;
u32 interface, fmode, numsrc;
-@@ -631,7 +631,7 @@ int compat_mc_getsockopt(struct sock *sock, int level, int optname,
+@@ -629,7 +629,7 @@ int compat_mc_getsockopt(struct sock *sock, int level, int optname,
char __user *optval, int __user *optlen,
int (*getsockopt)(struct sock *, int, int, char __user *, int __user *))
{
struct group_filter __user *kgf;
int __user *koptlen;
u32 interface, fmode, numsrc;
-@@ -775,7 +775,7 @@ COMPAT_SYSCALL_DEFINE2(socketcall, int, call, u32 __user *, args)
+@@ -773,7 +773,7 @@ COMPAT_SYSCALL_DEFINE2(socketcall, int, call, u32 __user *, args)
if (call < SYS_SOCKET || call > SYS_SENDMMSG)
return -EINVAL;
a0 = a[0];
a1 = a[1];
diff --git a/net/core/datagram.c b/net/core/datagram.c
-index df493d6..1145766 100644
+index b80fb91..d9f4ea5 100644
--- a/net/core/datagram.c
+++ b/net/core/datagram.c
-@@ -302,7 +302,7 @@ int skb_kill_datagram(struct sock *sk, struct sk_buff *skb, unsigned int flags)
+@@ -131,6 +131,35 @@ out_noerr:
+ goto out;
+ }
+
++static int skb_set_peeked(struct sk_buff *skb)
++{
++ struct sk_buff *nskb;
++
++ if (skb->peeked)
++ return 0;
++
++ /* We have to unshare an skb before modifying it. */
++ if (!skb_shared(skb))
++ goto done;
++
++ nskb = skb_clone(skb, GFP_ATOMIC);
++ if (!nskb)
++ return -ENOMEM;
++
++ skb->prev->next = nskb;
++ skb->next->prev = nskb;
++ nskb->prev = skb->prev;
++ nskb->next = skb->next;
++
++ consume_skb(skb);
++ skb = nskb;
++
++done:
++ skb->peeked = 1;
++
++ return 0;
++}
++
+ /**
+ * __skb_recv_datagram - Receive a datagram skbuff
+ * @sk: socket
+@@ -165,7 +194,9 @@ out_noerr:
+ struct sk_buff *__skb_recv_datagram(struct sock *sk, unsigned int flags,
+ int *peeked, int *off, int *err)
+ {
++ struct sk_buff_head *queue = &sk->sk_receive_queue;
+ struct sk_buff *skb, *last;
++ unsigned long cpu_flags;
+ long timeo;
+ /*
+ * Caller is allowed not to check sk->sk_err before skb_recv_datagram()
+@@ -184,8 +215,6 @@ struct sk_buff *__skb_recv_datagram(struct sock *sk, unsigned int flags,
+ * Look at current nfs client by the way...
+ * However, this function was correct in any case. 8)
+ */
+- unsigned long cpu_flags;
+- struct sk_buff_head *queue = &sk->sk_receive_queue;
+ int _off = *off;
+
+ last = (struct sk_buff *)queue;
+@@ -199,7 +228,11 @@ struct sk_buff *__skb_recv_datagram(struct sock *sk, unsigned int flags,
+ _off -= skb->len;
+ continue;
+ }
+- skb->peeked = 1;
++
++ error = skb_set_peeked(skb);
++ if (error)
++ goto unlock_err;
++
+ atomic_inc(&skb->users);
+ } else
+ __skb_unlink(skb, queue);
+@@ -223,6 +256,8 @@ struct sk_buff *__skb_recv_datagram(struct sock *sk, unsigned int flags,
+
+ return NULL;
+
++unlock_err:
++ spin_unlock_irqrestore(&queue->lock, cpu_flags);
+ no_packet:
+ *err = error;
+ return NULL;
+@@ -302,7 +337,7 @@ int skb_kill_datagram(struct sock *sk, struct sk_buff *skb, unsigned int flags)
}
kfree_skb(skb);
sk_mem_reclaim_partial(sk);
return err;
+@@ -622,7 +657,8 @@ __sum16 __skb_checksum_complete_head(struct sk_buff *skb, int len)
+ !skb->csum_complete_sw)
+ netdev_rx_csum_fault(skb->dev);
+ }
+- skb->csum_valid = !sum;
++ if (!skb_shared(skb))
++ skb->csum_valid = !sum;
+ return sum;
+ }
+ EXPORT_SYMBOL(__skb_checksum_complete_head);
+@@ -642,11 +678,13 @@ __sum16 __skb_checksum_complete(struct sk_buff *skb)
+ netdev_rx_csum_fault(skb->dev);
+ }
+
+- /* Save full packet checksum */
+- skb->csum = csum;
+- skb->ip_summed = CHECKSUM_COMPLETE;
+- skb->csum_complete_sw = 1;
+- skb->csum_valid = !sum;
++ if (!skb_shared(skb)) {
++ /* Save full packet checksum */
++ skb->csum = csum;
++ skb->ip_summed = CHECKSUM_COMPLETE;
++ skb->csum_complete_sw = 1;
++ skb->csum_valid = !sum;
++ }
+
+ return sum;
+ }
diff --git a/net/core/dev.c b/net/core/dev.c
-index 22a53ac..1d19af7 100644
+index aa82f9a..f28b00e 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
-@@ -1681,14 +1681,14 @@ int __dev_forward_skb(struct net_device *dev, struct sk_buff *skb)
+@@ -1720,7 +1720,7 @@ int __dev_forward_skb(struct net_device *dev, struct sk_buff *skb)
{
- if (skb_shinfo(skb)->tx_flags & SKBTX_DEV_ZEROCOPY) {
- if (skb_copy_ubufs(skb, GFP_ATOMIC)) {
-- atomic_long_inc(&dev->rx_dropped);
-+ atomic_long_inc_unchecked(&dev->rx_dropped);
- kfree_skb(skb);
- return NET_RX_DROP;
- }
- }
-
- if (unlikely(!is_skb_forwardable(dev, skb))) {
+ if (skb_orphan_frags(skb, GFP_ATOMIC) ||
+ unlikely(!is_skb_forwardable(dev, skb))) {
- atomic_long_inc(&dev->rx_dropped);
+ atomic_long_inc_unchecked(&dev->rx_dropped);
kfree_skb(skb);
return NET_RX_DROP;
}
-@@ -2987,7 +2987,7 @@ recursion_alert:
+@@ -3018,7 +3018,7 @@ recursion_alert:
drop:
rcu_read_unlock_bh();
kfree_skb_list(skb);
return rc;
out:
-@@ -3336,7 +3336,7 @@ enqueue:
+@@ -3367,7 +3367,7 @@ enqueue:
local_irq_restore(flags);
kfree_skb(skb);
return NET_RX_DROP;
}
-@@ -3413,7 +3413,7 @@ int netif_rx_ni(struct sk_buff *skb)
+@@ -3444,7 +3444,7 @@ int netif_rx_ni(struct sk_buff *skb)
}
EXPORT_SYMBOL(netif_rx_ni);
{
struct softnet_data *sd = this_cpu_ptr(&softnet_data);
-@@ -3751,7 +3751,7 @@ ncls:
+@@ -3783,7 +3783,7 @@ ncls:
ret = pt_prev->func(skb, skb->dev, pt_prev, orig_dev);
} else {
drop:
kfree_skb(skb);
/* Jamal, now you will not able to escape explaining
* me how you were going to use this. :-)
-@@ -4640,7 +4640,7 @@ out_unlock:
+@@ -4672,7 +4672,7 @@ out_unlock:
return work;
}
{
struct softnet_data *sd = this_cpu_ptr(&softnet_data);
unsigned long time_limit = jiffies + 2;
-@@ -6676,8 +6676,8 @@ struct rtnl_link_stats64 *dev_get_stats(struct net_device *dev,
+@@ -6721,8 +6721,8 @@ struct rtnl_link_stats64 *dev_get_stats(struct net_device *dev,
} else {
netdev_stats_to_stats64(storage, &dev->stats);
}
}
EXPORT_SYMBOL(dev_load);
+diff --git a/net/core/dst.c b/net/core/dst.c
+index e956ce6..002144be 100644
+--- a/net/core/dst.c
++++ b/net/core/dst.c
+@@ -284,7 +284,9 @@ void dst_release(struct dst_entry *dst)
+ int newrefcnt;
+
+ newrefcnt = atomic_dec_return(&dst->__refcnt);
+- WARN_ON(newrefcnt < 0);
++ if (unlikely(newrefcnt < 0))
++ net_warn_ratelimited("%s: dst:%p refcnt:%d\n",
++ __func__, dst, newrefcnt);
+ if (unlikely(dst->flags & DST_NOCACHE) && !newrefcnt)
+ call_rcu(&dst->rcu_head, dst_destroy_rcu);
+ }
diff --git a/net/core/filter.c b/net/core/filter.c
-index f6bdc2b..76eba8e 100644
+index bf831a8..8d2c4c2 100644
--- a/net/core/filter.c
+++ b/net/core/filter.c
-@@ -533,7 +533,11 @@ do_pass:
+@@ -579,7 +579,11 @@ do_pass:
/* Unknown instruction. */
default:
}
insn++;
-@@ -577,7 +581,7 @@ static int check_load_and_stores(const struct sock_filter *filter, int flen)
+@@ -623,7 +627,7 @@ static int check_load_and_stores(const struct sock_filter *filter, int flen)
u16 *masks, memvalid = 0; /* One bit per cell, 16 cells */
int pc, ret = 0;
masks = kmalloc_array(flen, sizeof(*masks), GFP_KERNEL);
if (!masks)
-@@ -992,7 +996,7 @@ int bpf_prog_create(struct bpf_prog **pfp, struct sock_fprog_kern *fprog)
+@@ -1038,7 +1042,7 @@ int bpf_prog_create(struct bpf_prog **pfp, struct sock_fprog_kern *fprog)
if (!fp)
return -ENOMEM;
fle->object = flo;
else
diff --git a/net/core/neighbour.c b/net/core/neighbour.c
-index 70fe9e1..926784c 100644
+index 2237c1b..c0c80ab 100644
--- a/net/core/neighbour.c
+++ b/net/core/neighbour.c
-@@ -2806,7 +2806,7 @@ static int proc_unres_qlen(struct ctl_table *ctl, int write,
+@@ -2818,7 +2818,7 @@ static int proc_unres_qlen(struct ctl_table *ctl, int write,
void __user *buffer, size_t *lenp, loff_t *ppos)
{
int size, ret;
tmp.extra1 = &zero;
tmp.extra2 = &unres_qlen_max;
-@@ -2868,7 +2868,7 @@ static int neigh_proc_dointvec_zero_intmax(struct ctl_table *ctl, int write,
+@@ -2880,7 +2880,7 @@ static int neigh_proc_dointvec_zero_intmax(struct ctl_table *ctl, int write,
void __user *buffer,
size_t *lenp, loff_t *ppos)
{
return 0;
diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c
-index f2aa73b..0d1a1ea 100644
+index 4238d6d..e6b605c 100644
--- a/net/core/net-sysfs.c
+++ b/net/core/net-sysfs.c
-@@ -279,7 +279,7 @@ static ssize_t carrier_changes_show(struct device *dev,
+@@ -288,7 +288,7 @@ static ssize_t carrier_changes_show(struct device *dev,
{
struct net_device *netdev = to_net_dev(dev);
return sprintf(buf, fmt_dec,
static DEVICE_ATTR_RO(carrier_changes);
diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c
-index 70d3450..eb7c528 100644
+index 572af00..5acf072 100644
--- a/net/core/net_namespace.c
+++ b/net/core/net_namespace.c
-@@ -663,7 +663,7 @@ static int __register_pernet_operations(struct list_head *list,
+@@ -734,7 +734,7 @@ static int __register_pernet_operations(struct list_head *list,
int error;
LIST_HEAD(net_exit_list);
if (ops->init || (ops->id && ops->size)) {
for_each_net(net) {
error = ops_init(ops, net);
-@@ -676,7 +676,7 @@ static int __register_pernet_operations(struct list_head *list,
+@@ -747,7 +747,7 @@ static int __register_pernet_operations(struct list_head *list,
out_undo:
/* If I have an error cleanup all namespaces I initialized */
ops_exit_list(ops, &net_exit_list);
ops_free_list(ops, &net_exit_list);
return error;
-@@ -687,7 +687,7 @@ static void __unregister_pernet_operations(struct pernet_operations *ops)
+@@ -758,7 +758,7 @@ static void __unregister_pernet_operations(struct pernet_operations *ops)
struct net *net;
LIST_HEAD(net_exit_list);
for_each_net(net)
list_add_tail(&net->exit_list, &net_exit_list);
ops_exit_list(ops, &net_exit_list);
-@@ -821,7 +821,7 @@ int register_pernet_device(struct pernet_operations *ops)
+@@ -892,7 +892,7 @@ int register_pernet_device(struct pernet_operations *ops)
mutex_lock(&net_mutex);
error = register_pernet_operations(&pernet_list, ops);
if (!error && (first_device == &pernet_list))
pr_warn("cannot create /proc/net/%s\n", PG_PROC_DIR);
return -ENODEV;
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
-index 7ebed55..378bf34 100644
+index 8de3682..fcb8a5e 100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -61,7 +61,7 @@ struct rtnl_link {
}
EXPORT_SYMBOL_GPL(__rtnl_link_unregister);
-@@ -1047,7 +1050,7 @@ static int rtnl_fill_ifinfo(struct sk_buff *skb, struct net_device *dev,
+@@ -1066,7 +1069,7 @@ static int rtnl_fill_ifinfo(struct sk_buff *skb, struct net_device *dev,
(dev->ifalias &&
nla_put_string(skb, IFLA_IFALIAS, dev->ifalias)) ||
nla_put_u32(skb, IFLA_CARRIER_CHANGES,
goto nla_put_failure;
if (1) {
+@@ -1748,10 +1751,13 @@ static int do_setlink(const struct sk_buff *skb,
+ goto errout;
+
+ nla_for_each_nested(attr, tb[IFLA_VF_PORTS], rem) {
+- if (nla_type(attr) != IFLA_VF_PORT)
+- continue;
+- err = nla_parse_nested(port, IFLA_PORT_MAX,
+- attr, ifla_port_policy);
++ if (nla_type(attr) != IFLA_VF_PORT ||
++ nla_len(attr) < NLA_HDRLEN) {
++ err = -EINVAL;
++ goto errout;
++ }
++ err = nla_parse_nested(port, IFLA_PORT_MAX, attr,
++ ifla_port_policy);
+ if (err < 0)
+ goto errout;
+ if (!port[IFLA_PORT_VF]) {
diff --git a/net/core/scm.c b/net/core/scm.c
index 3b6899b..cf36238 100644
--- a/net/core/scm.c
{
struct socket *sock;
diff --git a/net/core/skbuff.c b/net/core/skbuff.c
-index e9f9a15..6eb024e 100644
+index 41ec022..3cc0a1c 100644
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
@@ -2139,7 +2139,7 @@ EXPORT_SYMBOL(__skb_checksum);
.update = csum_partial_ext,
.combine = csum_block_add_ext,
};
-@@ -3379,12 +3379,14 @@ void __init skb_init(void)
+@@ -3335,12 +3335,14 @@ void __init skb_init(void)
skbuff_head_cache = kmem_cache_create("skbuff_head_cache",
sizeof(struct sk_buff),
0,
}
diff --git a/net/core/sock.c b/net/core/sock.c
-index 71e3e5f..ab90920 100644
+index dc30dc5..8bb3ef3 100644
--- a/net/core/sock.c
+++ b/net/core/sock.c
-@@ -443,7 +443,7 @@ int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
+@@ -440,7 +440,7 @@ int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
struct sk_buff_head *list = &sk->sk_receive_queue;
if (atomic_read(&sk->sk_rmem_alloc) >= sk->sk_rcvbuf) {
trace_sock_rcvqueue_full(sk, skb);
return -ENOMEM;
}
-@@ -453,7 +453,7 @@ int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
+@@ -450,7 +450,7 @@ int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
return err;
if (!sk_rmem_schedule(sk, skb, skb->truesize)) {
return -ENOBUFS;
}
-@@ -466,7 +466,7 @@ int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
- skb_dst_force(skb);
-
- spin_lock_irqsave(&list->lock, flags);
-- skb->dropcount = atomic_read(&sk->sk_drops);
-+ skb->dropcount = atomic_read_unchecked(&sk->sk_drops);
- __skb_queue_tail(list, skb);
- spin_unlock_irqrestore(&list->lock, flags);
-
-@@ -486,7 +486,7 @@ int sk_receive_skb(struct sock *sk, struct sk_buff *skb, const int nested)
+@@ -483,7 +483,7 @@ int sk_receive_skb(struct sock *sk, struct sk_buff *skb, const int nested)
skb->dev = NULL;
if (sk_rcvqueues_full(sk, sk->sk_rcvbuf)) {
goto discard_and_relse;
}
if (nested)
-@@ -504,7 +504,7 @@ int sk_receive_skb(struct sock *sk, struct sk_buff *skb, const int nested)
+@@ -501,7 +501,7 @@ int sk_receive_skb(struct sock *sk, struct sk_buff *skb, const int nested)
mutex_release(&sk->sk_lock.dep_map, 1, _RET_IP_);
} else if (sk_add_backlog(sk, skb, sk->sk_rcvbuf)) {
bh_unlock_sock(sk);
goto discard_and_relse;
}
-@@ -910,6 +910,7 @@ set_rcvbuf:
+@@ -907,6 +907,7 @@ set_rcvbuf:
}
break;
case SO_ATTACH_BPF:
ret = -EINVAL;
if (optlen == sizeof(u32)) {
-@@ -922,7 +923,7 @@ set_rcvbuf:
+@@ -919,7 +920,7 @@ set_rcvbuf:
ret = sk_attach_bpf(ufd, sk);
}
break;
case SO_DETACH_FILTER:
ret = sk_detach_filter(sk);
break;
-@@ -1026,12 +1027,12 @@ int sock_getsockopt(struct socket *sock, int level, int optname,
+@@ -1021,12 +1022,12 @@ int sock_getsockopt(struct socket *sock, int level, int optname,
struct timeval tm;
} v;
return -EINVAL;
memset(&v, 0, sizeof(v));
-@@ -1169,11 +1170,11 @@ int sock_getsockopt(struct socket *sock, int level, int optname,
+@@ -1164,11 +1165,11 @@ int sock_getsockopt(struct socket *sock, int level, int optname,
case SO_PEERNAME:
{
return -EINVAL;
if (copy_to_user(optval, address, len))
return -EFAULT;
-@@ -1258,7 +1259,7 @@ int sock_getsockopt(struct socket *sock, int level, int optname,
+@@ -1256,7 +1257,7 @@ int sock_getsockopt(struct socket *sock, int level, int optname,
if (len > lv)
len = lv;
return -EFAULT;
lenout:
if (put_user(len, optlen))
-@@ -2375,7 +2376,7 @@ void sock_init_data(struct socket *sock, struct sock *sk)
+@@ -2359,7 +2360,7 @@ void sock_init_data(struct socket *sock, struct sock *sk)
*/
smp_wmb();
atomic_set(&sk->sk_refcnt, 1);
}
EXPORT_SYMBOL(sock_init_data);
-@@ -2503,6 +2504,7 @@ void sock_enable_timestamp(struct sock *sk, int flag)
+@@ -2487,6 +2488,7 @@ void sock_enable_timestamp(struct sock *sk, int flag)
int sock_recv_errqueue(struct sock *sk, struct msghdr *msg, int len,
int level, int type)
{
struct sock_exterr_skb *serr;
struct sk_buff *skb;
int copied, err;
-@@ -2524,7 +2526,8 @@ int sock_recv_errqueue(struct sock *sk, struct msghdr *msg, int len,
+@@ -2508,7 +2510,8 @@ int sock_recv_errqueue(struct sock *sk, struct msghdr *msg, int len,
sock_recv_timestamp(msg, sk, skb);
serr = SKB_EXT_ERR(skb);
msg->msg_flags |= MSG_ERRQUEUE;
err = copied;
diff --git a/net/core/sock_diag.c b/net/core/sock_diag.c
-index ad704c7..ca48aff 100644
+index 74dddf8..7f4e77e 100644
--- a/net/core/sock_diag.c
+++ b/net/core/sock_diag.c
-@@ -9,26 +9,33 @@
+@@ -9,7 +9,7 @@
#include <linux/inet_diag.h>
#include <linux/sock_diag.h>
static int (*inet_rcv_compat)(struct sk_buff *skb, struct nlmsghdr *nlh);
static DEFINE_MUTEX(sock_diag_table_mutex);
- int sock_diag_check_cookie(void *sk, __u32 *cookie)
- {
-+#ifndef CONFIG_GRKERNSEC_HIDESYM
- if ((cookie[0] != INET_DIAG_NOCOOKIE ||
- cookie[1] != INET_DIAG_NOCOOKIE) &&
- ((u32)(unsigned long)sk != cookie[0] ||
- (u32)((((unsigned long)sk) >> 31) >> 1) != cookie[1]))
- return -ESTALE;
- else
-+#endif
- return 0;
- }
- EXPORT_SYMBOL_GPL(sock_diag_check_cookie);
-
- void sock_diag_save_cookie(void *sk, __u32 *cookie)
- {
-+#ifdef CONFIG_GRKERNSEC_HIDESYM
-+ cookie[0] = 0;
-+ cookie[1] = 0;
-+#else
- cookie[0] = (u32)(unsigned long)sk;
- cookie[1] = (u32)(((unsigned long)sk >> 31) >> 1);
-+#endif
- }
- EXPORT_SYMBOL_GPL(sock_diag_save_cookie);
-
-@@ -110,8 +117,11 @@ int sock_diag_register(const struct sock_diag_handler *hndl)
+@@ -127,8 +127,11 @@ int sock_diag_register(const struct sock_diag_handler *hndl)
mutex_lock(&sock_diag_table_mutex);
if (sock_diag_handlers[hndl->family])
err = -EBUSY;
mutex_unlock(&sock_diag_table_mutex);
return err;
-@@ -127,7 +137,9 @@ void sock_diag_unregister(const struct sock_diag_handler *hnld)
+@@ -144,7 +147,9 @@ void sock_diag_unregister(const struct sock_diag_handler *hnld)
mutex_lock(&sock_diag_table_mutex);
BUG_ON(sock_diag_handlers[family] != hnld);
}
EXPORT_SYMBOL_GPL(sock_diag_unregister);
diff --git a/net/core/sysctl_net_core.c b/net/core/sysctl_net_core.c
-index 8ce351f..2c388f7 100644
+index 95b6139..3048623 100644
--- a/net/core/sysctl_net_core.c
+++ b/net/core/sysctl_net_core.c
-@@ -36,7 +36,7 @@ static int rps_sock_flow_sysctl(struct ctl_table *table, int write,
+@@ -35,7 +35,7 @@ static int rps_sock_flow_sysctl(struct ctl_table *table, int write,
{
unsigned int orig_size, size;
int ret, i;
.data = &size,
.maxlen = sizeof(size),
.mode = table->mode
-@@ -204,7 +204,7 @@ static int set_default_qdisc(struct ctl_table *table, int write,
+@@ -203,7 +203,7 @@ static int set_default_qdisc(struct ctl_table *table, int write,
void __user *buffer, size_t *lenp, loff_t *ppos)
{
char id[IFNAMSIZ];
.data = id,
.maxlen = IFNAMSIZ,
};
-@@ -222,7 +222,7 @@ static int set_default_qdisc(struct ctl_table *table, int write,
+@@ -221,7 +221,7 @@ static int set_default_qdisc(struct ctl_table *table, int write,
static int proc_do_rss_key(struct ctl_table *table, int write,
void __user *buffer, size_t *lenp, loff_t *ppos)
{
char buf[NETDEV_RSS_KEY_LEN * 3];
snprintf(buf, sizeof(buf), "%*phC", NETDEV_RSS_KEY_LEN, netdev_rss_key);
-@@ -286,7 +286,7 @@ static struct ctl_table net_core_table[] = {
+@@ -285,7 +285,7 @@ static struct ctl_table net_core_table[] = {
.mode = 0444,
.proc_handler = proc_do_rss_key,
},
{
.procname = "bpf_jit_enable",
.data = &bpf_jit_enable,
-@@ -411,13 +411,12 @@ static struct ctl_table netns_core_table[] = {
+@@ -409,13 +409,12 @@ static struct ctl_table netns_core_table[] = {
static __net_init int sysctl_core_net_init(struct net *net)
{
if (tbl == NULL)
goto err_dup;
-@@ -427,17 +426,16 @@ static __net_init int sysctl_core_net_init(struct net *net)
+@@ -425,17 +424,16 @@ static __net_init int sysctl_core_net_init(struct net *net)
if (net->user_ns != &init_user_ns) {
tbl[0].procname = NULL;
}
err_dup:
return -ENOMEM;
}
-@@ -452,7 +450,7 @@ static __net_exit void sysctl_core_net_exit(struct net *net)
+@@ -450,7 +448,7 @@ static __net_exit void sysctl_core_net_exit(struct net *net)
kfree(tbl);
}
.exit = sysctl_core_net_exit,
};
diff --git a/net/decnet/af_decnet.c b/net/decnet/af_decnet.c
-index 8102286..a0c2755 100644
+index 754484b..4f4b894 100644
--- a/net/decnet/af_decnet.c
+++ b/net/decnet/af_decnet.c
@@ -466,6 +466,7 @@ static struct proto dn_proto = {
return -EFAULT;
*lenp = len;
+diff --git a/net/dsa/dsa.c b/net/dsa/dsa.c
+index 392e29a..da953a2 100644
+--- a/net/dsa/dsa.c
++++ b/net/dsa/dsa.c
+@@ -851,7 +851,7 @@ static struct packet_type dsa_pack_type __read_mostly = {
+ .func = dsa_switch_rcv,
+ };
+
+-static struct notifier_block dsa_netdevice_nb __read_mostly = {
++static struct notifier_block dsa_netdevice_nb = {
+ .notifier_call = dsa_slave_netdevice_event,
+ };
+
diff --git a/net/hsr/hsr_netlink.c b/net/hsr/hsr_netlink.c
index a2c7e4c..3dc9f67 100644
--- a/net/hsr/hsr_netlink.c
.maxtype = IFLA_HSR_MAX,
.policy = hsr_policy,
diff --git a/net/ieee802154/6lowpan/core.c b/net/ieee802154/6lowpan/core.c
-index 055fbb7..c0dbe60 100644
+index 0ae5822..3fe3627 100644
--- a/net/ieee802154/6lowpan/core.c
+++ b/net/ieee802154/6lowpan/core.c
-@@ -217,7 +217,7 @@ static void lowpan_dellink(struct net_device *dev, struct list_head *head)
+@@ -219,7 +219,7 @@ static void lowpan_dellink(struct net_device *dev, struct list_head *head)
dev_put(real_dev);
}
return -ENOMEM;
}
diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c
-index d2e49ba..f78e8aa 100644
+index a5aa54e..3bd5f9f 100644
--- a/net/ipv4/af_inet.c
+++ b/net/ipv4/af_inet.c
-@@ -1390,7 +1390,7 @@ int inet_recv_error(struct sock *sk, struct msghdr *msg, int len, int *addr_len)
+@@ -1391,7 +1391,7 @@ int inet_recv_error(struct sock *sk, struct msghdr *msg, int len, int *addr_len)
return ip_recv_error(sk, msg, len, addr_len);
#if IS_ENABLED(CONFIG_IPV6)
if (sk->sk_family == AF_INET6)
return -EINVAL;
}
diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c
-index 3a8985c..9d2a870 100644
+index 419d23c..2084616 100644
--- a/net/ipv4/devinet.c
+++ b/net/ipv4/devinet.c
@@ -69,7 +69,8 @@
[IPV4_DEVCONF_SEND_REDIRECTS - 1] = 1,
[IPV4_DEVCONF_SECURE_REDIRECTS - 1] = 1,
[IPV4_DEVCONF_SHARED_MEDIA - 1] = 1,
-@@ -1549,7 +1551,7 @@ static int inet_dump_ifaddr(struct sk_buff *skb, struct netlink_callback *cb)
+@@ -1580,7 +1582,7 @@ static int inet_dump_ifaddr(struct sk_buff *skb, struct netlink_callback *cb)
idx = 0;
head = &net->dev_index_head[h];
rcu_read_lock();
net->dev_base_seq;
hlist_for_each_entry_rcu(dev, head, index_hlist) {
if (idx < s_idx)
-@@ -1868,7 +1870,7 @@ static int inet_netconf_dump_devconf(struct sk_buff *skb,
+@@ -1899,7 +1901,7 @@ static int inet_netconf_dump_devconf(struct sk_buff *skb,
idx = 0;
head = &net->dev_index_head[h];
rcu_read_lock();
net->dev_base_seq;
hlist_for_each_entry_rcu(dev, head, index_hlist) {
if (idx < s_idx)
-@@ -2103,7 +2105,7 @@ static int ipv4_doint_and_flush(struct ctl_table *ctl, int write,
+@@ -2134,7 +2136,7 @@ static int ipv4_doint_and_flush(struct ctl_table *ctl, int write,
#define DEVINET_SYSCTL_FLUSHING_ENTRY(attr, name) \
DEVINET_SYSCTL_COMPLEX_ENTRY(attr, name, ipv4_doint_and_flush)
struct ctl_table_header *sysctl_header;
struct ctl_table devinet_vars[__IPV4_DEVCONF_MAX];
} devinet_sysctl = {
-@@ -2235,7 +2237,7 @@ static __net_init int devinet_init_net(struct net *net)
+@@ -2266,7 +2268,7 @@ static __net_init int devinet_init_net(struct net *net)
int err;
struct ipv4_devconf *all, *dflt;
#ifdef CONFIG_SYSCTL
struct ctl_table_header *forw_hdr;
#endif
-@@ -2253,7 +2255,7 @@ static __net_init int devinet_init_net(struct net *net)
+@@ -2284,7 +2286,7 @@ static __net_init int devinet_init_net(struct net *net)
goto err_alloc_dflt;
#ifdef CONFIG_SYSCTL
- tbl = kmemdup(tbl, sizeof(ctl_forward_entry), GFP_KERNEL);
+ tbl = kmemdup(ctl_forward_entry, sizeof(ctl_forward_entry), GFP_KERNEL);
- if (tbl == NULL)
+ if (!tbl)
goto err_alloc_ctl;
-@@ -2273,7 +2275,10 @@ static __net_init int devinet_init_net(struct net *net)
+@@ -2304,7 +2306,10 @@ static __net_init int devinet_init_net(struct net *net)
goto err_reg_dflt;
err = -ENOMEM;
+ forw_hdr = register_net_sysctl(net, "net/ipv4", tbl);
+ else
+ forw_hdr = register_net_sysctl(net, "net/ipv4", ctl_forward_entry);
- if (forw_hdr == NULL)
+ if (!forw_hdr)
goto err_reg_ctl;
net->ipv4.forw_hdr = forw_hdr;
-@@ -2289,8 +2294,7 @@ err_reg_ctl:
+@@ -2320,8 +2325,7 @@ err_reg_ctl:
err_reg_dflt:
__devinet_sysctl_unregister(all);
err_reg_all:
#endif
if (dflt != &ipv4_devconf_dflt)
diff --git a/net/ipv4/fib_frontend.c b/net/ipv4/fib_frontend.c
-index 23b9b3e..60cf0c4 100644
+index 872494e..8e0b4d1 100644
--- a/net/ipv4/fib_frontend.c
+++ b/net/ipv4/fib_frontend.c
-@@ -1020,12 +1020,12 @@ static int fib_inetaddr_event(struct notifier_block *this, unsigned long event,
+@@ -1083,12 +1083,12 @@ static int fib_inetaddr_event(struct notifier_block *this, unsigned long event,
#ifdef CONFIG_IP_ROUTE_MULTIPATH
fib_sync_up(dev);
#endif
fib_del_ifaddr(ifa, NULL);
- atomic_inc(&net->ipv4.dev_addr_genid);
+ atomic_inc_unchecked(&net->ipv4.dev_addr_genid);
- if (ifa->ifa_dev->ifa_list == NULL) {
+ if (!ifa->ifa_dev->ifa_list) {
/* Last address was deleted from this interface.
* Disable IP.
-@@ -1063,7 +1063,7 @@ static int fib_netdev_event(struct notifier_block *this, unsigned long event, vo
+@@ -1126,7 +1126,7 @@ static int fib_netdev_event(struct notifier_block *this, unsigned long event, vo
#ifdef CONFIG_IP_ROUTE_MULTIPATH
fib_sync_up(dev);
#endif
break;
case NETDEV_DOWN:
diff --git a/net/ipv4/fib_semantics.c b/net/ipv4/fib_semantics.c
-index 1e2090e..351a724 100644
+index 8d695b6..752d427a 100644
--- a/net/ipv4/fib_semantics.c
+++ b/net/ipv4/fib_semantics.c
-@@ -753,7 +753,7 @@ __be32 fib_info_update_nh_saddr(struct net *net, struct fib_nh *nh)
+@@ -752,7 +752,7 @@ __be32 fib_info_update_nh_saddr(struct net *net, struct fib_nh *nh)
nh->nh_saddr = inet_select_addr(nh->nh_dev,
nh->nh_gw,
nh->nh_parent->fib_scope);
return nh->nh_saddr;
}
-diff --git a/net/ipv4/fou.c b/net/ipv4/fou.c
-index ff069f6..335e752 100644
---- a/net/ipv4/fou.c
-+++ b/net/ipv4/fou.c
-@@ -771,12 +771,12 @@ EXPORT_SYMBOL(gue_build_header);
-
- #ifdef CONFIG_NET_FOU_IP_TUNNELS
-
--static const struct ip_tunnel_encap_ops __read_mostly fou_iptun_ops = {
-+static const struct ip_tunnel_encap_ops fou_iptun_ops = {
- .encap_hlen = fou_encap_hlen,
- .build_header = fou_build_header,
- };
-
--static const struct ip_tunnel_encap_ops __read_mostly gue_iptun_ops = {
-+static const struct ip_tunnel_encap_ops gue_iptun_ops = {
- .encap_hlen = gue_encap_hlen,
- .build_header = gue_build_header,
- };
diff --git a/net/ipv4/inet_hashtables.c b/net/ipv4/inet_hashtables.c
-index 9111a4e..3576905 100644
+index c6fb80b..8705495 100644
--- a/net/ipv4/inet_hashtables.c
+++ b/net/ipv4/inet_hashtables.c
@@ -18,6 +18,7 @@
#include <net/inet_connection_sock.h>
#include <net/inet_hashtables.h>
-@@ -49,6 +50,8 @@ static unsigned int inet_sk_ehashfn(const struct sock *sk)
- return inet_ehashfn(net, laddr, lport, faddr, fport);
+@@ -53,6 +54,8 @@ u32 sk_ehashfn(const struct sock *sk)
+ sk->sk_daddr, sk->sk_dport);
}
+extern void gr_update_task_in_ip_table(const struct inet_sock *inet);
/*
* Allocate and initialize a new local port bind bucket.
* The bindhash mutex for snum's hash chain must be held here.
-@@ -554,6 +557,8 @@ ok:
+@@ -564,6 +567,8 @@ ok:
twrefcnt += inet_twsk_bind_unhash(tw, hinfo);
spin_unlock(&head->lock);
+ gr_update_task_in_ip_table(inet_sk(sk));
+
if (tw) {
- inet_twsk_deschedule(tw, death_row);
+ inet_twsk_deschedule(tw);
while (twrefcnt) {
diff --git a/net/ipv4/inetpeer.c b/net/ipv4/inetpeer.c
index 241afd7..31b95d5 100644
p->rate_tokens = 0;
/* 60*HZ is arbitrary, but chosen enough high so that the first
diff --git a/net/ipv4/ip_fragment.c b/net/ipv4/ip_fragment.c
-index 145a50c..5dd8cc5 100644
+index cc1da6d..64b1534 100644
--- a/net/ipv4/ip_fragment.c
+++ b/net/ipv4/ip_fragment.c
@@ -268,7 +268,7 @@ static int ip_frag_too_far(struct ipq *qp)
qp->rid = end;
rc = qp->q.fragments && (end - start) > max;
-@@ -748,12 +748,11 @@ static struct ctl_table ip4_frags_ctl_table[] = {
+@@ -750,12 +750,11 @@ static struct ctl_table ip4_frags_ctl_table[] = {
static int __net_init ip4_frags_ns_ctl_register(struct net *net)
{
if (!net_eq(net, &init_net)) {
- table = kmemdup(table, sizeof(ip4_frags_ns_ctl_table), GFP_KERNEL);
+ table = kmemdup(ip4_frags_ns_ctl_table, sizeof(ip4_frags_ns_ctl_table), GFP_KERNEL);
- if (table == NULL)
+ if (!table)
goto err_alloc;
-@@ -767,9 +766,10 @@ static int __net_init ip4_frags_ns_ctl_register(struct net *net)
+@@ -769,9 +768,10 @@ static int __net_init ip4_frags_ns_ctl_register(struct net *net)
/* Don't export sysctls to unprivileged users */
if (net->user_ns != &init_user_ns)
table[0].procname = NULL;
+ hdr = register_net_sysctl(net, "net/ipv4", ip4_frags_ns_ctl_table);
- hdr = register_net_sysctl(net, "net/ipv4", table);
- if (hdr == NULL)
+ if (!hdr)
goto err_reg;
-@@ -777,8 +777,7 @@ static int __net_init ip4_frags_ns_ctl_register(struct net *net)
+@@ -779,8 +779,7 @@ static int __net_init ip4_frags_ns_ctl_register(struct net *net)
return 0;
err_reg:
return -ENOMEM;
}
diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c
-index 6207275f..00323a2 100644
+index 5fd7064..d13d75f 100644
--- a/net/ipv4/ip_gre.c
+++ b/net/ipv4/ip_gre.c
@@ -115,7 +115,7 @@ static bool log_ecn_error = true;
static int ipgre_tunnel_init(struct net_device *dev);
static int ipgre_net_id __read_mostly;
-@@ -817,7 +817,7 @@ static const struct nla_policy ipgre_policy[IFLA_GRE_MAX + 1] = {
+@@ -819,7 +819,7 @@ static const struct nla_policy ipgre_policy[IFLA_GRE_MAX + 1] = {
[IFLA_GRE_ENCAP_DPORT] = { .type = NLA_U16 },
};
.kind = "gre",
.maxtype = IFLA_GRE_MAX,
.policy = ipgre_policy,
-@@ -832,7 +832,7 @@ static struct rtnl_link_ops ipgre_link_ops __read_mostly = {
+@@ -834,7 +834,7 @@ static struct rtnl_link_ops ipgre_link_ops __read_mostly = {
.get_link_net = ip_tunnel_get_link_net,
};
.maxtype = IFLA_GRE_MAX,
.policy = ipgre_policy,
diff --git a/net/ipv4/ip_input.c b/net/ipv4/ip_input.c
-index 3d4da2c..40f9c29 100644
+index 2db4c87..4db9282 100644
--- a/net/ipv4/ip_input.c
+++ b/net/ipv4/ip_input.c
@@ -147,6 +147,10 @@
/*
* Process Router Attention IP option (RFC 2113)
*/
-@@ -223,6 +227,9 @@ static int ip_local_deliver_finish(struct sk_buff *skb)
+@@ -223,6 +227,9 @@ static int ip_local_deliver_finish(struct sock *sk, struct sk_buff *skb)
if (!raw) {
if (xfrm4_policy_check(NULL, XFRM_POLICY_IN, skb)) {
IP_INC_STATS_BH(net, IPSTATS_MIB_INUNKNOWNPROTOS);
ICMP_PROT_UNREACH, 0);
}
diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c
-index 5cd9927..8610b9f 100644
+index 6ddde89..653e224 100644
--- a/net/ipv4/ip_sockglue.c
+++ b/net/ipv4/ip_sockglue.c
-@@ -1254,7 +1254,8 @@ static int do_ip_getsockopt(struct sock *sk, int level, int optname,
+@@ -1291,7 +1291,8 @@ static int do_ip_getsockopt(struct sock *sk, int level, int optname,
len = min_t(unsigned int, len, opt->optlen);
if (put_user(len, optlen))
return -EFAULT;
return -EFAULT;
return 0;
}
-@@ -1388,7 +1389,7 @@ static int do_ip_getsockopt(struct sock *sk, int level, int optname,
+@@ -1425,7 +1426,7 @@ static int do_ip_getsockopt(struct sock *sk, int level, int optname,
if (sk->sk_type != SOCK_STREAM)
return -ENOPROTOOPT;
msg.msg_flags = flags;
diff --git a/net/ipv4/ip_vti.c b/net/ipv4/ip_vti.c
-index 94efe14..1453fcc 100644
+index 0c15208..a3a76c5 100644
--- a/net/ipv4/ip_vti.c
+++ b/net/ipv4/ip_vti.c
@@ -45,7 +45,7 @@
static int vti_net_id __read_mostly;
static int vti_tunnel_init(struct net_device *dev);
-@@ -519,7 +519,7 @@ static const struct nla_policy vti_policy[IFLA_VTI_MAX + 1] = {
+@@ -525,7 +525,7 @@ static const struct nla_policy vti_policy[IFLA_VTI_MAX + 1] = {
[IFLA_VTI_REMOTE] = { .len = FIELD_SIZEOF(struct iphdr, daddr) },
};
.maxtype = IFLA_VTI_MAX,
.policy = vti_policy,
diff --git a/net/ipv4/ipconfig.c b/net/ipv4/ipconfig.c
-index b26376e..fc3d733 100644
+index 8e7328c..9bd7ed3 100644
--- a/net/ipv4/ipconfig.c
+++ b/net/ipv4/ipconfig.c
@@ -333,7 +333,7 @@ static int __init ic_devinet_ioctl(unsigned int cmd, struct ifreq *arg)
return res;
}
diff --git a/net/ipv4/ipip.c b/net/ipv4/ipip.c
-index 915d215..48d1db7 100644
+index ff96396..2e928ba 100644
--- a/net/ipv4/ipip.c
+++ b/net/ipv4/ipip.c
@@ -124,7 +124,7 @@ MODULE_PARM_DESC(log_ecn_error, "Log packets received with corrupted ECN");
.maxtype = IFLA_IPTUN_MAX,
.policy = ipip_policy,
diff --git a/net/ipv4/netfilter/arp_tables.c b/net/ipv4/netfilter/arp_tables.c
-index f95b6f9..2ee2097 100644
+index a612007..99ac4bc5 100644
--- a/net/ipv4/netfilter/arp_tables.c
+++ b/net/ipv4/netfilter/arp_tables.c
-@@ -885,14 +885,14 @@ static int compat_table_info(const struct xt_table_info *info,
+@@ -884,14 +884,14 @@ static int compat_table_info(const struct xt_table_info *info,
#endif
static int get_info(struct net *net, void __user *user,
sizeof(struct arpt_getinfo));
return -EINVAL;
}
-@@ -929,7 +929,7 @@ static int get_info(struct net *net, void __user *user,
+@@ -928,7 +928,7 @@ static int get_info(struct net *net, void __user *user,
info.size = private->size;
strcpy(info.name, name);
ret = -EFAULT;
else
ret = 0;
-@@ -1690,7 +1690,7 @@ static int compat_do_arpt_get_ctl(struct sock *sk, int cmd, void __user *user,
+@@ -1695,7 +1695,7 @@ static int compat_do_arpt_get_ctl(struct sock *sk, int cmd, void __user *user,
switch (cmd) {
case ARPT_SO_GET_INFO:
break;
case ARPT_SO_GET_ENTRIES:
ret = compat_get_entries(sock_net(sk), user, len);
-@@ -1735,7 +1735,7 @@ static int do_arpt_get_ctl(struct sock *sk, int cmd, void __user *user, int *len
+@@ -1740,7 +1740,7 @@ static int do_arpt_get_ctl(struct sock *sk, int cmd, void __user *user, int *len
switch (cmd) {
case ARPT_SO_GET_INFO:
case ARPT_SO_GET_ENTRIES:
diff --git a/net/ipv4/netfilter/ip_tables.c b/net/ipv4/netfilter/ip_tables.c
-index cf5e82f..75a20f5 100644
+index 2d0e265..67e5b8d 100644
--- a/net/ipv4/netfilter/ip_tables.c
+++ b/net/ipv4/netfilter/ip_tables.c
-@@ -1073,14 +1073,14 @@ static int compat_table_info(const struct xt_table_info *info,
+@@ -1072,14 +1072,14 @@ static int compat_table_info(const struct xt_table_info *info,
#endif
static int get_info(struct net *net, void __user *user,
sizeof(struct ipt_getinfo));
return -EINVAL;
}
-@@ -1117,7 +1117,7 @@ static int get_info(struct net *net, void __user *user,
+@@ -1116,7 +1116,7 @@ static int get_info(struct net *net, void __user *user,
info.size = private->size;
strcpy(info.name, name);
ret = -EFAULT;
else
ret = 0;
-@@ -1973,7 +1973,7 @@ compat_do_ipt_get_ctl(struct sock *sk, int cmd, void __user *user, int *len)
+@@ -1978,7 +1978,7 @@ compat_do_ipt_get_ctl(struct sock *sk, int cmd, void __user *user, int *len)
switch (cmd) {
case IPT_SO_GET_INFO:
break;
case IPT_SO_GET_ENTRIES:
ret = compat_get_entries(sock_net(sk), user, len);
-@@ -2020,7 +2020,7 @@ do_ipt_get_ctl(struct sock *sk, int cmd, void __user *user, int *len)
+@@ -2025,7 +2025,7 @@ do_ipt_get_ctl(struct sock *sk, int cmd, void __user *user, int *len)
switch (cmd) {
case IPT_SO_GET_INFO:
case IPT_SO_GET_ENTRIES:
diff --git a/net/ipv4/netfilter/ipt_CLUSTERIP.c b/net/ipv4/netfilter/ipt_CLUSTERIP.c
-index e90f83a..3e6acca 100644
+index 771ab3d..5b99b18 100644
--- a/net/ipv4/netfilter/ipt_CLUSTERIP.c
+++ b/net/ipv4/netfilter/ipt_CLUSTERIP.c
-@@ -720,7 +720,7 @@ static int clusterip_net_init(struct net *net)
+@@ -725,7 +725,7 @@ static int clusterip_net_init(struct net *net)
spin_lock_init(&cn->lock);
#ifdef CONFIG_PROC_FS
pr_err("Unable to proc dir entry\n");
return -ENOMEM;
diff --git a/net/ipv4/ping.c b/net/ipv4/ping.c
-index 787b0d6..ab6c0ba 100644
+index 05ff44b..da00000 100644
--- a/net/ipv4/ping.c
+++ b/net/ipv4/ping.c
@@ -59,7 +59,7 @@ struct ping_table {
info, (u8 *)icmph);
#endif
}
-@@ -919,10 +919,10 @@ int ping_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
+@@ -918,10 +918,10 @@ int ping_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int noblock,
}
if (inet6_sk(sk)->rxopt.all)
else if (skb->protocol == htons(ETH_P_IP) && isk->cmsg_flags)
ip_cmsg_recv(msg, skb);
#endif
-@@ -1117,7 +1117,7 @@ static void ping_v4_format_sock(struct sock *sp, struct seq_file *f,
+@@ -1116,7 +1116,7 @@ static void ping_v4_format_sock(struct sock *sp, struct seq_file *f,
from_kuid_munged(seq_user_ns(f), sock_i_uid(sp)),
0, sock_i_ino(sp),
atomic_read(&sp->sk_refcnt), sp,
static int ping_v4_seq_show(struct seq_file *seq, void *v)
diff --git a/net/ipv4/raw.c b/net/ipv4/raw.c
-index f027a70..2e64edc 100644
+index 561cd4b..a32a155 100644
--- a/net/ipv4/raw.c
+++ b/net/ipv4/raw.c
-@@ -324,7 +324,7 @@ static int raw_rcv_skb(struct sock *sk, struct sk_buff *skb)
+@@ -323,7 +323,7 @@ static int raw_rcv_skb(struct sock *sk, struct sk_buff *skb)
int raw_rcv(struct sock *sk, struct sk_buff *skb)
{
if (!xfrm4_policy_check(sk, XFRM_POLICY_IN, skb)) {
kfree_skb(skb);
return NET_RX_DROP;
}
-@@ -773,16 +773,20 @@ static int raw_init(struct sock *sk)
+@@ -771,16 +771,20 @@ static int raw_init(struct sock *sk)
static int raw_seticmpfilter(struct sock *sk, char __user *optval, int optlen)
{
if (get_user(len, optlen))
goto out;
-@@ -792,8 +796,8 @@ static int raw_geticmpfilter(struct sock *sk, char __user *optval, int __user *o
+@@ -790,8 +794,8 @@ static int raw_geticmpfilter(struct sock *sk, char __user *optval, int __user *o
if (len > sizeof(struct icmp_filter))
len = sizeof(struct icmp_filter);
ret = -EFAULT;
goto out;
ret = 0;
out: return ret;
-@@ -1022,7 +1026,7 @@ static void raw_sock_seq_show(struct seq_file *seq, struct sock *sp, int i)
+@@ -1020,7 +1024,7 @@ static void raw_sock_seq_show(struct seq_file *seq, struct sock *sp, int i)
0, 0L, 0,
from_kuid_munged(seq_user_ns(seq), sock_i_uid(sp)),
0, sock_i_ino(sp),
static int raw_seq_show(struct seq_file *seq, void *v)
diff --git a/net/ipv4/route.c b/net/ipv4/route.c
-index 20fc020..3ba426f 100644
+index f45f2a1..e7d47a3 100644
--- a/net/ipv4/route.c
+++ b/net/ipv4/route.c
-@@ -228,7 +228,7 @@ static const struct seq_operations rt_cache_seq_ops = {
+@@ -227,7 +227,7 @@ static const struct seq_operations rt_cache_seq_ops = {
static int rt_cache_seq_open(struct inode *inode, struct file *file)
{
}
static const struct file_operations rt_cache_seq_fops = {
-@@ -319,7 +319,7 @@ static const struct seq_operations rt_cpu_seq_ops = {
+@@ -318,7 +318,7 @@ static const struct seq_operations rt_cpu_seq_ops = {
static int rt_cpu_seq_open(struct inode *inode, struct file *file)
{
}
static const struct file_operations rt_cpu_seq_fops = {
-@@ -357,7 +357,7 @@ static int rt_acct_proc_show(struct seq_file *m, void *v)
+@@ -356,7 +356,7 @@ static int rt_acct_proc_show(struct seq_file *m, void *v)
static int rt_acct_proc_open(struct inode *inode, struct file *file)
{
}
static const struct file_operations rt_acct_proc_fops = {
-@@ -459,11 +459,11 @@ static struct neighbour *ipv4_neigh_lookup(const struct dst_entry *dst,
+@@ -458,11 +458,11 @@ static struct neighbour *ipv4_neigh_lookup(const struct dst_entry *dst,
#define IP_IDENTS_SZ 2048u
struct ip_ident_bucket {
/* In order to protect privacy, we add a perturbation to identifiers
* if one generator is seldom used. This makes hard for an attacker
-@@ -479,7 +479,7 @@ u32 ip_idents_reserve(u32 hash, int segs)
+@@ -478,7 +478,7 @@ u32 ip_idents_reserve(u32 hash, int segs)
if (old != now && cmpxchg(&bucket->stamp32, old, now) == old)
delta = prandom_u32_max(now - old);
}
EXPORT_SYMBOL(ip_idents_reserve);
-@@ -2639,34 +2639,34 @@ static struct ctl_table ipv4_route_flush_table[] = {
+@@ -2641,34 +2641,34 @@ static struct ctl_table ipv4_route_flush_table[] = {
.maxlen = sizeof(int),
.mode = 0200,
.proc_handler = ipv4_sysctl_rtcache_flush,
if (!net_eq(net, &init_net)) {
- tbl = kmemdup(tbl, sizeof(ipv4_route_flush_table), GFP_KERNEL);
+ tbl = kmemdup(ipv4_route_flush_table, sizeof(ipv4_route_flush_table), GFP_KERNEL);
- if (tbl == NULL)
+ if (!tbl)
goto err_dup;
/* Don't export sysctls to unprivileged users */
+ net->ipv4.route_hdr = register_net_sysctl(net, "net/ipv4/route", ipv4_route_flush_table);
- net->ipv4.route_hdr = register_net_sysctl(net, "net/ipv4/route", tbl);
- if (net->ipv4.route_hdr == NULL)
+ if (!net->ipv4.route_hdr)
goto err_reg;
return 0;
err_dup:
return -ENOMEM;
}
-@@ -2689,8 +2689,8 @@ static __net_initdata struct pernet_operations sysctl_route_ops = {
+@@ -2691,8 +2691,8 @@ static __net_initdata struct pernet_operations sysctl_route_ops = {
static __net_init int rt_genid_init(struct net *net)
{
get_random_bytes(&net->ipv4.dev_addr_genid,
sizeof(net->ipv4.dev_addr_genid));
return 0;
-@@ -2734,11 +2734,7 @@ int __init ip_rt_init(void)
+@@ -2736,11 +2736,7 @@ int __init ip_rt_init(void)
int rc = 0;
int cpu;
for_each_possible_cpu(cpu) {
struct uncached_list *ul = &per_cpu(rt_uncached_list, cpu);
diff --git a/net/ipv4/sysctl_net_ipv4.c b/net/ipv4/sysctl_net_ipv4.c
-index d151539..5f5e247 100644
+index c3852a7..7bdbde7 100644
--- a/net/ipv4/sysctl_net_ipv4.c
+++ b/net/ipv4/sysctl_net_ipv4.c
@@ -60,7 +60,7 @@ static int ipv4_local_port_range(struct ctl_table *table, int write,
struct tcp_fastopen_context *ctxt;
int ret;
u32 user_key[4]; /* 16 bytes, matching TCP_FASTOPEN_KEY_LENGTH */
-@@ -888,13 +888,12 @@ static struct ctl_table ipv4_net_table[] = {
+@@ -902,13 +902,12 @@ static struct ctl_table ipv4_net_table[] = {
static __net_init int ipv4_sysctl_init_net(struct net *net)
{
- table = kmemdup(table, sizeof(ipv4_net_table), GFP_KERNEL);
+ table = kmemdup(ipv4_net_table, sizeof(ipv4_net_table), GFP_KERNEL);
- if (table == NULL)
+ if (!table)
goto err_alloc;
-@@ -903,7 +902,10 @@ static __net_init int ipv4_sysctl_init_net(struct net *net)
+@@ -917,7 +916,10 @@ static __net_init int ipv4_sysctl_init_net(struct net *net)
table[i].data += (void *)net - (void *)&init_net;
}
+ net->ipv4.ipv4_hdr = register_net_sysctl(net, "net/ipv4", table);
+ else
+ net->ipv4.ipv4_hdr = register_net_sysctl(net, "net/ipv4", ipv4_net_table);
- if (net->ipv4.ipv4_hdr == NULL)
+ if (!net->ipv4.ipv4_hdr)
goto err_reg;
-diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
-index 995a225..e1e9183 100644
---- a/net/ipv4/tcp.c
-+++ b/net/ipv4/tcp.c
-@@ -520,8 +520,10 @@ unsigned int tcp_poll(struct file *file, struct socket *sock, poll_table *wait)
-
- /* Race breaker. If space is freed after
- * wspace test but before the flags are set,
-- * IO signal will be lost.
-+ * IO signal will be lost. Memory barrier
-+ * pairs with the input side.
- */
-+ smp_mb__after_atomic();
- if (sk_stream_is_writeable(sk))
- mask |= POLLOUT | POLLWRNORM;
- }
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
-index f501ac04..0c5a1b2 100644
+index c9ab964..607d9f7 100644
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -767,7 +767,7 @@ static void tcp_update_pacing_rate(struct sock *sk)
sk->sk_max_pacing_rate);
}
-@@ -4541,7 +4541,7 @@ static struct sk_buff *tcp_collapse_one(struct sock *sk, struct sk_buff *skb,
+@@ -4610,7 +4610,7 @@ static struct sk_buff *tcp_collapse_one(struct sock *sk, struct sk_buff *skb,
* simplifies code)
*/
static void
struct sk_buff *head, struct sk_buff *tail,
u32 start, u32 end)
{
-@@ -4799,6 +4799,8 @@ static void tcp_check_space(struct sock *sk)
- {
- if (sock_flag(sk, SOCK_QUEUE_SHRUNK)) {
- sock_reset_flag(sk, SOCK_QUEUE_SHRUNK);
-+ /* pairs with tcp_poll() */
-+ smp_mb__after_atomic();
- if (sk->sk_socket &&
- test_bit(SOCK_NOSPACE, &sk->sk_socket->flags))
- tcp_new_space(sk);
-@@ -5525,6 +5527,7 @@ discard:
+@@ -5605,6 +5605,7 @@ discard:
tcp_paws_reject(&tp->rx_opt, 0))
goto discard_and_undo;
if (th->syn) {
/* We see SYN without ACK. It is attempt of
* simultaneous connect with crossed SYNs.
-@@ -5575,6 +5578,7 @@ discard:
+@@ -5655,6 +5656,7 @@ discard:
goto discard;
#endif
}
/* "fifth, if neither of the SYN or RST bits is set then
* drop the segment and return."
*/
-@@ -5621,7 +5625,7 @@ int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb,
+@@ -5701,7 +5703,7 @@ int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb,
goto discard;
if (th->syn) {
if (icsk->icsk_af_ops->conn_request(sk, skb) < 0)
return 1;
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
-index f1756ee..8908cb0 100644
+index fc1c658..42a8d34 100644
--- a/net/ipv4/tcp_ipv4.c
+++ b/net/ipv4/tcp_ipv4.c
@@ -89,6 +89,10 @@ int sysctl_tcp_tw_reuse __read_mostly;
#ifdef CONFIG_TCP_MD5SIG
static int tcp_v4_md5_hash_hdr(char *md5_hash, const struct tcp_md5sig_key *key,
__be32 daddr, __be32 saddr, const struct tcphdr *th);
-@@ -1475,6 +1479,9 @@ int tcp_v4_do_rcv(struct sock *sk, struct sk_buff *skb)
+@@ -1427,6 +1431,9 @@ int tcp_v4_do_rcv(struct sock *sk, struct sk_buff *skb)
return 0;
reset:
tcp_v4_send_reset(rsk, skb);
discard:
kfree_skb(skb);
-@@ -1639,12 +1646,19 @@ int tcp_v4_rcv(struct sk_buff *skb)
+@@ -1591,12 +1598,19 @@ int tcp_v4_rcv(struct sk_buff *skb)
TCP_SKB_CB(skb)->sacked = 0;
sk = __inet_lookup_skb(&tcp_hashinfo, skb, th->source, th->dest);
if (unlikely(iph->ttl < inet_sk(sk)->min_ttl)) {
NET_INC_STATS_BH(net, LINUX_MIB_TCPMINTTLDROP);
-@@ -1700,6 +1714,10 @@ csum_error:
+@@ -1652,6 +1666,10 @@ csum_error:
bad_packet:
TCP_INC_STATS_BH(net, TCP_MIB_INERRS);
} else {
}
diff --git a/net/ipv4/tcp_minisocks.c b/net/ipv4/tcp_minisocks.c
-index dd11ac7..c0872da 100644
+index 17e7339..c72ff6c 100644
--- a/net/ipv4/tcp_minisocks.c
+++ b/net/ipv4/tcp_minisocks.c
@@ -27,6 +27,10 @@
int sysctl_tcp_syncookies __read_mostly = 1;
EXPORT_SYMBOL(sysctl_tcp_syncookies);
-@@ -785,7 +789,10 @@ embryonic_reset:
+@@ -778,7 +782,10 @@ embryonic_reset:
* avoid becoming vulnerable to outside attack aiming at
* resetting legit local connections.
*/
cnt += width;
}
diff --git a/net/ipv4/tcp_timer.c b/net/ipv4/tcp_timer.c
-index 0732b78..a82bdc6 100644
+index 8c65dc1..55fd1ba 100644
--- a/net/ipv4/tcp_timer.c
+++ b/net/ipv4/tcp_timer.c
@@ -22,6 +22,10 @@
int sysctl_tcp_syn_retries __read_mostly = TCP_SYN_RETRIES;
int sysctl_tcp_synack_retries __read_mostly = TCP_SYNACK_RETRIES;
int sysctl_tcp_keepalive_time __read_mostly = TCP_KEEPALIVE_TIME;
-@@ -194,6 +198,13 @@ static int tcp_write_timeout(struct sock *sk)
+@@ -195,6 +199,13 @@ static int tcp_write_timeout(struct sock *sk)
}
}
syn_set ? 0 : icsk->icsk_user_timeout, syn_set)) {
/* Has it gone just too far? */
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
-index 97ef1f8b..e446c33 100644
+index 83aa604..dbfddf5 100644
--- a/net/ipv4/udp.c
+++ b/net/ipv4/udp.c
@@ -87,6 +87,7 @@
#include <linux/socket.h>
#include <linux/sockios.h>
#include <linux/igmp.h>
-@@ -114,6 +115,10 @@
+@@ -115,6 +116,10 @@
#include <net/busy_poll.h>
#include "udp_impl.h"
/*
* This routine is called by the ICMP module when it gets some
* sort of error condition. If err < 0 then the socket should
-@@ -945,9 +953,18 @@ int udp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
+@@ -944,9 +952,18 @@ int udp_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
dport = usin->sin_port;
if (dport == 0)
return -EINVAL;
daddr = inet->inet_daddr;
dport = inet->inet_dport;
/* Open fast path for connected socket.
-@@ -1195,7 +1212,7 @@ static unsigned int first_packet_length(struct sock *sk)
+@@ -1193,7 +1210,7 @@ static unsigned int first_packet_length(struct sock *sk)
IS_UDPLITE(sk));
UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS,
IS_UDPLITE(sk));
__skb_unlink(skb, rcvq);
__skb_queue_tail(&list_kill, skb);
}
-@@ -1275,6 +1292,10 @@ try_again:
+@@ -1273,6 +1290,10 @@ try_again:
if (!skb)
goto out;
ulen = skb->len - sizeof(struct udphdr);
copied = len;
if (copied > ulen)
-@@ -1307,7 +1328,7 @@ try_again:
+@@ -1305,7 +1326,7 @@ try_again:
if (unlikely(err)) {
trace_kfree_skb(skb, udp_recvmsg);
if (!peeked) {
UDP_INC_STATS_USER(sock_net(sk),
UDP_MIB_INERRORS, is_udplite);
}
-@@ -1605,7 +1626,7 @@ csum_error:
+@@ -1599,7 +1620,7 @@ csum_error:
UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_CSUMERRORS, is_udplite);
drop:
UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS, is_udplite);
kfree_skb(skb);
return -1;
}
-@@ -1624,7 +1645,7 @@ static void flush_stack(struct sock **stack, unsigned int count,
+@@ -1617,7 +1638,7 @@ static void flush_stack(struct sock **stack, unsigned int count,
skb1 = (i == final) ? skb : skb_clone(skb, GFP_ATOMIC);
if (!skb1) {
UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_RCVBUFERRORS,
IS_UDPLITE(sk));
UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS,
-@@ -1830,6 +1851,9 @@ int __udp4_lib_rcv(struct sk_buff *skb, struct udp_table *udptable,
+@@ -1823,6 +1844,9 @@ int __udp4_lib_rcv(struct sk_buff *skb, struct udp_table *udptable,
goto csum_error;
UDP_INC_STATS_BH(net, UDP_MIB_NOPORTS, proto == IPPROTO_UDPLITE);
icmp_send(skb, ICMP_DEST_UNREACH, ICMP_PORT_UNREACH, 0);
/*
-@@ -2416,7 +2440,7 @@ static void udp4_format_sock(struct sock *sp, struct seq_file *f,
+@@ -2420,7 +2444,7 @@ static void udp4_format_sock(struct sock *sp, struct seq_file *f,
from_kuid_munged(seq_user_ns(f), sock_i_uid(sp)),
0, sock_i_ino(sp),
atomic_read(&sp->sk_refcnt), sp,
int udp4_seq_show(struct seq_file *seq, void *v)
diff --git a/net/ipv4/xfrm4_policy.c b/net/ipv4/xfrm4_policy.c
-index 6156f68..d6ab46d 100644
+index bff6974..c63736c 100644
--- a/net/ipv4/xfrm4_policy.c
+++ b/net/ipv4/xfrm4_policy.c
@@ -186,11 +186,11 @@ _decode_session4(struct sk_buff *skb, struct flowi *fl, int reverse)
return (dst_entries_get_slow(ops) > ops->gc_thresh * 2);
}
-@@ -269,19 +269,18 @@ static struct ctl_table xfrm4_policy_table[] = {
+@@ -268,19 +268,18 @@ static struct ctl_table xfrm4_policy_table[] = {
static int __net_init xfrm4_net_init(struct net *net)
{
if (!hdr)
goto err_reg;
-@@ -289,8 +288,7 @@ static int __net_init xfrm4_net_init(struct net *net)
+@@ -288,8 +287,7 @@ static int __net_init xfrm4_net_init(struct net *net)
return 0;
err_reg:
return -ENOMEM;
}
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
-index b603002..0de5c88 100644
+index 37b70e8..1475ab7 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
-@@ -171,7 +171,7 @@ static struct ipv6_devconf ipv6_devconf __read_mostly = {
+@@ -178,7 +178,7 @@ static struct ipv6_devconf ipv6_devconf __read_mostly = {
.hop_limit = IPV6_DEFAULT_HOPLIMIT,
.mtu6 = IPV6_MIN_MTU,
.accept_ra = 1,
.autoconf = 1,
.force_mld_version = 0,
.mldv1_unsolicited_report_interval = 10 * HZ,
-@@ -209,7 +209,7 @@ static struct ipv6_devconf ipv6_devconf_dflt __read_mostly = {
+@@ -219,7 +219,7 @@ static struct ipv6_devconf ipv6_devconf_dflt __read_mostly = {
.hop_limit = IPV6_DEFAULT_HOPLIMIT,
.mtu6 = IPV6_MIN_MTU,
.accept_ra = 1,
.autoconf = 1,
.force_mld_version = 0,
.mldv1_unsolicited_report_interval = 10 * HZ,
-@@ -607,7 +607,7 @@ static int inet6_netconf_dump_devconf(struct sk_buff *skb,
+@@ -620,7 +620,7 @@ static int inet6_netconf_dump_devconf(struct sk_buff *skb,
idx = 0;
head = &net->dev_index_head[h];
rcu_read_lock();
net->dev_base_seq;
hlist_for_each_entry_rcu(dev, head, index_hlist) {
if (idx < s_idx)
-@@ -2438,7 +2438,7 @@ int addrconf_set_dstaddr(struct net *net, void __user *arg)
+@@ -2506,7 +2506,7 @@ int addrconf_set_dstaddr(struct net *net, void __user *arg)
p.iph.ihl = 5;
p.iph.protocol = IPPROTO_IPV6;
p.iph.ttl = 64;
if (ops->ndo_do_ioctl) {
mm_segment_t oldfs = get_fs();
-@@ -3587,16 +3587,23 @@ static const struct file_operations if6_fops = {
+@@ -3772,16 +3772,23 @@ static const struct file_operations if6_fops = {
.release = seq_release_net,
};
}
static struct pernet_operations if6_proc_net_ops = {
-@@ -4215,7 +4222,7 @@ static int inet6_dump_addr(struct sk_buff *skb, struct netlink_callback *cb,
+@@ -4400,7 +4407,7 @@ static int inet6_dump_addr(struct sk_buff *skb, struct netlink_callback *cb,
s_ip_idx = ip_idx = cb->args[2];
rcu_read_lock();
for (h = s_h; h < NETDEV_HASHENTRIES; h++, s_idx = 0) {
idx = 0;
head = &net->dev_index_head[h];
-@@ -4864,7 +4871,7 @@ static void __ipv6_ifa_notify(int event, struct inet6_ifaddr *ifp)
+@@ -5057,7 +5064,7 @@ static void __ipv6_ifa_notify(int event, struct inet6_ifaddr *ifp)
rt_genid_bump_ipv6(net);
break;
}
}
static void ipv6_ifa_notify(int event, struct inet6_ifaddr *ifp)
-@@ -4884,7 +4891,7 @@ int addrconf_sysctl_forward(struct ctl_table *ctl, int write,
+@@ -5077,7 +5084,7 @@ int addrconf_sysctl_forward(struct ctl_table *ctl, int write,
int *valp = ctl->data;
int val = *valp;
loff_t pos = *ppos;
int ret;
/*
-@@ -4909,7 +4916,7 @@ int addrconf_sysctl_mtu(struct ctl_table *ctl, int write,
+@@ -5102,7 +5109,7 @@ int addrconf_sysctl_mtu(struct ctl_table *ctl, int write,
{
struct inet6_dev *idev = ctl->extra1;
int min_mtu = IPV6_MIN_MTU;
lctl = *ctl;
lctl.extra1 = &min_mtu;
-@@ -4984,7 +4991,7 @@ int addrconf_sysctl_disable(struct ctl_table *ctl, int write,
+@@ -5177,7 +5184,7 @@ int addrconf_sysctl_disable(struct ctl_table *ctl, int write,
int *valp = ctl->data;
int val = *valp;
loff_t pos = *ppos;
int ret;
/*
+@@ -5242,7 +5249,7 @@ static int addrconf_sysctl_stable_secret(struct ctl_table *ctl, int write,
+ int err;
+ struct in6_addr addr;
+ char str[IPV6_MAX_STRLEN];
+- struct ctl_table lctl = *ctl;
++ ctl_table_no_const lctl = *ctl;
+ struct net *net = ctl->extra2;
+ struct ipv6_stable_secret *secret = ctl->data;
+
diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c
-index e8c4400..a4cd5da 100644
+index eef63b3..d68f5da 100644
--- a/net/ipv6/af_inet6.c
+++ b/net/ipv6/af_inet6.c
-@@ -766,7 +766,7 @@ static int __net_init inet6_net_init(struct net *net)
- net->ipv6.sysctl.icmpv6_time = 1*HZ;
- net->ipv6.sysctl.flowlabel_consistency = 1;
+@@ -768,7 +768,7 @@ static int __net_init inet6_net_init(struct net *net)
net->ipv6.sysctl.auto_flowlabels = 0;
+ net->ipv6.sysctl.idgen_retries = 3;
+ net->ipv6.sysctl.idgen_delay = 1 * HZ;
- atomic_set(&net->ipv6.fib6_sernum, 1);
+ atomic_set_unchecked(&net->ipv6.fib6_sernum, 1);
err = ipv6_init_mibs(net);
if (err)
diff --git a/net/ipv6/datagram.c b/net/ipv6/datagram.c
-index ace8dac..bd6942d 100644
+index 62d908e..bac79a9 100644
--- a/net/ipv6/datagram.c
+++ b/net/ipv6/datagram.c
-@@ -957,5 +957,5 @@ void ip6_dgram_sock_seq_show(struct seq_file *seq, struct sock *sp,
+@@ -967,5 +967,5 @@ void ip6_dgram_sock_seq_show(struct seq_file *seq, struct sock *sp,
0,
sock_i_ino(sp),
atomic_read(&sp->sk_refcnt), sp,
+ atomic_read_unchecked(&sp->sk_drops));
}
diff --git a/net/ipv6/icmp.c b/net/ipv6/icmp.c
-index a5e9519..16b7412 100644
+index 2c2b5d5..cc01abd 100644
--- a/net/ipv6/icmp.c
+++ b/net/ipv6/icmp.c
-@@ -1005,7 +1005,7 @@ static struct ctl_table ipv6_icmp_table_template[] = {
+@@ -1004,7 +1004,7 @@ static struct ctl_table ipv6_icmp_table_template[] = {
struct ctl_table * __net_init ipv6_icmp_sysctl_init(struct net *net)
{
table = kmemdup(ipv6_icmp_table_template,
sizeof(ipv6_icmp_table_template),
diff --git a/net/ipv6/ip6_fib.c b/net/ipv6/ip6_fib.c
-index 263ef41..88c7be8 100644
+index bde57b1..5b45dbb 100644
--- a/net/ipv6/ip6_fib.c
+++ b/net/ipv6/ip6_fib.c
@@ -99,9 +99,9 @@ static int fib6_new_sernum(struct net *net)
return new;
}
diff --git a/net/ipv6/ip6_gre.c b/net/ipv6/ip6_gre.c
-index bc28b7d..a08feea 100644
+index a38d3ac..d02e37d 100644
--- a/net/ipv6/ip6_gre.c
+++ b/net/ipv6/ip6_gre.c
@@ -71,8 +71,8 @@ struct ip6gre_net {
static int ip6gre_tunnel_init(struct net_device *dev);
static void ip6gre_tunnel_setup(struct net_device *dev);
static void ip6gre_tunnel_link(struct ip6gre_net *ign, struct ip6_tnl *t);
-@@ -1289,7 +1289,7 @@ static void ip6gre_fb_tunnel_init(struct net_device *dev)
+@@ -1280,7 +1280,7 @@ static void ip6gre_fb_tunnel_init(struct net_device *dev)
}
.handler = ip6gre_rcv,
.err_handler = ip6gre_err,
.flags = INET6_PROTO_NOPOLICY|INET6_PROTO_FINAL,
-@@ -1650,7 +1650,7 @@ static const struct nla_policy ip6gre_policy[IFLA_GRE_MAX + 1] = {
+@@ -1639,7 +1639,7 @@ static const struct nla_policy ip6gre_policy[IFLA_GRE_MAX + 1] = {
[IFLA_GRE_FLAGS] = { .type = NLA_U32 },
};
.kind = "ip6gre",
.maxtype = IFLA_GRE_MAX,
.policy = ip6gre_policy,
-@@ -1665,7 +1665,7 @@ static struct rtnl_link_ops ip6gre_link_ops __read_mostly = {
+@@ -1654,7 +1654,7 @@ static struct rtnl_link_ops ip6gre_link_ops __read_mostly = {
.get_link_net = ip6_tnl_get_link_net,
};
.maxtype = IFLA_GRE_MAX,
.policy = ip6gre_policy,
diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c
-index ddd94ec..b7cfefb 100644
+index 5cafd92..d5aead4 100644
--- a/net/ipv6/ip6_tunnel.c
+++ b/net/ipv6/ip6_tunnel.c
-@@ -86,7 +86,7 @@ static u32 HASH(const struct in6_addr *addr1, const struct in6_addr *addr2)
+@@ -80,7 +80,7 @@ static u32 HASH(const struct in6_addr *addr1, const struct in6_addr *addr2)
static int ip6_tnl_dev_init(struct net_device *dev);
static void ip6_tnl_dev_setup(struct net_device *dev);
static int ip6_tnl_net_id __read_mostly;
struct ip6_tnl_net {
-@@ -1780,7 +1780,7 @@ static const struct nla_policy ip6_tnl_policy[IFLA_IPTUN_MAX + 1] = {
+@@ -1776,7 +1776,7 @@ static const struct nla_policy ip6_tnl_policy[IFLA_IPTUN_MAX + 1] = {
[IFLA_IPTUN_PROTO] = { .type = NLA_U8 },
};
.maxtype = IFLA_IPTUN_MAX,
.policy = ip6_tnl_policy,
diff --git a/net/ipv6/ip6_vti.c b/net/ipv6/ip6_vti.c
-index 5fb9e21..92bf04b 100644
+index 0224c03..c5ec3d9 100644
--- a/net/ipv6/ip6_vti.c
+++ b/net/ipv6/ip6_vti.c
@@ -62,7 +62,7 @@ static u32 HASH(const struct in6_addr *addr1, const struct in6_addr *addr2)
static int vti6_net_id __read_mostly;
struct vti6_net {
-@@ -1004,7 +1004,7 @@ static const struct nla_policy vti6_policy[IFLA_VTI_MAX + 1] = {
+@@ -1019,7 +1019,7 @@ static const struct nla_policy vti6_policy[IFLA_VTI_MAX + 1] = {
[IFLA_VTI_OKEY] = { .type = NLA_U32 },
};
.maxtype = IFLA_VTI_MAX,
.policy = vti6_policy,
diff --git a/net/ipv6/ipv6_sockglue.c b/net/ipv6/ipv6_sockglue.c
-index 8d766d9..dcdfea7 100644
+index 63e6956..ebbbcf6 100644
--- a/net/ipv6/ipv6_sockglue.c
+++ b/net/ipv6/ipv6_sockglue.c
-@@ -989,7 +989,7 @@ static int do_ipv6_getsockopt(struct sock *sk, int level, int optname,
+@@ -1015,7 +1015,7 @@ static int do_ipv6_getsockopt(struct sock *sk, int level, int optname,
if (sk->sk_type != SOCK_STREAM)
return -ENOPROTOOPT;
msg.msg_flags = flags;
diff --git a/net/ipv6/netfilter/ip6_tables.c b/net/ipv6/netfilter/ip6_tables.c
-index bb00c6f..16c90d7 100644
+index 62f5b0d..331fdb1 100644
--- a/net/ipv6/netfilter/ip6_tables.c
+++ b/net/ipv6/netfilter/ip6_tables.c
-@@ -1083,14 +1083,14 @@ static int compat_table_info(const struct xt_table_info *info,
+@@ -1085,14 +1085,14 @@ static int compat_table_info(const struct xt_table_info *info,
#endif
static int get_info(struct net *net, void __user *user,
sizeof(struct ip6t_getinfo));
return -EINVAL;
}
-@@ -1127,7 +1127,7 @@ static int get_info(struct net *net, void __user *user,
+@@ -1129,7 +1129,7 @@ static int get_info(struct net *net, void __user *user,
info.size = private->size;
strcpy(info.name, name);
ret = -EFAULT;
else
ret = 0;
-@@ -1983,7 +1983,7 @@ compat_do_ip6t_get_ctl(struct sock *sk, int cmd, void __user *user, int *len)
+@@ -1991,7 +1991,7 @@ compat_do_ip6t_get_ctl(struct sock *sk, int cmd, void __user *user, int *len)
switch (cmd) {
case IP6T_SO_GET_INFO:
break;
case IP6T_SO_GET_ENTRIES:
ret = compat_get_entries(sock_net(sk), user, len);
-@@ -2030,7 +2030,7 @@ do_ip6t_get_ctl(struct sock *sk, int cmd, void __user *user, int *len)
+@@ -2038,7 +2038,7 @@ do_ip6t_get_ctl(struct sock *sk, int cmd, void __user *user, int *len)
switch (cmd) {
case IP6T_SO_GET_INFO:
return -ENOMEM;
}
diff --git a/net/ipv6/ping.c b/net/ipv6/ping.c
-index a2dfff6..1e52e6d 100644
+index 263a516..692f738 100644
--- a/net/ipv6/ping.c
+++ b/net/ipv6/ping.c
-@@ -241,6 +241,24 @@ static struct pernet_operations ping_v6_net_ops = {
+@@ -240,6 +240,24 @@ static struct pernet_operations ping_v6_net_ops = {
};
#endif
int __init pingv6_init(void)
{
#ifdef CONFIG_PROC_FS
-@@ -248,13 +266,7 @@ int __init pingv6_init(void)
+@@ -247,13 +265,7 @@ int __init pingv6_init(void)
if (ret)
return ret;
#endif
return inet6_register_protosw(&pingv6_protosw);
}
-@@ -263,14 +275,9 @@ int __init pingv6_init(void)
+@@ -262,14 +274,9 @@ int __init pingv6_init(void)
*/
void pingv6_exit(void)
{
goto proc_dev_snmp6_fail;
return 0;
diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c
-index dae7f1a..783b20d 100644
+index 8072bd4..1629245 100644
--- a/net/ipv6/raw.c
+++ b/net/ipv6/raw.c
@@ -388,7 +388,7 @@ static inline int rawv6_rcv_skb(struct sock *sk, struct sk_buff *skb)
kfree_skb(skb);
return NET_RX_DROP;
}
-@@ -609,7 +609,7 @@ out:
+@@ -608,7 +608,7 @@ out:
return err;
}
struct flowi6 *fl6, struct dst_entry **dstp,
unsigned int flags)
{
-@@ -915,12 +915,15 @@ do_confirm:
+@@ -913,12 +913,15 @@ do_confirm:
static int rawv6_seticmpfilter(struct sock *sk, int level, int optname,
char __user *optval, int optlen)
{
return 0;
default:
return -ENOPROTOOPT;
-@@ -933,6 +936,7 @@ static int rawv6_geticmpfilter(struct sock *sk, int level, int optname,
+@@ -931,6 +934,7 @@ static int rawv6_geticmpfilter(struct sock *sk, int level, int optname,
char __user *optval, int __user *optlen)
{
int len;
switch (optname) {
case ICMPV6_FILTER:
-@@ -944,7 +948,8 @@ static int rawv6_geticmpfilter(struct sock *sk, int level, int optname,
+@@ -942,7 +946,8 @@ static int rawv6_geticmpfilter(struct sock *sk, int level, int optname,
len = sizeof(struct icmp6_filter);
if (put_user(len, optlen))
return -EFAULT;
return 0;
default:
diff --git a/net/ipv6/reassembly.c b/net/ipv6/reassembly.c
-index d7d70e6..bd5e9fc 100644
+index 8ffa2c8..5968612 100644
--- a/net/ipv6/reassembly.c
+++ b/net/ipv6/reassembly.c
@@ -626,12 +626,11 @@ static struct ctl_table ip6_frags_ctl_table[] = {
if (!net_eq(net, &init_net)) {
- table = kmemdup(table, sizeof(ip6_frags_ns_ctl_table), GFP_KERNEL);
+ table = kmemdup(ip6_frags_ns_ctl_table, sizeof(ip6_frags_ns_ctl_table), GFP_KERNEL);
- if (table == NULL)
+ if (!table)
goto err_alloc;
@@ -645,9 +644,10 @@ static int __net_init ip6_frags_ns_sysctl_register(struct net *net)
+ hdr = register_net_sysctl(net, "net/ipv6", ip6_frags_ns_ctl_table);
- hdr = register_net_sysctl(net, "net/ipv6", table);
- if (hdr == NULL)
+ if (!hdr)
goto err_reg;
@@ -655,8 +655,7 @@ static int __net_init ip6_frags_ns_sysctl_register(struct net *net)
return -ENOMEM;
}
diff --git a/net/ipv6/route.c b/net/ipv6/route.c
-index 4688bd4..584453d 100644
+index c73ae50..aa55e00 100644
--- a/net/ipv6/route.c
+++ b/net/ipv6/route.c
-@@ -3029,7 +3029,7 @@ struct ctl_table ipv6_route_table_template[] = {
+@@ -3046,7 +3046,7 @@ struct ctl_table ipv6_route_table_template[] = {
struct ctl_table * __net_init ipv6_route_sysctl_init(struct net *net)
{
table = kmemdup(ipv6_route_table_template,
sizeof(ipv6_route_table_template),
diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c
-index e4cbd57..02b1aaa 100644
+index ac35a28..070cc8c 100644
--- a/net/ipv6/sit.c
+++ b/net/ipv6/sit.c
@@ -74,7 +74,7 @@ static void ipip6_tunnel_setup(struct net_device *dev);
static int sit_net_id __read_mostly;
struct sit_net {
-@@ -1751,7 +1751,7 @@ static void ipip6_dellink(struct net_device *dev, struct list_head *head)
+@@ -1749,7 +1749,7 @@ static void ipip6_dellink(struct net_device *dev, struct list_head *head)
unregister_netdevice_queue(dev, head);
}
.maxtype = IFLA_IPTUN_MAX,
.policy = ipip6_policy,
diff --git a/net/ipv6/sysctl_net_ipv6.c b/net/ipv6/sysctl_net_ipv6.c
-index c5c10fa..2577d51 100644
+index abcc79f..3b2d2d5 100644
--- a/net/ipv6/sysctl_net_ipv6.c
+++ b/net/ipv6/sysctl_net_ipv6.c
-@@ -78,7 +78,7 @@ static struct ctl_table ipv6_rotable[] = {
+@@ -92,7 +92,7 @@ static struct ctl_table ipv6_rotable[] = {
static int __net_init ipv6_sysctl_net_init(struct net *net)
{
struct ctl_table *ipv6_icmp_table;
int err;
diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c
-index 1f5e622..8387d90 100644
+index 3adffb3..a67e4d1 100644
--- a/net/ipv6/tcp_ipv6.c
+++ b/net/ipv6/tcp_ipv6.c
@@ -104,6 +104,10 @@ static void inet6_sk_rx_dst_set(struct sock *sk, const struct sk_buff *skb)
+extern int grsec_enable_blackhole;
+#endif
+
- static void tcp_v6_hash(struct sock *sk)
+ static __u32 tcp_v6_init_sequence(const struct sk_buff *skb)
{
- if (sk->sk_state != TCP_CLOSE) {
-@@ -1345,6 +1349,9 @@ static int tcp_v6_do_rcv(struct sock *sk, struct sk_buff *skb)
+ return secure_tcpv6_sequence_number(ipv6_hdr(skb)->daddr.s6_addr32,
+@@ -1283,6 +1287,9 @@ static int tcp_v6_do_rcv(struct sock *sk, struct sk_buff *skb)
return 0;
reset:
tcp_v6_send_reset(sk, skb);
discard:
if (opt_skb)
-@@ -1454,12 +1461,20 @@ static int tcp_v6_rcv(struct sk_buff *skb)
+@@ -1392,12 +1399,20 @@ static int tcp_v6_rcv(struct sk_buff *skb)
sk = __inet6_lookup_skb(&tcp_hashinfo, skb, th->source, th->dest,
inet6_iif(skb));
if (hdr->hop_limit < inet6_sk(sk)->min_hopcount) {
NET_INC_STATS_BH(net, LINUX_MIB_TCPMINTTLDROP);
-@@ -1510,6 +1525,10 @@ csum_error:
+@@ -1448,6 +1463,10 @@ csum_error:
bad_packet:
TCP_INC_STATS_BH(net, TCP_MIB_INERRS);
} else {
}
diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
-index d048d46..bf141c3 100644
+index e51fc3e..8f04229 100644
--- a/net/ipv6/udp.c
+++ b/net/ipv6/udp.c
-@@ -76,6 +76,10 @@ static unsigned int udp6_ehashfn(struct net *net,
+@@ -76,6 +76,10 @@ static u32 udp6_ehashfn(const struct net *net,
udp_ipv6_hash_secret + net_hash_mix(net));
}
int ipv6_rcv_saddr_equal(const struct sock *sk, const struct sock *sk2)
{
const struct in6_addr *sk2_rcv_saddr6 = inet6_rcv_saddr(sk2);
-@@ -448,7 +452,7 @@ try_again:
+@@ -445,7 +449,7 @@ try_again:
if (unlikely(err)) {
trace_kfree_skb(skb, udpv6_recvmsg);
if (!peeked) {
if (is_udp4)
UDP_INC_STATS_USER(sock_net(sk),
UDP_MIB_INERRORS,
-@@ -714,7 +718,7 @@ csum_error:
+@@ -709,7 +713,7 @@ csum_error:
UDP6_INC_STATS_BH(sock_net(sk), UDP_MIB_CSUMERRORS, is_udplite);
drop:
UDP6_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS, is_udplite);
kfree_skb(skb);
return -1;
}
-@@ -753,7 +757,7 @@ static void flush_stack(struct sock **stack, unsigned int count,
- if (likely(skb1 == NULL))
+@@ -750,7 +754,7 @@ static void flush_stack(struct sock **stack, unsigned int count,
+ if (likely(!skb1))
skb1 = (i == final) ? skb : skb_clone(skb, GFP_ATOMIC);
if (!skb1) {
- atomic_inc(&sk->sk_drops);
UDP6_INC_STATS_BH(sock_net(sk), UDP_MIB_RCVBUFERRORS,
IS_UDPLITE(sk));
UDP6_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS,
-@@ -937,6 +941,9 @@ int __udp6_lib_rcv(struct sk_buff *skb, struct udp_table *udptable,
+@@ -934,6 +938,9 @@ int __udp6_lib_rcv(struct sk_buff *skb, struct udp_table *udptable,
goto csum_error;
UDP6_INC_STATS_BH(net, UDP_MIB_NOPORTS, proto == IPPROTO_UDPLITE);
kfree_skb(skb);
diff --git a/net/ipv6/xfrm6_policy.c b/net/ipv6/xfrm6_policy.c
-index 8d2d01b4..313511e 100644
+index f337a90..2a9a9db 100644
--- a/net/ipv6/xfrm6_policy.c
+++ b/net/ipv6/xfrm6_policy.c
-@@ -224,11 +224,11 @@ _decode_session6(struct sk_buff *skb, struct flowi *fl, int reverse)
+@@ -222,11 +222,11 @@ _decode_session6(struct sk_buff *skb, struct flowi *fl, int reverse)
}
}
return dst_entries_get_fast(ops) > ops->gc_thresh * 2;
}
-@@ -341,19 +341,19 @@ static struct ctl_table xfrm6_policy_table[] = {
+@@ -338,19 +338,19 @@ static struct ctl_table xfrm6_policy_table[] = {
static int __net_init xfrm6_net_init(struct net *net)
{
if (!hdr)
goto err_reg;
-@@ -361,8 +361,7 @@ static int __net_init xfrm6_net_init(struct net *net)
+@@ -358,8 +358,7 @@ static int __net_init xfrm6_net_init(struct net *net)
return 0;
err_reg:
return;
diff --git a/net/iucv/af_iucv.c b/net/iucv/af_iucv.c
-index 53d9311..cbaf99f 100644
+index 6daa52a..786aa2b 100644
--- a/net/iucv/af_iucv.c
+++ b/net/iucv/af_iucv.c
@@ -686,10 +686,10 @@ static void __iucv_auto_name(struct iucv_sock *iucv)
};
diff --git a/net/key/af_key.c b/net/key/af_key.c
-index f8ac939..1e189bf 100644
+index f0d52d7..9c9af38 100644
--- a/net/key/af_key.c
+++ b/net/key/af_key.c
@@ -3049,10 +3049,10 @@ static int pfkey_send_policy_notify(struct xfrm_policy *xp, int dir, const struc
return res;
}
diff --git a/net/l2tp/l2tp_eth.c b/net/l2tp/l2tp_eth.c
-index 781b3a2..73a7434 100644
+index 4b55287..bd247f7 100644
--- a/net/l2tp/l2tp_eth.c
+++ b/net/l2tp/l2tp_eth.c
@@ -42,12 +42,12 @@ struct l2tp_eth {
}
diff --git a/net/l2tp/l2tp_ip.c b/net/l2tp/l2tp_ip.c
-index 05dfc8aa..df6cfd7 100644
+index 7964993..2c48a3a 100644
--- a/net/l2tp/l2tp_ip.c
+++ b/net/l2tp/l2tp_ip.c
@@ -608,7 +608,7 @@ static struct inet_protosw l2tp_ip_protosw = {
.netns_ok = 1,
};
diff --git a/net/l2tp/l2tp_ip6.c b/net/l2tp/l2tp_ip6.c
-index 8611f1b..bc60a2d 100644
+index d1ded37..c0d1e49 100644
--- a/net/l2tp/l2tp_ip6.c
+++ b/net/l2tp/l2tp_ip6.c
-@@ -757,7 +757,7 @@ static struct inet_protosw l2tp_ip6_protosw = {
+@@ -755,7 +755,7 @@ static struct inet_protosw l2tp_ip6_protosw = {
.ops = &l2tp_ip6_ops,
};
goto out;
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
-index dd4ff36..3462997 100644
+index ff347a0..6ea4923 100644
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
-@@ -581,7 +581,7 @@ static int ieee80211_set_monitor_channel(struct wiphy *wiphy,
+@@ -582,7 +582,7 @@ static int ieee80211_set_monitor_channel(struct wiphy *wiphy,
ret = ieee80211_vif_use_channel(sdata, chandef,
IEEE80211_CHANCTX_EXCLUSIVE);
}
local->_oper_chandef = *chandef;
ieee80211_hw_config(local, 0);
}
-@@ -3468,7 +3468,7 @@ static void ieee80211_mgmt_frame_register(struct wiphy *wiphy,
+@@ -3428,7 +3428,7 @@ static void ieee80211_mgmt_frame_register(struct wiphy *wiphy,
else
local->probe_req_reg--;
break;
ieee80211_queue_work(&local->hw, &local->reconfig_filter);
-@@ -3603,8 +3603,8 @@ static int ieee80211_cfg_get_channel(struct wiphy *wiphy,
+@@ -3563,8 +3563,8 @@ static int ieee80211_cfg_get_channel(struct wiphy *wiphy,
if (chanctx_conf) {
*chandef = sdata->vif.bss_conf.chandef;
ret = 0;
if (local->use_chanctx)
*chandef = local->monitor_chandef;
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
-index 8d53d65..a4ac794 100644
+index c0a9187..2a13300 100644
--- a/net/mac80211/ieee80211_i.h
+++ b/net/mac80211/ieee80211_i.h
-@@ -29,6 +29,7 @@
+@@ -30,6 +30,7 @@
#include <net/ieee80211_radiotap.h>
#include <net/cfg80211.h>
#include <net/mac80211.h>
#include "key.h"
#include "sta_info.h"
#include "debug.h"
-@@ -1126,7 +1127,7 @@ struct ieee80211_local {
+@@ -1118,7 +1119,7 @@ struct ieee80211_local {
/* also used to protect ampdu_ac_queue and amdpu_ac_stop_refcnt */
spinlock_t queue_stop_reason_lock;
/* number of interfaces with corresponding FIF_ flags */
int fif_fcsfail, fif_plcpfail, fif_control, fif_other_bss, fif_pspoll,
diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c
-index 81a2751..c06a026 100644
+index 84cef60..53ec813 100644
--- a/net/mac80211/iface.c
+++ b/net/mac80211/iface.c
-@@ -544,7 +544,7 @@ int ieee80211_do_open(struct wireless_dev *wdev, bool coming_up)
+@@ -550,7 +550,7 @@ int ieee80211_do_open(struct wireless_dev *wdev, bool coming_up)
break;
}
res = drv_start(local);
if (res)
goto err_del_bss;
-@@ -591,7 +591,7 @@ int ieee80211_do_open(struct wireless_dev *wdev, bool coming_up)
+@@ -597,7 +597,7 @@ int ieee80211_do_open(struct wireless_dev *wdev, bool coming_up)
res = drv_add_interface(local, sdata);
if (res)
goto err_stop;
res = ieee80211_add_virtual_monitor(local);
if (res)
goto err_stop;
-@@ -701,7 +701,7 @@ int ieee80211_do_open(struct wireless_dev *wdev, bool coming_up)
+@@ -707,7 +707,7 @@ int ieee80211_do_open(struct wireless_dev *wdev, bool coming_up)
atomic_inc(&local->iff_promiscs);
if (coming_up)
if (hw_reconf_flags)
ieee80211_hw_config(local, hw_reconf_flags);
-@@ -739,7 +739,7 @@ int ieee80211_do_open(struct wireless_dev *wdev, bool coming_up)
+@@ -745,7 +745,7 @@ int ieee80211_do_open(struct wireless_dev *wdev, bool coming_up)
err_del_interface:
drv_remove_interface(local, sdata);
err_stop:
drv_stop(local);
err_del_bss:
sdata->bss = NULL;
-@@ -907,7 +907,7 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata,
+@@ -915,7 +915,7 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata,
}
if (going_down)
switch (sdata->vif.type) {
case NL80211_IFTYPE_AP_VLAN:
-@@ -969,7 +969,7 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata,
+@@ -984,7 +984,7 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata,
+ atomic_set(&sdata->txqs_len[txqi->txq.ac], 0);
}
- spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags);
- if (local->open_count == 0)
+ if (local_read(&local->open_count) == 0)
ieee80211_clear_tx_pending(local);
/*
-@@ -1012,7 +1012,7 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata,
+@@ -1027,7 +1027,7 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata,
if (cancel_scan)
flush_delayed_work(&local->scan_work);
ieee80211_stop_device(local);
/* no reconfiguring after stop! */
-@@ -1023,7 +1023,7 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata,
+@@ -1038,7 +1038,7 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata,
ieee80211_configure_filter(local);
ieee80211_hw_config(local, hw_reconf_flags);
}
diff --git a/net/mac80211/main.c b/net/mac80211/main.c
-index 5e09d35..e2fdbe2 100644
+index df3051d..359d2f4 100644
--- a/net/mac80211/main.c
+++ b/net/mac80211/main.c
@@ -175,7 +175,7 @@ int ieee80211_hw_config(struct ieee80211_local *local, u32 changed)
/*
* Goal:
diff --git a/net/mac80211/pm.c b/net/mac80211/pm.c
-index ca405b6..6cc8bee 100644
+index ac6ad62..77dbac5 100644
--- a/net/mac80211/pm.c
+++ b/net/mac80211/pm.c
@@ -12,7 +12,7 @@ int __ieee80211_suspend(struct ieee80211_hw *hw, struct cfg80211_wowlan *wowlan)
goto suspend;
ieee80211_scan_cancel(local);
-@@ -59,7 +59,7 @@ int __ieee80211_suspend(struct ieee80211_hw *hw, struct cfg80211_wowlan *wowlan)
- cancel_work_sync(&local->dynamic_ps_enable_work);
- del_timer_sync(&local->dynamic_ps_timer);
-
-- local->wowlan = wowlan && local->open_count;
-+ local->wowlan = wowlan && local_read(&local->open_count);
- if (local->wowlan) {
- int err = drv_suspend(local, wowlan);
- if (err < 0) {
-@@ -126,7 +126,7 @@ int __ieee80211_suspend(struct ieee80211_hw *hw, struct cfg80211_wowlan *wowlan)
+@@ -150,7 +150,7 @@ int __ieee80211_suspend(struct ieee80211_hw *hw, struct cfg80211_wowlan *wowlan)
WARN_ON(!list_empty(&local->chanctx_list));
/* stop hardware - this must stop RX */
return -EBUSY;
if (local->hw.flags & IEEE80211_HW_HAS_RATE_CONTROL) {
+diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c
+index 2880f2a..3085cec 100644
+--- a/net/mac80211/sta_info.c
++++ b/net/mac80211/sta_info.c
+@@ -339,7 +339,7 @@ struct sta_info *sta_info_alloc(struct ieee80211_sub_if_data *sdata,
+ int size = sizeof(struct txq_info) +
+ ALIGN(hw->txq_data_size, sizeof(void *));
+
+- txq_data = kcalloc(ARRAY_SIZE(sta->sta.txq), size, gfp);
++ txq_data = kcalloc(size, ARRAY_SIZE(sta->sta.txq), gfp);
+ if (!txq_data)
+ goto free;
+
diff --git a/net/mac80211/util.c b/net/mac80211/util.c
-index 747bdcf..eb2b981 100644
+index b864ebc..17326ff 100644
--- a/net/mac80211/util.c
+++ b/net/mac80211/util.c
-@@ -1741,7 +1741,7 @@ int ieee80211_reconfig(struct ieee80211_local *local)
+@@ -1761,7 +1761,7 @@ int ieee80211_reconfig(struct ieee80211_local *local)
bool sched_scan_stopped = false;
/* nothing to do if HW shouldn't run */
goto wake_up;
#ifdef CONFIG_PM
-@@ -1993,7 +1993,7 @@ int ieee80211_reconfig(struct ieee80211_local *local)
+@@ -2033,7 +2033,7 @@ int ieee80211_reconfig(struct ieee80211_local *local)
local->in_reconfig = false;
barrier();
ieee80211_add_virtual_monitor(local);
/*
-@@ -2048,7 +2048,7 @@ int ieee80211_reconfig(struct ieee80211_local *local)
+@@ -2088,7 +2088,7 @@ int ieee80211_reconfig(struct ieee80211_local *local)
* If this is for hw restart things are still running.
* We may want to change that later, however.
*/
drv_reconfig_complete(local, IEEE80211_RECONFIG_TYPE_RESTART);
if (!local->suspended)
-@@ -2072,7 +2072,7 @@ int ieee80211_reconfig(struct ieee80211_local *local)
+@@ -2112,7 +2112,7 @@ int ieee80211_reconfig(struct ieee80211_local *local)
flush_delayed_work(&local->scan_work);
}
drv_reconfig_complete(local, IEEE80211_RECONFIG_TYPE_SUSPEND);
list_for_each_entry(sdata, &local->interfaces, list) {
+diff --git a/net/mpls/af_mpls.c b/net/mpls/af_mpls.c
+index 1f93a59..96faa29 100644
+--- a/net/mpls/af_mpls.c
++++ b/net/mpls/af_mpls.c
+@@ -456,7 +456,7 @@ static int mpls_dev_sysctl_register(struct net_device *dev,
+ struct mpls_dev *mdev)
+ {
+ char path[sizeof("net/mpls/conf/") + IFNAMSIZ];
+- struct ctl_table *table;
++ ctl_table_no_const *table;
+ int i;
+
+ table = kmemdup(&mpls_dev_table, sizeof(mpls_dev_table), GFP_KERNEL);
+@@ -1025,7 +1025,7 @@ static int mpls_platform_labels(struct ctl_table *table, int write,
+ struct net *net = table->data;
+ int platform_labels = net->mpls.platform_labels;
+ int ret;
+- struct ctl_table tmp = {
++ ctl_table_no_const tmp = {
+ .procname = table->procname,
+ .data = &platform_labels,
+ .maxlen = sizeof(int),
+@@ -1055,7 +1055,7 @@ static const struct ctl_table mpls_table[] = {
+
+ static int mpls_net_init(struct net *net)
+ {
+- struct ctl_table *table;
++ ctl_table_no_const *table;
+
+ net->mpls.platform_labels = 0;
+ net->mpls.platform_label = NULL;
diff --git a/net/netfilter/Kconfig b/net/netfilter/Kconfig
-index b02660f..c0f791c 100644
+index a0f3e6a3..b026fe2 100644
--- a/net/netfilter/Kconfig
+++ b/net/netfilter/Kconfig
-@@ -1122,6 +1122,16 @@ config NETFILTER_XT_MATCH_ESP
+@@ -1112,6 +1112,16 @@ config NETFILTER_XT_MATCH_ESP
To compile it as a module, choose M here. If unsure, say N.
tristate '"hashlimit" match support'
depends on (IP6_NF_IPTABLES || IP6_NF_IPTABLES=n)
diff --git a/net/netfilter/Makefile b/net/netfilter/Makefile
-index 89f73a9..e4e5bd9 100644
+index a87d8b8..d43183c 100644
--- a/net/netfilter/Makefile
+++ b/net/netfilter/Makefile
@@ -139,6 +139,7 @@ obj-$(CONFIG_NETFILTER_XT_MATCH_DEVGROUP) += xt_devgroup.o
if (!todrop_rate[i]) return 0;
diff --git a/net/netfilter/ipvs/ip_vs_core.c b/net/netfilter/ipvs/ip_vs_core.c
-index b87ca32..76c7799 100644
+index 5d2b806..9005b29 100644
--- a/net/netfilter/ipvs/ip_vs_core.c
+++ b/net/netfilter/ipvs/ip_vs_core.c
-@@ -568,7 +568,7 @@ int ip_vs_leave(struct ip_vs_service *svc, struct sk_buff *skb,
+@@ -574,7 +574,7 @@ int ip_vs_leave(struct ip_vs_service *svc, struct sk_buff *skb,
ret = cp->packet_xmit(skb, cp, pd->pp, iph);
/* do not touch skb anymore */
ip_vs_conn_put(cp);
return ret;
}
-@@ -1723,7 +1723,7 @@ ip_vs_in(unsigned int hooknum, struct sk_buff *skb, int af)
+@@ -1750,7 +1750,7 @@ ip_vs_in(unsigned int hooknum, struct sk_buff *skb, int af)
if (cp->flags & IP_VS_CONN_F_ONE_PACKET)
pkts = sysctl_sync_threshold(ipvs);
else
if (ipvs->sync_state & IP_VS_STATE_MASTER)
ip_vs_sync_conn(net, cp, pkts);
diff --git a/net/netfilter/ipvs/ip_vs_ctl.c b/net/netfilter/ipvs/ip_vs_ctl.c
-index ed99448..3ba6cad 100644
+index 285eae3..226f4a7 100644
--- a/net/netfilter/ipvs/ip_vs_ctl.c
+++ b/net/netfilter/ipvs/ip_vs_ctl.c
-@@ -799,7 +799,7 @@ __ip_vs_update_dest(struct ip_vs_service *svc, struct ip_vs_dest *dest,
+@@ -814,7 +814,7 @@ __ip_vs_update_dest(struct ip_vs_service *svc, struct ip_vs_dest *dest,
*/
ip_vs_rs_hash(ipvs, dest);
}
/* bind the service */
old_svc = rcu_dereference_protected(dest->svc, 1);
-@@ -1664,7 +1664,7 @@ proc_do_sync_ports(struct ctl_table *table, int write,
+@@ -1679,7 +1679,7 @@ proc_do_sync_ports(struct ctl_table *table, int write,
* align with netns init in ip_vs_control_net_init()
*/
{
.procname = "amemthresh",
.maxlen = sizeof(int),
-@@ -1999,7 +1999,7 @@ static int ip_vs_info_seq_show(struct seq_file *seq, void *v)
+@@ -2020,7 +2020,7 @@ static int ip_vs_info_seq_show(struct seq_file *seq, void *v)
" %-7s %-6d %-10d %-10d\n",
&dest->addr.in6,
ntohs(dest->port),
atomic_read(&dest->weight),
atomic_read(&dest->activeconns),
atomic_read(&dest->inactconns));
-@@ -2010,7 +2010,7 @@ static int ip_vs_info_seq_show(struct seq_file *seq, void *v)
+@@ -2031,7 +2031,7 @@ static int ip_vs_info_seq_show(struct seq_file *seq, void *v)
"%-7s %-6d %-10d %-10d\n",
ntohl(dest->addr.ip),
ntohs(dest->port),
atomic_read(&dest->weight),
atomic_read(&dest->activeconns),
atomic_read(&dest->inactconns));
-@@ -2499,7 +2499,7 @@ __ip_vs_get_dest_entries(struct net *net, const struct ip_vs_get_dests *get,
+@@ -2528,7 +2528,7 @@ __ip_vs_get_dest_entries(struct net *net, const struct ip_vs_get_dests *get,
entry.addr = dest->addr.ip;
entry.port = dest->port;
entry.weight = atomic_read(&dest->weight);
entry.u_threshold = dest->u_threshold;
entry.l_threshold = dest->l_threshold;
-@@ -3040,7 +3040,7 @@ static int ip_vs_genl_fill_dest(struct sk_buff *skb, struct ip_vs_dest *dest)
+@@ -3101,7 +3101,7 @@ static int ip_vs_genl_fill_dest(struct sk_buff *skb, struct ip_vs_dest *dest)
if (nla_put(skb, IPVS_DEST_ATTR_ADDR, sizeof(dest->addr), &dest->addr) ||
nla_put_be16(skb, IPVS_DEST_ATTR_PORT, dest->port) ||
nla_put_u32(skb, IPVS_DEST_ATTR_FWD_METHOD,
IP_VS_CONN_F_FWD_MASK)) ||
nla_put_u32(skb, IPVS_DEST_ATTR_WEIGHT,
atomic_read(&dest->weight)) ||
-@@ -3675,7 +3675,7 @@ static int __net_init ip_vs_control_net_init_sysctl(struct net *net)
+@@ -3739,7 +3739,7 @@ static int __net_init ip_vs_control_net_init_sysctl(struct net *net)
{
int idx;
struct netns_ipvs *ipvs = net_ipvs(net);
.procname = "lblcr_expiration",
.data = NULL,
diff --git a/net/netfilter/ipvs/ip_vs_sync.c b/net/netfilter/ipvs/ip_vs_sync.c
-index d93ceeb..4556144 100644
+index 19b9cce..e4f3112 100644
--- a/net/netfilter/ipvs/ip_vs_sync.c
+++ b/net/netfilter/ipvs/ip_vs_sync.c
@@ -609,7 +609,7 @@ static void ip_vs_sync_conn_v0(struct net *net, struct ip_vs_conn *cp,
else
pkts = sysctl_sync_threshold(ipvs);
goto sloop;
-@@ -902,7 +902,7 @@ static void ip_vs_proc_conn(struct net *net, struct ip_vs_conn_param *param,
+@@ -919,7 +919,7 @@ static void ip_vs_proc_conn(struct net *net, struct ip_vs_conn_param *param,
if (opt)
memcpy(&cp->in_seq, opt, sizeof(*opt));
cp->old_state = cp->state;
/*
diff --git a/net/netfilter/ipvs/ip_vs_xmit.c b/net/netfilter/ipvs/ip_vs_xmit.c
-index 3aedbda..6a63567 100644
+index 19986ec..416dbc5 100644
--- a/net/netfilter/ipvs/ip_vs_xmit.c
+++ b/net/netfilter/ipvs/ip_vs_xmit.c
-@@ -1214,7 +1214,7 @@ ip_vs_icmp_xmit(struct sk_buff *skb, struct ip_vs_conn *cp,
+@@ -1215,7 +1215,7 @@ ip_vs_icmp_xmit(struct sk_buff *skb, struct ip_vs_conn *cp,
else
rc = NF_ACCEPT;
/* do not touch skb anymore */
goto out;
}
-@@ -1307,7 +1307,7 @@ ip_vs_icmp_xmit_v6(struct sk_buff *skb, struct ip_vs_conn *cp,
+@@ -1308,7 +1308,7 @@ ip_vs_icmp_xmit_v6(struct sk_buff *skb, struct ip_vs_conn *cp,
else
rc = NF_ACCEPT;
/* do not touch skb anymore */
}
diff --git a/net/netfilter/nf_conntrack_acct.c b/net/netfilter/nf_conntrack_acct.c
-index a4b5e2a..13b1de3 100644
+index 45da11a..ef3e5dc 100644
--- a/net/netfilter/nf_conntrack_acct.c
+++ b/net/netfilter/nf_conntrack_acct.c
-@@ -62,7 +62,7 @@ static struct nf_ct_ext_type acct_extend __read_mostly = {
+@@ -64,7 +64,7 @@ static struct nf_ct_ext_type acct_extend __read_mostly = {
#ifdef CONFIG_SYSCTL
static int nf_conntrack_acct_init_sysctl(struct net *net)
{
}
EXPORT_SYMBOL(nf_unregister_sockopt);
diff --git a/net/netfilter/nfnetlink_log.c b/net/netfilter/nfnetlink_log.c
-index 11d85b3..7fcc420 100644
+index 4ef1fae..f72f08b 100644
--- a/net/netfilter/nfnetlink_log.c
+++ b/net/netfilter/nfnetlink_log.c
-@@ -83,7 +83,7 @@ static int nfnl_log_net_id __read_mostly;
+@@ -84,7 +84,7 @@ static int nfnl_log_net_id __read_mostly;
struct nfnl_log_net {
spinlock_t instances_lock;
struct hlist_head instance_table[INSTANCE_BUCKETS];
};
static struct nfnl_log_net *nfnl_log_pernet(struct net *net)
-@@ -563,7 +563,7 @@ __build_packet_message(struct nfnl_log_net *log,
+@@ -572,7 +572,7 @@ __build_packet_message(struct nfnl_log_net *log,
/* global sequence number */
if ((inst->flags & NFULNL_CFG_F_SEQ_GLOBAL) &&
nla_put_be32(inst->skb, NFULA_SEQ_GLOBAL,
if (data_len) {
diff --git a/net/netfilter/nft_compat.c b/net/netfilter/nft_compat.c
-index 65f3e2b..2e9d6a0 100644
+index 7f29cfc..917ef5f 100644
--- a/net/netfilter/nft_compat.c
+++ b/net/netfilter/nft_compat.c
-@@ -317,14 +317,7 @@ static void nft_match_eval(const struct nft_expr *expr,
+@@ -321,14 +321,7 @@ static void nft_match_eval(const struct nft_expr *expr,
return;
}
-- switch(ret) {
-- case true:
-- data[NFT_REG_VERDICT].verdict = NFT_CONTINUE;
+- switch (ret ? 1 : 0) {
+- case 1:
+- regs->verdict.code = NFT_CONTINUE;
- break;
-- case false:
-- data[NFT_REG_VERDICT].verdict = NFT_BREAK;
+- case 0:
+- regs->verdict.code = NFT_BREAK;
- break;
- }
-+ data[NFT_REG_VERDICT].verdict = ret ? NFT_CONTINUE : NFT_BREAK;
++ regs->verdict.code = ret ? NFT_CONTINUE : NFT_BREAK;
}
static const struct nla_policy nft_match_policy[NFTA_MATCH_MAX + 1] = {
return 0;
}
diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c
-index d1d7a81..b45b03d 100644
+index bf6e766..be67817 100644
--- a/net/netlink/af_netlink.c
+++ b/net/netlink/af_netlink.c
-@@ -260,7 +260,7 @@ static void netlink_overrun(struct sock *sk)
+@@ -262,7 +262,7 @@ static void netlink_overrun(struct sock *sk)
sk->sk_error_report(sk);
}
}
}
static void netlink_rcv_wake(struct sock *sk)
-@@ -3002,7 +3002,7 @@ static int netlink_seq_show(struct seq_file *seq, void *v)
+@@ -3014,7 +3014,7 @@ static int netlink_seq_show(struct seq_file *seq, void *v)
sk_wmem_alloc_get(s),
nlk->cb_running,
atomic_read(&s->sk_refcnt),
/**
* struct vport_portids - array of netlink portids of a vport.
diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
-index f8db706..2b4631e 100644
+index fe1610d..ec1c87f 100644
--- a/net/packet/af_packet.c
+++ b/net/packet/af_packet.c
-@@ -269,7 +269,7 @@ static int packet_direct_xmit(struct sk_buff *skb)
+@@ -275,7 +275,7 @@ static int packet_direct_xmit(struct sk_buff *skb)
return ret;
drop:
kfree_skb(skb);
return NET_XMIT_DROP;
}
-@@ -1847,7 +1847,7 @@ static int packet_rcv(struct sk_buff *skb, struct net_device *dev,
-
- spin_lock(&sk->sk_receive_queue.lock);
- po->stats.stats1.tp_packets++;
-- skb->dropcount = atomic_read(&sk->sk_drops);
-+ skb->dropcount = atomic_read_unchecked(&sk->sk_drops);
- __skb_queue_tail(&sk->sk_receive_queue, skb);
- spin_unlock(&sk->sk_receive_queue.lock);
- sk->sk_data_ready(sk);
-@@ -1856,7 +1856,7 @@ static int packet_rcv(struct sk_buff *skb, struct net_device *dev,
+@@ -1848,7 +1848,7 @@ static int packet_rcv(struct sk_buff *skb, struct net_device *dev,
drop_n_acct:
spin_lock(&sk->sk_receive_queue.lock);
po->stats.stats1.tp_drops++;
spin_unlock(&sk->sk_receive_queue.lock);
drop_n_restore:
-@@ -3499,7 +3499,7 @@ static int packet_getsockopt(struct socket *sock, int level, int optname,
+@@ -3514,7 +3514,7 @@ static int packet_getsockopt(struct socket *sock, int level, int optname,
case PACKET_HDRLEN:
if (len > sizeof(int))
len = sizeof(int);
return -EFAULT;
switch (val) {
case TPACKET_V1:
-@@ -3545,7 +3545,7 @@ static int packet_getsockopt(struct socket *sock, int level, int optname,
+@@ -3560,7 +3560,7 @@ static int packet_getsockopt(struct socket *sock, int level, int optname,
len = lv;
if (put_user(len, optlen))
return -EFAULT;
return 0;
}
diff --git a/net/phonet/pep.c b/net/phonet/pep.c
-index 5d3f2b7..8a4dbb7 100644
+index 6de2aeb..1f8afe8 100644
--- a/net/phonet/pep.c
+++ b/net/phonet/pep.c
@@ -388,7 +388,7 @@ static int pipe_do_rcv(struct sock *sk, struct sk_buff *skb)
break;
}
diff --git a/net/phonet/socket.c b/net/phonet/socket.c
-index 008214a..bb68240 100644
+index d575ef4..1dedc31 100644
--- a/net/phonet/socket.c
+++ b/net/phonet/socket.c
@@ -611,7 +611,7 @@ static int pn_sock_seq_show(struct seq_file *seq, void *v)
if (likely(*recent == gen))
return 0;
-diff --git a/net/rds/connection.c b/net/rds/connection.c
-index 378c3a6..ba4382c 100644
---- a/net/rds/connection.c
-+++ b/net/rds/connection.c
-@@ -193,6 +193,7 @@ static struct rds_connection *__rds_conn_create(__be32 laddr, __be32 faddr,
- }
-
- atomic_set(&conn->c_state, RDS_CONN_DOWN);
-+ conn->c_send_gen = 0;
- conn->c_reconnect_jiffies = 0;
- INIT_DELAYED_WORK(&conn->c_send_w, rds_send_worker);
- INIT_DELAYED_WORK(&conn->c_recv_w, rds_recv_worker);
diff --git a/net/rds/ib.h b/net/rds/ib.h
index c36d713..af45bf2 100644
--- a/net/rds/ib.h
spinlock_t i_ack_lock; /* protect i_ack_next */
u64 i_ack_next; /* next ACK to send */
diff --git a/net/rds/ib_cm.c b/net/rds/ib_cm.c
-index 31b74f5..dc1fbfa 100644
+index 8a09ee7..45e2b64 100644
--- a/net/rds/ib_cm.c
+++ b/net/rds/ib_cm.c
-@@ -717,7 +717,7 @@ void rds_ib_conn_shutdown(struct rds_connection *conn)
+@@ -726,7 +726,7 @@ void rds_ib_conn_shutdown(struct rds_connection *conn)
/* Clear the ACK state */
clear_bit(IB_ACK_IN_FLIGHT, &ic->i_ack_flags);
#ifdef KERNEL_HAS_ATOMIC64
#endif
diff --git a/net/rds/rds.h b/net/rds/rds.h
-index c2a5eef..87a7460 100644
+index 0d41155..80cc278 100644
--- a/net/rds/rds.h
+++ b/net/rds/rds.h
-@@ -110,6 +110,7 @@ struct rds_connection {
- void *c_transport_data;
-
- atomic_t c_state;
-+ unsigned long c_send_gen;
- unsigned long c_flags;
- unsigned long c_reconnect_jiffies;
- struct delayed_work c_send_w;
-@@ -448,7 +449,7 @@ struct rds_transport {
+@@ -449,7 +449,7 @@ struct rds_transport {
void (*sync_mr)(void *trans_private, int direction);
void (*free_mr)(void *trans_private, int invalidate);
void (*flush_mrs)(void);
struct rds_sock {
struct sock rs_sk;
-diff --git a/net/rds/send.c b/net/rds/send.c
-index 42f65d4..49f77ef 100644
---- a/net/rds/send.c
-+++ b/net/rds/send.c
-@@ -140,8 +140,11 @@ int rds_send_xmit(struct rds_connection *conn)
- struct scatterlist *sg;
- int ret = 0;
- LIST_HEAD(to_be_dropped);
-+ int batch_count;
-+ unsigned long send_gen = 0;
-
- restart:
-+ batch_count = 0;
-
- /*
- * sendmsg calls here after having queued its message on the send
-@@ -157,6 +160,17 @@ restart:
- }
-
- /*
-+ * we record the send generation after doing the xmit acquire.
-+ * if someone else manages to jump in and do some work, we'll use
-+ * this to avoid a goto restart farther down.
-+ *
-+ * The acquire_in_xmit() check above ensures that only one
-+ * caller can increment c_send_gen at any time.
-+ */
-+ conn->c_send_gen++;
-+ send_gen = conn->c_send_gen;
-+
-+ /*
- * rds_conn_shutdown() sets the conn state and then tests RDS_IN_XMIT,
- * we do the opposite to avoid races.
- */
-@@ -202,6 +216,16 @@ restart:
- if (!rm) {
- unsigned int len;
-
-+ batch_count++;
-+
-+ /* we want to process as big a batch as we can, but
-+ * we also want to avoid softlockups. If we've been
-+ * through a lot of messages, lets back off and see
-+ * if anyone else jumps in
-+ */
-+ if (batch_count >= 1024)
-+ goto over_batch;
-+
- spin_lock_irqsave(&conn->c_lock, flags);
-
- if (!list_empty(&conn->c_send_queue)) {
-@@ -357,9 +381,9 @@ restart:
- }
- }
-
-+over_batch:
- if (conn->c_trans->xmit_complete)
- conn->c_trans->xmit_complete(conn);
--
- release_in_xmit(conn);
-
- /* Nuke any messages we decided not to retransmit. */
-@@ -380,10 +404,15 @@ restart:
- * If the transport cannot continue (i.e ret != 0), then it must
- * call us when more room is available, such as from the tx
- * completion handler.
-+ *
-+ * We have an extra generation check here so that if someone manages
-+ * to jump in after our release_in_xmit, we'll see that they have done
-+ * some work and we will skip our goto
- */
- if (ret == 0) {
- smp_mb();
-- if (!list_empty(&conn->c_send_queue)) {
-+ if (!list_empty(&conn->c_send_queue) &&
-+ send_gen == conn->c_send_gen) {
- rds_stats_inc(s_send_lock_queue_raced);
- goto restart;
- }
diff --git a/net/rds/tcp.c b/net/rds/tcp.c
index edac9ef..16bcb98 100644
--- a/net/rds/tcp.c
set_fs(oldfs);
}
diff --git a/net/rxrpc/af_rxrpc.c b/net/rxrpc/af_rxrpc.c
-index 7b16704..9628ec6 100644
+index 0095b9a..e95c49b 100644
--- a/net/rxrpc/af_rxrpc.c
+++ b/net/rxrpc/af_rxrpc.c
@@ -40,7 +40,7 @@ static const struct proto_ops rxrpc_rpc_ops;
ret = kernel_sendmsg(conn->trans->local->socket, &msg, iov, 2, len);
diff --git a/net/rxrpc/ar-input.c b/net/rxrpc/ar-input.c
-index 481f89f..ceeaf8d 100644
+index 4505a69..fe73096 100644
--- a/net/rxrpc/ar-input.c
+++ b/net/rxrpc/ar-input.c
@@ -331,9 +331,9 @@ void rxrpc_fast_process_packet(struct rxrpc_call *call, struct sk_buff *skb)
/* request ACK generation for any ACK or DATA packet that requests
diff --git a/net/rxrpc/ar-internal.h b/net/rxrpc/ar-internal.h
-index ba9fd36..9bbfe01 100644
+index aef1bd2..97736c3 100644
--- a/net/rxrpc/ar-internal.h
+++ b/net/rxrpc/ar-internal.h
-@@ -272,8 +272,8 @@ struct rxrpc_connection {
+@@ -274,8 +274,8 @@ struct rxrpc_connection {
int error; /* error code for local abort */
int debug_id; /* debug ID for printks */
unsigned int call_counter; /* call ID counter */
u8 avail_calls; /* number of calls available */
u8 size_align; /* data size alignment (for security) */
u8 header_size; /* rxrpc + security header size */
-@@ -346,7 +346,7 @@ struct rxrpc_call {
+@@ -348,7 +348,7 @@ struct rxrpc_call {
spinlock_t lock;
rwlock_t state_lock; /* lock for state transition */
atomic_t usage;
u32 abort_code; /* local/remote abort code */
enum { /* current state of call */
RXRPC_CALL_CLIENT_SEND_REQUEST, /* - client sending request phase */
-@@ -431,7 +431,7 @@ static inline void rxrpc_abort_call(struct rxrpc_call *call, u32 abort_code)
+@@ -433,7 +433,7 @@ static inline void rxrpc_abort_call(struct rxrpc_call *call, u32 abort_code)
*/
extern atomic_t rxrpc_n_skbs;
extern __be32 rxrpc_epoch;
/*
diff --git a/net/rxrpc/ar-local.c b/net/rxrpc/ar-local.c
-index 87f7135..74d3703 100644
+index ca904ed..16082d5 100644
--- a/net/rxrpc/ar-local.c
+++ b/net/rxrpc/ar-local.c
-@@ -45,7 +45,7 @@ struct rxrpc_local *rxrpc_alloc_local(struct sockaddr_rxrpc *srx)
+@@ -53,7 +53,7 @@ struct rxrpc_local *rxrpc_alloc_local(struct sockaddr_rxrpc *srx)
spin_lock_init(&local->lock);
rwlock_init(&local->services_lock);
atomic_set(&local->usage, 1);
}
diff --git a/net/rxrpc/ar-output.c b/net/rxrpc/ar-output.c
-index 8331c95..401bf22 100644
+index c004280..ab1ed5a 100644
--- a/net/rxrpc/ar-output.c
+++ b/net/rxrpc/ar-output.c
-@@ -655,14 +655,14 @@ static int rxrpc_send_data(struct kiocb *iocb,
+@@ -648,14 +648,14 @@ static int rxrpc_send_data(struct rxrpc_sock *rx,
memset(skb_put(skb, pad), 0, pad);
}
_proto("Tx RESPONSE %%%u", ntohl(hdr->serial));
ret = kernel_sendmsg(conn->trans->local->socket, &msg, iov, 3, len);
+diff --git a/net/sched/act_bpf.c b/net/sched/act_bpf.c
+index dc6a2d3..3b4fb96 100644
+--- a/net/sched/act_bpf.c
++++ b/net/sched/act_bpf.c
+@@ -332,6 +332,9 @@ static void tcf_bpf_cleanup(struct tc_action *act, int bind)
+ bpf_prog_put(prog->filter);
+ else
+ bpf_prog_destroy(prog->filter);
++
++ kfree(prog->bpf_ops);
++ kfree(prog->bpf_name);
+ }
+
+ static struct tc_action_ops act_bpf_ops __read_mostly = {
+diff --git a/net/sched/cls_bpf.c b/net/sched/cls_bpf.c
+index 91bd9c1..c0b86f2 100644
+--- a/net/sched/cls_bpf.c
++++ b/net/sched/cls_bpf.c
+@@ -364,7 +364,7 @@ static int cls_bpf_change(struct net *net, struct sk_buff *in_skb,
+ goto errout;
+
+ if (oldprog) {
+- list_replace_rcu(&prog->link, &oldprog->link);
++ list_replace_rcu(&oldprog->link, &prog->link);
+ tcf_unbind_filter(tp, &oldprog->res);
+ call_rcu(&oldprog->rcu, __cls_bpf_delete_prog);
+ } else {
+diff --git a/net/sched/cls_flow.c b/net/sched/cls_flow.c
+index a620c4e..75df923 100644
+--- a/net/sched/cls_flow.c
++++ b/net/sched/cls_flow.c
+@@ -419,6 +419,8 @@ static int flow_change(struct net *net, struct sk_buff *in_skb,
+ if (!fnew)
+ goto err2;
+
++ tcf_exts_init(&fnew->exts, TCA_FLOW_ACT, TCA_FLOW_POLICE);
++
+ fold = (struct flow_filter *)*arg;
+ if (fold) {
+ err = -EINVAL;
+@@ -480,7 +482,6 @@ static int flow_change(struct net *net, struct sk_buff *in_skb,
+ fnew->mask = ~0U;
+ fnew->tp = tp;
+ get_random_bytes(&fnew->hashrnd, 4);
+- tcf_exts_init(&fnew->exts, TCA_FLOW_ACT, TCA_FLOW_POLICE);
+ }
+
+ fnew->perturb_timer.function = flow_perturbation;
+@@ -520,7 +521,7 @@ static int flow_change(struct net *net, struct sk_buff *in_skb,
+ if (*arg == 0)
+ list_add_tail_rcu(&fnew->list, &head->filters);
+ else
+- list_replace_rcu(&fnew->list, &fold->list);
++ list_replace_rcu(&fold->list, &fnew->list);
+
+ *arg = (unsigned long)fnew;
+
+diff --git a/net/sched/sch_fq_codel.c b/net/sched/sch_fq_codel.c
+index c244c45b..4169e55 100644
+--- a/net/sched/sch_fq_codel.c
++++ b/net/sched/sch_fq_codel.c
+@@ -162,14 +162,23 @@ static unsigned int fq_codel_drop(struct Qdisc *sch)
+ skb = dequeue_head(flow);
+ len = qdisc_pkt_len(skb);
+ q->backlogs[idx] -= len;
+- kfree_skb(skb);
+ sch->q.qlen--;
+ qdisc_qstats_drop(sch);
+ qdisc_qstats_backlog_dec(sch, skb);
++ kfree_skb(skb);
+ flow->dropped++;
+ return idx;
+ }
+
++static unsigned int fq_codel_qdisc_drop(struct Qdisc *sch)
++{
++ unsigned int prev_backlog;
++
++ prev_backlog = sch->qstats.backlog;
++ fq_codel_drop(sch);
++ return prev_backlog - sch->qstats.backlog;
++}
++
+ static int fq_codel_enqueue(struct sk_buff *skb, struct Qdisc *sch)
+ {
+ struct fq_codel_sched_data *q = qdisc_priv(sch);
+@@ -598,7 +607,7 @@ static struct Qdisc_ops fq_codel_qdisc_ops __read_mostly = {
+ .enqueue = fq_codel_enqueue,
+ .dequeue = fq_codel_dequeue,
+ .peek = qdisc_peek_dequeued,
+- .drop = fq_codel_drop,
++ .drop = fq_codel_qdisc_drop,
+ .init = fq_codel_init,
+ .reset = fq_codel_reset,
+ .destroy = fq_codel_destroy,
diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c
index 6efca30..1259f82 100644
--- a/net/sched/sch_generic.c
linkwatch_fire_event(dev);
}
}
+diff --git a/net/sched/sch_sfq.c b/net/sched/sch_sfq.c
+index b877140..0f65ba4 100644
+--- a/net/sched/sch_sfq.c
++++ b/net/sched/sch_sfq.c
+@@ -329,10 +329,10 @@ drop:
+ len = qdisc_pkt_len(skb);
+ slot->backlog -= len;
+ sfq_dec(q, x);
+- kfree_skb(skb);
+ sch->q.qlen--;
+ qdisc_qstats_drop(sch);
+ qdisc_qstats_backlog_dec(sch, skb);
++ kfree_skb(skb);
+ return len;
+ }
+
diff --git a/net/sctp/ipv6.c b/net/sctp/ipv6.c
index 0e4198e..f94193e 100644
--- a/net/sctp/ipv6.c
/* Initialize IPv6 support and register with socket layer. */
diff --git a/net/sctp/protocol.c b/net/sctp/protocol.c
-index 8f34b27..b105385 100644
+index 53b7acd..e7a0919 100644
--- a/net/sctp/protocol.c
+++ b/net/sctp/protocol.c
@@ -836,8 +836,10 @@ int sctp_register_af(struct sctp_af *af)
sctp_generate_t1_cookie_event,
sctp_generate_t1_init_event,
diff --git a/net/sctp/socket.c b/net/sctp/socket.c
-index aafe94b..40b016f 100644
+index 5f6c4e6..07880fe 100644
--- a/net/sctp/socket.c
+++ b/net/sctp/socket.c
-@@ -2205,11 +2205,13 @@ static int sctp_setsockopt_events(struct sock *sk, char __user *optval,
+@@ -2200,11 +2200,13 @@ static int sctp_setsockopt_events(struct sock *sk, char __user *optval,
{
struct sctp_association *asoc;
struct sctp_ulpevent *event;
if (sctp_sk(sk)->subscribe.sctp_data_io_event)
pr_warn_ratelimited(DEPRECATED "%s (pid %d) "
-@@ -4378,13 +4380,16 @@ static int sctp_getsockopt_disable_fragments(struct sock *sk, int len,
+@@ -4385,13 +4387,16 @@ static int sctp_getsockopt_disable_fragments(struct sock *sk, int len,
static int sctp_getsockopt_events(struct sock *sk, int len, char __user *optval,
int __user *optlen)
{
return -EFAULT;
return 0;
}
-@@ -4402,6 +4407,8 @@ static int sctp_getsockopt_events(struct sock *sk, int len, char __user *optval,
+@@ -4409,6 +4414,8 @@ static int sctp_getsockopt_events(struct sock *sk, int len, char __user *optval,
*/
static int sctp_getsockopt_autoclose(struct sock *sk, int len, char __user *optval, int __user *optlen)
{
/* Applicable to UDP-style socket only */
if (sctp_style(sk, TCP))
return -EOPNOTSUPP;
-@@ -4410,7 +4417,8 @@ static int sctp_getsockopt_autoclose(struct sock *sk, int len, char __user *optv
+@@ -4417,7 +4424,8 @@ static int sctp_getsockopt_autoclose(struct sock *sk, int len, char __user *optv
len = sizeof(int);
if (put_user(len, optlen))
return -EFAULT;
return -EFAULT;
return 0;
}
-@@ -4784,12 +4792,15 @@ static int sctp_getsockopt_delayed_ack(struct sock *sk, int len,
+@@ -4791,12 +4799,15 @@ static int sctp_getsockopt_delayed_ack(struct sock *sk, int len,
*/
static int sctp_getsockopt_initmsg(struct sock *sk, int len, char __user *optval, int __user *optlen)
{
return -EFAULT;
return 0;
}
-@@ -4830,6 +4841,8 @@ static int sctp_getsockopt_peer_addrs(struct sock *sk, int len,
+@@ -4837,6 +4848,8 @@ static int sctp_getsockopt_peer_addrs(struct sock *sk, int len,
->addr_to_user(sp, &temp);
if (space_left < addrlen)
return -ENOMEM;
return -EFAULT;
to += addrlen;
diff --git a/net/sctp/sysctl.c b/net/sctp/sysctl.c
-index 2e9ada1..40f425d 100644
+index 26d50c5..dfae665 100644
--- a/net/sctp/sysctl.c
+++ b/net/sctp/sysctl.c
-@@ -321,7 +321,7 @@ static int proc_sctp_do_hmac_alg(struct ctl_table *ctl, int write,
+@@ -317,7 +317,7 @@ static int proc_sctp_do_hmac_alg(struct ctl_table *ctl, int write,
loff_t *ppos)
{
struct net *net = current->nsproxy->net_ns;
bool changed = false;
char *none = "none";
char tmp[8];
-@@ -369,7 +369,7 @@ static int proc_sctp_do_rto_min(struct ctl_table *ctl, int write,
+@@ -365,7 +365,7 @@ static int proc_sctp_do_rto_min(struct ctl_table *ctl, int write,
struct net *net = current->nsproxy->net_ns;
unsigned int min = *(unsigned int *) ctl->extra1;
unsigned int max = *(unsigned int *) ctl->extra2;
int ret, new_value;
memset(&tbl, 0, sizeof(struct ctl_table));
-@@ -398,7 +398,7 @@ static int proc_sctp_do_rto_max(struct ctl_table *ctl, int write,
+@@ -394,7 +394,7 @@ static int proc_sctp_do_rto_max(struct ctl_table *ctl, int write,
struct net *net = current->nsproxy->net_ns;
unsigned int min = *(unsigned int *) ctl->extra1;
unsigned int max = *(unsigned int *) ctl->extra2;
int ret, new_value;
memset(&tbl, 0, sizeof(struct ctl_table));
-@@ -436,7 +436,7 @@ static int proc_sctp_do_auth(struct ctl_table *ctl, int write,
+@@ -432,7 +432,7 @@ static int proc_sctp_do_auth(struct ctl_table *ctl, int write,
loff_t *ppos)
{
struct net *net = current->nsproxy->net_ns;
int new_value, ret;
memset(&tbl, 0, sizeof(struct ctl_table));
-@@ -463,7 +463,7 @@ static int proc_sctp_do_auth(struct ctl_table *ctl, int write,
+@@ -459,7 +459,7 @@ static int proc_sctp_do_auth(struct ctl_table *ctl, int write,
int sctp_sysctl_net_register(struct net *net)
{
table = kmemdup(sctp_net_table, sizeof(sctp_net_table), GFP_KERNEL);
diff --git a/net/socket.c b/net/socket.c
-index 245330c..919e2a7 100644
+index 884e329..def6df6 100644
--- a/net/socket.c
+++ b/net/socket.c
@@ -89,6 +89,7 @@
#ifdef CONFIG_NET_RX_BUSY_POLL
unsigned int sysctl_net_busy_read __read_mostly;
-@@ -162,7 +164,7 @@ static const struct file_operations socket_file_ops = {
+@@ -160,7 +162,7 @@ static const struct file_operations socket_file_ops = {
*/
static DEFINE_SPINLOCK(net_family_lock);
/*
* Statistics counters of the socket lists
-@@ -328,7 +330,7 @@ static struct dentry *sockfs_mount(struct file_system_type *fs_type,
+@@ -326,7 +328,7 @@ static struct dentry *sockfs_mount(struct file_system_type *fs_type,
&sockfs_dentry_operations, SOCKFS_MAGIC);
}
static struct file_system_type sock_fs_type = {
.name = "sockfs",
-@@ -1172,6 +1174,8 @@ int __sock_create(struct net *net, int family, int type, int protocol,
+@@ -1108,6 +1110,8 @@ int __sock_create(struct net *net, int family, int type, int protocol,
return -EAFNOSUPPORT;
if (type < 0 || type >= SOCK_MAX)
return -EINVAL;
/* Compatibility.
-@@ -1192,6 +1196,20 @@ int __sock_create(struct net *net, int family, int type, int protocol,
+@@ -1128,6 +1132,20 @@ int __sock_create(struct net *net, int family, int type, int protocol,
if (err)
return err;
/*
* Allocate the socket and allow the family to set things up. if
* the protocol is 0, the family is instructed to select an appropriate
-@@ -1443,6 +1461,14 @@ SYSCALL_DEFINE3(bind, int, fd, struct sockaddr __user *, umyaddr, int, addrlen)
+@@ -1379,6 +1397,14 @@ SYSCALL_DEFINE3(bind, int, fd, struct sockaddr __user *, umyaddr, int, addrlen)
if (sock) {
err = move_addr_to_kernel(umyaddr, addrlen, &address);
if (err >= 0) {
err = security_socket_bind(sock,
(struct sockaddr *)&address,
addrlen);
-@@ -1451,6 +1477,7 @@ SYSCALL_DEFINE3(bind, int, fd, struct sockaddr __user *, umyaddr, int, addrlen)
+@@ -1387,6 +1413,7 @@ SYSCALL_DEFINE3(bind, int, fd, struct sockaddr __user *, umyaddr, int, addrlen)
(struct sockaddr *)
&address, addrlen);
}
fput_light(sock->file, fput_needed);
}
return err;
-@@ -1474,10 +1501,20 @@ SYSCALL_DEFINE2(listen, int, fd, int, backlog)
+@@ -1410,10 +1437,20 @@ SYSCALL_DEFINE2(listen, int, fd, int, backlog)
if ((unsigned int)backlog > somaxconn)
backlog = somaxconn;
fput_light(sock->file, fput_needed);
}
return err;
-@@ -1521,6 +1558,18 @@ SYSCALL_DEFINE4(accept4, int, fd, struct sockaddr __user *, upeer_sockaddr,
+@@ -1457,6 +1494,18 @@ SYSCALL_DEFINE4(accept4, int, fd, struct sockaddr __user *, upeer_sockaddr,
newsock->type = sock->type;
newsock->ops = sock->ops;
/*
* We don't need try_module_get here, as the listening socket (sock)
* has the protocol module (sock->ops->owner) held.
-@@ -1566,6 +1615,8 @@ SYSCALL_DEFINE4(accept4, int, fd, struct sockaddr __user *, upeer_sockaddr,
+@@ -1502,6 +1551,8 @@ SYSCALL_DEFINE4(accept4, int, fd, struct sockaddr __user *, upeer_sockaddr,
fd_install(newfd, newfile);
err = newfd;
out_put:
fput_light(sock->file, fput_needed);
out:
-@@ -1598,6 +1649,7 @@ SYSCALL_DEFINE3(connect, int, fd, struct sockaddr __user *, uservaddr,
+@@ -1534,6 +1585,7 @@ SYSCALL_DEFINE3(connect, int, fd, struct sockaddr __user *, uservaddr,
int, addrlen)
{
struct socket *sock;
struct sockaddr_storage address;
int err, fput_needed;
-@@ -1608,6 +1660,17 @@ SYSCALL_DEFINE3(connect, int, fd, struct sockaddr __user *, uservaddr,
+@@ -1544,6 +1596,17 @@ SYSCALL_DEFINE3(connect, int, fd, struct sockaddr __user *, uservaddr,
if (err < 0)
goto out_put;
err =
security_socket_connect(sock, (struct sockaddr *)&address, addrlen);
if (err)
-@@ -1689,6 +1752,8 @@ SYSCALL_DEFINE3(getpeername, int, fd, struct sockaddr __user *, usockaddr,
+@@ -1625,6 +1688,8 @@ SYSCALL_DEFINE3(getpeername, int, fd, struct sockaddr __user *, usockaddr,
* the protocol.
*/
SYSCALL_DEFINE6(sendto, int, fd, void __user *, buff, size_t, len,
unsigned int, flags, struct sockaddr __user *, addr,
int, addr_len)
-@@ -1756,7 +1821,7 @@ SYSCALL_DEFINE6(recvfrom, int, fd, void __user *, ubuf, size_t, size,
+@@ -1688,7 +1753,7 @@ SYSCALL_DEFINE6(recvfrom, int, fd, void __user *, ubuf, size_t, size,
struct socket *sock;
struct iovec iov;
struct msghdr msg;
int err, err2;
int fput_needed;
-@@ -2006,7 +2071,7 @@ static int ___sys_sendmsg(struct socket *sock, struct user_msghdr __user *msg,
+@@ -1930,7 +1995,7 @@ static int ___sys_sendmsg(struct socket *sock, struct user_msghdr __user *msg,
* checking falls down on this.
*/
if (copy_from_user(ctl_buf,
ctl_len))
goto out_freectl;
msg_sys->msg_control = ctl_buf;
-@@ -2157,7 +2222,7 @@ static int ___sys_recvmsg(struct socket *sock, struct user_msghdr __user *msg,
+@@ -2080,7 +2145,7 @@ static int ___sys_recvmsg(struct socket *sock, struct user_msghdr __user *msg,
ssize_t err;
/* kernel mode address */
/* user mode address pointers */
struct sockaddr __user *uaddr;
-@@ -2803,7 +2868,7 @@ static int ethtool_ioctl(struct net *net, struct compat_ifreq __user *ifr32)
+@@ -2725,7 +2790,7 @@ static int ethtool_ioctl(struct net *net, struct compat_ifreq __user *ifr32)
ifr = compat_alloc_user_space(buf_size);
rxnfc = (void __user *)ifr + ALIGN(sizeof(struct ifreq), 8);
return -EFAULT;
if (put_user(convert_in ? rxnfc : compat_ptr(data),
-@@ -2914,7 +2979,7 @@ static int bond_ioctl(struct net *net, unsigned int cmd,
+@@ -2836,7 +2901,7 @@ static int bond_ioctl(struct net *net, unsigned int cmd,
old_fs = get_fs();
set_fs(KERNEL_DS);
err = dev_ioctl(net, cmd,
set_fs(old_fs);
return err;
-@@ -3007,7 +3072,7 @@ static int compat_sioc_ifmap(struct net *net, unsigned int cmd,
+@@ -2929,7 +2994,7 @@ static int compat_sioc_ifmap(struct net *net, unsigned int cmd,
old_fs = get_fs();
set_fs(KERNEL_DS);
set_fs(old_fs);
if (cmd == SIOCGIFMAP && !err) {
-@@ -3091,7 +3156,7 @@ static int routing_ioctl(struct net *net, struct socket *sock,
+@@ -3013,7 +3078,7 @@ static int routing_ioctl(struct net *net, struct socket *sock,
ret |= get_user(rtdev, &(ur4->rt_dev));
if (rtdev) {
ret |= copy_from_user(devname, compat_ptr(rtdev), 15);
devname[15] = 0;
} else
r4.rt_dev = NULL;
-@@ -3318,8 +3383,8 @@ int kernel_getsockopt(struct socket *sock, int level, int optname,
+@@ -3240,8 +3305,8 @@ int kernel_getsockopt(struct socket *sock, int level, int optname,
int __user *uoptlen;
int err;
set_fs(KERNEL_DS);
if (level == SOL_SOCKET)
-@@ -3339,7 +3404,7 @@ int kernel_setsockopt(struct socket *sock, int level, int optname,
+@@ -3261,7 +3326,7 @@ int kernel_setsockopt(struct socket *sock, int level, int optname,
char __user *uoptval;
int err;
/* make a copy for the caller */
*handle = ctxh;
diff --git a/net/sunrpc/cache.c b/net/sunrpc/cache.c
-index 5199bb1..567a54c 100644
+index 2928aff..6f9efeb 100644
--- a/net/sunrpc/cache.c
+++ b/net/sunrpc/cache.c
-@@ -1595,7 +1595,7 @@ static int create_cache_proc_entries(struct cache_detail *cd, struct net *net)
+@@ -1597,7 +1597,7 @@ static int create_cache_proc_entries(struct cache_detail *cd, struct net *net)
struct sunrpc_net *sn;
sn = net_generic(net, sunrpc_net_id);
task->tk_action = call_reserve;
}
diff --git a/net/sunrpc/sched.c b/net/sunrpc/sched.c
-index b91fd9c..00fe5b1 100644
+index 337ca85..42feae8 100644
--- a/net/sunrpc/sched.c
+++ b/net/sunrpc/sched.c
@@ -261,9 +261,9 @@ static int rpc_wait_bit_killable(struct wait_bit_key *key)
err = __tipc_nl_compat_dumpit(&dump, msg, args);
kfree_skb(args);
+diff --git a/net/tipc/socket.c b/net/tipc/socket.c
+index f485600..20cc6df 100644
+--- a/net/tipc/socket.c
++++ b/net/tipc/socket.c
+@@ -2009,6 +2009,7 @@ static int tipc_accept(struct socket *sock, struct socket *new_sock, int flags)
+ res = tipc_sk_create(sock_net(sock->sk), new_sock, 0, 1);
+ if (res)
+ goto exit;
++ security_sk_clone(sock->sk, new_sock->sk);
+
+ new_sk = new_sock->sk;
+ new_tsock = tipc_sk(new_sk);
diff --git a/net/tipc/subscr.c b/net/tipc/subscr.c
-index 72c339e..a93593a 100644
+index 1c147c8..50d7957 100644
--- a/net/tipc/subscr.c
+++ b/net/tipc/subscr.c
@@ -70,7 +70,7 @@ static void subscr_send_event(struct tipc_subscription *sub, u32 found_lower,
sub->evt.event = htohl(event, sub->swap);
sub->evt.found_lower = htohl(found_lower, sub->swap);
diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
-index 526b6ed..ec20275 100644
+index 0643059..4628deb 100644
--- a/net/unix/af_unix.c
+++ b/net/unix/af_unix.c
-@@ -791,6 +791,12 @@ static struct sock *unix_find_other(struct net *net,
+@@ -786,6 +786,12 @@ static struct sock *unix_find_other(struct net *net,
err = -ECONNREFUSED;
if (!S_ISSOCK(inode->i_mode))
goto put_fail;
u = unix_find_socket_byinode(inode);
if (!u)
goto put_fail;
-@@ -811,6 +817,13 @@ static struct sock *unix_find_other(struct net *net,
+@@ -806,6 +812,13 @@ static struct sock *unix_find_other(struct net *net,
if (u) {
struct dentry *dentry;
dentry = unix_sk(u)->path.dentry;
if (dentry)
touch_atime(&unix_sk(u)->path);
} else
-@@ -844,12 +857,18 @@ static int unix_mknod(const char *sun_path, umode_t mode, struct path *res)
+@@ -839,12 +852,18 @@ static int unix_mknod(const char *sun_path, umode_t mode, struct path *res)
*/
err = security_path_mknod(&path, dentry, mode, 0);
if (!err) {
+ err = -EACCES;
+ goto out;
+ }
- err = vfs_mknod(path.dentry->d_inode, dentry, mode, 0);
+ err = vfs_mknod(d_inode(path.dentry), dentry, mode, 0);
if (!err) {
res->mnt = mntget(path.mnt);
res->dentry = dget(dentry);
}
diff --git a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c
-index de971b6..b843409 100644
+index 96688cd..e68a2eb 100644
--- a/net/xfrm/xfrm_state.c
+++ b/net/xfrm/xfrm_state.c
@@ -166,12 +166,14 @@ int xfrm_register_type(const struct xfrm_type *type, unsigned short family)
kallsymso=""
kallsyms_vmlinux=""
diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c
-index e614ef6..d9d2b01 100644
+index 78691d5..56972f2 100644
--- a/scripts/mod/file2alias.c
+++ b/scripts/mod/file2alias.c
@@ -142,7 +142,7 @@ static void device_id_check(const char *modname, const char *device_id,
sprintf(alias, "dmi*");
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
-index d439856..10c1eac 100644
+index 91ee1b2..c9cf01a 100644
--- a/scripts/mod/modpost.c
+++ b/scripts/mod/modpost.c
-@@ -921,6 +921,7 @@ enum mismatch {
- ANY_INIT_TO_ANY_EXIT,
+@@ -942,6 +942,7 @@ enum mismatch {
ANY_EXIT_TO_ANY_INIT,
EXPORT_TO_INIT_EXIT,
+ EXTABLE_TO_NON_TEXT,
+ DATA_TO_TEXT
};
- struct sectioncheck {
-@@ -1007,6 +1008,12 @@ static const struct sectioncheck sectioncheck[] = {
- .tosec = { INIT_SECTIONS, EXIT_SECTIONS, NULL },
- .mismatch = EXPORT_TO_INIT_EXIT,
- .symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
+ /**
+@@ -1068,6 +1069,12 @@ static const struct sectioncheck sectioncheck[] = {
+ .good_tosec = {ALL_TEXT_SECTIONS , NULL},
+ .mismatch = EXTABLE_TO_NON_TEXT,
+ .handler = extable_mismatch_handler,
+},
+/* Do not reference code from writable data */
+{
+ .fromsec = { DATA_SECTIONS, NULL },
-+ .tosec = { TEXT_SECTIONS, NULL },
++ .bad_tosec = { ALL_TEXT_SECTIONS, NULL },
+ .mismatch = DATA_TO_TEXT
}
};
-@@ -1127,10 +1134,10 @@ static Elf_Sym *find_elf_symbol(struct elf_info *elf, Elf64_Sword addr,
+@@ -1217,10 +1224,10 @@ static Elf_Sym *find_elf_symbol(struct elf_info *elf, Elf64_Sword addr,
continue;
if (ELF_ST_TYPE(sym->st_info) == STT_SECTION)
continue;
if (d < 0)
d = addr - sym->st_value;
if (d < distance) {
-@@ -1408,6 +1415,14 @@ static void report_sec_mismatch(const char *modname,
- tosym, prl_to, prl_to, tosym);
- free(prl_to);
+@@ -1503,6 +1510,14 @@ static void report_sec_mismatch(const char *modname,
+ fatal("There's a special handler for this mismatch type, "
+ "we should never get here.");
break;
+ case DATA_TO_TEXT:
+#if 0
}
fprintf(stderr, "\n");
}
-@@ -1659,7 +1674,7 @@ static void section_rel(const char *modname, struct elf_info *elf,
+@@ -1892,7 +1907,7 @@ static void section_rel(const char *modname, struct elf_info *elf,
static void check_sec_ref(struct module *mod, const char *modname,
struct elf_info *elf)
{
Elf_Shdr *sechdrs = elf->sechdrs;
/* Walk through all sections */
-@@ -1790,7 +1805,7 @@ void __attribute__((format(printf, 2, 3))) buf_printf(struct buffer *buf,
+@@ -2023,7 +2038,7 @@ void __attribute__((format(printf, 2, 3))) buf_printf(struct buffer *buf,
va_end(ap);
}
{
if (buf->size - buf->pos < len) {
buf->size += len + SZ;
-@@ -2009,7 +2024,7 @@ static void write_if_changed(struct buffer *b, const char *fname)
+@@ -2242,7 +2257,7 @@ static void write_if_changed(struct buffer *b, const char *fname)
if (fstat(fileno(file), &st) < 0)
goto close_write;
# Find all available archs
find_all_archs()
diff --git a/security/Kconfig b/security/Kconfig
-index beb86b5..135675f 100644
+index bf4ec46..1fa98bf 100644
--- a/security/Kconfig
+++ b/security/Kconfig
-@@ -4,6 +4,980 @@
+@@ -4,6 +4,981 @@
menu "Security options"
+ select TTY
+ select DEBUG_KERNEL
+ select DEBUG_LIST
++ select MULTIUSER
+ help
+ If you say Y here, you will be able to configure many features
+ that will enhance the security of your system. It is highly
source security/keys/Kconfig
config SECURITY_DMESG_RESTRICT
-@@ -103,7 +1077,7 @@ config INTEL_TXT
+@@ -104,7 +1079,7 @@ config INTEL_TXT
config LSM_MMAP_MIN_ADDR
int "Low address space for LSM to protect from user allocation"
depends on SECURITY && SECURITY_SELINUX
help
This is the portion of low virtual memory which should be protected
diff --git a/security/apparmor/file.c b/security/apparmor/file.c
-index fdaa50c..2761dcb 100644
+index 913f377..6e392d5 100644
--- a/security/apparmor/file.c
+++ b/security/apparmor/file.c
@@ -348,8 +348,8 @@ static inline bool xindex_is_subset(u32 link, u32 target)
+ struct path link = { .mnt = new_dir->mnt, .dentry = new_dentry };
+ struct path target = { .mnt = new_dir->mnt, .dentry = old_dentry };
struct path_cond cond = {
- old_dentry->d_inode->i_uid,
- old_dentry->d_inode->i_mode
+ d_backing_inode(old_dentry)->i_uid,
+ d_backing_inode(old_dentry)->i_mode
diff --git a/security/apparmor/lsm.c b/security/apparmor/lsm.c
-index 107db88..185f3a0 100644
+index e5f1561..c351c05 100644
--- a/security/apparmor/lsm.c
+++ b/security/apparmor/lsm.c
@@ -186,7 +186,7 @@ static int common_perm_dir_dentry(int op, struct path *dir,
{
- struct path path = { mnt, dentry };
+ struct path path = { .mnt = mnt, .dentry = dentry };
- struct path_cond cond = { dentry->d_inode->i_uid,
- dentry->d_inode->i_mode
+ struct path_cond cond = { d_backing_inode(dentry)->i_uid,
+ d_backing_inode(dentry)->i_mode
};
@@ -325,8 +325,8 @@ static int apparmor_path_rename(struct path *old_dir, struct dentry *old_dentry,
- struct path new_path = { new_dir->mnt, new_dentry };
+ struct path old_path = { .mnt = old_dir->mnt, .dentry = old_dentry };
+ struct path new_path = { .mnt = new_dir->mnt, .dentry = new_dentry };
- struct path_cond cond = { old_dentry->d_inode->i_uid,
- old_dentry->d_inode->i_mode
+ struct path_cond cond = { d_backing_inode(old_dentry)->i_uid,
+ d_backing_inode(old_dentry)->i_mode
};
@@ -615,7 +615,7 @@ static int apparmor_task_setrlimit(struct task_struct *task,
return error;
.ptrace_access_check = apparmor_ptrace_access_check,
diff --git a/security/commoncap.c b/security/commoncap.c
-index f66713b..b69aa8e 100644
+index f2875cd..9fc1de0 100644
--- a/security/commoncap.c
+++ b/security/commoncap.c
@@ -427,6 +427,32 @@ int get_vfs_caps_from_disk(const struct dentry *dentry, struct cpu_vfs_cap_data
key = ima_hash_key(entry->digest);
hlist_add_head_rcu(&qe->hnext, &ima_htable.queue[key]);
return 0;
-diff --git a/security/keys/compat.c b/security/keys/compat.c
-index 3478965..ec7bb9e 100644
---- a/security/keys/compat.c
-+++ b/security/keys/compat.c
-@@ -44,7 +44,7 @@ static long compat_keyctl_instantiate_key_iov(
- if (ret == 0)
- goto no_payload_free;
-
-- ret = keyctl_instantiate_key_common(id, iov, ioc, ret, ringid);
-+ ret = keyctl_instantiate_key_common(id, (const struct iovec __force_user *)iov, ioc, ret, ringid);
- err:
- if (iov != iovstack)
- kfree(iov);
-diff --git a/security/keys/internal.h b/security/keys/internal.h
-index 200e378..cdc74b5 100644
---- a/security/keys/internal.h
-+++ b/security/keys/internal.h
-@@ -244,7 +244,7 @@ extern long keyctl_instantiate_key_iov(key_serial_t,
- extern long keyctl_invalidate_key(key_serial_t);
-
- extern long keyctl_instantiate_key_common(key_serial_t,
-- const struct iovec *,
-+ const struct iovec __user *,
- unsigned, size_t, key_serial_t);
- #ifdef CONFIG_PERSISTENT_KEYRINGS
- extern long keyctl_get_persistent(uid_t, key_serial_t);
diff --git a/security/keys/key.c b/security/keys/key.c
index aee2ec5..c276071 100644
--- a/security/keys/key.c
/* record the root user tracking */
rb_link_node(&root_key_user.node,
-diff --git a/security/keys/keyctl.c b/security/keys/keyctl.c
-index 4743d71..170a185 100644
---- a/security/keys/keyctl.c
-+++ b/security/keys/keyctl.c
-@@ -1000,7 +1000,7 @@ static int keyctl_change_reqkey_auth(struct key *key)
- /*
- * Copy the iovec data from userspace
- */
--static long copy_from_user_iovec(void *buffer, const struct iovec *iov,
-+static long copy_from_user_iovec(void *buffer, const struct iovec __user *iov,
- unsigned ioc)
- {
- for (; ioc > 0; ioc--) {
-@@ -1022,7 +1022,7 @@ static long copy_from_user_iovec(void *buffer, const struct iovec *iov,
- * If successful, 0 will be returned.
- */
- long keyctl_instantiate_key_common(key_serial_t id,
-- const struct iovec *payload_iov,
-+ const struct iovec __user *payload_iov,
- unsigned ioc,
- size_t plen,
- key_serial_t ringid)
-@@ -1117,7 +1117,7 @@ long keyctl_instantiate_key(key_serial_t id,
- [0].iov_len = plen
- };
-
-- return keyctl_instantiate_key_common(id, iov, 1, plen, ringid);
-+ return keyctl_instantiate_key_common(id, (const struct iovec __force_user *)iov, 1, plen, ringid);
- }
-
- return keyctl_instantiate_key_common(id, NULL, 0, 0, ringid);
-@@ -1150,7 +1150,7 @@ long keyctl_instantiate_key_iov(key_serial_t id,
- if (ret == 0)
- goto no_payload_free;
-
-- ret = keyctl_instantiate_key_common(id, iov, ioc, ret, ringid);
-+ ret = keyctl_instantiate_key_common(id, (const struct iovec __force_user *)iov, ioc, ret, ringid);
- err:
- if (iov != iovstack)
- kfree(iov);
diff --git a/security/min_addr.c b/security/min_addr.c
index f728728..6457a0c 100644
--- a/security/min_addr.c
/*
diff --git a/security/security.c b/security/security.c
-index e81d5bb..b9c5111 100644
+index 8e9b1f4..cda8e4c 100644
--- a/security/security.c
+++ b/security/security.c
@@ -33,8 +33,8 @@
static int __init choose_lsm(char *str)
{
diff --git a/security/selinux/avc.c b/security/selinux/avc.c
-index afcc0ae..71f0525 100644
+index 3c17dda..482b12c 100644
--- a/security/selinux/avc.c
+++ b/security/selinux/avc.c
@@ -59,7 +59,7 @@ struct avc_node {
lock = &avc_cache.slots_lock[hvalue];
diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
-index 4d1a541..4d87c9b 100644
+index 212070e..87aa172 100644
--- a/security/selinux/hooks.c
+++ b/security/selinux/hooks.c
-@@ -5862,7 +5862,8 @@ static int selinux_key_getsecurity(struct key *key, char **_buffer)
+@@ -3288,7 +3288,8 @@ static int file_map_prot_check(struct file *file, unsigned long prot, int shared
+ int rc = 0;
+
+ if (default_noexec &&
+- (prot & PROT_EXEC) && (!file || (!shared && (prot & PROT_WRITE)))) {
++ (prot & PROT_EXEC) && (!file || IS_PRIVATE(file_inode(file)) ||
++ (!shared && (prot & PROT_WRITE)))) {
+ /*
+ * We are making executable an anonymous mapping or a
+ * private file mapping that will also be writable.
+@@ -5841,7 +5842,8 @@ static int selinux_key_getsecurity(struct key *key, char **_buffer)
#endif
.name = "selinux",
.binder_set_context_mgr = selinux_binder_set_context_mgr,
-@@ -6208,6 +6209,9 @@ static void selinux_nf_ip_exit(void)
+@@ -6186,6 +6188,9 @@ static void selinux_nf_ip_exit(void)
#ifdef CONFIG_SECURITY_SELINUX_DISABLE
static int selinux_disabled;
int selinux_disable(void)
{
if (ss_initialized) {
-@@ -6225,7 +6229,9 @@ int selinux_disable(void)
+@@ -6203,7 +6208,9 @@ int selinux_disable(void)
selinux_disabled = 1;
selinux_enabled = 0;
}
rtnl_unlock();
diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c
-index c934311..ac64d68 100644
+index b644757..3763b10 100644
--- a/security/smack/smack_lsm.c
+++ b/security/smack/smack_lsm.c
-@@ -4187,7 +4187,7 @@ static int smack_inode_getsecctx(struct inode *inode, void **ctx, u32 *ctxlen)
+@@ -4266,7 +4266,7 @@ static int smack_inode_getsecctx(struct inode *inode, void **ctx, u32 *ctxlen)
return 0;
}
.ptrace_access_check = smack_ptrace_access_check,
diff --git a/security/tomoyo/file.c b/security/tomoyo/file.c
-index c151a18..14ba19a 100644
+index 2367b10..a0c3c51 100644
--- a/security/tomoyo/file.c
+++ b/security/tomoyo/file.c
@@ -692,7 +692,7 @@ int tomoyo_path_number_perm(const u8 type, struct path *path,
};
int idx;
-@@ -786,7 +786,7 @@ int tomoyo_path_perm(const u8 operation, struct path *path, const char *target)
+@@ -786,7 +786,7 @@ int tomoyo_path_perm(const u8 operation, const struct path *path, const char *ta
{
struct tomoyo_request_info r;
struct tomoyo_obj_info obj = {
if (!fstype) {
error = -ENODEV;
diff --git a/security/tomoyo/tomoyo.c b/security/tomoyo/tomoyo.c
-index f0b756e..8aa497b 100644
+index 57c88d5..0c6fcf3 100644
--- a/security/tomoyo/tomoyo.c
+++ b/security/tomoyo/tomoyo.c
-@@ -146,7 +146,7 @@ static int tomoyo_bprm_check_security(struct linux_binprm *bprm)
- */
- static int tomoyo_inode_getattr(struct vfsmount *mnt, struct dentry *dentry)
- {
-- struct path path = { mnt, dentry };
-+ struct path path = { .mnt = mnt, .dentry = dentry };
- return tomoyo_path_perm(TOMOYO_TYPE_GETATTR, &path, NULL);
- }
-
-@@ -172,7 +172,7 @@ static int tomoyo_path_truncate(struct path *path)
+@@ -171,7 +171,7 @@ static int tomoyo_path_truncate(struct path *path)
*/
static int tomoyo_path_unlink(struct path *parent, struct dentry *dentry)
{
return tomoyo_path_perm(TOMOYO_TYPE_UNLINK, &path, NULL);
}
-@@ -188,7 +188,7 @@ static int tomoyo_path_unlink(struct path *parent, struct dentry *dentry)
+@@ -187,7 +187,7 @@ static int tomoyo_path_unlink(struct path *parent, struct dentry *dentry)
static int tomoyo_path_mkdir(struct path *parent, struct dentry *dentry,
umode_t mode)
{
return tomoyo_path_number_perm(TOMOYO_TYPE_MKDIR, &path,
mode & S_IALLUGO);
}
-@@ -203,7 +203,7 @@ static int tomoyo_path_mkdir(struct path *parent, struct dentry *dentry,
+@@ -202,7 +202,7 @@ static int tomoyo_path_mkdir(struct path *parent, struct dentry *dentry,
*/
static int tomoyo_path_rmdir(struct path *parent, struct dentry *dentry)
{
return tomoyo_path_perm(TOMOYO_TYPE_RMDIR, &path, NULL);
}
-@@ -219,7 +219,7 @@ static int tomoyo_path_rmdir(struct path *parent, struct dentry *dentry)
+@@ -218,7 +218,7 @@ static int tomoyo_path_rmdir(struct path *parent, struct dentry *dentry)
static int tomoyo_path_symlink(struct path *parent, struct dentry *dentry,
const char *old_name)
{
return tomoyo_path_perm(TOMOYO_TYPE_SYMLINK, &path, old_name);
}
-@@ -236,7 +236,7 @@ static int tomoyo_path_symlink(struct path *parent, struct dentry *dentry,
+@@ -235,7 +235,7 @@ static int tomoyo_path_symlink(struct path *parent, struct dentry *dentry,
static int tomoyo_path_mknod(struct path *parent, struct dentry *dentry,
umode_t mode, unsigned int dev)
{
int type = TOMOYO_TYPE_CREATE;
const unsigned int perm = mode & S_IALLUGO;
-@@ -275,8 +275,8 @@ static int tomoyo_path_mknod(struct path *parent, struct dentry *dentry,
+@@ -274,8 +274,8 @@ static int tomoyo_path_mknod(struct path *parent, struct dentry *dentry,
static int tomoyo_path_link(struct dentry *old_dentry, struct path *new_dir,
struct dentry *new_dentry)
{
return tomoyo_path2_perm(TOMOYO_TYPE_LINK, &path1, &path2);
}
-@@ -295,8 +295,8 @@ static int tomoyo_path_rename(struct path *old_parent,
+@@ -294,8 +294,8 @@ static int tomoyo_path_rename(struct path *old_parent,
struct path *new_parent,
struct dentry *new_dentry)
{
return tomoyo_path2_perm(TOMOYO_TYPE_RENAME, &path1, &path2);
}
-@@ -424,7 +424,7 @@ static int tomoyo_sb_mount(const char *dev_name, struct path *path,
+@@ -423,7 +423,7 @@ static int tomoyo_sb_mount(const char *dev_name, struct path *path,
*/
static int tomoyo_sb_umount(struct vfsmount *mnt, int flags)
{
return tomoyo_path_perm(TOMOYO_TYPE_UMOUNT, &path, NULL);
}
-@@ -503,7 +503,7 @@ static int tomoyo_socket_sendmsg(struct socket *sock, struct msghdr *msg,
+@@ -502,7 +502,7 @@ static int tomoyo_socket_sendmsg(struct socket *sock, struct msghdr *msg,
* tomoyo_security_ops is a "struct security_operations" which is used for
* registering TOMOYO.
*/
.cred_alloc_blank = tomoyo_cred_alloc_blank,
.cred_prepare = tomoyo_cred_prepare,
diff --git a/security/yama/Kconfig b/security/yama/Kconfig
-index 20ef514..4182bed 100644
+index 3123e1d..951f48d 100644
--- a/security/yama/Kconfig
+++ b/security/yama/Kconfig
@@ -1,6 +1,6 @@
bool "Yama support"
- depends on SECURITY
+ depends on SECURITY && !GRKERNSEC
- select SECURITYFS
- select SECURITY_PATH
default n
+ help
+ This selects Yama, which extends DAC support with additional
diff --git a/security/yama/yama_lsm.c b/security/yama/yama_lsm.c
-index 13c88fbc..f8c115e 100644
+index 24aae2a..81c4548 100644
--- a/security/yama/yama_lsm.c
+++ b/security/yama/yama_lsm.c
@@ -365,7 +365,7 @@ int yama_ptrace_traceme(struct task_struct *parent)
.name = "yama",
.ptrace_access_check = yama_ptrace_access_check,
-@@ -376,28 +376,24 @@ static struct security_operations yama_ops = {
- #endif
-
- #ifdef CONFIG_SYSCTL
-+static int zero __read_only;
-+static int max_scope __read_only = YAMA_SCOPE_NO_ATTACH;
-+
+@@ -379,7 +379,7 @@ static struct security_operations yama_ops = {
static int yama_dointvec_minmax(struct ctl_table *table, int write,
void __user *buffer, size_t *lenp, loff_t *ppos)
{
-- int rc;
-+ ctl_table_no_const yama_table;
+- struct ctl_table table_copy;
++ ctl_table_no_const table_copy;
if (write && !capable(CAP_SYS_PTRACE))
return -EPERM;
-
-- rc = proc_dointvec_minmax(table, write, buffer, lenp, ppos);
-- if (rc)
-- return rc;
--
-+ yama_table = *table;
- /* Lock the max value if it ever gets set. */
-- if (write && *(int *)table->data == *(int *)table->extra2)
-- table->extra1 = table->extra2;
--
-- return rc;
-+ if (ptrace_scope == max_scope)
-+ yama_table.extra1 = &max_scope;
-+ return proc_dointvec_minmax(&yama_table, write, buffer, lenp, ppos);
- }
-
--static int zero;
--static int max_scope = YAMA_SCOPE_NO_ATTACH;
--
- struct ctl_path yama_sysctl_path[] = {
- { .procname = "kernel", },
- { .procname = "yama", },
diff --git a/sound/aoa/codecs/onyx.c b/sound/aoa/codecs/onyx.c
index 23c371e..da7c25e 100644
--- a/sound/aoa/codecs/onyx.c
/* PCM3052 register definitions */
diff --git a/sound/core/oss/pcm_oss.c b/sound/core/oss/pcm_oss.c
-index 80423a4c..270c3d0 100644
+index 58550cc..4687a93 100644
--- a/sound/core/oss/pcm_oss.c
+++ b/sound/core/oss/pcm_oss.c
-@@ -1190,10 +1190,10 @@ snd_pcm_sframes_t snd_pcm_oss_write3(struct snd_pcm_substream *substream, const
+@@ -1189,10 +1189,10 @@ snd_pcm_sframes_t snd_pcm_oss_write3(struct snd_pcm_substream *substream, const
if (in_kernel) {
mm_segment_t fs;
fs = snd_enter_user();
}
if (ret != -EPIPE && ret != -ESTRPIPE)
break;
-@@ -1233,10 +1233,10 @@ snd_pcm_sframes_t snd_pcm_oss_read3(struct snd_pcm_substream *substream, char *p
+@@ -1232,10 +1232,10 @@ snd_pcm_sframes_t snd_pcm_oss_read3(struct snd_pcm_substream *substream, char *p
if (in_kernel) {
mm_segment_t fs;
fs = snd_enter_user();
}
if (ret == -EPIPE) {
if (runtime->status->state == SNDRV_PCM_STATE_DRAINING) {
-@@ -1332,7 +1332,7 @@ static ssize_t snd_pcm_oss_write2(struct snd_pcm_substream *substream, const cha
+@@ -1331,7 +1331,7 @@ static ssize_t snd_pcm_oss_write2(struct snd_pcm_substream *substream, const cha
struct snd_pcm_plugin_channel *channels;
size_t oss_frame_bytes = (runtime->oss.plugin_first->src_width * runtime->oss.plugin_first->src_format.channels) / 8;
if (!in_kernel) {
return -EFAULT;
buf = runtime->oss.buffer;
}
-@@ -1402,7 +1402,7 @@ static ssize_t snd_pcm_oss_write1(struct snd_pcm_substream *substream, const cha
+@@ -1401,7 +1401,7 @@ static ssize_t snd_pcm_oss_write1(struct snd_pcm_substream *substream, const cha
}
} else {
tmp = snd_pcm_oss_write2(substream,
runtime->oss.period_bytes, 0);
if (tmp <= 0)
goto err;
-@@ -1428,7 +1428,7 @@ static ssize_t snd_pcm_oss_read2(struct snd_pcm_substream *substream, char *buf,
+@@ -1427,7 +1427,7 @@ static ssize_t snd_pcm_oss_read2(struct snd_pcm_substream *substream, char *buf,
struct snd_pcm_runtime *runtime = substream->runtime;
snd_pcm_sframes_t frames, frames1;
#ifdef CONFIG_SND_PCM_OSS_PLUGINS
if (runtime->oss.plugin_first) {
struct snd_pcm_plugin_channel *channels;
size_t oss_frame_bytes = (runtime->oss.plugin_last->dst_width * runtime->oss.plugin_last->dst_format.channels) / 8;
-@@ -1490,7 +1490,7 @@ static ssize_t snd_pcm_oss_read1(struct snd_pcm_substream *substream, char __use
+@@ -1489,7 +1489,7 @@ static ssize_t snd_pcm_oss_read1(struct snd_pcm_substream *substream, char __use
xfer += tmp;
runtime->oss.buffer_used -= tmp;
} else {
runtime->oss.period_bytes, 0);
if (tmp <= 0)
goto err;
-@@ -1659,7 +1659,7 @@ static int snd_pcm_oss_sync(struct snd_pcm_oss_file *pcm_oss_file)
+@@ -1658,7 +1658,7 @@ static int snd_pcm_oss_sync(struct snd_pcm_oss_file *pcm_oss_file)
size1);
size1 /= runtime->channels; /* frames */
fs = snd_enter_user();
}
} else if (runtime->access == SNDRV_PCM_ACCESS_RW_NONINTERLEAVED) {
diff --git a/sound/core/pcm_compat.c b/sound/core/pcm_compat.c
-index 2d957ba..fda022c 100644
+index b48b434..e2ba787 100644
--- a/sound/core/pcm_compat.c
+++ b/sound/core/pcm_compat.c
@@ -31,7 +31,7 @@ static int snd_pcm_ioctl_delay_compat(struct snd_pcm_substream *substream,
if (err < 0)
return err;
diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c
-index 279e24f..24aafe5 100644
+index d126c03..5d84d1cf 100644
--- a/sound/core/pcm_native.c
+++ b/sound/core/pcm_native.c
-@@ -2969,11 +2969,11 @@ int snd_pcm_kernel_ioctl(struct snd_pcm_substream *substream,
+@@ -3004,11 +3004,11 @@ int snd_pcm_kernel_ioctl(struct snd_pcm_substream *substream,
switch (substream->stream) {
case SNDRV_PCM_STREAM_PLAYBACK:
result = snd_pcm_playback_ioctl1(NULL, substream, cmd,
break;
default:
result = -EINVAL;
-diff --git a/sound/core/seq/oss/seq_oss.c b/sound/core/seq/oss/seq_oss.c
-index 16d4267..fe8b49b 100644
---- a/sound/core/seq/oss/seq_oss.c
-+++ b/sound/core/seq/oss/seq_oss.c
-@@ -69,8 +69,8 @@ static int __init alsa_seq_oss_init(void)
- {
- int rc;
- static struct snd_seq_dev_ops ops = {
-- snd_seq_oss_synth_register,
-- snd_seq_oss_synth_unregister,
-+ .init_device = snd_seq_oss_synth_register,
-+ .free_device = snd_seq_oss_synth_unregister,
- };
-
- snd_seq_autoload_lock();
-diff --git a/sound/core/seq/seq_device.c b/sound/core/seq/seq_device.c
-index 0631bda..d0dcd49 100644
---- a/sound/core/seq/seq_device.c
-+++ b/sound/core/seq/seq_device.c
-@@ -65,7 +65,7 @@ struct ops_list {
- int argsize; /* argument size */
-
- /* operators */
-- struct snd_seq_dev_ops ops;
-+ struct snd_seq_dev_ops *ops;
-
- /* registered devices */
- struct list_head dev_list; /* list of devices */
-@@ -371,7 +371,7 @@ int snd_seq_device_register_driver(char *id, struct snd_seq_dev_ops *entry,
-
- mutex_lock(&ops->reg_mutex);
- /* copy driver operators */
-- ops->ops = *entry;
-+ ops->ops = entry;
- ops->driver |= DRIVER_LOADED;
- ops->argsize = argsize;
-
-@@ -500,7 +500,7 @@ static int init_device(struct snd_seq_device *dev, struct ops_list *ops)
- dev->name, ops->id, ops->argsize, dev->argsize);
- return -EINVAL;
- }
-- if (ops->ops.init_device(dev) >= 0) {
-+ if (ops->ops->init_device(dev) >= 0) {
- dev->status = SNDRV_SEQ_DEVICE_REGISTERED;
- ops->num_init_devices++;
- } else {
-@@ -527,7 +527,7 @@ static int free_device(struct snd_seq_device *dev, struct ops_list *ops)
- dev->name, ops->id, ops->argsize, dev->argsize);
- return -EINVAL;
- }
-- if ((result = ops->ops.free_device(dev)) >= 0 || result == -ENXIO) {
-+ if ((result = ops->ops->free_device(dev)) >= 0 || result == -ENXIO) {
- dev->status = SNDRV_SEQ_DEVICE_FREE;
- dev->driver_data = NULL;
- ops->num_init_devices--;
-diff --git a/sound/core/seq/seq_midi.c b/sound/core/seq/seq_midi.c
-index 68fec77..97fb643 100644
---- a/sound/core/seq/seq_midi.c
-+++ b/sound/core/seq/seq_midi.c
-@@ -461,8 +461,8 @@ snd_seq_midisynth_unregister_port(struct snd_seq_device *dev)
- static int __init alsa_seq_midi_init(void)
- {
- static struct snd_seq_dev_ops ops = {
-- snd_seq_midisynth_register_port,
-- snd_seq_midisynth_unregister_port,
-+ .init_device = snd_seq_midisynth_register_port,
-+ .free_device = snd_seq_midisynth_unregister_port,
- };
- memset(&synths, 0, sizeof(synths));
- snd_seq_autoload_lock();
diff --git a/sound/core/sound.c b/sound/core/sound.c
-index 185cec0..a95a1a9 100644
+index 5fc93d0..67d8037 100644
--- a/sound/core/sound.c
+++ b/sound/core/sound.c
@@ -86,7 +86,7 @@ static void snd_request_other(int minor)
return 0;
}
-diff --git a/sound/drivers/opl3/opl3_seq.c b/sound/drivers/opl3/opl3_seq.c
-index a9f618e..c5a7208 100644
---- a/sound/drivers/opl3/opl3_seq.c
-+++ b/sound/drivers/opl3/opl3_seq.c
-@@ -279,8 +279,8 @@ static int __init alsa_opl3_seq_init(void)
- {
- static struct snd_seq_dev_ops ops =
- {
-- snd_opl3_seq_new_device,
-- snd_opl3_seq_delete_device
-+ .init_device = snd_opl3_seq_new_device,
-+ .free_device = snd_opl3_seq_delete_device
- };
-
- return snd_seq_device_register_driver(SNDRV_SEQ_DEV_ID_OPL3, &ops,
diff --git a/sound/drivers/opl4/opl4_lib.c b/sound/drivers/opl4/opl4_lib.c
index 3b0ee42..8423ad6 100644
--- a/sound/drivers/opl4/opl4_lib.c
{
int timeout = 10;
while ((inb(opl4->fm_port) & OPL4_STATUS_BUSY) && --timeout > 0)
-diff --git a/sound/drivers/opl4/opl4_seq.c b/sound/drivers/opl4/opl4_seq.c
-index 9919769..d7de36c 100644
---- a/sound/drivers/opl4/opl4_seq.c
-+++ b/sound/drivers/opl4/opl4_seq.c
-@@ -198,8 +198,8 @@ static int snd_opl4_seq_delete_device(struct snd_seq_device *dev)
- static int __init alsa_opl4_synth_init(void)
- {
- static struct snd_seq_dev_ops ops = {
-- snd_opl4_seq_new_device,
-- snd_opl4_seq_delete_device
-+ .init_device = snd_opl4_seq_new_device,
-+ .free_device = snd_opl4_seq_delete_device
- };
-
- return snd_seq_device_register_driver(SNDRV_SEQ_DEV_ID_OPL4, &ops,
diff --git a/sound/drivers/portman2x4.c b/sound/drivers/portman2x4.c
index 464385a..46ab3f6 100644
--- a/sound/drivers/portman2x4.c
struct snd_rawmidi_substream *midi_input[PORTMAN_NUM_INPUT_PORTS];
};
diff --git a/sound/firewire/amdtp.c b/sound/firewire/amdtp.c
-index 5cc356d..d65e68ff 100644
+index e061355..baed278 100644
--- a/sound/firewire/amdtp.c
+++ b/sound/firewire/amdtp.c
@@ -573,7 +573,7 @@ static void update_pcm_pointers(struct amdtp_stream *s,
wait_event(scs->idle_wait, scs->output_idle);
-diff --git a/sound/isa/sb/emu8000_synth.c b/sound/isa/sb/emu8000_synth.c
-index 72332df..82ec6a2 100644
---- a/sound/isa/sb/emu8000_synth.c
-+++ b/sound/isa/sb/emu8000_synth.c
-@@ -118,8 +118,8 @@ static int __init alsa_emu8000_init(void)
- {
-
- static struct snd_seq_dev_ops ops = {
-- snd_emu8000_new_device,
-- snd_emu8000_delete_device,
-+ .init_device = snd_emu8000_new_device,
-+ .free_device = snd_emu8000_delete_device,
- };
- return snd_seq_device_register_driver(SNDRV_SEQ_DEV_ID_EMU8000, &ops,
- sizeof(struct snd_emu8000*));
diff --git a/sound/oss/sb_audio.c b/sound/oss/sb_audio.c
index 048439a..3be9f6f 100644
--- a/sound/oss/sb_audio.c
list_add(&s->list, &cs4297a_devs);
-diff --git a/sound/pci/emu10k1/emu10k1_synth.c b/sound/pci/emu10k1/emu10k1_synth.c
-index 4c41c90..37f3631 100644
---- a/sound/pci/emu10k1/emu10k1_synth.c
-+++ b/sound/pci/emu10k1/emu10k1_synth.c
-@@ -108,8 +108,8 @@ static int __init alsa_emu10k1_synth_init(void)
- {
-
- static struct snd_seq_dev_ops ops = {
-- snd_emu10k1_synth_new_device,
-- snd_emu10k1_synth_delete_device,
-+ .init_device = snd_emu10k1_synth_new_device,
-+ .free_device = snd_emu10k1_synth_delete_device,
- };
- return snd_seq_device_register_driver(SNDRV_SEQ_DEV_ID_EMU10K1_SYNTH, &ops,
- sizeof(struct snd_emu10k1_synth_arg));
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
-index a63a863..fcf3087 100644
+index 5645481..63e53a2 100644
--- a/sound/pci/hda/hda_codec.c
+++ b/sound/pci/hda/hda_codec.c
-@@ -2865,7 +2865,7 @@ static int get_kctl_0dB_offset(struct hda_codec *codec,
+@@ -1946,7 +1946,7 @@ static int get_kctl_0dB_offset(struct hda_codec *codec,
/* FIXME: set_fs() hack for obtaining user-space TLV data */
mm_segment_t fs = get_fs();
set_fs(get_ds());
+}
diff --git a/tools/gcc/constify_plugin.c b/tools/gcc/constify_plugin.c
new file mode 100644
-index 0000000..da184c5
+index 0000000..c5de280
--- /dev/null
+++ b/tools/gcc/constify_plugin.c
-@@ -0,0 +1,564 @@
+@@ -0,0 +1,568 @@
+/*
+ * Copyright 2011 by Emese Revfy <re.emese@gmail.com>
+ * Copyright 2011-2015 by PaX Team <pageexec@freemail.hu>
+ .optinfo_flags = OPTGROUP_NONE,
+#endif
+#if BUILDING_GCC_VERSION >= 5000
-+#elif BUILDING_GCC_VERSION >= 4009
++#elif BUILDING_GCC_VERSION == 4009
+ .has_gate = false,
+ .has_execute = true,
+#else
+class check_local_variables_pass : public gimple_opt_pass {
+public:
+ check_local_variables_pass() : gimple_opt_pass(check_local_variables_pass_data, g) {}
++#if BUILDING_GCC_VERSION >= 5000
++ virtual unsigned int execute(function *) { return check_local_variables(); }
++#else
+ unsigned int execute() { return check_local_variables(); }
++#endif
+};
+}
+
+}
diff --git a/tools/gcc/gcc-common.h b/tools/gcc/gcc-common.h
new file mode 100644
-index 0000000..77f8462
+index 0000000..70924d4
--- /dev/null
+++ b/tools/gcc/gcc-common.h
-@@ -0,0 +1,689 @@
+@@ -0,0 +1,787 @@
+#ifndef GCC_COMMON_H_INCLUDED
+#define GCC_COMMON_H_INCLUDED
+
+#include "tree-flow.h"
+#else
+#include "tree-cfgcleanup.h"
++#include "tree-ssa-operands.h"
++#include "tree-into-ssa.h"
+#endif
+
+#if BUILDING_GCC_VERSION >= 4008
+#define C_TYPE_FIELDS_READONLY(TYPE) TREE_LANG_FLAG_1(TYPE)
+
+#if BUILDING_GCC_VERSION == 4005
-+#define FOR_EACH_LOCAL_DECL(FUN, I, D) for (tree vars = (FUN)->local_decls; vars && (D = TREE_VALUE(vars)); vars = TREE_CHAIN(vars), I)
++#define FOR_EACH_LOCAL_DECL(FUN, I, D) for (tree vars = (FUN)->local_decls, (I) = 0; vars && ((D) = TREE_VALUE(vars)); vars = TREE_CHAIN(vars), (I)++)
+#define DECL_CHAIN(NODE) (TREE_CHAIN(DECL_MINIMAL_CHECK(NODE)))
+#define FOR_EACH_VEC_ELT(T, V, I, P) for (I = 0; VEC_iterate(T, (V), (I), (P)); ++(I))
+#define TODO_rebuild_cgraph_edges 0
+}
+
+#define ipa_remove_stmt_references(cnode, stmt)
++
+typedef union gimple_statement_d gasm;
+typedef union gimple_statement_d gassign;
+typedef union gimple_statement_d gcall;
+typedef union gimple_statement_d gdebug;
+typedef union gimple_statement_d gphi;
+typedef union gimple_statement_d greturn;
++
++static inline gasm *as_a_gasm(gimple stmt)
++{
++ return stmt;
++}
++
++static inline const gasm *as_a_const_gasm(const_gimple stmt)
++{
++ return stmt;
++}
++
++static inline gassign *as_a_gassign(gimple stmt)
++{
++ return stmt;
++}
++
++static inline const gassign *as_a_const_gassign(const_gimple stmt)
++{
++ return stmt;
++}
++
++static inline gcall *as_a_gcall(gimple stmt)
++{
++ return stmt;
++}
++
++static inline const gcall *as_a_const_gcall(const_gimple stmt)
++{
++ return stmt;
++}
++
++static inline gcond *as_a_gcond(gimple stmt)
++{
++ return stmt;
++}
++
++static inline const gcond *as_a_const_gcond(const_gimple stmt)
++{
++ return stmt;
++}
++
++static inline gdebug *as_a_gdebug(gimple stmt)
++{
++ return stmt;
++}
++
++static inline const gdebug *as_a_const_gdebug(const_gimple stmt)
++{
++ return stmt;
++}
++
++static inline gphi *as_a_gphi(gimple stmt)
++{
++ return stmt;
++}
++
++static inline const gphi *as_a_const_gphi(const_gimple stmt)
++{
++ return stmt;
++}
++
++static inline greturn *as_a_greturn(gimple stmt)
++{
++ return stmt;
++}
++
++static inline const greturn *as_a_const_greturn(const_gimple stmt)
++{
++ return stmt;
++}
+#endif
+
+#if BUILDING_GCC_VERSION == 4008
+#define create_var_ann(var)
+#define TODO_dump_func 0
+#define TODO_dump_cgraph 0
-+
+#endif
+
+#if BUILDING_GCC_VERSION <= 4009
+#define TODO_verify_il 0
+#define AVAIL_INTERPOSABLE AVAIL_OVERWRITABLE
-+#endif
+
-+#if BUILDING_GCC_VERSION == 4009
-+typedef struct gimple_statement_base gasm;
-+typedef struct gimple_statement_base gassign;
-+typedef struct gimple_statement_base gcall;
-+typedef struct gimple_statement_base gcond;
-+typedef struct gimple_statement_base gdebug;
-+typedef struct gimple_statement_base gphi;
-+typedef struct gimple_statement_base greturn;
-+#endif
++#define section_name_prefix LTO_SECTION_NAME_PREFIX
++#define fatal_error(loc, gmsgid, ...) fatal_error((gmsgid), __VA_ARGS__)
+
-+#if BUILDING_GCC_VERSION <= 4009
+typedef struct rtx_def rtx_insn;
+
+static inline void set_decl_section_name(tree node, const char *value)
+{
+ DECL_SECTION_NAME(node) = build_string(strlen(value) + 1, value);
+}
++#endif
++
++#if BUILDING_GCC_VERSION == 4009
++typedef struct gimple_statement_asm gasm;
++typedef struct gimple_statement_base gassign;
++typedef struct gimple_statement_call gcall;
++typedef struct gimple_statement_base gcond;
++typedef struct gimple_statement_base gdebug;
++typedef struct gimple_statement_phi gphi;
++typedef struct gimple_statement_base greturn;
+
+static inline gasm *as_a_gasm(gimple stmt)
+{
-+ return stmt;
++ return as_a<gasm>(stmt);
+}
+
+static inline const gasm *as_a_const_gasm(const_gimple stmt)
+{
-+ return stmt;
++ return as_a<const gasm>(stmt);
+}
+
+static inline gassign *as_a_gassign(gimple stmt)
+
+static inline gcall *as_a_gcall(gimple stmt)
+{
-+ return stmt;
++ return as_a<gcall>(stmt);
+}
+
+static inline const gcall *as_a_const_gcall(const_gimple stmt)
+{
++ return as_a<const gcall>(stmt);
++}
++
++static inline gcond *as_a_gcond(gimple stmt)
++{
+ return stmt;
+}
+
-+static inline gphi *as_a_gphi(gimple stmt)
++static inline const gcond *as_a_const_gcond(const_gimple stmt)
+{
+ return stmt;
+}
+
-+static inline const gphi *as_a_const_gphi(const_gimple stmt)
++static inline gdebug *as_a_gdebug(gimple stmt)
++{
++ return stmt;
++}
++
++static inline const gdebug *as_a_const_gdebug(const_gimple stmt)
+{
+ return stmt;
+}
+
++static inline gphi *as_a_gphi(gimple stmt)
++{
++ return as_a<gphi>(stmt);
++}
++
++static inline const gphi *as_a_const_gphi(const_gimple stmt)
++{
++ return as_a<const gphi>(stmt);
++}
++
+static inline greturn *as_a_greturn(gimple stmt)
+{
+ return stmt;
+ varpool_node::add(decl);
+}
+
++static inline unsigned int rebuild_cgraph_edges(void)
++{
++ return cgraph_edge::rebuild_edges();
++}
++
+static inline cgraph_node_ptr cgraph_function_node(cgraph_node_ptr node, enum availability *availability)
+{
+ return node->function_symbol(availability);
+fi
diff --git a/tools/gcc/initify_plugin.c b/tools/gcc/initify_plugin.c
new file mode 100644
-index 0000000..125442a
+index 0000000..294ac43
--- /dev/null
+++ b/tools/gcc/initify_plugin.c
-@@ -0,0 +1,427 @@
+@@ -0,0 +1,450 @@
+/*
+ * Copyright 2011-2015 by Emese Revfy <re.emese@gmail.com>
+ * Licensed under the GPL v2, or (at your option) v3
+
+int plugin_is_GPL_compatible;
+
++static bool verbose = false;
++
+static struct plugin_info initify_plugin_info = {
+ .version = "20150524a",
+ .help = "initify_plugin\n",
+ str = get_string_cst(init_val);
+ gcc_assert(str);
+
-+ if (set_init_exit_section(var, initexit))
-+ ;//inform(DECL_SOURCE_LOCATION(var), "initified local var: %s: %s", DECL_NAME_POINTER(current_function_decl), TREE_STRING_POINTER(str));
++ if (set_init_exit_section(var, initexit) && verbose)
++ inform(DECL_SOURCE_LOCATION(var), "initified local var: %s: %s", DECL_NAME_POINTER(current_function_decl), TREE_STRING_POINTER(str));
+ }
+}
+
+ decl = build_decl(DECL_SOURCE_LOCATION(current_function_decl), VAR_DECL, create_tmp_var_name("cicus"), TREE_TYPE(str));
+
+ type = TREE_TYPE(TREE_TYPE(decl));
++ type = build_qualified_type(type, TYPE_QUALS(type) | TYPE_QUAL_CONST);
+ TYPE_READONLY(type) = 1;
+ TREE_PUBLIC(type) = 0;
+
+ DECL_CHAIN(decl) = BLOCK_VARS(DECL_INITIAL(current_function_decl));
+ BLOCK_VARS(DECL_INITIAL (current_function_decl)) = decl;
+
-+ decl = build_unary_op(DECL_SOURCE_LOCATION(current_function_decl), ADDR_EXPR, decl, 0);
++ decl = build_fold_addr_expr_loc(DECL_SOURCE_LOCATION(current_function_decl), decl);
+ gimple_call_set_arg(stmt, num, decl);
+ update_stmt(stmt);
+
+ return TREE_OPERAND(decl, 0);
+}
+
++static bool is_syscall(const_tree fn)
++{
++ if (!strncmp(DECL_NAME_POINTER(fn), "sys_", 4))
++ return true;
++
++ if (!strncmp(DECL_NAME_POINTER(fn), "sys32_", 6))
++ return true;
++
++ if (!strncmp(DECL_NAME_POINTER(fn), "compat_sys_", 11))
++ return true;
++
++ return false;
++}
++
+static bool is_vararg(const_tree fn)
+{
+ tree arg_list;
+ return true;
+}
+
-+static bool is_in_nocapture_attr_value(const_gimple stmt, unsigned int num)
++static bool is_nocapture_param(const_gimple stmt, unsigned int num)
+{
+ unsigned int attr_arg_val = 0;
+ tree attr_val;
+
+ gcc_assert(DECL_ABSTRACT_ORIGIN(fndecl) == NULL_TREE);
+
++ if (is_syscall(fndecl))
++ return true;
++
+ attr = lookup_attribute("nocapture", DECL_ATTRIBUTES(fndecl));
+ for (attr_val = TREE_VALUE(attr); attr_val; attr_val = TREE_CHAIN(attr_val)) {
+ attr_arg_val = (unsigned int)tree_to_uhwi(TREE_VALUE(attr_val));
+ if (str == NULL_TREE)
+ continue;
+
-+ if (!is_in_nocapture_attr_value(stmt, num))
++ if (!is_nocapture_param(stmt, num))
+ continue;
+
+ var = create_tmp_assign(stmt, num);
-+ if (set_init_exit_section(var, initexit))
-+ ;//inform(gimple_location(stmt), "initified function arg: %s: [%s]", DECL_NAME_POINTER(current_function_decl), TREE_STRING_POINTER(str));
++ if (set_init_exit_section(var, initexit) && verbose)
++ inform(gimple_location(stmt), "initified function arg: %s: [%s]", DECL_NAME_POINTER(current_function_decl), TREE_STRING_POINTER(str));
+ }
+}
+
-+static bool has_nocapture_attr(const gcall *stmt)
++static bool has_nocapture_param(const gcall *stmt)
+{
+ const_tree attr, fndecl = gimple_call_fndecl(stmt);
+
+ if (fndecl == NULL_TREE)
+ return false;
+
++ if (is_syscall(fndecl))
++ return true;
++
+ attr = lookup_attribute("nocapture", DECL_ATTRIBUTES(fndecl));
+ return attr != NULL_TREE;
+}
+ continue;
+
+ call_stmt = as_a_gcall(stmt);
-+ if (has_nocapture_attr(call_stmt))
++ if (has_nocapture_param(call_stmt))
+ search_str_param(call_stmt, initexit);
+ }
+ }
+}
diff --git a/tools/gcc/kernexec_plugin.c b/tools/gcc/kernexec_plugin.c
new file mode 100644
-index 0000000..b0d8255
+index 0000000..4838c8a
--- /dev/null
+++ b/tools/gcc/kernexec_plugin.c
-@@ -0,0 +1,547 @@
+@@ -0,0 +1,551 @@
+/*
+ * Copyright 2011-2015 by the PaX Team <pageexec@freemail.hu>
+ * Licensed under the GPL v2
+ */
+static void kernexec_reload_fptr_mask(gimple_stmt_iterator *gsi)
+{
++ gimple stmt;
+ gasm *asm_movabs_stmt;
+
+ // build asm volatile("movabs $0x8000000000000000, %%r12\n\t" : : : );
-+ asm_movabs_stmt = gimple_build_asm_vec("movabs $0x8000000000000000, %%r12\n\t", NULL, NULL, NULL, NULL);
++ stmt = gimple_build_asm_vec("movabs $0x8000000000000000, %%r12\n\t", NULL, NULL, NULL, NULL);
++ asm_movabs_stmt = as_a_gasm(stmt);
+ gimple_asm_set_volatile(asm_movabs_stmt, true);
+ gsi_insert_after(gsi, asm_movabs_stmt, GSI_CONTINUE_LINKING);
+ update_stmt(asm_movabs_stmt);
+
+static void kernexec_instrument_fptr_or(gimple_stmt_iterator *gsi)
+{
++ gimple stmt;
+ gasm *asm_or_stmt;
+ gcall *call_stmt;
+ tree old_fptr, new_fptr, input, output;
+ vec_safe_push(inputs, input);
+ vec_safe_push(outputs, output);
+#endif
-+ asm_or_stmt = gimple_build_asm_vec("orq %%r12, %0\n\t", inputs, outputs, NULL, NULL);
++ stmt = gimple_build_asm_vec("orq %%r12, %0\n\t", inputs, outputs, NULL, NULL);
++ asm_or_stmt = as_a_gasm(stmt);
+ SSA_NAME_DEF_STMT(new_fptr) = asm_or_stmt;
+ gimple_asm_set_volatile(asm_or_stmt, true);
+ gsi_insert_before(gsi, asm_or_stmt, GSI_SAME_STMT);
+}
diff --git a/tools/gcc/randomize_layout_plugin.c b/tools/gcc/randomize_layout_plugin.c
new file mode 100644
-index 0000000..713be61
+index 0000000..40dcfa9
--- /dev/null
+++ b/tools/gcc/randomize_layout_plugin.c
-@@ -0,0 +1,918 @@
+@@ -0,0 +1,922 @@
+/*
+ * Copyright 2014,2015 by Open Source Security, Inc., Brad Spengler <spender@grsecurity.net>
+ * and PaX Team <pageexec@freemail.hu>
+class randomize_layout_bad_cast : public gimple_opt_pass {
+public:
+ randomize_layout_bad_cast() : gimple_opt_pass(randomize_layout_bad_cast_data, g) {}
++#if BUILDING_GCC_VERSION >= 5000
++ virtual unsigned int execute(function *) { return find_bad_casts(); }
++#else
+ unsigned int execute() { return find_bad_casts(); }
++#endif
+};
+}
+#endif
+exit 0
diff --git a/tools/gcc/size_overflow_plugin/insert_size_overflow_asm.c b/tools/gcc/size_overflow_plugin/insert_size_overflow_asm.c
new file mode 100644
-index 0000000..0b508b1
+index 0000000..7b7051a
--- /dev/null
+++ b/tools/gcc/size_overflow_plugin/insert_size_overflow_asm.c
-@@ -0,0 +1,409 @@
+@@ -0,0 +1,411 @@
+/*
+ * Copyright 2011-2015 by Emese Revfy <re.emese@gmail.com>
+ * Licensed under the GPL v2, or (at your option) v3
+{
+ char *asm_comment;
+ const char *mark_str;
++ gimple stmt;
+ gasm *asm_stmt;
+ gimple_stmt_iterator gsi;
+ tree str_input, str_output;
+ str_output = build_string(4, "=rm");
+ output = create_asm_io_list(str_output, asm_data->output);
+
-+ asm_stmt = gimple_build_asm_vec(asm_comment, input, output, NULL, NULL);
++ stmt = gimple_build_asm_vec(asm_comment, input, output, NULL, NULL);
++ asm_stmt = as_a_gasm(stmt);
+ gimple_asm_set_volatile(asm_stmt, true);
+
+ gsi = gsi_for_stmt(asm_data->def_stmt);
+#endif
diff --git a/tools/gcc/size_overflow_plugin/intentional_overflow.c b/tools/gcc/size_overflow_plugin/intentional_overflow.c
new file mode 100644
-index 0000000..d96cef2
+index 0000000..2af88a3
--- /dev/null
+++ b/tools/gcc/size_overflow_plugin/intentional_overflow.c
-@@ -0,0 +1,955 @@
+@@ -0,0 +1,958 @@
+/*
+ * Copyright 2011-2015 by Emese Revfy <re.emese@gmail.com>
+ * Licensed under the GPL v2, or (at your option) v3
+ my_stmt = as_a_gassign(gsi_stmt(gsi));
+
+ gcc_assert(pointer_set_contains(visited->my_stmts, my_stmt));
++ if (gimple_assign_cast_p(stmt) && gimple_assign_cast_p(my_stmt))
++ return my_stmt;
++
+ if (gimple_assign_rhs_code(stmt) != gimple_assign_rhs_code(my_stmt)) {
+ fprintf(stderr, "%s != %s\n", get_tree_code_name(gimple_assign_rhs_code(stmt)), get_tree_code_name(gimple_assign_rhs_code(my_stmt)));
+ debug_gimple_stmt(stmt);
+}
diff --git a/tools/gcc/size_overflow_plugin/size_overflow_hash.data b/tools/gcc/size_overflow_plugin/size_overflow_hash.data
new file mode 100644
-index 0000000..19e2901
+index 0000000..2e9138d
--- /dev/null
+++ b/tools/gcc/size_overflow_plugin/size_overflow_hash.data
-@@ -0,0 +1,27981 @@
+@@ -0,0 +1,28379 @@
+intel_fake_agp_alloc_by_type_1 intel_fake_agp_alloc_by_type 1 1 NULL nohasharray
+iwl_set_tx_power_1 iwl_set_tx_power 0 1 &intel_fake_agp_alloc_by_type_1
+ocfs2_get_refcount_tree_3 ocfs2_get_refcount_tree 0 3 NULL
+rt73usb_enable_radio_258 rt73usb_enable_radio 0 258 NULL
+sctp_assoc_set_bind_addr_from_ep_263 sctp_assoc_set_bind_addr_from_ep 0 263 NULL
+setup_stream_272 setup_stream 0 272 NULL nohasharray
-+mxl111sf_ctrl_msg_272 mxl111sf_ctrl_msg 0 272 &setup_stream_272
++mxl111sf_ctrl_msg_272 mxl111sf_ctrl_msg 0 272 &setup_stream_272 nohasharray
++mpls_dev_sysctl_register_272 mpls_dev_sysctl_register 0 272 &mxl111sf_ctrl_msg_272
+xfs_dabuf_map_277 xfs_dabuf_map 0 277 NULL
+lp855x_get_chip_id_278 lp855x_get_chip_id 0 278 NULL nohasharray
+iscsi_tpg_attrib_show_demo_mode_write_protect_278 iscsi_tpg_attrib_show_demo_mode_write_protect 0 278 &lp855x_get_chip_id_278
+tuner_i2c_xfer_send_recv_864 tuner_i2c_xfer_send_recv 0-5 864 NULL
+btrfs_dirty_inode_868 btrfs_dirty_inode 0 868 NULL
+ipr_read_trace_869 ipr_read_trace 6-0-5 869 NULL nohasharray
-+ace_set_mac_addr_869 ace_set_mac_addr 0 869 &ipr_read_trace_869
++ace_set_mac_addr_869 ace_set_mac_addr 0 869 &ipr_read_trace_869 nohasharray
++hfsplus_setxattr_869 hfsplus_setxattr 0 869 &ace_set_mac_addr_869
+epx_c3_notify_sys_871 epx_c3_notify_sys 0 871 NULL
+i2c_wait_done_873 i2c_wait_done 0 873 NULL
+link_mem_sections_878 link_mem_sections 0 878 NULL
+skge_rx_fill_991 skge_rx_fill 0 991 NULL
+tts_notify_reboot_993 tts_notify_reboot 0 993 NULL nohasharray
+memory_probe_store_993 memory_probe_store 0-4 993 &tts_notify_reboot_993
++cma_free_mem_995 cma_free_mem 2 995 NULL
+hdlcdev_rx_997 hdlcdev_rx 3 997 NULL
+pch_udc_create_dma_chain_1001 pch_udc_create_dma_chain 0 1001 NULL
+cdc_ncm_show_wNdpInDivisor_1003 cdc_ncm_show_wNdpInDivisor 0 1003 NULL nohasharray
+b43legacy_phy_versioning_1117 b43legacy_phy_versioning 0 1117 NULL
+bql_show_limit_min_1118 bql_show_limit_min 0 1118 NULL
+show_temp_crit_enable_1119 show_temp_crit_enable 0 1119 NULL
-+edac_fake_inject_write_1120 edac_fake_inject_write 0-3 1120 NULL
++edac_fake_inject_write_1120 edac_fake_inject_write 0-3 1120 NULL nohasharray
++sha1_base_finish_1120 sha1_base_finish 0 1120 &edac_fake_inject_write_1120
+splice_read_1122 splice_read 0 1122 NULL
+sdio_uart_write_room_1123 sdio_uart_write_room 0 1123 NULL nohasharray
+drvctl_store_1123 drvctl_store 0-4 1123 &sdio_uart_write_room_1123
+v9fs_write_inode_dotl_1241 v9fs_write_inode_dotl 0 1241 NULL
+ehci_urb_enqueue_1242 ehci_urb_enqueue 0 1242 NULL
+usnic_ib_show_cq_per_vf_1244 usnic_ib_show_cq_per_vf 0 1244 NULL
++snd_hdac_read_1245 snd_hdac_read 0 1245 NULL
+qla2x00_total_isp_aborts_show_1247 qla2x00_total_isp_aborts_show 0 1247 NULL
+class_osdblk_remove_1250 class_osdblk_remove 0-4 1250 NULL
+ipath_read_umem64_1254 ipath_read_umem64 0 1254 NULL
+set_temp_emergency_1776 set_temp_emergency 0-4 1776 NULL
+event_show_1780 event_show 0 1780 NULL
+tpacpi_driver_wlsw_emulstate_store_1783 tpacpi_driver_wlsw_emulstate_store 0-3 1783 NULL
++usb_dmac_desc_alloc_1792 usb_dmac_desc_alloc 2 1792 NULL
+fcoe_ctlr_device_add_1793 fcoe_ctlr_device_add 3 1793 NULL
+ueth_change_mtu_1794 ueth_change_mtu 0 1794 NULL
+show_auto_fan_1801 show_auto_fan 0 1801 NULL
+cifs_wp_retry_size_2491 cifs_wp_retry_size 0 2491 &xen_wdt_write_2491
+xenvif_alloc_skb_2492 xenvif_alloc_skb 1 2492 NULL
+isicom_write_room_2493 isicom_write_room 0 2493 NULL
++widget_tree_create_2494 widget_tree_create 0 2494 NULL
+show_tabletExecute_2495 show_tabletExecute 0 2495 NULL
+_read_fact_prot_reg_2497 _read_fact_prot_reg 0 2497 NULL nohasharray
+blk_rq_unmap_user_2497 blk_rq_unmap_user 0 2497 &_read_fact_prot_reg_2497 nohasharray
+nfc_llcp_send_ui_frame_2702 nfc_llcp_send_ui_frame 5-0 2702 NULL
+lx_pipe_allocate_2703 lx_pipe_allocate 0 2703 NULL
+udf_setsize_2705 udf_setsize 0 2705 NULL
++rawsock_sendmsg_2706 rawsock_sendmsg 3 2706 NULL
+SyS_pwrite64_2708 SyS_pwrite64 3 2708 NULL nohasharray
+lprocfs_stats_counter_size_2708 lprocfs_stats_counter_size 0 2708 &SyS_pwrite64_2708
+sock_error_2715 sock_error 0 2715 NULL nohasharray
+migration_call_2716 migration_call 0 2716 NULL
+gpiod_direction_input_2718 gpiod_direction_input 0 2718 NULL
+snd_hdspm_trigger_2720 snd_hdspm_trigger 0 2720 NULL
++llc_ui_recvmsg_2730 llc_ui_recvmsg 3 2730 NULL
+o2hb_region_dev_read_2735 o2hb_region_dev_read 0 2735 NULL
+ltm_capable_show_2738 ltm_capable_show 0 2738 NULL nohasharray
+ad5398_enable_2738 ad5398_enable 0 2738 <m_capable_show_2738
+map_smb_to_linux_error_3163 map_smb_to_linux_error 0 3163 NULL
+gfs2_rindex_update_3165 gfs2_rindex_update 0 3165 NULL
+nf_conntrack_broadcast_help_3166 nf_conntrack_broadcast_help 0 3166 NULL nohasharray
-+islpci_reset_3166 islpci_reset 0 3166 &nf_conntrack_broadcast_help_3166
++islpci_reset_3166 islpci_reset 0 3166 &nf_conntrack_broadcast_help_3166 nohasharray
++mgmt_index_event_3166 mgmt_index_event 4 3166 &islpci_reset_3166
+nfc_alloc_send_skb_3167 nfc_alloc_send_skb 4 3167 NULL
+rxrpc_create_3175 rxrpc_create 0 3175 NULL nohasharray
+rebind_store_3175 rebind_store 0-3 3175 &rxrpc_create_3175
+ext3_xattr_find_entry_3237 ext3_xattr_find_entry 0 3237 NULL
+macb_open_3240 macb_open 0 3240 NULL
+key_key_read_3241 key_key_read 3-0 3241 NULL
++add_widget_node_3244 add_widget_node 0 3244 NULL
+base_sock_bind_3245 base_sock_bind 0 3245 NULL
+page_counter_memparse_3253 page_counter_memparse 0 3253 NULL
+check_vendor_extension_3254 check_vendor_extension 1 3254 NULL nohasharray
-+peak_usb_ndo_open_3254 peak_usb_ndo_open 0 3254 &check_vendor_extension_3254
++peak_usb_ndo_open_3254 peak_usb_ndo_open 0 3254 &check_vendor_extension_3254 nohasharray
++__ip_local_out_sk_3254 __ip_local_out_sk 0 3254 &peak_usb_ndo_open_3254
+mei_amthif_write_3256 mei_amthif_write 0 3256 NULL
+show_fc_host_firmware_version_3257 show_fc_host_firmware_version 0 3257 NULL
+ipaq_open_3260 ipaq_open 0 3260 NULL
+wq_cpumask_store_3269 wq_cpumask_store 0-4 3269 &mma8452_show_samp_freq_avail_3269
+technisat_usb2_i2c_xfer_3273 technisat_usb2_i2c_xfer 0-3 3273 NULL nohasharray
+pccard_show_resource_3273 pccard_show_resource 0 3273 &technisat_usb2_i2c_xfer_3273
++gk20a_instobj_ctor_iommu_3274 gk20a_instobj_ctor_iommu 4 3274 NULL
+cifs_enable_signing_3276 cifs_enable_signing 0 3276 NULL
+ath6kl_wmi_get_roam_tbl_cmd_3282 ath6kl_wmi_get_roam_tbl_cmd 0 3282 NULL
+__ilog2_u64_3284 __ilog2_u64 0 3284 NULL
+bt819_s_stream_3349 bt819_s_stream 0 3349 NULL
+atm_init_aal34_3350 atm_init_aal34 0 3350 NULL
+il_dbgfs_interrupt_read_3351 il_dbgfs_interrupt_read 3-0 3351 NULL
++rose_recvmsg_3352 rose_recvmsg 3 3352 NULL
+gsm_control_rls_3353 gsm_control_rls 3 3353 NULL nohasharray
+o2nm_cluster_attr_idle_timeout_ms_write_3353 o2nm_cluster_attr_idle_timeout_ms_write 3-0 3353 &gsm_control_rls_3353
+anx9805_aux_3358 anx9805_aux 0 3358 NULL
+iwl_trans_update_sf_3363 iwl_trans_update_sf 0 3363 NULL
+sr_read_3366 sr_read 3 3366 NULL
+nilfs_segctor_fill_in_checkpoint_3369 nilfs_segctor_fill_in_checkpoint 0 3369 NULL
-+mv88e6xxx_phy_write_3375 mv88e6xxx_phy_write 0 3375 NULL nohasharray
++mv88e6xxx_phy_write_3375 mv88e6xxx_phy_write 0-2 3375 NULL nohasharray
+hotkey_bios_enabled_show_3375 hotkey_bios_enabled_show 0 3375 &mv88e6xxx_phy_write_3375
+cifs_write_3376 cifs_write 0 3376 NULL nohasharray
+register_xenbus_watch_3376 register_xenbus_watch 0 3376 &cifs_write_3376
+__netdev_adjacent_dev_link_lists_3697 __netdev_adjacent_dev_link_lists 0 3697 NULL
+target_core_show_dev_alias_3699 target_core_show_dev_alias 0 3699 NULL
+videobuf_pages_to_sg_3708 videobuf_pages_to_sg 2 3708 NULL
++cfg80211_vendor_event_alloc_3709 cfg80211_vendor_event_alloc 3 3709 NULL
+sys_getrandom_3710 sys_getrandom 2 3710 NULL
+mlx4_en_config_rss_steer_3713 mlx4_en_config_rss_steer 0 3713 NULL
+i2c_sendbytes_3714 i2c_sendbytes 0 3714 NULL
+sctp_copy_one_addr_3771 sctp_copy_one_addr 0 3771 &temp1_show_3771
+mvs_show_driver_version_3772 mvs_show_driver_version 0 3772 NULL nohasharray
+koneplus_sysfs_read_profilex_settings_3772 koneplus_sysfs_read_profilex_settings 0-5-6 3772 &mvs_show_driver_version_3772
++ping_recvmsg_3773 ping_recvmsg 3 3773 NULL
+store_enable_clkb0_output_3776 store_enable_clkb0_output 0-4 3776 NULL
+nouveau_sysfs_pstate_set_3777 nouveau_sysfs_pstate_set 0-4 3777 NULL
+apds990x_prox_enable_show_3778 apds990x_prox_enable_show 0 3778 NULL
+ezusb_access_ltv_3838 ezusb_access_ltv 0 3838 &ceph_do_getattr_3838
+mtip_hw_show_status_3839 mtip_hw_show_status 0 3839 NULL
+release_version_store_3841 release_version_store 0-4 3841 NULL
-+fuse_try_move_page_3842 fuse_try_move_page 0 3842 NULL
++fuse_try_move_page_3842 fuse_try_move_page 0 3842 NULL nohasharray
++stringify_nodemap_3842 stringify_nodemap 2 3842 &fuse_try_move_page_3842
+max8925_disable_3844 max8925_disable 0 3844 NULL
+vprbrd_i2c_read_3845 vprbrd_i2c_read 0 3845 NULL nohasharray
+amd_xgbe_phy_switch_mode_3845 amd_xgbe_phy_switch_mode 0 3845 &vprbrd_i2c_read_3845
+smk_read_onlycap_3855 smk_read_onlycap 3-0 3855 NULL
+show_session_param_ISCSI_PARAM_TARGET_ALIAS_3856 show_session_param_ISCSI_PARAM_TARGET_ALIAS 0 3856 NULL
+fuse_retrieve_3857 fuse_retrieve 0 3857 NULL
++udf_direct_IO_3860 udf_direct_IO 3 3860 NULL
+c67x00_urb_enqueue_3862 c67x00_urb_enqueue 0 3862 NULL
+hfsplus_create_attr_3864 hfsplus_create_attr 0 3864 NULL nohasharray
+video_write_3864 video_write 0 3864 &hfsplus_create_attr_3864
+get_fd_set_3866 get_fd_set 1 3866 NULL
+show_pci_3867 show_pci 0 3867 NULL
++sst_hsw_module_set_param_3868 sst_hsw_module_set_param 5 3868 NULL
+br_fdb_insert_3869 br_fdb_insert 0 3869 NULL
+i7core_inject_show_channel_3874 i7core_inject_show_channel 0 3874 NULL
+show_ctlr_enabled_state_3877 show_ctlr_enabled_state 0 3877 NULL
+iwl_load_ucode_wait_alive_3936 iwl_load_ucode_wait_alive 0 3936 NULL
+show_allow_ext_sg_3938 show_allow_ext_sg 0 3938 NULL
+__vfs_read_3942 __vfs_read 0-3 3942 NULL
++rb_alloc_aux_3943 rb_alloc_aux 4 3943 NULL
+hdlc_irq_one_3944 hdlc_irq_one 2 3944 NULL
+cp_refill_rx_3947 cp_refill_rx 0 3947 NULL
+apei_clear_mce_3948 apei_clear_mce 0 3948 NULL nohasharray
+show_xps_map_4009 show_xps_map 0 4009 NULL
+snd_hdsp_capture_copy_4011 snd_hdsp_capture_copy 5 4011 NULL
+bcm_rx_setup_4014 bcm_rx_setup 0 4014 NULL
-+wakeup_active_count_show_4016 wakeup_active_count_show 0 4016 NULL
++wakeup_active_count_show_4016 wakeup_active_count_show 0 4016 NULL nohasharray
++hsu_dma_prep_slave_sg_4016 hsu_dma_prep_slave_sg 3 4016 &wakeup_active_count_show_4016
+amd_xgbe_phy_gmii_mode_4019 amd_xgbe_phy_gmii_mode 0 4019 NULL
+_request_firmware_4021 _request_firmware 0 4021 NULL
+blk_end_request_4024 blk_end_request 3 4024 NULL nohasharray
+ql3xxx_set_mac_address_4033 ql3xxx_set_mac_address 0 4033 NULL
+b1_get_word_4035 b1_get_word 0 4035 NULL nohasharray
+usbnet_write_cmd_async_4035 usbnet_write_cmd_async 7 4035 &b1_get_word_4035
-+xfs_free_ag_extent_4036 xfs_free_ag_extent 0 4036 NULL
++xfs_free_ag_extent_4036 xfs_free_ag_extent 0 4036 NULL nohasharray
++sha1_base_do_update_4036 sha1_base_do_update 0 4036 &xfs_free_ag_extent_4036
+mtip_hw_read_registers_4037 mtip_hw_read_registers 3-0 4037 NULL
+store_tabletCoordinateMode_4043 store_tabletCoordinateMode 0-4 4043 NULL
+oprofile_set_ulong_4046 oprofile_set_ulong 0 4046 NULL
+axp20x_show_ext_attr_4232 axp20x_show_ext_attr 0 4232 NULL
+bch_hprint_4233 bch_hprint 0 4233 NULL nohasharray
+gpio_trig_gpio_store_4233 gpio_trig_gpio_store 0-4 4233 &bch_hprint_4233
-+show_fnode_max_segment_size_4234 show_fnode_max_segment_size 0 4234 NULL
++show_fnode_max_segment_size_4234 show_fnode_max_segment_size 0 4234 NULL nohasharray
++ext4_direct_IO_4234 ext4_direct_IO 3 4234 &show_fnode_max_segment_size_4234
+snd_seq_ioctl_query_next_port_4238 snd_seq_ioctl_query_next_port 0 4238 NULL
+input_dev_show_cap_abs_4239 input_dev_show_cap_abs 0 4239 NULL
+team_port_enable_netpoll_4243 team_port_enable_netpoll 0 4243 NULL
+mlx4_qp_modify_4333 mlx4_qp_modify 0 4333 NULL
+iscsi_disc_store_userid_4337 iscsi_disc_store_userid 0-3 4337 NULL
+ima_eventdigest_init_common_4338 ima_eventdigest_init_common 2 4338 NULL
++unix_stream_sendmsg_4343 unix_stream_sendmsg 3 4343 NULL
+rtl8169_get_sset_count_4349 rtl8169_get_sset_count 0 4349 NULL
+show_tcrit1_4350 show_tcrit1 0 4350 NULL
+netdev_vlan_rx_add_vid_4353 netdev_vlan_rx_add_vid 0 4353 NULL
+uevent_seqnum_show_4383 uevent_seqnum_show 0 4383 NULL
+pci_eg20t_init_4385 pci_eg20t_init 0 4385 NULL
+irda_sendmsg_4388 irda_sendmsg 4-0 4388 NULL
++sctp_sendmsg_4391 sctp_sendmsg 3 4391 NULL
+lp3943_gpio_set_mode_4393 lp3943_gpio_set_mode 0 4393 NULL
+ovl_listxattr_4399 ovl_listxattr 0-3 4399 NULL
+get_pwm1_enable_4401 get_pwm1_enable 0 4401 NULL nohasharray
+isdn_divert_write_4891 isdn_divert_write 0-3 4891 NULL
+s2io_ethtool_get_regs_len_4901 s2io_ethtool_get_regs_len 0 4901 NULL
+shadow_fetch_4907 shadow_fetch 2 4907 NULL
-+nilfs_segbuf_reset_4912 nilfs_segbuf_reset 0 4912 NULL
++nilfs_segbuf_reset_4912 nilfs_segbuf_reset 0 4912 NULL nohasharray
++mt6397_irq_handle_reg_4912 mt6397_irq_handle_reg 3 4912 &nilfs_segbuf_reset_4912
+qlcnic_82xx_alloc_mbx_args_4913 qlcnic_82xx_alloc_mbx_args 0 4913 NULL nohasharray
+smsc911x_ethtool_getregslen_4913 smsc911x_ethtool_getregslen 0 4913 &qlcnic_82xx_alloc_mbx_args_4913
+sw_activity_store_4914 sw_activity_store 0 4914 NULL
+snd_seq_ioctl_get_queue_tempo_5296 snd_seq_ioctl_get_queue_tempo 0 5296 NULL
+qla2x00_optrom_fcode_version_show_5297 qla2x00_optrom_fcode_version_show 0 5297 NULL
+lpfc_max_luns_show_5301 lpfc_max_luns_show 0 5301 NULL
++sco_sock_sendmsg_5302 sco_sock_sendmsg 3 5302 NULL
+metapage_readpage_5304 metapage_readpage 0 5304 NULL nohasharray
+alloc_dec_temp_buffers_5304 alloc_dec_temp_buffers 0 5304 &metapage_readpage_5304 nohasharray
+t4vf_write_rss_vi_config_5304 t4vf_write_rss_vi_config 0 5304 &alloc_dec_temp_buffers_5304
+_efx_mcdi_rpc_finish_5310 _efx_mcdi_rpc_finish 0 5310 NULL
+grow_inode_5311 grow_inode 0 5311 NULL
+r592_write_fifo_pio_5315 r592_write_fifo_pio 3 5315 NULL
++pep_sendmsg_5316 pep_sendmsg 3 5316 NULL
+sbc_get_write_same_sectors_5317 sbc_get_write_same_sectors 0 5317 NULL
+selinux_ipv4_output_5320 selinux_ipv4_output 0 5320 NULL
+pmcraid_show_log_level_5323 pmcraid_show_log_level 0 5323 NULL nohasharray
+fcr_get_rxtrig_bytes_5384 fcr_get_rxtrig_bytes 0 5384 &disksize_store_5384
+efx_mcdi_port_reconfigure_5389 efx_mcdi_port_reconfigure 0 5389 NULL
+at86rf230_set_hw_addr_filt_5394 at86rf230_set_hw_addr_filt 0 5394 NULL
++bitmap_fold_5396 bitmap_fold 4 5396 NULL
+brcmf_netdev_set_mac_address_5397 brcmf_netdev_set_mac_address 0 5397 NULL
+xadc_write_adc_reg_5398 xadc_write_adc_reg 0 5398 NULL
+regulator_uV_show_5404 regulator_uV_show 0 5404 NULL
+v4l2_s_ctrl_5571 v4l2_s_ctrl 0 5571 NULL
+tda18271_set_standby_mode_5572 tda18271_set_standby_mode 0 5572 NULL
+fir16_create_5574 fir16_create 3 5574 NULL
++ax25_sendmsg_5578 ax25_sendmsg 3 5578 NULL
+bioset_create_5580 bioset_create 1 5580 NULL
+fat_block_truncate_page_5581 fat_block_truncate_page 0 5581 NULL nohasharray
+esas2r_write_vda_5581 esas2r_write_vda 0-3-4 5581 &fat_block_truncate_page_5581
+bind_store_5596 bind_store 0-3 5596 &thermal_throttle_cpu_callback_5596
+amd_xgbe_an_init_5602 amd_xgbe_an_init 0 5602 NULL
+xcan_set_bittiming_5605 xcan_set_bittiming 0 5605 NULL
++pn_recvmsg_5607 pn_recvmsg 3 5607 NULL
+ldm_frag_add_5611 ldm_frag_add 2 5611 NULL
+compat_copy_entries_5617 compat_copy_entries 0 5617 NULL
+__remove_suid_5618 __remove_suid 0 5618 NULL
+sctp_bindx_rem_5938 sctp_bindx_rem 0 5938 &mlx4_en_create_tx_ring_5938
+edac_device_alloc_ctl_info_5941 edac_device_alloc_ctl_info 1 5941 NULL
+ssb_devices_freeze_5945 ssb_devices_freeze 0 5945 NULL
-+devkmsg_write_5947 devkmsg_write 0 5947 NULL
-+affs_readpage_ofs_5951 affs_readpage_ofs 0 5951 NULL
++devkmsg_write_5947 devkmsg_write 0 5947 NULL nohasharray
++l2cap_sock_sendmsg_5947 l2cap_sock_sendmsg 3 5947 &devkmsg_write_5947
++affs_readpage_ofs_5951 affs_readpage_ofs 0 5951 NULL nohasharray
++p9_get_mapped_pages_5951 p9_get_mapped_pages 4 5951 &affs_readpage_ofs_5951
+bnx2x_req_msix_irqs_5956 bnx2x_req_msix_irqs 0 5956 NULL
+tipc_subseq_alloc_5957 tipc_subseq_alloc 1 5957 NULL nohasharray
+erst_exec_add_value_5957 erst_exec_add_value 0 5957 &tipc_subseq_alloc_5957
++tcp_recvmsg_5958 tcp_recvmsg 3 5958 NULL
+attr_press_speed_show_tpkbd_5960 attr_press_speed_show_tpkbd 0 5960 NULL
+free_hugepages_show_5961 free_hugepages_show 0 5961 NULL
+ll_statahead_one_5962 ll_statahead_one 3 5962 NULL
+crypto_rng_reset_6032 crypto_rng_reset 0 6032 &show_pwm_auto_point_channel_6032
+radeon_process_i2c_ch_6034 radeon_process_i2c_ch 0 6034 NULL
+ntfs_rl_append_6037 ntfs_rl_append 4-2 6037 NULL
-+hvfb_set_par_6038 hvfb_set_par 0 6038 NULL
++hvfb_set_par_6038 hvfb_set_par 0 6038 NULL nohasharray
++mei_cl_read_start_6038 mei_cl_read_start 2-0 6038 &hvfb_set_par_6038
+crccheck_store_6040 crccheck_store 0-4 6040 NULL
+ipath_set_mtu_6042 ipath_set_mtu 0 6042 NULL
+led_shot_6046 led_shot 0-4 6046 NULL
-+otg_handle_notification_6055 otg_handle_notification 0 6055 NULL
++otg_handle_notification_6055 otg_handle_notification 0 6055 NULL nohasharray
++periph_interrupt_6055 periph_interrupt 2 6055 &otg_handle_notification_6055
+show_session_param_ISCSI_PARAM_DISCOVERY_LOGOUT_EN_6056 show_session_param_ISCSI_PARAM_DISCOVERY_LOGOUT_EN 0 6056 NULL
+da9052_request_irq_6058 da9052_request_irq 2 6058 NULL
+pccard_show_cis_6062 pccard_show_cis 0-5-6 6062 NULL
+store_cluster_6316 store_cluster 0-4 6316 NULL
+write_null_6319 write_null 0-3 6319 NULL
+__netdev_adjacent_dev_link_neighbour_6321 __netdev_adjacent_dev_link_neighbour 0 6321 NULL
-+extent_write_full_page_6322 extent_write_full_page 0 6322 NULL
++extent_write_full_page_6322 extent_write_full_page 0 6322 NULL nohasharray
++tipc_recvmsg_6322 tipc_recvmsg 3 6322 &extent_write_full_page_6322
+cyapa_gen3_bl_exit_6326 cyapa_gen3_bl_exit 0 6326 NULL
+ibm_get_table_from_acpi_6329 ibm_get_table_from_acpi 0 6329 NULL nohasharray
+SyS_mincore_6329 SyS_mincore 1-2 6329 &ibm_get_table_from_acpi_6329
+osd_req_read_sg_kern_6378 osd_req_read_sg_kern 5 6378 NULL nohasharray
+sync_fence_alloc_6378 sync_fence_alloc 1 6378 &osd_req_read_sg_kern_6378
+msb_write_block_6379 msb_write_block 3 6379 NULL
-+xfs_bmap_extents_to_btree_6387 xfs_bmap_extents_to_btree 0 6387 NULL
++xfs_bmap_extents_to_btree_6387 xfs_bmap_extents_to_btree 0 6387 NULL nohasharray
++sha1_ssse3_finup_6387 sha1_ssse3_finup 0 6387 &xfs_bmap_extents_to_btree_6387
+cfq_init_queue_6399 cfq_init_queue 0 6399 NULL
+bb_store_6401 bb_store 3-0 6401 NULL
+hash_elasticity_show_6402 hash_elasticity_show 0 6402 NULL
+rng_recvmsg_6569 rng_recvmsg 4-0 6569 NULL
+xfs_iozero_6573 xfs_iozero 0-3-2 6573 NULL
+i2c_smbus_write_byte_6574 i2c_smbus_write_byte 0 6574 NULL
++do_blockdev_direct_IO_6575 do_blockdev_direct_IO 5-0 6575 NULL
+max8997_rtc_set_alarm_6577 max8997_rtc_set_alarm 0 6577 NULL
+bt_skb_send_alloc_6581 bt_skb_send_alloc 2 6581 NULL
+SyS_fcntl64_6582 SyS_fcntl64 3 6582 NULL
+mv88e6xxx_reg_read_6748 mv88e6xxx_reg_read 0 6748 NULL
+wil_reset_6752 wil_reset 0 6752 NULL
+uvesafb_show_nocrtc_6754 uvesafb_show_nocrtc 0 6754 NULL
++_mv88e6xxx_phy_write_6755 _mv88e6xxx_phy_write 0 6755 NULL
+beiscsi_phys_port_disp_6756 beiscsi_phys_port_disp 0 6756 NULL nohasharray
-+cciss_engage_scsi_6756 cciss_engage_scsi 0 6756 &beiscsi_phys_port_disp_6756
++cciss_engage_scsi_6756 cciss_engage_scsi 0 6756 &beiscsi_phys_port_disp_6756 nohasharray
++i915_parse_cmds_6756 i915_parse_cmds 4-5 6756 &cciss_engage_scsi_6756
+mwifiex_cmd_rf_antenna_6757 mwifiex_cmd_rf_antenna 0 6757 NULL
+usbhsh_urb_enqueue_6759 usbhsh_urb_enqueue 0 6759 NULL
+mwl8k_cmd_set_new_stn_add_6760 mwl8k_cmd_set_new_stn_add 0 6760 NULL
+codec_reg_show_6818 codec_reg_show 0 6818 NULL nohasharray
+bcm_tx_setup_6818 bcm_tx_setup 0 6818 &codec_reg_show_6818
+rfcomm_send_frame_6819 rfcomm_send_frame 3 6819 NULL
++wil_get_bl_info_6823 wil_get_bl_info 0 6823 NULL
+lbs_rdrf_write_6826 lbs_rdrf_write 3-0 6826 NULL nohasharray
+host_reset_6826 host_reset 0 6826 &lbs_rdrf_write_6826
+xfs_bmap_first_unused_6827 xfs_bmap_first_unused 0 6827 NULL
+show_fcstat_fc_seq_not_found_6897 show_fcstat_fc_seq_not_found 0 6897 NULL nohasharray
+iscsi_tpg_param_show_DefaultTime2Retain_6897 iscsi_tpg_param_show_DefaultTime2Retain 0 6897 &show_fcstat_fc_seq_not_found_6897
+max_write_same_blocks_show_6899 max_write_same_blocks_show 0 6899 NULL
-+wq_nice_store_6901 wq_nice_store 0-4 6901 NULL
++wq_nice_store_6901 wq_nice_store 0-4 6901 NULL nohasharray
++crypto_sha256_finup_6901 crypto_sha256_finup 0 6901 &wq_nice_store_6901
+veth_change_mtu_6902 veth_change_mtu 0 6902 NULL nohasharray
+ext4_inode_bitmap_6902 ext4_inode_bitmap 0 6902 &veth_change_mtu_6902
+acerhdf_get_trip_temp_6903 acerhdf_get_trip_temp 0 6903 NULL
+in_intr_mask_show_6971 in_intr_mask_show 0 6971 NULL
+rsa_extract_mpi_6973 rsa_extract_mpi 5 6973 NULL nohasharray
+i40e_dbg_dump_write_6973 i40e_dbg_dump_write 3-0 6973 &rsa_extract_mpi_6973
++ubifs_decompress_6974 ubifs_decompress 0 6974 NULL
+acpi_lpss_platform_notify_6980 acpi_lpss_platform_notify 0 6980 NULL
+ismt_process_desc_6981 ismt_process_desc 0 6981 NULL
+request_key_async_6990 request_key_async 4 6990 NULL
+snd_pcm_do_resume_7028 snd_pcm_do_resume 0 7028 NULL
+ath9k_tx99_init_7029 ath9k_tx99_init 0 7029 NULL
+wimax_msg_7030 wimax_msg 4 7030 NULL
-+ceph_kvmalloc_7033 ceph_kvmalloc 1 7033 NULL
++ceph_kvmalloc_7033 ceph_kvmalloc 1 7033 NULL nohasharray
++rawv6_recvmsg_7033 rawv6_recvmsg 3 7033 &ceph_kvmalloc_7033
+nilfs_segments_attr_store_7037 nilfs_segments_attr_store 0-4 7037 NULL
+stmmac_hw_setup_7038 stmmac_hw_setup 0 7038 NULL
+metrics_bytes_identical_show_7039 metrics_bytes_identical_show 0 7039 NULL
+pscsi_show_configfs_dev_params_7152 pscsi_show_configfs_dev_params 0 7152 NULL
+sky2_get_eeprom_len_7154 sky2_get_eeprom_len 0 7154 NULL
+set_lcd_level_7155 set_lcd_level 0 7155 NULL
++nct7904_bank_lock_7159 nct7904_bank_lock 0 7159 NULL
+max732x_gpio_to_irq_7160 max732x_gpio_to_irq 2 7160 NULL
+fnic_reset_7163 fnic_reset 0 7163 NULL
+r8a66597_enable_7164 r8a66597_enable 0 7164 NULL
+fsp_attr_set_flags_7182 fsp_attr_set_flags 0-4 7182 NULL nohasharray
+set_rdac1_7182 set_rdac1 4-0 7182 &fsp_attr_set_flags_7182 nohasharray
+ext4_attr_store_7182 ext4_attr_store 0-4 7182 &set_rdac1_7182
-+f_hid_opts_report_desc_store_7188 f_hid_opts_report_desc_store 3 7188 NULL
++f_hid_opts_report_desc_store_7188 f_hid_opts_report_desc_store 3 7188 NULL nohasharray
++iwl_trans_wait_tx_queue_empty_7188 iwl_trans_wait_tx_queue_empty 0 7188 &f_hid_opts_report_desc_store_7188
+snd_mask_refine_max_7191 snd_mask_refine_max 0 7191 NULL
+wl1271_init_pta_7195 wl1271_init_pta 0 7195 NULL
+ext3_xattr_ibody_list_7201 ext3_xattr_ibody_list 0 7201 NULL
+adjd_s311_update_scan_mode_7208 adjd_s311_update_scan_mode 0 7208 NULL
+fsg_common_set_nluns_7209 fsg_common_set_nluns 2 7209 NULL
+confirm_7211 confirm 0 7211 NULL
++trace_insert_enum_map_file_7213 trace_insert_enum_map_file 3 7213 NULL
+tpm_rng_read_7214 tpm_rng_read 3 7214 NULL
+of_dma_match_channel_7216 of_dma_match_channel 3 7216 NULL
+acpi_device_uid_show_7226 acpi_device_uid_show 0 7226 NULL nohasharray
+ssb_bus_resume_7272 ssb_bus_resume 0 7272 &dma_ops_alloc_addresses_7272
+palmas_update_bits_7273 palmas_update_bits 0 7273 NULL
+htu21_show_humidity_7275 htu21_show_humidity 0 7275 NULL
++__vfs_write_7278 __vfs_write 0-3 7278 NULL
+radeon_hw_i2c_xfer_7280 radeon_hw_i2c_xfer 0-3 7280 NULL nohasharray
+smack_task_setnice_7280 smack_task_setnice 0 7280 &radeon_hw_i2c_xfer_7280
+kvm_suspend_7281 kvm_suspend 0 7281 NULL
+xfs_bmap_btalloc_nullfb_7654 xfs_bmap_btalloc_nullfb 0 7654 NULL
+show_fc_rport_supported_classes_7658 show_fc_rport_supported_classes 0 7658 NULL
+fault_inject_write_7662 fault_inject_write 3-0 7662 NULL
++rng_recvmsg_7665 rng_recvmsg 3 7665 NULL
+ds1305_set_alarm_7667 ds1305_set_alarm 0 7667 NULL
+acpi_bus_init_power_7670 acpi_bus_init_power 0 7670 NULL
+tcm_qla2xxx_tpg_attrib_store_generate_node_acls_7674 tcm_qla2xxx_tpg_attrib_store_generate_node_acls 0-3 7674 NULL
+write_room_8009 write_room 0 8009 NULL
+nfs_commit_inode_8011 nfs_commit_inode 0 8011 NULL
+tt3650_ci_msg_locked_8013 tt3650_ci_msg_locked 4 8013 NULL nohasharray
-+ip6gre_tap_init_8013 ip6gre_tap_init 0 8013 &tt3650_ci_msg_locked_8013
++ip6gre_tap_init_8013 ip6gre_tap_init 0 8013 &tt3650_ci_msg_locked_8013 nohasharray
++xfs_break_layouts_8013 xfs_break_layouts 0 8013 &ip6gre_tap_init_8013
+vcs_read_8017 vcs_read 3-0 8017 NULL
+cx18_s_audio_mode_8020 cx18_s_audio_mode 0 8020 NULL
+aux3_show_8025 aux3_show 0 8025 NULL
+cifs_sync_write_8031 cifs_sync_write 0 8031 NULL nohasharray
+snd_seq_oss_synth_load_patch_8031 snd_seq_oss_synth_load_patch 0 8031 &cifs_sync_write_8031
+ath10k_vdev_start_restart_8033 ath10k_vdev_start_restart 0 8033 NULL
-+fuse_copy_fill_8034 fuse_copy_fill 0 8034 NULL
++fuse_copy_fill_8034 fuse_copy_fill 0 8034 NULL nohasharray
++snd_hdac_bus_exec_verb_8034 snd_hdac_bus_exec_verb 0 8034 &fuse_copy_fill_8034
+led_set_flash_brightness_8039 led_set_flash_brightness 0 8039 NULL
+bma180_show_scale_avail_8040 bma180_show_scale_avail 0 8040 NULL nohasharray
+copy_gr_arg_normal_8040 copy_gr_arg_normal 0 8040 &bma180_show_scale_avail_8040
+qla4xxx_post_ping_evt_work_8074 qla4xxx_post_ping_evt_work 4 8074 &alloc_targets_8074 nohasharray
+current_has_perm_8074 current_has_perm 0 8074 &qla4xxx_post_ping_evt_work_8074 nohasharray
+reiserfs_setattr_8074 reiserfs_setattr 0 8074 ¤t_has_perm_8074
++gfs2_quota_lock_check_8075 gfs2_quota_lock_check 0 8075 NULL
+new_id_show_8076 new_id_show 0 8076 NULL nohasharray
+command_setcompressiontarget_8076 command_setcompressiontarget 0 8076 &new_id_show_8076
+strict_show_8078 strict_show 0 8078 NULL
+ext2_commit_chunk_8097 ext2_commit_chunk 3 8097 NULL
+ds2781_write_8099 ds2781_write 4-3-0 8099 NULL
+input_dev_show_cap_msc_8102 input_dev_show_cap_msc 0 8102 NULL
++vmbus_sendpacket_pagebuffer_ctl_8103 vmbus_sendpacket_pagebuffer_ctl 0 8103 NULL
+csrow_ue_count_show_8104 csrow_ue_count_show 0 8104 NULL
+ax88179_read_cmd_8105 ax88179_read_cmd 5 8105 NULL
+show_bpdu_guard_8110 show_bpdu_guard 0 8110 NULL
+ore_truncate_8181 ore_truncate 0 8181 NULL nohasharray
+mlx4_en_activate_tx_ring_8181 mlx4_en_activate_tx_ring 0 8181 &ore_truncate_8181
+show_iface_max_burst_len_8182 show_iface_max_burst_len 0 8182 NULL
++hci_sock_recvmsg_8184 hci_sock_recvmsg 3 8184 NULL
+lp3943_update_bits_8185 lp3943_update_bits 0 8185 NULL
+ieee80211_if_fmt_dot11MeshHoldingTimeout_8187 ieee80211_if_fmt_dot11MeshHoldingTimeout 3 8187 NULL
+write_classid_8189 write_classid 0 8189 NULL
+sel_make_policycap_8346 sel_make_policycap 0 8346 NULL
+ieee80211_if_fmt_ht_opmode_8347 ieee80211_if_fmt_ht_opmode 3 8347 NULL
+target_core_dev_pr_show_attr_res_type_8349 target_core_dev_pr_show_attr_res_type 0 8349 NULL
++sync_request_8350 sync_request 2 8350 NULL
+nfs4_lookup_root_sec_8353 nfs4_lookup_root_sec 0 8353 NULL
+prop_compression_apply_8354 prop_compression_apply 0 8354 NULL nohasharray
+open_candev_8354 open_candev 0 8354 &prop_compression_apply_8354
+roccat_common2_sysfs_read_8431 roccat_common2_sysfs_read 6-0 8431 NULL
+capability_set_8433 capability_set 0-4 8433 NULL
+snd_usb_ctl_msg_8436 snd_usb_ctl_msg 8-0 8436 NULL
-+irq_create_mapping_8437 irq_create_mapping 0-2 8437 NULL
++irq_create_mapping_8437 irq_create_mapping 0-2 8437 NULL nohasharray
++nfs_sync_inode_8437 nfs_sync_inode 0 8437 &irq_create_mapping_8437
+sk_stream_wait_memory_8438 sk_stream_wait_memory 0 8438 NULL
+generic_bin_search_8440 generic_bin_search 0 8440 NULL
+get_b_bus_req_8443 get_b_bus_req 0 8443 NULL
+snd_timer_open_8492 snd_timer_open 0 8492 NULL
+rpcauth_key_timeout_notify_8494 rpcauth_key_timeout_notify 0 8494 NULL
+in0_input_show_8498 in0_input_show 0 8498 NULL
++i40e_init_msix_8499 i40e_init_msix 0 8499 NULL
+fore200e_chunk_alloc_8501 fore200e_chunk_alloc 4-3 8501 NULL
+ecryptfs_calculate_md5_8504 ecryptfs_calculate_md5 0 8504 NULL
+dev_config_8506 dev_config 3 8506 NULL
+__dev_set_allmulti_8622 __dev_set_allmulti 0 8622 NULL
+xfs_qm_dqattach_locked_8625 xfs_qm_dqattach_locked 0 8625 NULL
+cifs_negotiate_8626 cifs_negotiate 0 8626 NULL
++iwl_pcie_load_cpu_sections_8000_8627 iwl_pcie_load_cpu_sections_8000 0 8627 NULL
+it821x_firmware_command_8628 it821x_firmware_command 3 8628 NULL
+scsi_dma_map_8632 scsi_dma_map 0 8632 NULL
+sh_vou_buf_prepare_8633 sh_vou_buf_prepare 0 8633 NULL
+show_hardware_8789 show_hardware 0 8789 NULL
+edd_show_sectors_8794 edd_show_sectors 0 8794 NULL
+__bitmap_weight_8796 __bitmap_weight 0 8796 NULL
++nct7904_read_reg16_8798 nct7904_read_reg16 0 8798 NULL
+ip_vs_remote_request6_8805 ip_vs_remote_request6 0 8805 NULL
+gfs2_glock_nq_8808 gfs2_glock_nq 0 8808 NULL nohasharray
+prod_id2_show_8808 prod_id2_show 0 8808 &gfs2_glock_nq_8808 nohasharray
+bd2802_store_reg0x06_8815 bd2802_store_reg0x06 0-4 8815 NULL
+show_counter_rx_dwords_8819 show_counter_rx_dwords 0 8819 NULL
+metronomefb_write_8823 metronomefb_write 3 8823 NULL
-+SyS_llistxattr_8824 SyS_llistxattr 3 8824 NULL
++SyS_llistxattr_8824 SyS_llistxattr 3 8824 NULL nohasharray
++hfsplus_direct_IO_8824 hfsplus_direct_IO 3 8824 &SyS_llistxattr_8824
+nilfs_segctor_reset_segment_buffer_8825 nilfs_segctor_reset_segment_buffer 0 8825 NULL
+extent_read_full_page_8826 extent_read_full_page 0 8826 NULL
+ll_xattr_cache_get_8829 ll_xattr_cache_get 0 8829 NULL
+new_files_jdata_store_8832 new_files_jdata_store 0-3 8832 &mmc_wait_for_cmd_8832
+get_queue_depth_8833 get_queue_depth 0 8833 NULL nohasharray
+icmpv6_manip_pkt_8833 icmpv6_manip_pkt 4 8833 &get_queue_depth_8833
-+dvb_ringbuffer_pkt_next_8834 dvb_ringbuffer_pkt_next 0-2 8834 NULL
++dvb_ringbuffer_pkt_next_8834 dvb_ringbuffer_pkt_next 0-2 8834 NULL nohasharray
++mgmt_generic_event_8834 mgmt_generic_event 4 8834 &dvb_ringbuffer_pkt_next_8834
+usb_ep_queue_8839 usb_ep_queue 0 8839 NULL nohasharray
+nilfs_mdt_get_block_8839 nilfs_mdt_get_block 0 8839 &usb_ep_queue_8839
+policydb_bounds_sanity_check_8846 policydb_bounds_sanity_check 0 8846 NULL
+sta_tx_latency_stat_header_9050 sta_tx_latency_stat_header 0-3-4 9050 NULL
+clk_ctl_store_9053 clk_ctl_store 0-4 9053 NULL
+__uncore_xbr_mm_cfg_show_9057 __uncore_xbr_mm_cfg_show 0 9057 NULL
-+ep_queue_9060 ep_queue 0 9060 NULL
++ep_queue_9060 ep_queue 0 9060 NULL nohasharray
++rhashtable_lookup_insert_key_9060 rhashtable_lookup_insert_key 0 9060 &ep_queue_9060
+snd_emu10k1_synth_copy_from_user_9061 snd_emu10k1_synth_copy_from_user 5-3 9061 NULL
+snd_gus_dram_peek_9062 snd_gus_dram_peek 4 9062 NULL nohasharray
+fnic_show_link_state_9062 fnic_show_link_state 0 9062 &snd_gus_dram_peek_9062
+ext4_da_write_inline_data_end_9179 ext4_da_write_inline_data_end 4-0 9179 NULL nohasharray
+w1_ds2780_eeprom_cmd_9179 w1_ds2780_eeprom_cmd 0 9179 &ext4_da_write_inline_data_end_9179
+isr_irqs_read_9181 isr_irqs_read 3-0 9181 NULL
-+count_leading_zeros_9183 count_leading_zeros 0 9183 NULL
++count_leading_zeros_9183 count_leading_zeros 0 9183 NULL nohasharray
++bitmap_storage_alloc_9183 bitmap_storage_alloc 2-0 9183 &count_leading_zeros_9183
+show_counter_ib_link_downeds_9184 show_counter_ib_link_downeds 0 9184 NULL
+ax25_bind_9185 ax25_bind 0 9185 NULL
+xfs_btree_rshift_9187 xfs_btree_rshift 0 9187 NULL
+sctp_getsockopt_delayed_ack_9232 sctp_getsockopt_delayed_ack 2 9232 NULL nohasharray
+core_alua_show_preferred_bit_9232 core_alua_show_preferred_bit 0 9232 &sctp_getsockopt_delayed_ack_9232
+edac_dev_ctl_info_store_9233 edac_dev_ctl_info_store 0-4 9233 NULL
++l2tp_ip_sendmsg_9235 l2tp_ip_sendmsg 3 9235 NULL
+tps6507x_pmic_reg_read_9236 tps6507x_pmic_reg_read 0 9236 NULL
+__bnx2fc_enable_9238 __bnx2fc_enable 0 9238 NULL
+ext4_mark_iloc_dirty_9239 ext4_mark_iloc_dirty 0 9239 NULL
+i2c_sysfs_new_device_9417 i2c_sysfs_new_device 0-4 9417 NULL
+nf_nat_sip_expect_9418 nf_nat_sip_expect 8 9418 NULL nohasharray
+store_lmc_9418 store_lmc 0-4 9418 &nf_nat_sip_expect_9418
++ocfs2_direct_IO_zero_extend_9424 ocfs2_direct_IO_zero_extend 0-4 9424 NULL
+show_ipv6_iface_router_state_9425 show_ipv6_iface_router_state 0 9425 NULL nohasharray
+prism2_aux_dump_proc_no_read_9425 prism2_aux_dump_proc_no_read 0-3 9425 &show_ipv6_iface_router_state_9425
+sync_inode_9429 sync_inode 0 9429 NULL
+match_format_9516 match_format 0 9516 &disk_events_show_9516
+do_strip_9517 do_strip 0 9517 NULL
+target_core_alua_tg_pt_gp_show_attr_preferred_9519 target_core_alua_tg_pt_gp_show_attr_preferred 0 9519 NULL
++common_rfc4106_set_key_9520 common_rfc4106_set_key 3 9520 NULL
+iwl_dbgfs_fw_dbg_conf_read_9522 iwl_dbgfs_fw_dbg_conf_read 3-0 9522 NULL
+roccat_common2_sysfs_read_keys_macro_9524 roccat_common2_sysfs_read_keys_macro 0-5-6 9524 NULL
+log_buf_len_show_9525 log_buf_len_show 0 9525 NULL
+calgary_map_sg_9680 calgary_map_sg 0-3 9680 NULL
+urbnum_show_9682 urbnum_show 0 9682 NULL nohasharray
+wl1271_init_templates_config_9682 wl1271_init_templates_config 0 9682 &urbnum_show_9682
++f81232_set_register_9683 f81232_set_register 0 9683 NULL
+nilfs_btree_lookup_9685 nilfs_btree_lookup 0 9685 NULL
+show_in0_9686 show_in0 0 9686 NULL
+__erst_read_from_storage_9690 __erst_read_from_storage 0 9690 NULL
+parse_uac2_sample_rate_range_9718 parse_uac2_sample_rate_range 0 9718 NULL
+sstfb_set_par_9719 sstfb_set_par 0 9719 NULL
+SYSC_ppoll_9721 SYSC_ppoll 2 9721 NULL
++sha512_base_finish_9729 sha512_base_finish 0 9729 NULL
+t4_wr_mbox_9732 t4_wr_mbox 0 9732 NULL
+cyapa_update_suspend_scanrate_9734 cyapa_update_suspend_scanrate 0-4 9734 NULL
+show_cmd_per_lun_9735 show_cmd_per_lun 0 9735 NULL nohasharray
+rtl92ce_hw_init_9858 rtl92ce_hw_init 0 9858 NULL
+garmin_write_room_9859 garmin_write_room 0 9859 NULL
+iwl_poll_prph_bit_9861 iwl_poll_prph_bit 0 9861 NULL
-+bfad_im_model_show_9862 bfad_im_model_show 0 9862 NULL
++bfad_im_model_show_9862 bfad_im_model_show 0 9862 NULL nohasharray
++sha256_ssse3_finup_9862 sha256_ssse3_finup 0 9862 &bfad_im_model_show_9862
+pmcraid_alloc_sglist_9864 pmcraid_alloc_sglist 1 9864 NULL
++pep_recvmsg_9866 pep_recvmsg 3 9866 NULL
+task_can_attach_9867 task_can_attach 0 9867 NULL
+f1x_translate_sysaddr_to_cs_9868 f1x_translate_sysaddr_to_cs 2 9868 NULL
+wil_read_file_ioblob_9878 wil_read_file_ioblob 3-0 9878 NULL nohasharray
+dir_commit_chunk_9878 dir_commit_chunk 3 9878 &wil_read_file_ioblob_9878
++ping_v4_sendmsg_9883 ping_v4_sendmsg 3 9883 NULL
+fuse_dev_read_9884 fuse_dev_read 0 9884 NULL
+wl1271_cmd_radio_parms_9886 wl1271_cmd_radio_parms 0 9886 NULL
+show_sensor_9889 show_sensor 0 9889 NULL
+store_9970 store 0 9970 &vivid_loop_out_s_ctrl_9970
+btrfs_add_link_9973 btrfs_add_link 5 9973 NULL nohasharray
+show_fcstat_rx_frames_9973 show_fcstat_rx_frames 0 9973 &btrfs_add_link_9973
-+ath6kl_usb_submit_ctrl_out_9978 ath6kl_usb_submit_ctrl_out 6 9978 NULL
++ath6kl_usb_submit_ctrl_out_9978 ath6kl_usb_submit_ctrl_out 6 9978 NULL nohasharray
++compat_import_iovec_9978 compat_import_iovec 3-0 9978 &ath6kl_usb_submit_ctrl_out_9978
+il4965_dump_fh_9979 il4965_dump_fh 0 9979 NULL
+twl6040_power_up_manual_9982 twl6040_power_up_manual 0 9982 NULL nohasharray
+sscanf_9982 sscanf 0 9982 &twl6040_power_up_manual_9982 nohasharray
+ufs_bitmap_search_10105 ufs_bitmap_search 0-3 10105 NULL
+get_elem_size_10110 get_elem_size 0-2 10110 NULL nohasharray
+dynamic_ps_timeout_read_10110 dynamic_ps_timeout_read 3-0 10110 &get_elem_size_10110
-+gfs2_meta_read_10112 gfs2_meta_read 0 10112 NULL
++rocker_desc_err_10111 rocker_desc_err 0 10111 NULL
++gfs2_meta_read_10112 gfs2_meta_read 0 10112 NULL nohasharray
++link_schedule_user_10112 link_schedule_user 0 10112 &gfs2_meta_read_10112
+host_control_smi_type_store_10118 host_control_smi_type_store 0-4 10118 NULL
+snd_vortex_pcm_trigger_10123 snd_vortex_pcm_trigger 0 10123 NULL
+wl1271_acx_host_if_cfg_bitmap_10124 wl1271_acx_host_if_cfg_bitmap 0 10124 NULL
+get_key_10538 get_key 0 10538 NULL
+sas_set_phy_speed_10540 sas_set_phy_speed 0 10540 NULL
+SYSC_read_10545 SYSC_read 3 10545 NULL
++crypto_sha512_finup_10555 crypto_sha512_finup 0 10555 NULL
+pm_qos_no_power_off_show_10556 pm_qos_no_power_off_show 0 10556 NULL
+ivtv_start_10559 ivtv_start 0 10559 NULL
+ipr_read_dump_10560 ipr_read_dump 0-5-6 10560 NULL
+cap_mask_show_10632 cap_mask_show 0 10632 &alloc_coherent_10632 nohasharray
+il4965_send_tx_power_10632 il4965_send_tx_power 0 10632 &cap_mask_show_10632
+fq_alloc_node_10633 fq_alloc_node 1 10633 NULL
++sha256_base_do_update_10634 sha256_base_do_update 0 10634 NULL
+ov9650_set_auto_gain_10638 ov9650_set_auto_gain 0 10638 NULL nohasharray
+proc_sys_write_10638 proc_sys_write 0-3 10638 &ov9650_set_auto_gain_10638
+check_transition_10639 check_transition 0 10639 NULL
+fuse_conn_max_background_read_10855 fuse_conn_max_background_read 3-0 10855 NULL
+snd_card_asihpi_playback_ioctl_10857 snd_card_asihpi_playback_ioctl 0 10857 NULL
+usnic_ib_show_qp_per_vf_10858 usnic_ib_show_qp_per_vf 0 10858 NULL
++read_edid_block_10860 read_edid_block 4 10860 NULL
+btrfs_permission_10861 btrfs_permission 0 10861 NULL
+ol_chunk_blocks_10864 ol_chunk_blocks 0 10864 NULL
+trivial_online_10866 trivial_online 0 10866 NULL
+ixgbe_disable_sriov_11037 ixgbe_disable_sriov 0 11037 &mb_find_next_bit_11037
+shmem_listxattr_11040 shmem_listxattr 0-3 11040 NULL
+mask_and_set_register_11042 mask_and_set_register 0 11042 NULL
-+sys_sendfile_11048 sys_sendfile 4 11048 NULL
++sys_sendfile_11048 sys_sendfile 4 11048 NULL nohasharray
++rawsock_recvmsg_11048 rawsock_recvmsg 3 11048 &sys_sendfile_11048
+tda10048_writeregbulk_11050 tda10048_writeregbulk 4 11050 NULL
+char2uni_11054 char2uni 0 11054 NULL
+srpt_tpg_attrib_store_srp_sq_size_11059 srpt_tpg_attrib_store_srp_sq_size 0-3 11059 NULL
+pc87413_notify_sys_11917 pc87413_notify_sys 0 11917 NULL
+_rbd_dev_v2_snap_features_11922 _rbd_dev_v2_snap_features 0 11922 NULL
+fs_devrw_entry_11924 fs_devrw_entry 3-0 11924 NULL
-+SMBNTencrypt_11929 SMBNTencrypt 0 11929 NULL
++SMBNTencrypt_11929 SMBNTencrypt 0 11929 NULL nohasharray
++bitmap_remap_11929 bitmap_remap 5 11929 &SMBNTencrypt_11929
+show_limit_11932 show_limit 0 11932 NULL
+nf_nat_ipv6_local_fn_11937 nf_nat_ipv6_local_fn 0 11937 NULL nohasharray
+max1027_debugfs_reg_access_11937 max1027_debugfs_reg_access 0 11937 &nf_nat_ipv6_local_fn_11937
+audit_sockaddr_12030 audit_sockaddr 0 12030 NULL
+s2io_card_up_12032 s2io_card_up 0 12032 NULL
+notifier_call_chain_12036 notifier_call_chain 0 12036 NULL
++vcc_sendmsg_12038 vcc_sendmsg 3 12038 NULL
+device_offline_12042 device_offline 0 12042 NULL
+ftdi_elan_total_command_size_12045 ftdi_elan_total_command_size 0 12045 NULL
+bdx_tx_init_12046 bdx_tx_init 0 12046 NULL
+e1000e_get_sset_count_12456 e1000e_get_sset_count 0 12456 NULL
+nvkm_engine_create__12458 nvkm_engine_create_ 7 12458 NULL
+deadline_read_expire_store_12459 deadline_read_expire_store 0-3 12459 NULL
++llcp_sock_recvmsg_12460 llcp_sock_recvmsg 3 12460 NULL
+rbd_dev_v2_header_info_12466 rbd_dev_v2_header_info 0 12466 NULL
+defrag_show_12468 defrag_show 0 12468 NULL nohasharray
+mei_write_message_12468 mei_write_message 0 12468 &defrag_show_12468
+wl18xx_acx_ap_sleep_12628 wl18xx_acx_ap_sleep 0 12628 NULL
+pwr_rcvd_awake_bcns_cnt_read_12632 pwr_rcvd_awake_bcns_cnt_read 3-0 12632 NULL
+store_blank_12636 store_blank 0-4 12636 NULL
-+pn_sendmsg_12640 pn_sendmsg 4-0 12640 NULL
++pn_sendmsg_12640 pn_sendmsg 4-0 12640 NULL nohasharray
++nr_sendmsg_12640 nr_sendmsg 3 12640 &pn_sendmsg_12640
+dwc3_link_state_write_12641 dwc3_link_state_write 3-0 12641 NULL
+nr_recvmsg_12649 nr_recvmsg 4-0 12649 NULL
+wb_create_12651 wb_create 1 12651 NULL
+wsm_cmd_send_12901 wsm_cmd_send 0 12901 NULL
+_regmap_raw_read_12902 _regmap_raw_read 0 12902 NULL nohasharray
+request_12902 request 0 12902 &_regmap_raw_read_12902
++ocfs2_hamming_encode_block_12904 ocfs2_hamming_encode_block 2 12904 NULL
+sha512_ssse3_export_12905 sha512_ssse3_export 0 12905 NULL
+elan_write_fw_block_12906 elan_write_fw_block 0 12906 NULL
+get_virtual_node_size_12908 get_virtual_node_size 0 12908 NULL
+lpfc_link_speed_show_12965 lpfc_link_speed_show 0 12965 NULL nohasharray
+snd_seq_prioq_cell_in_12965 snd_seq_prioq_cell_in 0 12965 &lpfc_link_speed_show_12965
+start_khugepaged_12971 start_khugepaged 0 12971 NULL
++__rhashtable_insert_fast_12974 __rhashtable_insert_fast 0 12974 NULL
+iwl_mvm_read_external_nvm_12975 iwl_mvm_read_external_nvm 0 12975 NULL
+klp_enable_object_12977 klp_enable_object 0 12977 NULL
+broadsheet_setup_plls_12983 broadsheet_setup_plls 0 12983 NULL
+iso_sched_alloc_13377 iso_sched_alloc 1 13377 &wep_key_not_found_read_13377
+iio_buffer_read_first_n_outer_13378 iio_buffer_read_first_n_outer 0-3 13378 NULL
+sctp_wait_for_connect_13379 sctp_wait_for_connect 0 13379 NULL
++bt_sock_recvmsg_13380 bt_sock_recvmsg 3 13380 NULL
+zl10036_set_params_13381 zl10036_set_params 0 13381 NULL
+activity_write_13388 activity_write 0-6-5 13388 NULL nohasharray
+lov_mds_md_size_13388 lov_mds_md_size 0-1 13388 &activity_write_13388
+compat_SyS_sendfile64_13420 compat_SyS_sendfile64 4 13420 NULL
+show_multicast_fast_leave_13427 show_multicast_fast_leave 0 13427 NULL
+bq2415x_exec_command_13430 bq2415x_exec_command 0 13430 NULL
-+smb_sendv_13437 smb_sendv 0 13437 NULL
++smb_sendv_13437 smb_sendv 0 13437 NULL nohasharray
++__tipc_send_stream_13437 __tipc_send_stream 3 13437 &smb_sendv_13437
+mwifiex_get_bss_info_13439 mwifiex_get_bss_info 0 13439 NULL nohasharray
+request_firmware_nowait_13439 request_firmware_nowait 0 13439 &mwifiex_get_bss_info_13439
+sctp_setsockopt_peer_primary_addr_13440 sctp_setsockopt_peer_primary_addr 3-0 13440 NULL
+swap_cgroup_swapon_13614 swap_cgroup_swapon 2 13614 NULL
+wm8994_bulk_write_13615 wm8994_bulk_write 2-3 13615 NULL nohasharray
+ov7670_write_smbus_13615 ov7670_write_smbus 0 13615 &wm8994_bulk_write_13615
-+__ntfs_grab_cache_pages_13617 __ntfs_grab_cache_pages 0 13617 NULL
++__ntfs_grab_cache_pages_13617 __ntfs_grab_cache_pages 0 13617 NULL nohasharray
++nr_recvmsg_13617 nr_recvmsg 3 13617 &__ntfs_grab_cache_pages_13617
+pmcraid_get_minor_13619 pmcraid_get_minor 0 13619 NULL
+atl1_get_regs_len_13624 atl1_get_regs_len 0 13624 NULL
+iio_device_add_event_sysfs_13627 iio_device_add_event_sysfs 0 13627 NULL
+nes_store_idx_addr_13673 nes_store_idx_addr 0-3 13673 NULL
+show_ipOutForwDatagrams_13674 show_ipOutForwDatagrams 0 13674 NULL
+omap_hsmmc_show_slot_name_13675 omap_hsmmc_show_slot_name 0 13675 NULL
++i915_gem_obj_ggtt_offset_view_13680 i915_gem_obj_ggtt_offset_view 0 13680 NULL
+dvb_usb_generic_rw_13681 dvb_usb_generic_rw 0 13681 NULL nohasharray
+acpi_suspend_lowlevel_13681 acpi_suspend_lowlevel 0 13681 &dvb_usb_generic_rw_13681
+ext3_xattr_list_entries_13682 ext3_xattr_list_entries 0 13682 NULL nohasharray
+gadget_dev_desc_bcdUSB_store_13691 gadget_dev_desc_bcdUSB_store 0-3 13691 &check_intr_schedule_13691 nohasharray
+uevent_helper_store_13691 uevent_helper_store 0-4 13691 &gadget_dev_desc_bcdUSB_store_13691
+usb_get_string_13693 usb_get_string 0 13693 NULL
++tipc_send_stream_13696 tipc_send_stream 3 13696 NULL
+patch_vt2002P_13697 patch_vt2002P 0 13697 NULL
+fw_iso_buffer_alloc_13704 fw_iso_buffer_alloc 2 13704 NULL nohasharray
+ntc_show_name_13704 ntc_show_name 0 13704 &fw_iso_buffer_alloc_13704 nohasharray
+dsbr100_setfreq_13739 dsbr100_setfreq 0 13739 &cfg80211_testmode_alloc_event_skb_13739
+ql_wait_reg_rdy_13741 ql_wait_reg_rdy 0 13741 NULL
+audit_unpack_string_13748 audit_unpack_string 3 13748 NULL
++snd_hdac_device_register_13749 snd_hdac_device_register 0 13749 NULL
+ufs_dtog_13750 ufs_dtog 0-2 13750 NULL
+lbmLogInit_13756 lbmLogInit 0 13756 NULL
+netprio_set_prio_13758 netprio_set_prio 0 13758 NULL
+fb_sys_read_13778 fb_sys_read 3 13778 NULL
+edac_device_ctl_panic_on_ue_show_13780 edac_device_ctl_panic_on_ue_show 0 13780 NULL
+qib_setup_sdma_13784 qib_setup_sdma 0 13784 NULL
++l2tp_ip_recvmsg_13785 l2tp_ip_recvmsg 3 13785 NULL
+roccat_common2_sysfs_read_sensor_13788 roccat_common2_sysfs_read_sensor 0-5-6 13788 NULL
+sysfs_do_cmd_13790 sysfs_do_cmd 0-4 13790 NULL
+ath6kl_mgmt_powersave_ap_13791 ath6kl_mgmt_powersave_ap 6 13791 NULL
+migrate_pages_13797 migrate_pages 0 13797 NULL
+cpu_down_13801 cpu_down 0 13801 NULL
+fbcon_unbind_13802 fbcon_unbind 0 13802 NULL
++mwifiex_sdio_card_to_host_mp_aggr_13806 mwifiex_sdio_card_to_host_mp_aggr 2 13806 NULL
+cpu_callback_13812 cpu_callback 0 13812 NULL nohasharray
+e100_rx_alloc_list_13812 e100_rx_alloc_list 0 13812 &cpu_callback_13812
+random_read_13815 random_read 3-0 13815 NULL nohasharray
+queue_bulk_on_old_endpoint_13828 queue_bulk_on_old_endpoint 0 13828 NULL nohasharray
+__uncore_filter_opc2_show_13828 __uncore_filter_opc2_show 0 13828 &queue_bulk_on_old_endpoint_13828
+netxen_sysfs_read_mem_13830 netxen_sysfs_read_mem 0-6-5 13830 NULL
-+qce_ahash_hmac_setkey_13837 qce_ahash_hmac_setkey 3 13837 NULL
++qce_ahash_hmac_setkey_13837 qce_ahash_hmac_setkey 3 13837 NULL nohasharray
++bucket_table_alloc_13837 bucket_table_alloc 2 13837 &qce_ahash_hmac_setkey_13837
+ds1685_rtc_sysfs_serial_show_13839 ds1685_rtc_sysfs_serial_show 0 13839 NULL
+hwrng_attr_available_show_13843 hwrng_attr_available_show 0 13843 NULL
+acknak_13844 acknak 0 13844 NULL nohasharray
+lm95234_read_temp_13850 lm95234_read_temp 0 13850 NULL
+evdev_ioctl_compat_13851 evdev_ioctl_compat 2 13851 NULL
+c2port_poll_out_ready_13852 c2port_poll_out_ready 0 13852 NULL
++visorchipset_file_init_13861 visorchipset_file_init 1 13861 NULL
+vendor_name_store_13862 vendor_name_store 0-4 13862 NULL
+ath10k_wmi_vdev_install_key_13866 ath10k_wmi_vdev_install_key 0 13866 NULL
+lmc_open_13868 lmc_open 0 13868 NULL
+pci_conf1_read_14075 pci_conf1_read 0 14075 NULL
+lov_stripeoffset_seq_write_14078 lov_stripeoffset_seq_write 3 14078 NULL
+_cx88_stop_audio_dma_14079 _cx88_stop_audio_dma 0 14079 NULL
-+w1_master_attribute_store_pullup_14080 w1_master_attribute_store_pullup 0-4 14080 NULL
++w1_master_attribute_store_pullup_14080 w1_master_attribute_store_pullup 0-4 14080 NULL nohasharray
++dgram_recvmsg_14080 dgram_recvmsg 3 14080 &w1_master_attribute_store_pullup_14080
+_nfs4_proc_readdir_14082 _nfs4_proc_readdir 0 14082 NULL
+cond_read_av_list_14085 cond_read_av_list 0 14085 NULL
+store_sched2_14094 store_sched2 4-0 14094 NULL
+wl12xx_set_power_on_14117 wl12xx_set_power_on 0 14117 NULL
+rsc_parse_14119 rsc_parse 0 14119 NULL nohasharray
+enic_set_mac_addr_14119 enic_set_mac_addr 0 14119 &rsc_parse_14119
++caif_stream_recvmsg_14125 caif_stream_recvmsg 3 14125 NULL
+readSuper_14128 readSuper 0 14128 NULL
+show_deactivate_slack_14129 show_deactivate_slack 0 14129 NULL nohasharray
+iscsi_conn_get_addr_param_14129 iscsi_conn_get_addr_param 0 14129 &show_deactivate_slack_14129
+ov9650_set_exposure_14176 ov9650_set_exposure 0 14176 NULL nohasharray
+ixgbevf_write_mbx_vf_14176 ixgbevf_write_mbx_vf 0 14176 &ov9650_set_exposure_14176
+uhid_dev_input_14180 uhid_dev_input 0 14180 NULL
++nfs_file_direct_write_14181 nfs_file_direct_write 0 14181 NULL
+datafab_read_data_14186 datafab_read_data 4 14186 NULL
+show_rf_kill_14187 show_rf_kill 0 14187 NULL
+__platform_create_bundle_14191 __platform_create_bundle 6-4 14191 NULL
+store_engine2_load_14233 store_engine2_load 4-0 14233 &ieee80211_if_write_uapsd_max_sp_len_14233
+show_fc_host_maxframe_size_14237 show_fc_host_maxframe_size 0 14237 NULL
+usbhsh_endpoint_attach_14238 usbhsh_endpoint_attach 0 14238 NULL
-+de_get_regs_len_14241 de_get_regs_len 0 14241 NULL
++de_get_regs_len_14241 de_get_regs_len 0 14241 NULL nohasharray
++sctp_recvmsg_14241 sctp_recvmsg 3 14241 &de_get_regs_len_14241
+dma_declare_coherent_memory_14244 dma_declare_coherent_memory 2-4 14244 NULL nohasharray
+__tipc_link_xmit_14244 __tipc_link_xmit 0 14244 &dma_declare_coherent_memory_14244
+iscsi_tpg_param_store_AuthMethod_14245 iscsi_tpg_param_store_AuthMethod 0-3 14245 NULL
+show_fcstat_fc_no_free_exch_xid_14727 show_fcstat_fc_no_free_exch_xid 0 14727 NULL
+__blk_end_request_14729 __blk_end_request 3 14729 NULL
+rh_urb_enqueue_14733 rh_urb_enqueue 0 14733 NULL
++codec_bind_generic_14739 codec_bind_generic 0 14739 NULL
+raid1_resize_14740 raid1_resize 2-0 14740 NULL
+show_conn_param_ISCSI_PARAM_IPV6_TC_14747 show_conn_param_ISCSI_PARAM_IPV6_TC 0 14747 NULL
+sh_mobile_ceu_get_formats_14748 sh_mobile_ceu_get_formats 0 14748 NULL
+max_power_show_14836 max_power_show 0 14836 NULL
+name_len_14843 name_len 0-2 14843 NULL
+subsystem_vendor_show_14845 subsystem_vendor_show 0 14845 NULL
++dccp_sendmsg_14850 dccp_sendmsg 3 14850 NULL
+mrp_attr_create_14853 mrp_attr_create 3 14853 NULL
+__krealloc_14857 __krealloc 2 14857 NULL nohasharray
+lcd_write_14857 lcd_write 3-0 14857 &__krealloc_14857
+ocontext_read_15178 ocontext_read 0 15178 NULL
+t4_sge_alloc_ofld_txq_15179 t4_sge_alloc_ofld_txq 0 15179 NULL
+SYSC_setdomainname_15180 SYSC_setdomainname 2 15180 NULL
++st33zp24_i2c_send_15186 st33zp24_i2c_send 4 15186 NULL
+pda_power_get_property_15191 pda_power_get_property 0 15191 NULL
+iscsi_create_endpoint_15193 iscsi_create_endpoint 1 15193 NULL nohasharray
+radeonfb_check_var_15193 radeonfb_check_var 0 15193 &iscsi_create_endpoint_15193
+mlx4_cmd_wait_15399 mlx4_cmd_wait 0 15399 NULL
+sm501fb_check_var_15402 sm501fb_check_var 0 15402 NULL
+pipeline_csum_to_rx_xfer_swi_read_15403 pipeline_csum_to_rx_xfer_swi_read 3-0 15403 NULL
++mei_amthif_run_next_cmd_15405 mei_amthif_run_next_cmd 0 15405 NULL
+get_modalias_15406 get_modalias 2-0 15406 NULL nohasharray
+nfs_setattr_15406 nfs_setattr 0 15406 &get_modalias_15406
+qlcnic_83xx_get_cap_size_15413 qlcnic_83xx_get_cap_size 0 15413 NULL
+__mutex_lock_killable_slowpath_15472 __mutex_lock_killable_slowpath 0 15472 &mtd_flags_show_15472
+snd_m3_pcm_stop_15476 snd_m3_pcm_stop 0 15476 NULL nohasharray
+snd_seq_ioctl_query_subs_15476 snd_seq_ioctl_query_subs 0 15476 &snd_m3_pcm_stop_15476
-+ath9k_get_stats_15482 ath9k_get_stats 0 15482 NULL
++ath9k_get_stats_15482 ath9k_get_stats 0 15482 NULL nohasharray
++rtl_download_firmware_15482 rtl_download_firmware 3 15482 &ath9k_get_stats_15482
+i2c_readbytes_15483 i2c_readbytes 0 15483 NULL
+cp2112_read_15484 cp2112_read 0 15484 NULL nohasharray
+target_stat_scsi_dev_attr_show_15484 target_stat_scsi_dev_attr_show 0 15484 &cp2112_read_15484
+vringh_iov_pull_user_15499 vringh_iov_pull_user 3 15499 NULL
+iolock_15500 iolock 0 15500 NULL
+psmouse_attr_set_helper_15505 psmouse_attr_set_helper 0-4 15505 NULL
-+bNumInterfaces_show_15506 bNumInterfaces_show 0 15506 NULL
++bNumInterfaces_show_15506 bNumInterfaces_show 0 15506 NULL nohasharray
++nct7904_read_reg_15506 nct7904_read_reg 0 15506 &bNumInterfaces_show_15506
+mwl8k_load_fw_image_15508 mwl8k_load_fw_image 0 15508 NULL
++pppol2tp_sendmsg_15516 pppol2tp_sendmsg 3 15516 NULL
+map_sg_15523 map_sg 0-3 15523 NULL
+da9052_rtc_read_time_15524 da9052_rtc_read_time 0 15524 NULL
+store_15525 store 0 15525 NULL
+i801_block_transaction_15562 i801_block_transaction 0 15562 NULL nohasharray
+create_capture_mixers_15562 create_capture_mixers 0 15562 &i801_block_transaction_15562
+get_checksum_15564 get_checksum 0 15564 NULL
++acpi_gpio_count_15567 acpi_gpio_count 0 15567 NULL
+iwl_nvm_read_section_15568 iwl_nvm_read_section 0 15568 NULL
+_read_user_prot_reg_15571 _read_user_prot_reg 0 15571 NULL
+persistent_status_15574 persistent_status 4 15574 NULL
+pinctrl_utils_reserve_map_15730 pinctrl_utils_reserve_map 5 15730 NULL nohasharray
+btrfs_writepage_15730 btrfs_writepage 0 15730 &pinctrl_utils_reserve_map_15730
+acpi_ex_setup_region_15734 acpi_ex_setup_region 0 15734 NULL
-+ea_alloc_skeleton_15736 ea_alloc_skeleton 0 15736 NULL
++ea_alloc_skeleton_15736 ea_alloc_skeleton 0 15736 NULL nohasharray
++tipc_msg_make_bundle_15736 tipc_msg_make_bundle 2 15736 &ea_alloc_skeleton_15736
+__tree_mod_log_insert_15744 __tree_mod_log_insert 0 15744 NULL
+efx_ptp_describe_stats_15746 efx_ptp_describe_stats 0 15746 NULL
+HiSax_readstatus_15752 HiSax_readstatus 2 15752 NULL nohasharray
+fuse_direct_read_15768 fuse_direct_read 0-3 15768 NULL
+isl1208_i2c_get_atr_15771 isl1208_i2c_get_atr 0 15771 NULL nohasharray
+chunksize_store_15771 chunksize_store 0-3 15771 &isl1208_i2c_get_atr_15771
++_mv88e6xxx_reg_read_15773 _mv88e6xxx_reg_read 0 15773 NULL
+corb_send_verb_15777 corb_send_verb 0 15777 NULL
+ipr_write_dump_15780 ipr_write_dump 0-6-5 15780 NULL
+call_modprobe_15781 call_modprobe 0 15781 NULL
+send_tx_power_15914 send_tx_power 0 15914 NULL
+can_get_xstats_size_15916 can_get_xstats_size 0 15916 NULL
+alc_build_controls_15918 alc_build_controls 0 15918 NULL
++unix_dgram_recvmsg_15920 unix_dgram_recvmsg 3 15920 NULL
+hid_hw_power_15921 hid_hw_power 0 15921 NULL
+bio_copy_kern_15925 bio_copy_kern 3 15925 NULL
+erst_exec_store_var1_15933 erst_exec_store_var1 0 15933 NULL
+si476x_core_cmd_agc_status_16027 si476x_core_cmd_agc_status 0 16027 NULL
+got_frame_16028 got_frame 2 16028 NULL
+wl1251_acx_rx_config_16034 wl1251_acx_rx_config 0 16034 NULL
++smk_write_unconfined_16041 smk_write_unconfined 3 16041 NULL
+il3945_tx_reset_16042 il3945_tx_reset 0 16042 NULL
+iscsi_stat_instance_show_attr_fail_rem_name_16045 iscsi_stat_instance_show_attr_fail_rem_name 0 16045 NULL
+show_virtual_16047 show_virtual 0 16047 NULL
+blk_init_tags_16052 blk_init_tags 1 16052 NULL nohasharray
+hidp_send_message_16052 hidp_send_message 6-0 16052 &blk_init_tags_16052
+dccp_recvmsg_16056 dccp_recvmsg 4-0 16056 NULL
-+read_file_spectral_period_16057 read_file_spectral_period 3-0 16057 NULL
++read_file_spectral_period_16057 read_file_spectral_period 3-0 16057 NULL nohasharray
++pppoe_recvmsg_16057 pppoe_recvmsg 3 16057 &read_file_spectral_period_16057
+nf_call_iptables_store_16058 nf_call_iptables_store 4-0 16058 NULL
+si5351_msynth_params_address_16062 si5351_msynth_params_address 0-1 16062 NULL
+cp2112_write_req_16068 cp2112_write_req 0-5 16068 NULL
+sctp_setsockopt_disable_fragments_16088 sctp_setsockopt_disable_fragments 0 16088 NULL
+wl1271_acx_tx_power_16092 wl1271_acx_tx_power 0 16092 NULL
+ps2pp_attr_set_smartscroll_16094 ps2pp_attr_set_smartscroll 0-4 16094 NULL
++cifs_mapchar_16097 cifs_mapchar 0 16097 NULL
+pb0100_set_gain_16099 pb0100_set_gain 0 16099 NULL
+_ctl_ioc_reset_count_show_16102 _ctl_ioc_reset_count_show 0 16102 NULL
+isr_tx_exch_complete_read_16103 isr_tx_exch_complete_read 3-0 16103 NULL nohasharray
+fuse_listxattr_16550 fuse_listxattr 0-3 16550 NULL
+nfc_llcp_send_snl_sdres_16557 nfc_llcp_send_snl_sdres 3 16557 NULL
+dib0700_i2c_xfer_16559 dib0700_i2c_xfer 0-3 16559 NULL
-+tcp_manip_pkt_16563 tcp_manip_pkt 4 16563 NULL
++tcp_manip_pkt_16563 tcp_manip_pkt 4 16563 NULL nohasharray
++mISDN_sock_sendmsg_16563 mISDN_sock_sendmsg 3 16563 &tcp_manip_pkt_16563
+wcn36xx_dxe_init_16565 wcn36xx_dxe_init 0 16565 NULL
+lpfc_debugfs_read_16566 lpfc_debugfs_read 3-0 16566 NULL
+transmit_skb_16573 transmit_skb 0 16573 NULL
+target_core_hba_attr_show_16601 target_core_hba_attr_show 0 16601 NULL nohasharray
+iscsi_stat_sess_attr_store_16601 iscsi_stat_sess_attr_store 0 16601 &target_core_hba_attr_show_16601
+ixgbe_setup_all_tx_resources_16602 ixgbe_setup_all_tx_resources 0 16602 NULL
++iwl_pcie_load_given_ucode_8000_16610 iwl_pcie_load_given_ucode_8000 0 16610 NULL
+set_analog_out_reg_16611 set_analog_out_reg 0-4 16611 NULL
+palmas_irq_get_virq_16613 palmas_irq_get_virq 2 16613 NULL nohasharray
+pptp_inbound_pkt_16613 pptp_inbound_pkt 0 16613 &palmas_irq_get_virq_16613
++rds_sendmsg_16616 rds_sendmsg 3 16616 NULL
+compat_SyS_migrate_pages_16618 compat_SyS_migrate_pages 2 16618 NULL
+show_mem_start_phys_index_16622 show_mem_start_phys_index 0 16622 NULL
+s5k83a_s_ctrl_16628 s5k83a_s_ctrl 0 16628 NULL nohasharray
+hash_elasticity_store_16673 hash_elasticity_store 4-0 16673 NULL
+smsc_ircc_net_open_16680 smsc_ircc_net_open 0 16680 NULL
+da9052_reg_write_16685 da9052_reg_write 0 16685 NULL
++iwl_mvm_fw_dbg_collect_16687 iwl_mvm_fw_dbg_collect 4 16687 NULL
+t4_set_rxmode_16689 t4_set_rxmode 0 16689 NULL
+drbd_drain_block_16697 drbd_drain_block 2 16697 NULL
+__wa_populate_dto_urb_16699 __wa_populate_dto_urb 3-4-0 16699 NULL
+mxt_load_fw_17073 mxt_load_fw 0 17073 &dvb_dvr_read_17073
+simple_transaction_read_17076 simple_transaction_read 3-0 17076 NULL
+tpm_transmit_17077 tpm_transmit 0-3 17077 NULL
-+__kmalloc_reserve_17080 __kmalloc_reserve 1 17080 NULL
++__kmalloc_reserve_17080 __kmalloc_reserve 1 17080 NULL nohasharray
++power_supply_get_property_17080 power_supply_get_property 0 17080 &__kmalloc_reserve_17080
+kovaplus_select_profile_17084 kovaplus_select_profile 0 17084 NULL
+entry_length_17093 entry_length 0 17093 NULL
+write_reg_17098 write_reg 0 17098 NULL
+UniStrnlen_17169 UniStrnlen 0 17169 NULL nohasharray
+nilfs_dat_mark_dirty_17169 nilfs_dat_mark_dirty 0 17169 &UniStrnlen_17169
+nilfs_write_begin_17172 nilfs_write_begin 0 17172 NULL nohasharray
-+ipoib_dev_init_17172 ipoib_dev_init 0 17172 &nilfs_write_begin_17172
++ipoib_dev_init_17172 ipoib_dev_init 0 17172 &nilfs_write_begin_17172 nohasharray
++cfg80211_sme_get_conn_ies_17172 cfg80211_sme_get_conn_ies 3 17172 &ipoib_dev_init_17172
+fan_set_state_17173 fan_set_state 0 17173 NULL
+l1oip_socket_send_17174 l1oip_socket_send 7 17174 NULL
+ipath_create_user_egr_17175 ipath_create_user_egr 0 17175 NULL
+dn_recvmsg_17213 dn_recvmsg 4-0 17213 NULL
+st6422_s_ctrl_17215 st6422_s_ctrl 0 17215 NULL nohasharray
+rtl8150_open_17215 rtl8150_open 0 17215 &st6422_s_ctrl_17215
++ext4_fname_crypto_alloc_buffer_17220 ext4_fname_crypto_alloc_buffer 2 17220 NULL
+ipath_user_sdma_push_pkts_17221 ipath_user_sdma_push_pkts 0 17221 NULL
+elan_i2c_prepare_fw_update_17228 elan_i2c_prepare_fw_update 0 17228 NULL
+metadata_show_17234 metadata_show 0 17234 NULL
+store_fatal_error_17242 store_fatal_error 0-4 17242 NULL
+mlx4_enable_sriov_17247 mlx4_enable_sriov 3-4 17247 NULL
+odev_attr_store_17252 odev_attr_store 0-4 17252 NULL
++remove_advertising_17253 remove_advertising 4 17253 NULL
+r3964_read_17257 r3964_read 0 17257 NULL
+__be16_to_cpup_17261 __be16_to_cpup 0 17261 NULL nohasharray
+lprocfs_read_frac_helper_17261 lprocfs_read_frac_helper 0 17261 &__be16_to_cpup_17261
+hmac_sha256_17278 hmac_sha256 2 17278 NULL
+aty_var_to_pll_18818_17279 aty_var_to_pll_18818 0 17279 NULL
+neigh_hash_grow_17283 neigh_hash_grow 2 17283 NULL nohasharray
-+rpc_pipefs_event_17283 rpc_pipefs_event 0 17283 &neigh_hash_grow_17283
++rpc_pipefs_event_17283 rpc_pipefs_event 0 17283 &neigh_hash_grow_17283 nohasharray
++ext4_fname_match_17283 ext4_fname_match 3 17283 &rpc_pipefs_event_17283
+mmc_serial_show_17285 mmc_serial_show 0 17285 NULL
+minstrel_stats_read_17290 minstrel_stats_read 3-0 17290 NULL nohasharray
+fmc_set_mute_mode_17290 fmc_set_mute_mode 0 17290 &minstrel_stats_read_17290
+show_proc_name_17464 show_proc_name 0 17464 NULL
+probe_bios_17467 probe_bios 1 17467 NULL
+show_temp_min_17471 show_temp_min 0 17471 NULL
++xfs_mod_fdblocks_17472 xfs_mod_fdblocks 0 17472 NULL
+probe_kernel_write_17481 probe_kernel_write 3 17481 NULL nohasharray
+vv6410_set_exposure_17481 vv6410_set_exposure 0 17481 &probe_kernel_write_17481
+v9fs_xattr_trusted_set_17485 v9fs_xattr_trusted_set 0 17485 NULL
+fc_vport_terminate_17513 fc_vport_terminate 0 17513 &reiserfs_direct_IO_17513
+lbs_highrssi_write_17515 lbs_highrssi_write 3-0 17515 NULL
+wl1271_acx_dco_itrim_params_17523 wl1271_acx_dco_itrim_params 0 17523 NULL
-+fsp_attr_show_flags_17527 fsp_attr_show_flags 0 17527 NULL
++fsp_attr_show_flags_17527 fsp_attr_show_flags 0 17527 NULL nohasharray
++bcmgenet_init_rx_ring_17527 bcmgenet_init_rx_ring 0 17527 &fsp_attr_show_flags_17527
+acerhdf_get_cur_state_17531 acerhdf_get_cur_state 0 17531 NULL
+show_ipInNoRoutes_17533 show_ipInNoRoutes 0 17533 NULL
+ixgbe_set_vfta_generic_17534 ixgbe_set_vfta_generic 0 17534 NULL
+nvkm_gpio_create__17601 nvkm_gpio_create_ 4 17601 NULL
+wm8994_gpio_to_irq_17604 wm8994_gpio_to_irq 2 17604 NULL
+osst_execute_17607 osst_execute 6-7 17607 NULL nohasharray
-+svc_export_parse_17607 svc_export_parse 0 17607 &osst_execute_17607
++svc_export_parse_17607 svc_export_parse 0 17607 &osst_execute_17607 nohasharray
++irda_sendmsg_ultra_17607 irda_sendmsg_ultra 3 17607 &svc_export_parse_17607
+ieee80211_if_read_dot11MeshHWMPactivePathToRootTimeout_17618 ieee80211_if_read_dot11MeshHWMPactivePathToRootTimeout 3-0 17618 NULL
+null_show_17619 null_show 0 17619 NULL
+show_selfballoon_downhys_17620 show_selfballoon_downhys 0 17620 NULL
+exofs_read_lookup_dev_table_17733 exofs_read_lookup_dev_table 3 17733 NULL nohasharray
+pcpu_alloc_area_17733 pcpu_alloc_area 0-3 17733 &exofs_read_lookup_dev_table_17733 nohasharray
+layout_show_17733 layout_show 0 17733 &pcpu_alloc_area_17733
++mv88e6xxx_port_to_phy_addr_17740 mv88e6xxx_port_to_phy_addr 0-2 17740 NULL
+sctpprobe_read_17741 sctpprobe_read 3-0 17741 NULL
+inode_setxattr_17744 inode_setxattr 0 17744 NULL
+qlcnic_sysfs_read_crb_17747 qlcnic_sysfs_read_crb 0-6-5 17747 NULL
+qlcnic_get_cap_size_18042 qlcnic_get_cap_size 0 18042 NULL
+nfs_check_inode_attributes_18043 nfs_check_inode_attributes 0 18043 NULL
+cryptd_alloc_instance_18048 cryptd_alloc_instance 3-2 18048 NULL
++find_next_inuse_18051 find_next_inuse 2 18051 NULL
+policydb_load_isids_18052 policydb_load_isids 0 18052 NULL nohasharray
+core_tpg_set_initiator_node_queue_depth_18052 core_tpg_set_initiator_node_queue_depth 0 18052 &policydb_load_isids_18052 nohasharray
+t3_config_sched_18052 t3_config_sched 0 18052 &core_tpg_set_initiator_node_queue_depth_18052
+ddebug_proc_write_18055 ddebug_proc_write 3-0 18055 NULL
+zisofs_fill_pages_18057 zisofs_fill_pages 0 18057 NULL
+max8925_enable_18058 max8925_enable 0 18058 NULL
++bcmgenet_init_rx_queues_18060 bcmgenet_init_rx_queues 0 18060 NULL
+dlfb_set_video_mode_18061 dlfb_set_video_mode 0 18061 NULL
+lua_sysfs_read_18062 lua_sysfs_read 6-0 18062 NULL nohasharray
+dccp_error_18062 dccp_error 0 18062 &lua_sysfs_read_18062
+gsm_control_message_18209 gsm_control_message 4 18209 NULL
+bq2415x_sysfs_show_limit_18213 bq2415x_sysfs_show_limit 0 18213 NULL nohasharray
+show_phy_type_18213 show_phy_type 0 18213 &bq2415x_sysfs_show_limit_18213 nohasharray
-+read_rindex_entry_18213 read_rindex_entry 0 18213 &show_phy_type_18213
++read_rindex_entry_18213 read_rindex_entry 0 18213 &show_phy_type_18213 nohasharray
++raw_recvmsg_18213 raw_recvmsg 3 18213 &read_rindex_entry_18213
+si4713_set_rds_ps_name_18214 si4713_set_rds_ps_name 0 18214 NULL
+do_ipv6_setsockopt_18215 do_ipv6_setsockopt 5-0 18215 NULL
+pcmcia_enable_device_18218 pcmcia_enable_device 0 18218 NULL
+tg3_bmcr_reset_18271 tg3_bmcr_reset 0 18271 NULL
+gfs2_alloc_sort_buffer_18275 gfs2_alloc_sort_buffer 1 18275 NULL
+ipip_get_size_18276 ipip_get_size 0 18276 NULL
++dn_recvmsg_18277 dn_recvmsg 3 18277 NULL
+alloc_ring_18278 alloc_ring 4-2 18278 NULL
+ext4_readpages_18283 ext4_readpages 4 18283 NULL
+mmc_send_bus_test_18285 mmc_send_bus_test 4 18285 NULL
+show_fnode_username_in_18293 show_fnode_username_in 0 18293 &um_idi_write_18293 nohasharray
+xfs_file_read_iter_18293 xfs_file_read_iter 0 18293 &show_fnode_username_in_18293 nohasharray
+__follow_pte_18293 __follow_pte 0 18293 &xfs_file_read_iter_18293
++ocfs2_direct_IO_18297 ocfs2_direct_IO 3 18297 NULL
+part_timeout_show_18298 part_timeout_show 0 18298 NULL
+mwl8k_sta_add_18299 mwl8k_sta_add 0 18299 NULL
+iscsi_stat_sess_err_show_attr_cxn_errors_18301 iscsi_stat_sess_err_show_attr_cxn_errors 0 18301 NULL
+SyS_process_vm_readv_18366 SyS_process_vm_readv 3-5 18366 NULL
+ep_io_18367 ep_io 0 18367 NULL nohasharray
+irq_show_18367 irq_show 0 18367 &ep_io_18367
++nf_hook_18370 nf_hook 0 18370 NULL
+qib_user_sdma_num_pages_18371 qib_user_sdma_num_pages 0 18371 NULL
+nilfs_checkpoints_README_show_18372 nilfs_checkpoints_README_show 0 18372 NULL
+usbhsg_ep_queue_18376 usbhsg_ep_queue 0 18376 NULL
+_nfs4_do_open_reclaim_18483 _nfs4_do_open_reclaim 0 18483 NULL nohasharray
+__c2port_write_flash_data_18483 __c2port_write_flash_data 0-3-4 18483 &_nfs4_do_open_reclaim_18483
+technisat_usb2_i2c_access_18484 technisat_usb2_i2c_access 0 18484 NULL
++__regulatory_set_wiphy_regd_18486 __regulatory_set_wiphy_regd 0 18486 NULL
+udpv6_setsockopt_18487 udpv6_setsockopt 5-0 18487 NULL nohasharray
+snd_pcm_plugin_build_mulaw_18487 snd_pcm_plugin_build_mulaw 0 18487 &udpv6_setsockopt_18487
+aoedisk_show_netif_18490 aoedisk_show_netif 0 18490 NULL
+mtd_size_show_18578 mtd_size_show 0 18578 NULL
+vivid_radio_read_18579 vivid_radio_read 0-3 18579 NULL
+metrics_bytes_rendered_show_18580 metrics_bytes_rendered_show 0 18580 NULL
-+pn_socket_create_18581 pn_socket_create 0 18581 NULL
++pn_socket_create_18581 pn_socket_create 0 18581 NULL nohasharray
++__tipc_sendmsg_18581 __tipc_sendmsg 3 18581 &pn_socket_create_18581
+ipath_reset_device_18584 ipath_reset_device 0 18584 NULL
+show_target_speed_18587 show_target_speed 0 18587 NULL
+st_accel_buffer_predisable_18589 st_accel_buffer_predisable 0 18589 NULL
+max_user_freq_store_18922 max_user_freq_store 0-4 18922 &xfs_buf_read_uncached_18922
+show_baseline_18929 show_baseline 0 18929 NULL
+snapshot_write_next_18937 snapshot_write_next 0 18937 NULL
-+mxl5005s_SetRfFreqHz_18939 mxl5005s_SetRfFreqHz 0 18939 NULL
++mxl5005s_SetRfFreqHz_18939 mxl5005s_SetRfFreqHz 0 18939 NULL nohasharray
++ms_transfer_data_18939 ms_transfer_data 7 18939 &mxl5005s_SetRfFreqHz_18939
+fmc_device_register_n_18942 fmc_device_register_n 2 18942 NULL
+mtrr_del_18943 mtrr_del 1 18943 NULL
+ida_get_new_18948 ida_get_new 0 18948 NULL
+show_sys_image_guid_19207 show_sys_image_guid 0 19207 NULL
+dev_counters_read_19216 dev_counters_read 3-0 19216 NULL
+wbcir_tx_19219 wbcir_tx 3 19219 NULL
++udpv6_recvmsg_19221 udpv6_recvmsg 3 19221 NULL
+nouveau_hwmon_max_temp_19222 nouveau_hwmon_max_temp 0 19222 NULL
+snd_mask_max_19224 snd_mask_max 0 19224 NULL
+_ctl_host_trace_buffer_enable_show_19227 _ctl_host_trace_buffer_enable_show 0 19227 NULL
+mmio32read__write_file_19364 mmio32read__write_file 0 19364 NULL
+ipheth_open_19366 ipheth_open 0 19366 NULL
+qlge_vlan_rx_add_vid_19385 qlge_vlan_rx_add_vid 0 19385 NULL
++p9_check_zc_errors_19389 p9_check_zc_errors 4 19389 NULL
+interpret_user_input_19393 interpret_user_input 2-0 19393 NULL
+v9fs_xattr_security_set_19396 v9fs_xattr_security_set 0 19396 NULL nohasharray
+lxt973a2_read_status_19396 lxt973a2_read_status 0 19396 &v9fs_xattr_security_set_19396
+sleep_functions_on_battery_store_19725 sleep_functions_on_battery_store 0-4 19725 NULL
+wm8350_block_write_19727 wm8350_block_write 2-3-0 19727 NULL
+target_stat_scsi_transport_show_attr_inst_19730 target_stat_scsi_transport_show_attr_inst 0 19730 NULL
++do_iter_readv_writev_19732 do_iter_readv_writev 0 19732 NULL
+iwlagn_commit_rxon_19737 iwlagn_commit_rxon 0 19737 NULL
+snd_usX2Y_usbpcm_prepare_19741 snd_usX2Y_usbpcm_prepare 0 19741 NULL
+p9_client_read_19750 p9_client_read 5-0 19750 NULL
+jffs2_acl_from_medium_19762 jffs2_acl_from_medium 2 19762 NULL
+osst_recover_wait_frame_19766 osst_recover_wait_frame 0 19766 NULL
+readhscx_19769 readhscx 0 19769 NULL nohasharray
-+i8k_get_fan_type_19769 i8k_get_fan_type 0 19769 &readhscx_19769
++i8k_get_fan_type_19769 i8k_get_fan_type 0 19769 &readhscx_19769 nohasharray
++regulatory_set_wiphy_regd_sync_rtnl_19769 regulatory_set_wiphy_regd_sync_rtnl 0 19769 &i8k_get_fan_type_19769
+flush_write_buffer_19770 flush_write_buffer 0 19770 NULL
+pch_phub_gbe_serial_rom_conf_mp_19773 pch_phub_gbe_serial_rom_conf_mp 0 19773 NULL
+ipath_f_get_base_info_19778 ipath_f_get_base_info 0 19778 NULL
+apparmor_getprocattr_19982 apparmor_getprocattr 0 19982 NULL
+snd_usbtv_card_trigger_19983 snd_usbtv_card_trigger 0 19983 NULL
+attach_hdlc_protocol_19986 attach_hdlc_protocol 3 19986 NULL
-+i40e_reserve_msix_vectors_19989 i40e_reserve_msix_vectors 2 19989 NULL nohasharray
++i40e_reserve_msix_vectors_19989 i40e_reserve_msix_vectors 2-0 19989 NULL nohasharray
+rtw_set_wps_probe_resp_19989 rtw_set_wps_probe_resp 3 19989 &i40e_reserve_msix_vectors_19989
+_osd_req_finalize_set_attr_list_19990 _osd_req_finalize_set_attr_list 0 19990 NULL nohasharray
+islpci_upload_fw_19990 islpci_upload_fw 0 19990 &_osd_req_finalize_set_attr_list_19990
+mt_show_quirks_20045 mt_show_quirks 0 20045 NULL
+show_compression_20048 show_compression 0 20048 NULL
+usX2Y_urbs_allocate_20052 usX2Y_urbs_allocate 0 20052 NULL
-+lpfc_txcmplq_hw_show_20055 lpfc_txcmplq_hw_show 0 20055 NULL
++lpfc_txcmplq_hw_show_20055 lpfc_txcmplq_hw_show 0 20055 NULL nohasharray
++nf_iterate_20055 nf_iterate 0 20055 &lpfc_txcmplq_hw_show_20055
+__be32_to_cpup_20056 __be32_to_cpup 0 20056 NULL
+roccat_common2_sysfs_write_stored_lights_20059 roccat_common2_sysfs_write_stored_lights 0-6-5 20059 NULL
+upcall_20060 upcall 0-4 20060 NULL
+init_chip_reset_20080 init_chip_reset 0 20080 &ieee802154_check_concurrent_iface_20080
+fuse_conn_limit_read_20084 fuse_conn_limit_read 3-0 20084 NULL
+aat2870_reg_write_file_20086 aat2870_reg_write_file 3-0 20086 NULL
-+reiserfs_dir_fsync_20088 reiserfs_dir_fsync 0 20088 NULL
++reiserfs_dir_fsync_20088 reiserfs_dir_fsync 0 20088 NULL nohasharray
++cma_alloc_write_20088 cma_alloc_write 2 20088 &reiserfs_dir_fsync_20088
+team_options_register_20091 team_options_register 3-0 20091 NULL nohasharray
+lpfc_poll_show_20091 lpfc_poll_show 0 20091 &team_options_register_20091 nohasharray
+rt2800pci_set_state_20091 rt2800pci_set_state 0 20091 &lpfc_poll_show_20091 nohasharray
+dn_auto_bind_20098 dn_auto_bind 0 20098 &read_int_20098
+attr_press_speed_store_tpkbd_20100 attr_press_speed_store_tpkbd 0-4 20100 NULL
+snd_es1938_playback1_trigger_20102 snd_es1938_playback1_trigger 0 20102 NULL
-+xfs_qm_dqget_20103 xfs_qm_dqget 0 20103 NULL
++xfs_qm_dqget_20103 xfs_qm_dqget 0 20103 NULL nohasharray
++mgmt_limited_event_20103 mgmt_limited_event 4 20103 &xfs_qm_dqget_20103
+fd_do_unmap_20109 fd_do_unmap 4 20109 NULL
+nilfs_segments_clean_segments_show_20115 nilfs_segments_clean_segments_show 0 20115 NULL
+iscsi_tpg_param_store_TargetAlias_20119 iscsi_tpg_param_store_TargetAlias 0-3 20119 NULL
+video_end_20205 video_end 0 20205 NULL
+bitmap_find_next_zero_area_off_20211 bitmap_find_next_zero_area_off 2-3-0-4-5-6 20211 NULL
+ds1343_read_time_20213 ds1343_read_time 0 20213 NULL
-+udf_do_extend_file_20214 udf_do_extend_file 0 20214 NULL
++udf_do_extend_file_20214 udf_do_extend_file 0 20214 NULL nohasharray
++udf_bitmap_new_block_20214 udf_bitmap_new_block 4 20214 &udf_do_extend_file_20214
+parport_uss720_epp_write_addr_20216 parport_uss720_epp_write_addr 0 20216 NULL
+dpm_suspend_noirq_20217 dpm_suspend_noirq 0 20217 NULL
+target_fabric_port_attr_show_20218 target_fabric_port_attr_show 0 20218 NULL
+async_20251 async 0 20251 NULL
+store_filter_20252 store_filter 0-4 20252 NULL
+resource_size_20256 resource_size 0 20256 NULL
-+ssd1307fb_write_array_20258 ssd1307fb_write_array 3 20258 NULL
++ssd1307fb_write_array_20258 ssd1307fb_write_array 3 20258 NULL nohasharray
++create_pnp_modalias_20258 create_pnp_modalias 0 20258 &ssd1307fb_write_array_20258
+sru_s_stream_20259 sru_s_stream 0 20259 NULL
+wl1271_boot_soft_reset_20262 wl1271_boot_soft_reset 0 20262 NULL nohasharray
+target_core_hba_attr_store_20262 target_core_hba_attr_store 0-4 20262 &wl1271_boot_soft_reset_20262
+blk_mq_hw_sysfs_queued_show_20294 blk_mq_hw_sysfs_queued_show 0 20294 NULL
+btrfs_header_nritems_20296 btrfs_header_nritems 0 20296 NULL
+do_take_over_console_20297 do_take_over_console 0 20297 NULL
++iwl_parse_nvm_mcc_info_20301 iwl_parse_nvm_mcc_info 3 20301 NULL
+r10_sync_page_io_20307 r10_sync_page_io 3 20307 NULL
+curr_bitstream_show_20308 curr_bitstream_show 0 20308 NULL
+lpfc_cr_count_show_20309 lpfc_cr_count_show 0 20309 NULL
+wacom_buttons_luminance_store_20325 wacom_buttons_luminance_store 0-4 20325 NULL
+cyapa_i2c_reg_read_block_20326 cyapa_i2c_reg_read_block 0 20326 NULL
+sys_dmi_modalias_show_20334 sys_dmi_modalias_show 0 20334 NULL
++dax_do_io_20335 dax_do_io 4 20335 NULL
+lpt_gc_20337 lpt_gc 0 20337 NULL
+patch_nvhdmi_2ch_20339 patch_nvhdmi_2ch 0 20339 NULL
+gfs2_glock_nq_m_20347 gfs2_glock_nq_m 1-0 20347 NULL
+i7core_inject_enable_store_20501 i7core_inject_enable_store 0-4 20501 NULL
+elan_sysfs_read_iap_ver_20502 elan_sysfs_read_iap_ver 0 20502 NULL
+hidraw_report_event_20503 hidraw_report_event 3 20503 NULL nohasharray
-+mcs_net_open_20503 mcs_net_open 0 20503 &hidraw_report_event_20503
++mcs_net_open_20503 mcs_net_open 0 20503 &hidraw_report_event_20503 nohasharray
++ocfs2_db_frozen_trigger_20503 ocfs2_db_frozen_trigger 4 20503 &mcs_net_open_20503
+w1_master_attribute_show_pullup_20506 w1_master_attribute_show_pullup 0 20506 NULL
+ipr_store_adapter_state_20513 ipr_store_adapter_state 0-4 20513 NULL
+i2c_atmel_recv_20516 i2c_atmel_recv 0-3 20516 NULL nohasharray
+cachefiles_daemon_frun_20577 cachefiles_daemon_frun 0 20577 NULL
+bluetooth_enable_show_20578 bluetooth_enable_show 0 20578 NULL nohasharray
+command_setcolourbalance_20578 command_setcolourbalance 0 20578 &bluetooth_enable_show_20578 nohasharray
-+wl1271_acx_sta_rate_policies_20578 wl1271_acx_sta_rate_policies 0 20578 &command_setcolourbalance_20578
++wl1271_acx_sta_rate_policies_20578 wl1271_acx_sta_rate_policies 0 20578 &command_setcolourbalance_20578 nohasharray
++nf_hook_slow_20578 nf_hook_slow 0 20578 &wl1271_acx_sta_rate_policies_20578
+xen_pci_notifier_20579 xen_pci_notifier 0 20579 NULL
+set_performance_level_20580 set_performance_level 0-4 20580 NULL
+saa711x_s_stream_20581 saa711x_s_stream 0 20581 NULL
+btrfs_qgroup_reserve_20676 btrfs_qgroup_reserve 0 20676 &snd_hdsp_playback_copy_20676
+session_write_kbytes_show_20678 session_write_kbytes_show 0 20678 NULL
+dvb_dmxdev_buffer_read_20682 dvb_dmxdev_buffer_read 0-4 20682 NULL
++cpumask_size_20683 cpumask_size 0 20683 NULL
+btrfs_node_blockptr_20685 btrfs_node_blockptr 0 20685 NULL
+store_20687 store 0 20687 NULL
+ipath_user_sdma_coalesce_20688 ipath_user_sdma_coalesce 0 20688 NULL
+nc_register_read_20875 nc_register_read 0 20875 NULL
+command_setexposure_20876 command_setexposure 0 20876 NULL
+pci_xircom_init_20881 pci_xircom_init 0 20881 NULL
++import_iovec_20882 import_iovec 0-3 20882 NULL
+ace_open_20884 ace_open 0 20884 NULL nohasharray
+cfs_cpt_table_create_20884 cfs_cpt_table_create 1 20884 &ace_open_20884
+rb_simple_write_20890 rb_simple_write 3 20890 NULL
+write_posted_21108 write_posted 0 21108 NULL
+ath6kl_send_go_probe_resp_21113 ath6kl_send_go_probe_resp 3 21113 NULL nohasharray
+cyapa_gen5_check_fw_21113 cyapa_gen5_check_fw 0 21113 &ath6kl_send_go_probe_resp_21113
++unix_dgram_sendmsg_21115 unix_dgram_sendmsg 3 21115 NULL
+target_core_show_dev_info_21116 target_core_show_dev_info 0 21116 NULL
+snd_ice1712_playback_ds_trigger_21118 snd_ice1712_playback_ds_trigger 0 21118 NULL nohasharray
+ddebug_exec_queries_21118 ddebug_exec_queries 0 21118 &snd_ice1712_playback_ds_trigger_21118 nohasharray
+i2400m_rx_trace_21127 i2400m_rx_trace 3 21127 NULL
+st_gyro_buffer_postenable_21128 st_gyro_buffer_postenable 0 21128 NULL
+iwl_dbgfs_uapsd_misbehaving_read_21129 iwl_dbgfs_uapsd_misbehaving_read 3-0 21129 NULL
++rfcomm_sock_recvmsg_21131 rfcomm_sock_recvmsg 3 21131 NULL
+snd_nm256_capture_trigger_21135 snd_nm256_capture_trigger 0 21135 NULL
+ubifs_write_iter_21137 ubifs_write_iter 0 21137 NULL
+target_core_dev_pr_show_attr_res_pr_generation_21138 target_core_dev_pr_show_attr_res_pr_generation 0 21138 NULL
-+omfs_writepage_21143 omfs_writepage 0 21143 NULL
++omfs_writepage_21143 omfs_writepage 0 21143 NULL nohasharray
++dgram_sendmsg_21143 dgram_sendmsg 3 21143 &omfs_writepage_21143
+tps6586x_irq_init_21144 tps6586x_irq_init 3 21144 NULL
+aoedisk_show_payload_21147 aoedisk_show_payload 0 21147 NULL
+new_skb_21148 new_skb 1 21148 NULL
++ocfs2_block_check_validate_21149 ocfs2_block_check_validate 2 21149 NULL
+dgram_disconnect_21152 dgram_disconnect 0 21152 NULL
+rtl2830_regmap_gather_write_21153 rtl2830_regmap_gather_write 0 21153 NULL
+sisfb_set_mode_21155 sisfb_set_mode 0 21155 NULL
+firmware_data_read_21488 firmware_data_read 0-5-6 21488 NULL
+set_postcode_21490 set_postcode 0-4 21490 NULL
+security_list_21491 security_list 0-5 21491 NULL
++dccp_recvmsg_21496 dccp_recvmsg 3 21496 NULL
+ads7846_read12_ser_21501 ads7846_read12_ser 0 21501 NULL
+force_bredr_smp_write_21502 force_bredr_smp_write 3-0 21502 NULL
+mmc_alloc_sg_21504 mmc_alloc_sg 1 21504 NULL
+ipv6_confirm_21743 ipv6_confirm 0 21743 NULL
+__nf_nat_mangle_tcp_packet_21744 __nf_nat_mangle_tcp_packet 6-8 21744 NULL nohasharray
+at91_open_21744 at91_open 0 21744 &__nf_nat_mangle_tcp_packet_21744
-+__scsi_format_command_21749 __scsi_format_command 2 21749 NULL
++__scsi_format_command_21749 __scsi_format_command 2 21749 NULL nohasharray
++ocfs2_direct_IO_extend_no_holes_21749 ocfs2_direct_IO_extend_no_holes 0-3 21749 &__scsi_format_command_21749
+set_sticky_21752 set_sticky 0-4 21752 NULL
+mthca_alloc_init_21754 mthca_alloc_init 2 21754 NULL
+l2down_create_21755 l2down_create 4 21755 NULL
+libipw_get_hdrlen_21792 libipw_get_hdrlen 0 21792 NULL nohasharray
+_cx88_start_audio_dma_21792 _cx88_start_audio_dma 0 21792 &libipw_get_hdrlen_21792
+d3cold_allowed_show_21797 d3cold_allowed_show 0 21797 NULL
-+aa_may_ptrace_21798 aa_may_ptrace 0 21798 NULL
++aa_may_ptrace_21798 aa_may_ptrace 0 21798 NULL nohasharray
++crypto_sha1_finup_21798 crypto_sha1_finup 0 21798 &aa_may_ptrace_21798
+show_pwm_auto_point_temp_hyst_21800 show_pwm_auto_point_temp_hyst 0 21800 NULL
+min_odd_21802 min_odd 0-1-2 21802 NULL
+show_rotate_21803 show_rotate 0 21803 NULL
+qib_portattr_store_21817 qib_portattr_store 0-4 21817 NULL nohasharray
+__kernel_write_21817 __kernel_write 3-0 21817 &qib_portattr_store_21817
+ov9740_g_crop_21818 ov9740_g_crop 0 21818 NULL
++mei_io_cb_alloc_buf_21819 mei_io_cb_alloc_buf 2 21819 NULL
+wm8994_request_irq_21822 wm8994_request_irq 2 21822 NULL
+lm95234_fill_cache_21823 lm95234_fill_cache 0 21823 NULL
+mtd_ecc_stats_errors_show_21825 mtd_ecc_stats_errors_show 0 21825 NULL nohasharray
+nf_ct_seq_adjust_22086 nf_ct_seq_adjust 4 22086 NULL
+acerhdf_get_mode_22088 acerhdf_get_mode 0 22088 NULL
+niu_init_one_rx_channel_22095 niu_init_one_rx_channel 0 22095 NULL
++ocfs2_extend_allocation_22096 ocfs2_extend_allocation 0 22096 NULL
+ext3_setattr_22100 ext3_setattr 0 22100 NULL
+portio_name_show_22101 portio_name_show 0 22101 NULL
+rndis_error_status_22103 rndis_error_status 0 22103 NULL nohasharray
+__vlan_device_event_22159 __vlan_device_event 0 22159 NULL
+show_otp2en_22160 show_otp2en 0 22160 NULL
+set_pwm_enable_22161 set_pwm_enable 0-4 22161 NULL
++devm_ioremap_wc_22162 devm_ioremap_wc 2-3 22162 NULL
+pm8001_phy_control_22163 pm8001_phy_control 0 22163 NULL nohasharray
+store_pwm_interpolate_22163 store_pwm_interpolate 0-4 22163 &pm8001_phy_control_22163
+lx_hardware_open_22166 lx_hardware_open 0 22166 NULL
+dccp_disconnect_22174 dccp_disconnect 0 22174 NULL
+beiscsi_adap_family_disp_22179 beiscsi_adap_family_disp 0 22179 NULL nohasharray
+nf_nat_ipv6_in_22179 nf_nat_ipv6_in 0 22179 &beiscsi_adap_family_disp_22179
-+iscsi_disc_show_userid_mutual_22181 iscsi_disc_show_userid_mutual 0 22181 NULL
++iscsi_disc_show_userid_mutual_22181 iscsi_disc_show_userid_mutual 0 22181 NULL nohasharray
++hid_sensor_custom_read_22181 hid_sensor_custom_read 3 22181 &iscsi_disc_show_userid_mutual_22181
+channel_dimm_label_store_22189 channel_dimm_label_store 0-4 22189 NULL
+xen_acpi_processor_resume_22190 xen_acpi_processor_resume 0 22190 NULL
+tps80031_rtc_alarm_irq_enable_22198 tps80031_rtc_alarm_irq_enable 0 22198 NULL
+mutex_lock_interruptible_22505 mutex_lock_interruptible 0 22505 NULL nohasharray
+asd_version_show_22505 asd_version_show 0 22505 &mutex_lock_interruptible_22505
+fan_pwm1_store_22510 fan_pwm1_store 0-4 22510 NULL
++sha512_ssse3_finup_22514 sha512_ssse3_finup 0 22514 NULL
+trim_no_bitmap_22524 trim_no_bitmap 4-3 22524 NULL
+attr_press_to_select_store_tpkbd_22525 attr_press_to_select_store_tpkbd 0-4 22525 NULL
+snd_cx23885_prepare_22528 snd_cx23885_prepare 0 22528 NULL
+btrfs_delalloc_reserve_space_22617 btrfs_delalloc_reserve_space 0 22617 NULL
+bootflag_get_22618 bootflag_get 0 22618 NULL
+qlcnic_pci_sriov_disable_22622 qlcnic_pci_sriov_disable 0 22622 NULL
++iwl_dbgfs_rx_phyinfo_read_22625 iwl_dbgfs_rx_phyinfo_read 3 22625 NULL
+_maybe_not_all_in_one_io_22626 _maybe_not_all_in_one_io 0 22626 NULL
+sctp_setsockopt_connectx_old_22631 sctp_setsockopt_connectx_old 3-0 22631 NULL
+v9fs_vfs_getattr_dotl_22632 v9fs_vfs_getattr_dotl 0 22632 NULL
+ecryptfs_write_metadata_to_contents_22721 ecryptfs_write_metadata_to_contents 3 22721 &qlcnic_83xx_lockless_flash_read32_22721
+mxuport_send_ctrl_urb_22723 mxuport_send_ctrl_urb 0 22723 NULL
+channel_dimm_label_show_22728 channel_dimm_label_show 0 22728 NULL nohasharray
-+acpi_ex_get_name_string_22728 acpi_ex_get_name_string 0 22728 &channel_dimm_label_show_22728
++acpi_ex_get_name_string_22728 acpi_ex_get_name_string 0 22728 &channel_dimm_label_show_22728 nohasharray
++ext4_mpage_readpages_22728 ext4_mpage_readpages 0-4 22728 &acpi_ex_get_name_string_22728
+filename_trans_read_22730 filename_trans_read 0 22730 NULL
+cx18_copy_buf_to_user_22735 cx18_copy_buf_to_user 4-0 22735 NULL nohasharray
+show_filter_22735 show_filter 0 22735 &cx18_copy_buf_to_user_22735 nohasharray
+__mlx4_cq_alloc_icm_22735 __mlx4_cq_alloc_icm 0 22735 &show_filter_22735
+ax25_output_22736 ax25_output 2 22736 NULL
++xenbus_map_ring_valloc_pv_22737 xenbus_map_ring_valloc_pv 3 22737 NULL
+ceph_decode_32_22738 ceph_decode_32 0 22738 NULL nohasharray
+__mei_cl_send_22738 __mei_cl_send 3 22738 &ceph_decode_32_22738
+__writeback_single_inode_22739 __writeback_single_inode 0 22739 NULL
+smb_set_file_info_22880 smb_set_file_info 0 22880 NULL
+pxa_ep_enable_22883 pxa_ep_enable 0 22883 NULL
+vmw_execbuf_process_22885 vmw_execbuf_process 5 22885 NULL nohasharray
-+show_counter_tx_flow_stalls_22885 show_counter_tx_flow_stalls 0 22885 &vmw_execbuf_process_22885
++show_counter_tx_flow_stalls_22885 show_counter_tx_flow_stalls 0 22885 &vmw_execbuf_process_22885 nohasharray
++_mv88e6xxx_phy_read_indirect_22885 _mv88e6xxx_phy_read_indirect 0 22885 &show_counter_tx_flow_stalls_22885
+set_phy_speed_22886 set_phy_speed 0 22886 NULL
+show_green_22889 show_green 0 22889 NULL
+v9fs_direct_write_22891 v9fs_direct_write 0-3 22891 NULL
+iwl_mvm_rm_sta_common_22994 iwl_mvm_rm_sta_common 0 22994 &show_pwm_temp_sel_common_22994
+nouveau_hwmon_show_temp1_auto_point1_pwm_22996 nouveau_hwmon_show_temp1_auto_point1_pwm 0 22996 NULL
+pcan_usb_pro_set_silent_23000 pcan_usb_pro_set_silent 0 23000 NULL
++pfkey_sendmsg_23002 pfkey_sendmsg 3 23002 NULL
+ubifs_find_free_leb_for_idx_23003 ubifs_find_free_leb_for_idx 0 23003 NULL
+tw68_start_streaming_23004 tw68_start_streaming 0 23004 NULL
+dig_playback_pcm_prepare_23006 dig_playback_pcm_prepare 0 23006 NULL
+sctp_recvmsg_23265 sctp_recvmsg 4-0 23265 NULL nohasharray
+intel_map_sg_23265 intel_map_sg 0-3 23265 &sctp_recvmsg_23265
+alg_bind_23268 alg_bind 0 23268 NULL
++sha512_base_do_update_23270 sha512_base_do_update 0 23270 NULL
+lan87xx_read_status_23278 lan87xx_read_status 0 23278 NULL
+remove_ftrace_ops_23280 remove_ftrace_ops 0 23280 NULL
+uwb_dev_addr_print_23282 uwb_dev_addr_print 2 23282 NULL
+fscache_fsdef_netfs_get_key_23368 fscache_fsdef_netfs_get_key 0 23368 NULL
+fd_setup_write_same_buf_23369 fd_setup_write_same_buf 3 23369 NULL
+rawv6_send_hdrinc_23370 rawv6_send_hdrinc 3 23370 NULL
++iwl_pcie_rsa_race_bug_wa_23375 iwl_pcie_rsa_race_bug_wa 0 23375 NULL
+bonding_sysfs_store_option_23382 bonding_sysfs_store_option 0-4 23382 NULL
+fc0011_writereg_23383 fc0011_writereg 0 23383 NULL
++pppoe_sendmsg_23391 pppoe_sendmsg 3 23391 NULL
+kobil_write_23392 kobil_write 0-4 23392 NULL
+jffs2_listxattr_23402 jffs2_listxattr 0-3 23402 NULL nohasharray
+s_ctrl_23402 s_ctrl 0 23402 &jffs2_listxattr_23402
+lis3lv02d_selftest_show_24139 lis3lv02d_selftest_show 0 24139 &irnet_ctrl_write_24139 nohasharray
+xfs_btree_increment_24139 xfs_btree_increment 0 24139 &lis3lv02d_selftest_show_24139
+ov9650_s_ctrl_24141 ov9650_s_ctrl 0 24141 NULL
-+mem_cgroup_can_attach_24142 mem_cgroup_can_attach 0 24142 NULL
++mem_cgroup_can_attach_24142 mem_cgroup_can_attach 0 24142 NULL nohasharray
++unix_seqpacket_recvmsg_24142 unix_seqpacket_recvmsg 3 24142 &mem_cgroup_can_attach_24142
+cx24123_tuner_i2c_tuner_xfer_24143 cx24123_tuner_i2c_tuner_xfer 0-3 24143 NULL nohasharray
+attr_dragging_show_tpkbd_24143 attr_dragging_show_tpkbd 0 24143 &cx24123_tuner_i2c_tuner_xfer_24143
+__niu_wait_bits_clear_24147 __niu_wait_bits_clear 0 24147 NULL
+toshiba_usb_three_set_24183 toshiba_usb_three_set 0 24183 &adv7343_write_24183
+ql_configure_rings_24184 ql_configure_rings 0 24184 NULL
+safe_prepare_write_buffer_24187 safe_prepare_write_buffer 3 24187 NULL
++ext4_match_24188 ext4_match 3 24188 NULL
+resource_show_24189 resource_show 0 24189 NULL
+po1030_set_blue_balance_24191 po1030_set_blue_balance 0 24191 NULL
+irq_remapping_setup_msi_irqs_24194 irq_remapping_setup_msi_irqs 2 24194 NULL
+azx_pcm_prepare_24285 azx_pcm_prepare 0 24285 NULL nohasharray
+power_limit_1_max_uw_show_24285 power_limit_1_max_uw_show 0 24285 &azx_pcm_prepare_24285
+msg_size_24288 msg_size 0 24288 NULL
++__dm_get_module_param_24291 __dm_get_module_param 0-3-2 24291 NULL
+ext2_free_blocks_24292 ext2_free_blocks 3-2 24292 NULL
+i2c_smbus_check_pec_24297 i2c_smbus_check_pec 0 24297 NULL
+map_page_24298 map_page 3-4 24298 NULL
+C_SYSC_pwritev_24345 C_SYSC_pwritev 3 24345 NULL
+nf_iterate_24348 nf_iterate 0 24348 NULL
+prepare_pages_24349 prepare_pages 0 24349 NULL
++rhashtable_insert_slow_24350 rhashtable_insert_slow 0 24350 NULL
+kzalloc_node_24352 kzalloc_node 1 24352 NULL
+roccat_common2_sysfs_read_macro_24355 roccat_common2_sysfs_read_macro 0-5-6 24355 NULL
+lp3972_i2c_read_24364 lp3972_i2c_read 0 24364 NULL
+pps_show_24748 pps_show 0 24748 NULL
+get_dma_residue_24749 get_dma_residue 0 24749 NULL nohasharray
+commit_rxon_24749 commit_rxon 0 24749 &get_dma_residue_24749
++ntfs_copy_from_user_iter_24753 ntfs_copy_from_user_iter 5-3 24753 NULL
+kgdb_hex2mem_24755 kgdb_hex2mem 3 24755 NULL
+ddp_device_event_24756 ddp_device_event 0 24756 NULL
+get_temp_max_hyst_24757 get_temp_max_hyst 0 24757 NULL
+mlx4_SET_PORT_general_24788 mlx4_SET_PORT_general 0 24788 &pb0100_s_ctrl_24788
+cache_read_24790 cache_read 3-0 24790 NULL
+i915_gem_check_wedge_24793 i915_gem_check_wedge 0 24793 NULL
++st33zp24_spi_recv_24795 st33zp24_spi_recv 4 24795 NULL
+user_regset_copyout_24796 user_regset_copyout 7 24796 NULL nohasharray
+show_unchecked_isa_dma_24796 show_unchecked_isa_dma 0 24796 &user_regset_copyout_24796
+register_bcache_24797 register_bcache 0-4 24797 NULL
+comedi_buf_alloc_24822 comedi_buf_alloc 3 24822 NULL
+ndo_get_phys_port_id_24825 ndo_get_phys_port_id 0 24825 NULL
+brport_show_24827 brport_show 0 24827 NULL
++lfib_nlmsg_size_24828 lfib_nlmsg_size 0 24828 NULL
+cuse_class_abort_store_24829 cuse_class_abort_store 0-4 24829 NULL
+rpf_s_stream_24830 rpf_s_stream 0 24830 NULL
+__logfs_truncate_24831 __logfs_truncate 0 24831 NULL
+hci_req_add_ev_25115 hci_req_add_ev 3 25115 NULL nohasharray
+acpi_ex_create_method_25115 acpi_ex_create_method 0 25115 &hci_req_add_ev_25115 nohasharray
+smb2_reconnect_25115 smb2_reconnect 0 25115 &acpi_ex_create_method_25115
++rxrpc_recvmsg_25121 rxrpc_recvmsg 3 25121 NULL
+wl18xx_acx_set_checksum_state_25124 wl18xx_acx_set_checksum_state 0 25124 NULL
+lpfc_ack0_show_25126 lpfc_ack0_show 0 25126 NULL
+caif_connect_client_25127 caif_connect_client 0 25127 NULL nohasharray
+show_thresh_either_en_25218 show_thresh_either_en 0 25218 NULL
+open_rx_first_25220 open_rx_first 0 25220 NULL
+security_socket_post_create_25221 security_socket_post_create 0 25221 NULL
++ocfs2_block_check_compute_25223 ocfs2_block_check_compute 2 25223 NULL
+b43legacy_op_get_stats_25225 b43legacy_op_get_stats 0 25225 NULL
+ieee80211_start_tx_ba_session_25229 ieee80211_start_tx_ba_session 0 25229 NULL
+sonypi_misc_read_25230 sonypi_misc_read 0-3 25230 NULL
+panel_power_on_store_25422 panel_power_on_store 0-4 25422 NULL
+pinctrl_gpio_direction_25423 pinctrl_gpio_direction 0 25423 NULL
+v4l2_m2m_dqbuf_25427 v4l2_m2m_dqbuf 0 25427 NULL
++netlink_sendmsg_25428 netlink_sendmsg 3 25428 NULL
+snd_pcm_lib_ioctl_reset_25437 snd_pcm_lib_ioctl_reset 0 25437 NULL
+target_core_dev_wwn_show_attr_vpd_assoc_target_port_25438 target_core_dev_wwn_show_attr_vpd_assoc_target_port 0 25438 NULL
+pcmcia_store_new_id_25439 pcmcia_store_new_id 0-3 25439 NULL
+do_tcp_setsockopt_25495 do_tcp_setsockopt 0 25495 &dev_show_unique_id_25495
+generic_hdmi_build_jack_25496 generic_hdmi_build_jack 0 25496 NULL
+beiscsi_get_host_param_25497 beiscsi_get_host_param 0 25497 NULL
-+llc_ui_setsockopt_25501 llc_ui_setsockopt 0 25501 NULL
++llc_ui_setsockopt_25501 llc_ui_setsockopt 0 25501 NULL nohasharray
++ocfs2_hamming_encode_25501 ocfs2_hamming_encode 3 25501 &llc_ui_setsockopt_25501
+ivtv_buf_copy_from_user_25502 ivtv_buf_copy_from_user 4-0 25502 NULL
+snd_pcm_plugin_build_25505 snd_pcm_plugin_build 5-0 25505 NULL nohasharray
+__orinoco_hw_set_wap_25505 __orinoco_hw_set_wap 0 25505 &snd_pcm_plugin_build_25505
+blk_mq_sysfs_rq_list_show_26028 blk_mq_sysfs_rq_list_show 0 26028 NULL
+do_sas_phy_reset_26034 do_sas_phy_reset 0-2 26034 NULL nohasharray
+bdc_gadget_ep_queue_26034 bdc_gadget_ep_queue 0 26034 &do_sas_phy_reset_26034
-+bad_inode_setxattr_26035 bad_inode_setxattr 0 26035 NULL
++bad_inode_setxattr_26035 bad_inode_setxattr 0 26035 NULL nohasharray
++ntfs_perform_write_26035 ntfs_perform_write 3 26035 &bad_inode_setxattr_26035
+selinux_inode_post_setxattr_26037 selinux_inode_post_setxattr 4 26037 NULL nohasharray
+rt2x00debug_read_dev_flags_26037 rt2x00debug_read_dev_flags 0-3 26037 &selinux_inode_post_setxattr_26037
+show_fnode_data_seq_in_order_26041 show_fnode_data_seq_in_order 0 26041 NULL
+skb_cow_26138 skb_cow 2 26138 NULL
+video_get_cur_state_26142 video_get_cur_state 0 26142 NULL
+func_id_show_26143 func_id_show 0 26143 NULL
-+core_alua_store_tg_pt_gp_info_26144 core_alua_store_tg_pt_gp_info 0-3 26144 NULL
++core_alua_store_tg_pt_gp_info_26144 core_alua_store_tg_pt_gp_info 0-3 26144 NULL nohasharray
++chaoskey_read_26144 chaoskey_read 3 26144 &core_alua_store_tg_pt_gp_info_26144
+ath9k_hw_name_26146 ath9k_hw_name 3 26146 NULL
+ivtv_sendbyte_26147 ivtv_sendbyte 0 26147 NULL nohasharray
+ufshcd_devfreq_target_26147 ufshcd_devfreq_target 0 26147 &ivtv_sendbyte_26147
+cx23885_start_streaming_26406 cx23885_start_streaming 0 26406 NULL
+firmware_store_26408 firmware_store 4-0 26408 NULL
+lx_pcm_trigger_dispatch_26419 lx_pcm_trigger_dispatch 0 26419 NULL nohasharray
-+bl_prepare_layoutcommit_26419 bl_prepare_layoutcommit 0 26419 &lx_pcm_trigger_dispatch_26419
++bl_prepare_layoutcommit_26419 bl_prepare_layoutcommit 0 26419 &lx_pcm_trigger_dispatch_26419 nohasharray
++serial2002_tty_write_26419 serial2002_tty_write 3 26419 &bl_prepare_layoutcommit_26419
+br_nf_post_routing_26421 br_nf_post_routing 0 26421 NULL
+virtual_start_show_26424 virtual_start_show 0 26424 NULL
+erst_exec_add_26425 erst_exec_add 0 26425 NULL nohasharray
+iwl_dbgfs_rf_reset_read_26512 iwl_dbgfs_rf_reset_read 3-0 26512 NULL
+l2cap_build_conf_req_26513 l2cap_build_conf_req 0 26513 NULL
+retu_regmap_write_26516 retu_regmap_write 0 26516 NULL nohasharray
-+ths7303_s_dv_timings_26516 ths7303_s_dv_timings 0 26516 &retu_regmap_write_26516
++ths7303_s_dv_timings_26516 ths7303_s_dv_timings 0 26516 &retu_regmap_write_26516 nohasharray
++mv88e6xxx_phy_wait_26516 mv88e6xxx_phy_wait 0 26516 &ths7303_s_dv_timings_26516
+cxacru_sysfs_show_line_status_26518 cxacru_sysfs_show_line_status 0 26518 NULL
+alloc_ep_req_26521 alloc_ep_req 3-2 26521 NULL
+portio_size_show_26525 portio_size_show 0 26525 NULL
+mem_cgroup_oom_control_write_26619 mem_cgroup_oom_control_write 0 26619 NULL
+iommu_alloc_26621 iommu_alloc 4 26621 NULL
+aa_change_profile_26624 aa_change_profile 0 26624 NULL
++iwl_mvm_init_mcc_26625 iwl_mvm_init_mcc 0 26625 NULL
+pwr_fix_tsf_ps_read_26627 pwr_fix_tsf_ps_read 3-0 26627 NULL
+nouveau_hwmon_set_max_temp_26628 nouveau_hwmon_set_max_temp 0-4 26628 NULL
+si4713_set_rds_radio_text_26629 si4713_set_rds_radio_text 0 26629 NULL
+show_in_input0_26705 show_in_input0 0 26705 NULL nohasharray
+amd_xgbe_phy_soft_reset_26705 amd_xgbe_phy_soft_reset 0 26705 &show_in_input0_26705 nohasharray
+uwb_dev_RSSI_store_26705 uwb_dev_RSSI_store 0-4 26705 &amd_xgbe_phy_soft_reset_26705
++xenbus_map_ring_valloc_hvm_26709 xenbus_map_ring_valloc_hvm 3 26709 NULL
+cx18_av_s_stream_26713 cx18_av_s_stream 0 26713 NULL nohasharray
+rtllib_authentication_req_26713 rtllib_authentication_req 3 26713 &cx18_av_s_stream_26713
+yellowfin_init_ring_26714 yellowfin_init_ring 0 26714 NULL
+b43legacy_attr_preamble_show_26740 b43legacy_attr_preamble_show 0 26740 NULL nohasharray
+osst_probe_26740 osst_probe 0 26740 &b43legacy_attr_preamble_show_26740
+pipeline_tcp_rx_stat_fifo_int_read_26745 pipeline_tcp_rx_stat_fifo_int_read 3-0 26745 NULL
++mpls_rt_alloc_26748 mpls_rt_alloc 1 26748 NULL
+bcm87xx_read_status_26749 bcm87xx_read_status 0 26749 NULL
+virtscsi_change_queue_depth_26751 virtscsi_change_queue_depth 2-0 26751 NULL
+msg_from_mpoad_26753 msg_from_mpoad 0 26753 NULL nohasharray
+bond_slave_netdev_event_26777 bond_slave_netdev_event 0 26777 NULL
+inotify_read_26778 inotify_read 0-3 26778 NULL
+dma_map_single_attrs_26779 dma_map_single_attrs 0 26779 NULL
++resize_platform_label_table_26780 resize_platform_label_table 2 26780 NULL
+read_port_26787 read_port 0-3 26787 NULL
+store_bank1_mask_26793 store_bank1_mask 0-4 26793 NULL
+compat_sys_recv_26794 compat_sys_recv 3 26794 NULL
+ecryptfs_miscdev_write_26847 ecryptfs_miscdev_write 3-0 26847 NULL
+ss_alloc_ep_req_26848 ss_alloc_ep_req 2 26848 NULL
+gx_frame_buffer_size_26851 gx_frame_buffer_size 0 26851 NULL
++nfs_post_op_update_inode_locked_26852 nfs_post_op_update_inode_locked 0 26852 NULL
+core_tpg_set_initiator_node_tag_26853 core_tpg_set_initiator_node_tag 0 26853 NULL nohasharray
+ipath_f_set_ib_cfg_26853 ipath_f_set_ib_cfg 0 26853 &core_tpg_set_initiator_node_tag_26853
+sisusb_read_26856 sisusb_read 0-3 26856 NULL
+lx_dsp_set_granularity_26954 lx_dsp_set_granularity 0 26954 NULL
+mesh_id_set_26957 mesh_id_set 0-4 26957 NULL
+adp8870_bl_ambient_light_zone_store_26959 adp8870_bl_ambient_light_zone_store 0-4 26959 NULL
-+ext4_xattr_user_get_26961 ext4_xattr_user_get 0 26961 NULL
++ext4_xattr_user_get_26961 ext4_xattr_user_get 0 26961 NULL nohasharray
++add_fake_paths_26961 add_fake_paths 0 26961 &ext4_xattr_user_get_26961
+trackpoint_set_bit_attr_26969 trackpoint_set_bit_attr 0-4 26969 NULL
+tb_path_alloc_26976 tb_path_alloc 2 26976 NULL nohasharray
+lpfc_enable_hba_reset_show_26976 lpfc_enable_hba_reset_show 0 26976 &tb_path_alloc_26976
+hotkey_mask_show_27048 hotkey_mask_show 0 27048 NULL
+sc16is7xx_port_read_27051 sc16is7xx_port_read 0 27051 NULL
+show_fnode_discovery_parent_idx_27053 show_fnode_discovery_parent_idx 0 27053 NULL
-+ufs_alloc_fragments_27059 ufs_alloc_fragments 3-0-2 27059 NULL
++ufs_alloc_fragments_27059 ufs_alloc_fragments 3-0-2 27059 NULL nohasharray
++snd_ctl_new_27059 snd_ctl_new 2 27059 &ufs_alloc_fragments_27059
+group_store_27061 group_store 4-0 27061 NULL
+__videobuf_alloc_vb_27062 __videobuf_alloc_vb 1 27062 NULL
+proc_fd_permission_27063 proc_fd_permission 0 27063 NULL
+mt9t031_g_crop_27191 mt9t031_g_crop 0 27191 NULL
+freeze_fs_27192 freeze_fs 0 27192 NULL
+r852_media_type_show_27193 r852_media_type_show 0 27193 NULL
++hfs_direct_IO_27195 hfs_direct_IO 3 27195 NULL
+vmci_transport_notify_pkt_recv_init_27208 vmci_transport_notify_pkt_recv_init 0 27208 NULL
+toggle_hdmi_source_27212 toggle_hdmi_source 0-4 27212 NULL
+target_stat_scsi_lu_show_attr_dev_type_27222 target_stat_scsi_lu_show_attr_dev_type 0 27222 NULL
+wl1251_hw_init_rx_config_27393 wl1251_hw_init_rx_config 0 27393 NULL
+init_memory_mapping_27395 init_memory_mapping 0 27395 NULL
+padata_sysfs_store_27398 padata_sysfs_store 0-4 27398 NULL
++parser_init_byte_stream_27399 parser_init_byte_stream 2 27399 NULL
+if_nlmsg_size_27404 if_nlmsg_size 0 27404 NULL
+tcm_qla2xxx_tpg_attrib_store_demo_mode_login_only_27405 tcm_qla2xxx_tpg_attrib_store_demo_mode_login_only 0-3 27405 NULL
+seq_read_27411 seq_read 3-0 27411 NULL nohasharray
+bio_next_split_27961 bio_next_split 2 27961 NULL nohasharray
+tracing_clock_write_27961 tracing_clock_write 3 27961 &bio_next_split_27961
+ec168_ctrl_msg_27963 ec168_ctrl_msg 0 27963 NULL
++snd_hdac_bus_exec_verb_unlocked_27964 snd_hdac_bus_exec_verb_unlocked 0 27964 NULL
+tipc_media_addr_printf_27971 tipc_media_addr_printf 2 27971 NULL nohasharray
+nfs4_read_cached_acl_27971 nfs4_read_cached_acl 0 27971 &tipc_media_addr_printf_27971
+mic_rx_pkts_read_27972 mic_rx_pkts_read 3-0 27972 NULL nohasharray
+acpi_register_gsi_xen_28305 acpi_register_gsi_xen 2 28305 &nouveau_compat_ioctl_28305
+print_fw_version_28310 print_fw_version 0 28310 NULL
+phys_switch_id_show_28314 phys_switch_id_show 0 28314 NULL
-+adp5520_bl_office_max_store_28316 adp5520_bl_office_max_store 4-0 28316 NULL
++adp5520_bl_office_max_store_28316 adp5520_bl_office_max_store 4-0 28316 NULL nohasharray
++do_loop_readv_writev_28316 do_loop_readv_writev 0 28316 &adp5520_bl_office_max_store_28316
+snd_pcm_oss_read_28317 snd_pcm_oss_read 3-0 28317 NULL nohasharray
+il4965_show_temperature_28317 il4965_show_temperature 0 28317 &snd_pcm_oss_read_28317
+generic_access_phys_28318 generic_access_phys 2-4 28318 NULL
+ocfs2_backup_super_blkno_28484 ocfs2_backup_super_blkno 0-2 28484 NULL nohasharray
+tty_read_28484 tty_read 0-3 28484 &ocfs2_backup_super_blkno_28484
+__filemap_fdatawrite_28485 __filemap_fdatawrite 0 28485 NULL
-+coda_revalidate_inode_28489 coda_revalidate_inode 0 28489 NULL
++coda_revalidate_inode_28489 coda_revalidate_inode 0 28489 NULL nohasharray
++udp_uncompress_28489 udp_uncompress 2 28489 &coda_revalidate_inode_28489
+max_response_pages_28492 max_response_pages 0 28492 NULL
+pxa168_eth_set_mac_address_28494 pxa168_eth_set_mac_address 0 28494 NULL
+snd_interval_refine_max_28498 snd_interval_refine_max 0 28498 NULL
+au6610_i2c_xfer_28645 au6610_i2c_xfer 0-3 28645 NULL
+jfs_statfs_28649 jfs_statfs 0 28649 NULL
+byte_read_data_28650 byte_read_data 0 28650 NULL
-+p9_fcall_alloc_28652 p9_fcall_alloc 1 28652 NULL
++p9_fcall_alloc_28652 p9_fcall_alloc 1 28652 NULL nohasharray
++sco_sock_recvmsg_28652 sco_sock_recvmsg 3 28652 &p9_fcall_alloc_28652
+nilfs_construct_dsync_segment_28656 nilfs_construct_dsync_segment 0 28656 NULL
+dpm_suspend_28657 dpm_suspend 0 28657 NULL
+fsnotify_add_event_28660 fsnotify_add_event 0 28660 NULL
+tcp_cgroup_write_28723 tcp_cgroup_write 0-3 28723 NULL
+ip6_pkt_discard_out_28724 ip6_pkt_discard_out 0 28724 NULL
+spi_sync_locked_28726 spi_sync_locked 0 28726 NULL
++cxgb4_write_rss_28727 cxgb4_write_rss 0 28727 NULL
+drm_plane_init_28731 drm_plane_init 6 28731 NULL nohasharray
+nfs_revalidate_file_size_28731 nfs_revalidate_file_size 0 28731 &drm_plane_init_28731
+spi_execute_28736 spi_execute 5 28736 NULL
++add_advertising_28737 add_advertising 4 28737 NULL
+snd_pcm_aio_write_28738 snd_pcm_aio_write 3-0 28738 NULL nohasharray
+mwifiex_cmd_tx_rate_cfg_28738 mwifiex_cmd_tx_rate_cfg 0 28738 &snd_pcm_aio_write_28738
+switch_channel_28739 switch_channel 0 28739 NULL
+input_dev_show_phys_28859 input_dev_show_phys 0 28859 NULL
+smack_ipv4_output_28860 smack_ipv4_output 0 28860 NULL
+e100_self_test_28862 e100_self_test 0 28862 NULL
++create_of_modalias_28866 create_of_modalias 0 28866 NULL
+ipv6_renew_options_28867 ipv6_renew_options 5 28867 NULL
+profile_init_28870 profile_init 0 28870 NULL
+b43_gphy_op_interf_mitigation_28872 b43_gphy_op_interf_mitigation 0 28872 NULL
+walk_tg_tree_from_28923 walk_tg_tree_from 0 28923 NULL
+ps_upsd_timeouts_read_28924 ps_upsd_timeouts_read 3-0 28924 NULL
+iwl_dbgfs_sleep_level_override_write_28925 iwl_dbgfs_sleep_level_override_write 3-0 28925 NULL
++ocfs2_frozen_trigger_28929 ocfs2_frozen_trigger 4 28929 NULL
+__ext2_write_inode_28931 __ext2_write_inode 0 28931 NULL
+btrfs_set_prop_28935 btrfs_set_prop 0 28935 NULL
+patch_cs4213_28937 patch_cs4213 0 28937 NULL
+atyfb_set_par_29275 atyfb_set_par 0 29275 NULL
+prism2_set_genericelement_29277 prism2_set_genericelement 3 29277 NULL
+set_force_pwm_max_29278 set_force_pwm_max 0-4 29278 NULL
++bitmap_ord_to_pos_29279 bitmap_ord_to_pos 3 29279 NULL
+_abb5zes3_rtc_update_alarm_29283 _abb5zes3_rtc_update_alarm 0 29283 NULL
+_abb5zes3_rtc_set_timer_29286 _abb5zes3_rtc_set_timer 0 29286 NULL
+iwl_mvm_send_cmd_pdu_status_29288 iwl_mvm_send_cmd_pdu_status 0 29288 NULL
+writeset_alloc_29304 writeset_alloc 2 29304 NULL nohasharray
+tpacpi_rfk_update_swstate_29304 tpacpi_rfk_update_swstate 0 29304 &writeset_alloc_29304
+abb5zes3_rtc_set_alarm_29308 abb5zes3_rtc_set_alarm 0 29308 NULL
-+regmap_spmi_ext_read_29311 regmap_spmi_ext_read 0 29311 NULL
++regmap_spmi_ext_read_29311 regmap_spmi_ext_read 0 29311 NULL nohasharray
++mempool_resize_29311 mempool_resize 2 29311 ®map_spmi_ext_read_29311
+brcmf_sdio_tx_ctrlframe_29314 brcmf_sdio_tx_ctrlframe 3 29314 NULL
+__fuse_get_req_29315 __fuse_get_req 2 29315 NULL
+dac33_hw_write_29317 dac33_hw_write 3 29317 NULL nohasharray
+write_block_data_29390 write_block_data 0 29390 NULL nohasharray
+sleep_millisecs_store_29390 sleep_millisecs_store 0-4 29390 &write_block_data_29390
+store_29393 store 0 29393 NULL
++hci_sock_sendmsg_29396 hci_sock_sendmsg 3 29396 NULL
+lpfc_use_adisc_show_29400 lpfc_use_adisc_show 0 29400 NULL
+_ctl_diag_trigger_master_show_29403 _ctl_diag_trigger_master_show 0 29403 NULL nohasharray
+shm16read__write_file_29403 shm16read__write_file 0 29403 &_ctl_diag_trigger_master_show_29403
+chv_gpio_direction_input_29662 chv_gpio_direction_input 0 29662 NULL nohasharray
+e100_phy_init_29662 e100_phy_init 0 29662 &chv_gpio_direction_input_29662
+user_get_29663 user_get 0 29663 NULL
-+br_send_bpdu_29669 br_send_bpdu 3 29669 NULL
++br_send_bpdu_29669 br_send_bpdu 3 29669 NULL nohasharray
++rfcomm_sock_sendmsg_29669 rfcomm_sock_sendmsg 3 29669 &br_send_bpdu_29669
++br_nlmsg_size_29671 br_nlmsg_size 0 29671 NULL
+sisusb_write_mem_bulk_29678 sisusb_write_mem_bulk 4-0 29678 NULL
+pmbus_regulator_enable_29679 pmbus_regulator_enable 0 29679 NULL
+netxen_store_bridged_mode_29684 netxen_store_bridged_mode 0-4 29684 NULL
+sht15_show_temp_29714 sht15_show_temp 0 29714 NULL
+compat_write_data_29715 compat_write_data 0 29715 NULL
+target_core_alua_tg_pt_gp_show_attr_alua_write_metadata_29716 target_core_alua_tg_pt_gp_show_attr_alua_write_metadata 0 29716 NULL nohasharray
-+wl1251_acx_station_id_29716 wl1251_acx_station_id 0 29716 &target_core_alua_tg_pt_gp_show_attr_alua_write_metadata_29716
++wl1251_acx_station_id_29716 wl1251_acx_station_id 0 29716 &target_core_alua_tg_pt_gp_show_attr_alua_write_metadata_29716 nohasharray
++ext4_ext_direct_IO_29716 ext4_ext_direct_IO 3 29716 &wl1251_acx_station_id_29716
+sdev_show_evt_soft_threshold_reached_29724 sdev_show_evt_soft_threshold_reached 0 29724 NULL
+dbs_cpufreq_notifier_29729 dbs_cpufreq_notifier 0 29729 NULL
+wake_show_29730 wake_show 0 29730 NULL
+itd_submit_29871 itd_submit 0 29871 &ipv6_setsockopt_29871 nohasharray
+ath10k_mac_vif_recalc_ps_poll_count_29871 ath10k_mac_vif_recalc_ps_poll_count 0 29871 &itd_submit_29871
+dma_map_xdr_29874 dma_map_xdr 0 29874 NULL
-+show_engine3_mode_29876 show_engine3_mode 0 29876 NULL
++show_engine3_mode_29876 show_engine3_mode 0 29876 NULL nohasharray
++br_get_link_af_size_filtered_29876 br_get_link_af_size_filtered 0 29876 &show_engine3_mode_29876
+setup_29880 setup 0 29880 NULL
+store_pan_29882 store_pan 0-4 29882 NULL
+nfc_targets_found_29886 nfc_targets_found 3 29886 NULL nohasharray
+crb_do_acpi_start_29961 crb_do_acpi_start 0 29961 NULL
+init_29962 init 0 29962 NULL
+ubifs_readpage_29965 ubifs_readpage 0 29965 NULL
++dn_sendmsg_29966 dn_sendmsg 3 29966 NULL
+vfb_set_par_29967 vfb_set_par 0 29967 NULL
+register_one_node_29973 register_one_node 0 29973 NULL
+acpi_ut_copy_iobject_to_eobject_29974 acpi_ut_copy_iobject_to_eobject 0 29974 NULL
+tipc_sk_rcv_30090 tipc_sk_rcv 0 30090 NULL
+cxgbi_ddp_reserve_30091 cxgbi_ddp_reserve 4 30091 NULL
+snd_midi_channel_init_set_30092 snd_midi_channel_init_set 1 30092 NULL
-+tg3_run_loopback_30093 tg3_run_loopback 2 30093 NULL
++tg3_run_loopback_30093 tg3_run_loopback 2 30093 NULL nohasharray
++generic_write_checks_30093 generic_write_checks 0 30093 &tg3_run_loopback_30093
+wake_lock_store_30096 wake_lock_store 0-4 30096 NULL
+rx_filter_data_filter_read_30098 rx_filter_data_filter_read 3-0 30098 NULL
+mlx5_cmd_exec_30102 mlx5_cmd_exec 0 30102 NULL
+ext4_write_inline_data_end_30151 ext4_write_inline_data_end 0-4 30151 NULL
+hvfb_check_var_30153 hvfb_check_var 0 30153 NULL
+elfcorehdr_read_30159 elfcorehdr_read 2 30159 NULL
-+netlink_realloc_groups_30162 netlink_realloc_groups 0 30162 NULL
++netlink_realloc_groups_30162 netlink_realloc_groups 0 30162 NULL nohasharray
++start_stop_khugepaged_30162 start_stop_khugepaged 0 30162 &netlink_realloc_groups_30162
+alloc_switch_ctx_30165 alloc_switch_ctx 2 30165 NULL
+sundance_set_mac_addr_30166 sundance_set_mac_addr 0 30166 NULL
+cs_init_30168 cs_init 0 30168 NULL
+dn_dev_get_first_30296 dn_dev_get_first 0 30296 &tcp_sendmsg_30296
+snd_card_asihpi_playback_prepare_30297 snd_card_asihpi_playback_prepare 0 30297 NULL nohasharray
+lbs_get_reg_30297 lbs_get_reg 0 30297 &snd_card_asihpi_playback_prepare_30297
-+qlcnic_netdev_event_30299 qlcnic_netdev_event 0 30299 NULL
++qlcnic_netdev_event_30299 qlcnic_netdev_event 0 30299 NULL nohasharray
++irda_sendmsg_dgram_30299 irda_sendmsg_dgram 3 30299 &qlcnic_netdev_event_30299
+__av7110_send_fw_cmd_30300 __av7110_send_fw_cmd 0 30300 NULL
+fm_rx_set_mute_mode_30305 fm_rx_set_mute_mode 0 30305 NULL nohasharray
+osc_contention_seconds_seq_write_30305 osc_contention_seconds_seq_write 3 30305 &fm_rx_set_mute_mode_30305
+s5k83a_set_hvflip_30350 s5k83a_set_hvflip 0 30350 &cyapa_gen3_show_baseline_30350
+__vmalloc_node_flags_30352 __vmalloc_node_flags 1 30352 NULL nohasharray
+mmio32read__read_file_30352 mmio32read__read_file 0 30352 &__vmalloc_node_flags_30352
-+show_ipOutNoRoutes_30355 show_ipOutNoRoutes 0 30355 NULL
++show_ipOutNoRoutes_30355 show_ipOutNoRoutes 0 30355 NULL nohasharray
++wil_reset_30355 wil_reset 0 30355 &show_ipOutNoRoutes_30355
+wake_up_key_show_30358 wake_up_key_show 0 30358 NULL
+gfs2_trans_begin_30359 gfs2_trans_begin 0 30359 NULL
+ipx_getname_30363 ipx_getname 0 30363 NULL
+lp3971_set_bits_30418 lp3971_set_bits 0 30418 NULL
+ext3_xattr_list_30419 ext3_xattr_list 0 30419 NULL
+vb2_fop_write_30420 vb2_fop_write 3-0 30420 NULL
-+lpfc_npiv_info_show_30421 lpfc_npiv_info_show 0 30421 NULL
++lpfc_npiv_info_show_30421 lpfc_npiv_info_show 0 30421 NULL nohasharray
++trace_insert_enum_map_30421 trace_insert_enum_map 3 30421 &lpfc_npiv_info_show_30421
+iscsi_stat_login_attr_show_30423 iscsi_stat_login_attr_show 0 30423 NULL
+tx_tx_template_prepared_read_30424 tx_tx_template_prepared_read 3-0 30424 NULL nohasharray
+sequencer_write_30424 sequencer_write 0-4 30424 &tx_tx_template_prepared_read_30424 nohasharray
+xfs_setattr_nonsize_30550 xfs_setattr_nonsize 0 30550 &lp3972_i2c_write_30550 nohasharray
+logfs_setattr_30550 logfs_setattr 0 30550 &xfs_setattr_nonsize_30550
+usb_serial_generic_open_30553 usb_serial_generic_open 0 30553 NULL
++_mv88e6xxx_reg_write_30554 _mv88e6xxx_reg_write 0 30554 NULL
+ixgbevf_acquire_msix_vectors_30559 ixgbevf_acquire_msix_vectors 2 30559 NULL
+qlcnic_sriov_pf_create_flr_queue_30560 qlcnic_sriov_pf_create_flr_queue 0 30560 NULL
+disk_expand_part_tbl_30561 disk_expand_part_tbl 2 30561 NULL nohasharray
+sctp_setsockopt_rtoinfo_30941 sctp_setsockopt_rtoinfo 3-0 30941 NULL nohasharray
+parport_uss720_ecp_read_data_30941 parport_uss720_ecp_read_data 0 30941 &sctp_setsockopt_rtoinfo_30941
+sctp_do_bind_30943 sctp_do_bind 0 30943 NULL
++affs_direct_IO_30947 affs_direct_IO 3 30947 NULL
+reserve_space_30953 reserve_space 0 30953 NULL nohasharray
+store_30953 store 0-4 30953 &reserve_space_30953
+st_accel_buffer_preenable_30954 st_accel_buffer_preenable 0 30954 NULL
+ssb_read16_31139 ssb_read16 0 31139 NULL
+store_speed_scan_31141 store_speed_scan 0-4 31141 NULL
+b43_sdio_request_irq_31144 b43_sdio_request_irq 0 31144 NULL
++caif_seqpkt_recvmsg_31145 caif_seqpkt_recvmsg 3 31145 NULL
+patch_nvhdmi_31148 patch_nvhdmi 0 31148 NULL
+acpi_cpu_soft_notify_31149 acpi_cpu_soft_notify 0 31149 NULL
+uvc_start_streaming_31157 uvc_start_streaming 0 31157 NULL
+platform_device_add_31340 platform_device_add 0 31340 NULL
+jffs2_trusted_listxattr_31348 jffs2_trusted_listxattr 0-5 31348 NULL nohasharray
+snd_seq_enqueue_event_31348 snd_seq_enqueue_event 0 31348 &jffs2_trusted_listxattr_31348
++sha256_base_finish_31352 sha256_base_finish 0 31352 NULL
+queue_setup_31353 queue_setup 0 31353 NULL
+vpx3220_s_ctrl_31356 vpx3220_s_ctrl 0 31356 NULL
+outlen_write_31358 outlen_write 3-0 31358 NULL
+cxacru_sysfs_show_downstream_attenuation_31423 cxacru_sysfs_show_downstream_attenuation 0 31423 NULL
+TSS_checkhmac1_31429 TSS_checkhmac1 0 31429 NULL
+iuu_open_31432 iuu_open 0 31432 NULL
++ext4_find_dest_de_31440 ext4_find_dest_de 7 31440 NULL
+acpi_sci_ioapic_setup_31445 acpi_sci_ioapic_setup 4 31445 NULL nohasharray
+snd_ice1712_capture_prepare_31445 snd_ice1712_capture_prepare 0 31445 &acpi_sci_ioapic_setup_31445
+security_set_bools_31447 security_set_bools 0 31447 NULL
+fs_send_31530 fs_send 0 31530 NULL
+cyapa_poll_state_31531 cyapa_poll_state 0 31531 NULL
+__mv88e6xxx_reg_read_31534 __mv88e6xxx_reg_read 0 31534 NULL
-+tvp5150_s_ctrl_31535 tvp5150_s_ctrl 0 31535 NULL
++tvp5150_s_ctrl_31535 tvp5150_s_ctrl 0 31535 NULL nohasharray
++irda_recvmsg_dgram_31535 irda_recvmsg_dgram 3 31535 &tvp5150_s_ctrl_31535
+hidraw_write_31536 hidraw_write 3-0 31536 NULL
+mtd_div_by_eb_31543 mtd_div_by_eb 0-1 31543 NULL nohasharray
+powerclamp_cpu_callback_31543 powerclamp_cpu_callback 0 31543 &mtd_div_by_eb_31543
+ad7793_read_frequency_31825 ad7793_read_frequency 0 31825 NULL
+ocfs2_readpage_inline_31829 ocfs2_readpage_inline 0 31829 NULL
+any_show_31831 any_show 0 31831 NULL
-+notify_send_pre_enqueue_31834 notify_send_pre_enqueue 0 31834 NULL
++i915_get_ggtt_vma_pages_31833 i915_get_ggtt_vma_pages 0 31833 NULL
++notify_send_pre_enqueue_31834 notify_send_pre_enqueue 0 31834 NULL nohasharray
++_mv88e6xxx_phy_read_31834 _mv88e6xxx_phy_read 0 31834 ¬ify_send_pre_enqueue_31834
+cachefiles_daemon_fcull_31835 cachefiles_daemon_fcull 0 31835 NULL
+__bond_release_one_31836 __bond_release_one 0 31836 NULL
+isp1362_urb_enqueue_31839 isp1362_urb_enqueue 0 31839 NULL
+show_control_32286 show_control 0 32286 NULL
+uart401_open_32288 uart401_open 0 32288 NULL
+l3_alloc_skb_32289 l3_alloc_skb 1 32289 NULL
++netvsc_send_pkt_32291 netvsc_send_pkt 0 32291 NULL
++alloc_ofld_rxqs_32293 alloc_ofld_rxqs 0 32293 NULL
+proc_sys_getattr_32297 proc_sys_getattr 0 32297 NULL
+sisusb_read_memio_long_32299 sisusb_read_memio_long 0 32299 NULL
+find_ci_32301 find_ci 0 32301 NULL
+bcm7xxx_28nm_b0_afe_config_init_32439 bcm7xxx_28nm_b0_afe_config_init 0 32439 NULL nohasharray
+break_ksm_32439 break_ksm 0 32439 &bcm7xxx_28nm_b0_afe_config_init_32439
+fore200e_pca_proc_read_32440 fore200e_pca_proc_read 0 32440 NULL nohasharray
-+cfq_set_leaf_weight_32440 cfq_set_leaf_weight 0 32440 &fore200e_pca_proc_read_32440
++cfq_set_leaf_weight_32440 cfq_set_leaf_weight 0 32440 &fore200e_pca_proc_read_32440 nohasharray
++reiserfs_direct_IO_32440 reiserfs_direct_IO 3 32440 &cfq_set_leaf_weight_32440
+show_in16_32441 show_in16 0 32441 NULL
+axnet_resume_32442 axnet_resume 0 32442 NULL
+cx25840_s_ctrl_32444 cx25840_s_ctrl 0 32444 NULL
+device_change_notifier_32558 device_change_notifier 0 32558 NULL
+bitmap_store_32559 bitmap_store 0-3 32559 NULL
+ipgre_header_32561 ipgre_header 0 32561 NULL nohasharray
-+alloc_dma_desc_resources_32561 alloc_dma_desc_resources 0 32561 &ipgre_header_32561
++alloc_dma_desc_resources_32561 alloc_dma_desc_resources 0 32561 &ipgre_header_32561 nohasharray
++__blockdev_direct_IO_32561 __blockdev_direct_IO 5-0 32561 &alloc_dma_desc_resources_32561
+aes_encrypt_fail_read_32562 aes_encrypt_fail_read 3-0 32562 NULL
+loop_attr_backing_file_show_32564 loop_attr_backing_file_show 0 32564 NULL
+osc_iocontrol_32565 osc_iocontrol 3 32565 NULL
+write_policy_show_32908 write_policy_show 0 32908 NULL
+show_fan16_32912 show_fan16 0 32912 NULL
+il_dbgfs_tx_stats_read_32913 il_dbgfs_tx_stats_read 3-0 32913 NULL
++add_bound_rdev_32915 add_bound_rdev 0 32915 NULL
+show_32916 show 0 32916 NULL
+mcp3422_show_samp_freqs_32924 mcp3422_show_samp_freqs 0 32924 NULL nohasharray
+hibernate_32924 hibernate 0 32924 &mcp3422_show_samp_freqs_32924
+nf_nat_ipv4_local_fn_33119 nf_nat_ipv4_local_fn 0 33119 NULL nohasharray
+set_beep_33119 set_beep 0-4 33119 &nf_nat_ipv4_local_fn_33119
+write_node_33121 write_node 4-0 33121 NULL
++llc_ui_sendmsg_33123 llc_ui_sendmsg 3 33123 NULL
+virtual_gb_store_33126 virtual_gb_store 0-3 33126 NULL
+fb_sys_write_33130 fb_sys_write 3 33130 NULL nohasharray
+cxgb4_inet6addr_handler_33130 cxgb4_inet6addr_handler 0 33130 &fb_sys_write_33130
+bond_option_arp_ip_target_add_33152 bond_option_arp_ip_target_add 0 33152 NULL nohasharray
+SyS_poll_33152 SyS_poll 2 33152 &bond_option_arp_ip_target_add_33152
+_pci_add_cap_save_buffer_33153 _pci_add_cap_save_buffer 4 33153 NULL
++packet_sendmsg_33154 packet_sendmsg 3 33154 NULL
+ubifs_gc_start_commit_33160 ubifs_gc_start_commit 0 33160 NULL
+regmap_spmi_ext_write_33161 regmap_spmi_ext_write 0 33161 NULL
+wl1271_sta_hw_init_33163 wl1271_sta_hw_init 0 33163 NULL nohasharray
+aic26_keyclick_set_33378 aic26_keyclick_set 0-4 33378 NULL
+mem_cgroup_resize_memsw_limit_33379 mem_cgroup_resize_memsw_limit 0 33379 NULL
+setsockopt_33380 setsockopt 0 33380 NULL
-+hackrf_alloc_stream_bufs_33381 hackrf_alloc_stream_bufs 0 33381 NULL
++hackrf_alloc_stream_bufs_33381 hackrf_alloc_stream_bufs 0 33381 NULL nohasharray
++_find_next_bit_33381 _find_next_bit 0-2 33381 &hackrf_alloc_stream_bufs_33381
+ieee80211_if_read_dropped_frames_no_route_33383 ieee80211_if_read_dropped_frames_no_route 3-0 33383 NULL
+airo_suspend_33386 airo_suspend 0 33386 NULL
+bmc150_accel_setup_new_data_interrupt_33387 bmc150_accel_setup_new_data_interrupt 0 33387 NULL
+tomoyo_read_self_33539 tomoyo_read_self 3-0 33539 NULL nohasharray
+osc_max_rpcs_in_flight_seq_write_33539 osc_max_rpcs_in_flight_seq_write 3 33539 &tomoyo_read_self_33539
+bnx2_request_firmware_33540 bnx2_request_firmware 0 33540 NULL
++__acpi_device_modalias_33545 __acpi_device_modalias 0 33545 NULL
+get_fan_div_33546 get_fan_div 0 33546 NULL
+cx8802_buf_prepare_33547 cx8802_buf_prepare 0 33547 NULL
+compat_SyS_recv_33548 compat_SyS_recv 3 33548 NULL
+var_to_pll_33759 var_to_pll 0 33759 NULL
+pccard_show_voltage_33761 pccard_show_voltage 0 33761 NULL
+vifs_state_read_33762 vifs_state_read 3-0 33762 NULL
++bitmap_full_33763 bitmap_full 2 33763 NULL
+ext2_xattr_user_list_33764 ext2_xattr_user_list 0-5 33764 NULL nohasharray
+ext3_mark_inode_dirty_33764 ext3_mark_inode_dirty 0 33764 &ext2_xattr_user_list_33764
+hashtab_create_33769 hashtab_create 3 33769 NULL
+bin_string_33884 bin_string 5-3 33884 NULL
+get_fan1_div_33886 get_fan1_div 0 33886 NULL nohasharray
+mwifiex_cmd_802_11_snmp_mib_33886 mwifiex_cmd_802_11_snmp_mib 0 33886 &get_fan1_div_33886
++vmci_transport_dgram_dequeue_33887 vmci_transport_dgram_dequeue 3 33887 NULL
+twl_request_33892 twl_request 0 33892 NULL
+sis190_init_ring_33895 sis190_init_ring 0 33895 NULL nohasharray
+isl29003_set_resolution_33895 isl29003_set_resolution 0 33895 &sis190_init_ring_33895
+skb_to_sgvec_34171 skb_to_sgvec 0 34171 NULL
+xfs_attr_get_34174 xfs_attr_get 0 34174 NULL
+hdcs_s_ctrl_34177 hdcs_s_ctrl 0 34177 NULL
-+qla2x00_fw_dump_size_show_34180 qla2x00_fw_dump_size_show 0 34180 NULL
++qla2x00_fw_dump_size_show_34180 qla2x00_fw_dump_size_show 0 34180 NULL nohasharray
++nilfs_direct_IO_34180 nilfs_direct_IO 3 34180 &qla2x00_fw_dump_size_show_34180
+show_pci_clock_34182 show_pci_clock 0 34182 NULL
+mgsl_claim_resources_34183 mgsl_claim_resources 0 34183 NULL
+hidp_set_raw_report_34192 hidp_set_raw_report 4-0 34192 NULL
+monitor_id_show_34469 monitor_id_show 0 34469 NULL nohasharray
+lbs_cmd_802_11_sleep_params_34469 lbs_cmd_802_11_sleep_params 0 34469 &monitor_id_show_34469 nohasharray
+dev_start_34469 dev_start 0 34469 &lbs_cmd_802_11_sleep_params_34469
-+show_34470 show 0 34470 NULL
++show_34470 show 0 34470 NULL nohasharray
++dt_gpio_count_34470 dt_gpio_count 0 34470 &show_34470
+mwifiex_regrdwr_read_34472 mwifiex_regrdwr_read 3-0 34472 NULL
+sha224_ssse3_init_34474 sha224_ssse3_init 0 34474 NULL
+fw_csr_string_34475 fw_csr_string 0 34475 NULL
+link_mode_show_35372 link_mode_show 0 35372 &read_kmem_35372
+reserved_clusters_store_35375 reserved_clusters_store 0-4 35375 NULL
+queue_rq_affinity_store_35376 queue_rq_affinity_store 3-0 35376 NULL
++p9_virtio_zc_request_35377 p9_virtio_zc_request 6-5 35377 NULL
+snd_pcm_do_start_35380 snd_pcm_do_start 0 35380 NULL nohasharray
+memcpy_from_msg_35380 memcpy_from_msg 3-0 35380 &snd_pcm_do_start_35380
+show_pwmenable_35381 show_pwmenable 0 35381 NULL
+firm_purge_35431 firm_purge 0 35431 NULL
+C_SYSC_sendfile_35432 C_SYSC_sendfile 4 35432 NULL nohasharray
+pep_init_35432 pep_init 0 35432 &C_SYSC_sendfile_35432
++__set_test_and_free_35436 __set_test_and_free 2 35436 NULL
+dwc3_gadget_set_xfer_resource_35437 dwc3_gadget_set_xfer_resource 0 35437 NULL nohasharray
+set_num_temp_sensors_35437 set_num_temp_sensors 0-4 35437 &dwc3_gadget_set_xfer_resource_35437
+buffer_to_user_35439 buffer_to_user 3 35439 NULL
+cfq_fifo_expire_async_store_35650 cfq_fifo_expire_async_store 3-0 35650 NULL nohasharray
+mlx4_en_get_sset_count_35650 mlx4_en_get_sset_count 0 35650 &cfq_fifo_expire_async_store_35650
+spi_register_board_info_35651 spi_register_board_info 2 35651 NULL
++usb_dmac_desc_get_35654 usb_dmac_desc_get 2 35654 NULL
+show_sched5_35655 show_sched5 0 35655 NULL
++blkdev_direct_IO_35665 blkdev_direct_IO 3 35665 NULL
+regmap_update_bits_35668 regmap_update_bits 0 35668 NULL
+request_lock_35670 request_lock 0 35670 NULL
+bh1770_lux_calib_show_35671 bh1770_lux_calib_show 0 35671 NULL
+sctp_listen_start_35709 sctp_listen_start 0 35709 NULL
+toshiba_panel_power_on_get_35719 toshiba_panel_power_on_get 0 35719 NULL
+bnx2_change_mac_addr_35722 bnx2_change_mac_addr 0 35722 NULL
-+i2c_smbus_write_block_data_35723 i2c_smbus_write_block_data 0 35723 NULL
++i2c_smbus_write_block_data_35723 i2c_smbus_write_block_data 0 35723 NULL nohasharray
++mv88e6xxx_phy_page_write_35723 mv88e6xxx_phy_page_write 0 35723 &i2c_smbus_write_block_data_35723
+mlx4_internal_err_ret_value_35725 mlx4_internal_err_ret_value 0 35725 NULL
+vfio_fops_read_35733 vfio_fops_read 0-3 35733 NULL
+ipr_copy_ucode_buffer_35736 ipr_copy_ucode_buffer 0 35736 NULL
+cgroup_file_write_35828 cgroup_file_write 0-3 35828 NULL
+log_debug_write_35845 log_debug_write 3-0 35845 NULL
+mp_set_gsi_attr_35852 mp_set_gsi_attr 1 35852 NULL
++unix_seqpacket_sendmsg_35853 unix_seqpacket_sendmsg 3 35853 NULL
+tx_tx_cmplt_read_35854 tx_tx_cmplt_read 3-0 35854 NULL
+wl3501_open_35855 wl3501_open 0 35855 NULL
+mthca_buf_alloc_35861 mthca_buf_alloc 2 35861 NULL
+page_action_36038 page_action 0 36038 &iscsi_nacl_attrib_show_random_datain_pdu_offsets_36038
+num_arg_36039 num_arg 0 36039 NULL
+wm8739_s_ctrl_36040 wm8739_s_ctrl 0 36040 NULL
++i915_gem_object_do_pin_36045 i915_gem_object_do_pin 0 36045 NULL
+init_36051 init 0 36051 NULL
+at86rf230_set_promiscuous_mode_36052 at86rf230_set_promiscuous_mode 0 36052 NULL
+snd_usb_caiaq_set_audio_params_36057 snd_usb_caiaq_set_audio_params 0 36057 NULL nohasharray
+atomic_stats_read_36228 atomic_stats_read 3-0 36228 NULL
+wil_agg_size_36229 wil_agg_size 0-2 36229 NULL nohasharray
+wl1273_fm_start_36229 wl1273_fm_start 0 36229 &wil_agg_size_36229
++irda_recvmsg_stream_36232 irda_recvmsg_stream 3 36232 NULL
+__padata_remove_cpu_36235 __padata_remove_cpu 0 36235 NULL
+ping_bind_36236 ping_bind 0 36236 NULL
+viafb_iga1_odev_proc_write_36241 viafb_iga1_odev_proc_write 3-0 36241 NULL
+bind_mode_show_36286 bind_mode_show 0 36286 NULL
+aac_show_reset_adapter_36289 aac_show_reset_adapter 0 36289 NULL
+nf_nat_ipv6_out_36291 nf_nat_ipv6_out 0 36291 NULL
++arch_mmap_rnd_36293 arch_mmap_rnd 0 36293 NULL
+asix_write_rx_ctl_36295 asix_write_rx_ctl 0 36295 NULL
+do_set_fan_div_36299 do_set_fan_div 0 36299 NULL
+lpfc_debugfs_dif_err_read_36303 lpfc_debugfs_dif_err_read 3-0 36303 NULL
+show_in_min3_36304 show_in_min3 0 36304 NULL
-+l2cap_validate_le_psm_36306 l2cap_validate_le_psm 0 36306 NULL
++l2cap_validate_le_psm_36306 l2cap_validate_le_psm 0 36306 NULL nohasharray
++unix_stream_recvmsg_36306 unix_stream_recvmsg 3 36306 &l2cap_validate_le_psm_36306
+target_core_alua_tg_pt_gp_store_attr_alua_access_type_36308 target_core_alua_tg_pt_gp_store_attr_alua_access_type 0-3 36308 NULL
+ad7879_spi_xfer_36311 ad7879_spi_xfer 3 36311 NULL
+qla2x00_vlan_id_show_36314 qla2x00_vlan_id_show 0 36314 NULL
+__hwahc_op_set_ptk_36510 __hwahc_op_set_ptk 5 36510 NULL
+mcam_v4l_read_36513 mcam_v4l_read 3-0 36513 NULL
+_iwl_dbgfs_fw_nmi_write_36515 _iwl_dbgfs_fw_nmi_write 3-0 36515 NULL
++pnfs_sync_inode_36519 pnfs_sync_inode 0 36519 NULL
+ieee80211_if_read_fwded_frames_36520 ieee80211_if_read_fwded_frames 3-0 36520 NULL
+it8761e_gpio_direction_out_36528 it8761e_gpio_direction_out 0 36528 NULL
+lguest_setup_irq_36531 lguest_setup_irq 1 36531 NULL
+cyapa_gen5_bl_exit_36644 cyapa_gen5_bl_exit 0 36644 &ov2640_write_array_36644
+m66592_udc_start_36646 m66592_udc_start 0 36646 NULL
+mem_cgroup_do_precharge_36647 mem_cgroup_do_precharge 0 36647 NULL
-+lpfc_idiag_extacc_alloc_get_36648 lpfc_idiag_extacc_alloc_get 0-3 36648 NULL
++lpfc_idiag_extacc_alloc_get_36648 lpfc_idiag_extacc_alloc_get 0-3 36648 NULL nohasharray
++tty_copy_to_user_36648 tty_copy_to_user 4 36648 &lpfc_idiag_extacc_alloc_get_36648
+add_dev_support_show_36650 add_dev_support_show 0 36650 NULL
+hfsplus_osx_listxattr_36654 hfsplus_osx_listxattr 0-5 36654 NULL nohasharray
+interface_show_36654 interface_show 0 36654 &hfsplus_osx_listxattr_36654
+ktti_read_regr_36658 ktti_read_regr 0 36658 NULL
+pss_coproc_open_36662 pss_coproc_open 0 36662 NULL
+osd_req_list_collection_objects_36664 osd_req_list_collection_objects 5 36664 NULL nohasharray
-+ip6_pkt_prohibit_out_36664 ip6_pkt_prohibit_out 0 36664 &osd_req_list_collection_objects_36664
++ip6_pkt_prohibit_out_36664 ip6_pkt_prohibit_out 0 36664 &osd_req_list_collection_objects_36664 nohasharray
++mgmt_send_event_36664 mgmt_send_event 5 36664 &ip6_pkt_prohibit_out_36664
+snd_pcsp_trigger_36665 snd_pcsp_trigger 0 36665 NULL
+iscsi_host_alloc_36671 iscsi_host_alloc 2 36671 NULL nohasharray
+get_temp_input_36671 get_temp_input 0 36671 &iscsi_host_alloc_36671
+set_green_36904 set_green 0-4 36904 &wm831x_auxadc_read_36904
+lm3533_als_get_target_36905 lm3533_als_get_target 0 36905 NULL
+show_fnode_chap_auth_36909 show_fnode_chap_auth 0 36909 NULL nohasharray
-+send_next_seg_36909 send_next_seg 0 36909 &show_fnode_chap_auth_36909
++send_next_seg_36909 send_next_seg 0 36909 &show_fnode_chap_auth_36909 nohasharray
++packet_sendmsg_spkt_36909 packet_sendmsg_spkt 3 36909 &send_next_seg_36909
+zl10036_read_status_reg_36910 zl10036_read_status_reg 0 36910 NULL nohasharray
+set_mandatory_rates_36910 set_mandatory_rates 0 36910 &zl10036_read_status_reg_36910
+cuse_read_36920 cuse_read 0-3 36920 NULL
+show_counter_rx_p2_hdr_egr_ovfls_36924 show_counter_rx_p2_hdr_egr_ovfls 0 36924 NULL nohasharray
+data_sock_getname_36924 data_sock_getname 0 36924 &show_counter_rx_p2_hdr_egr_ovfls_36924
+store_lid_36925 store_lid 0-4 36925 NULL
++copy_batch_36927 copy_batch 3-4 36927 NULL
+netxen_sysfs_read_dimm_36930 netxen_sysfs_read_dimm 0-5-6 36930 NULL
+queue_rq_affinity_show_36934 queue_rq_affinity_show 0 36934 NULL
+clock_name_show_36935 clock_name_show 0 36935 NULL nohasharray
+_iwl_dbgfs_bcast_filters_macs_write_37069 _iwl_dbgfs_bcast_filters_macs_write 3-0 37069 NULL
+ql_get_sset_count_37070 ql_get_sset_count 0 37070 NULL
+vmci_transport_send_wrote_37072 vmci_transport_send_wrote 0 37072 NULL nohasharray
-+logfs_write_rec_37072 logfs_write_rec 0 37072 &vmci_transport_send_wrote_37072
++logfs_write_rec_37072 logfs_write_rec 0 37072 &vmci_transport_send_wrote_37072 nohasharray
++vmap_batch_37072 vmap_batch 2-3 37072 &logfs_write_rec_37072
+uhci_submit_bulk_37073 uhci_submit_bulk 0 37073 NULL
+ath10k_spectral_scan_config_37075 ath10k_spectral_scan_config 0 37075 NULL
+SYSC_setxattr_37078 SYSC_setxattr 4 37078 NULL
+parse_command_37079 parse_command 2-0 37079 NULL
+drm_mode_create_rotation_property_37082 drm_mode_create_rotation_property 2 37082 NULL
++ll_direct_IO_26_37083 ll_direct_IO_26 3 37083 NULL
+resize_37084 resize 0 37084 NULL
+pipeline_cs_rx_packet_in_read_37089 pipeline_cs_rx_packet_in_read 3-0 37089 NULL nohasharray
+show_fcstat_loss_of_sync_count_37089 show_fcstat_loss_of_sync_count 0 37089 &pipeline_cs_rx_packet_in_read_37089
+compat_SyS_fcntl_37376 compat_SyS_fcntl 3 37376 NULL
+xcan_open_37377 xcan_open 0 37377 NULL
+sched_domains_numa_masks_update_37380 sched_domains_numa_masks_update 0 37380 NULL
-+queue_discard_zeroes_data_show_37381 queue_discard_zeroes_data_show 0 37381 NULL
++queue_discard_zeroes_data_show_37381 queue_discard_zeroes_data_show 0 37381 NULL nohasharray
++gfs2_direct_IO_37381 gfs2_direct_IO 3 37381 &queue_discard_zeroes_data_show_37381
+mmc_raw_rpmb_size_mult_show_37385 mmc_raw_rpmb_size_mult_show 0 37385 NULL nohasharray
+setup_bd_list_xfr_37385 setup_bd_list_xfr 0 37385 &mmc_raw_rpmb_size_mult_show_37385
+iommu_num_pages_37391 iommu_num_pages 0-2-3-1 37391 NULL
+max14577_set_fast_charge_timer_37418 max14577_set_fast_charge_timer 0 37418 &sys_getxattr_37418
+hci_sock_sendmsg_37420 hci_sock_sendmsg 4-0 37420 NULL
+acpi_os_allocate_zeroed_37422 acpi_os_allocate_zeroed 1 37422 NULL nohasharray
-+find_next_bit_37422 find_next_bit 0 37422 &acpi_os_allocate_zeroed_37422
++find_next_bit_37422 find_next_bit 0-2 37422 &acpi_os_allocate_zeroed_37422
+tty_insert_flip_string_fixed_flag_37428 tty_insert_flip_string_fixed_flag 4-0 37428 NULL nohasharray
+it8712f_wdt_notify_37428 it8712f_wdt_notify 0 37428 &tty_insert_flip_string_fixed_flag_37428
+iwl_print_last_event_logs_37433 iwl_print_last_event_logs 7-9-0 37433 NULL
+bonding_show_updelay_37620 bonding_show_updelay 0 37620 NULL nohasharray
+node_read_meminfo_37620 node_read_meminfo 0 37620 &bonding_show_updelay_37620
+SYSC_mbind_37622 SYSC_mbind 5 37622 NULL
-+cdc_ncm_show_dwNtbOutMaxSize_37627 cdc_ncm_show_dwNtbOutMaxSize 0 37627 NULL
++cdc_ncm_show_dwNtbOutMaxSize_37627 cdc_ncm_show_dwNtbOutMaxSize 0 37627 NULL nohasharray
++aio_run_iocb_37627 aio_run_iocb 4 37627 &cdc_ncm_show_dwNtbOutMaxSize_37627
+rd_byte_37632 rd_byte 0 37632 NULL
+os_desc_b_vendor_code_store_37633 os_desc_b_vendor_code_store 0-3 37633 NULL
+__hw_addr_add_37635 __hw_addr_add 0 37635 NULL
+pkt_alloc_packet_data_37928 pkt_alloc_packet_data 1 37928 NULL nohasharray
+_rtw_malloc_37928 _rtw_malloc 1 37928 &pkt_alloc_packet_data_37928
+set_pwmchan_37930 set_pwmchan 0-4 37930 NULL
++security_inode_getattr_37932 security_inode_getattr 0 37932 NULL
+toshiba_accelerometer_get_37934 toshiba_accelerometer_get 0 37934 NULL
+ath5k_attr_store_spur_level_37935 ath5k_attr_store_spur_level 0-4 37935 NULL
+read_rbu_packet_size_37939 read_rbu_packet_size 6-0-5 37939 NULL nohasharray
+isl1208_sysfs_show_usr_37987 isl1208_sysfs_show_usr 0 37987 NULL
+rds_rdma_extra_size_37990 rds_rdma_extra_size 0 37990 NULL nohasharray
+netxen_nic_change_mtu_37990 netxen_nic_change_mtu 0 37990 &rds_rdma_extra_size_37990
++aio_setup_vectored_rw_37994 aio_setup_vectored_rw 3 37994 NULL
+of_regulator_match_37995 of_regulator_match 0 37995 NULL
+persistent_ram_old_size_37997 persistent_ram_old_size 0 37997 NULL nohasharray
+fm10k_update_vid_37997 fm10k_update_vid 0 37997 &persistent_ram_old_size_37997
+bonding_show_active_slave_38152 bonding_show_active_slave 0 38152 NULL
+__ntfs_copy_from_user_iovec_inatomic_38153 __ntfs_copy_from_user_iovec_inatomic 0-4-3 38153 NULL
+gss_import_sec_context_38154 gss_import_sec_context 0 38154 NULL
++vcc_recvmsg_38166 vcc_recvmsg 3 38166 NULL
+fbcon_fb_unregistered_38168 fbcon_fb_unregistered 0 38168 NULL
+snd_ca0106_pcm_trigger_capture_38169 snd_ca0106_pcm_trigger_capture 0 38169 NULL nohasharray
+amb_open_38169 amb_open 0 38169 &snd_ca0106_pcm_trigger_capture_38169
+ql_set_mac_addr_reg_38341 ql_set_mac_addr_reg 0 38341 NULL
+pm8001_ctl_mpi_interface_rev_show_38342 pm8001_ctl_mpi_interface_rev_show 0 38342 NULL
+sisusb_write_memio_byte_38343 sisusb_write_memio_byte 0 38343 NULL
-+iscsi_stat_sess_show_attr_conn_timeout_errors_38346 iscsi_stat_sess_show_attr_conn_timeout_errors 0 38346 NULL
++iscsi_stat_sess_show_attr_conn_timeout_errors_38346 iscsi_stat_sess_show_attr_conn_timeout_errors 0 38346 NULL nohasharray
++nf_hook_thresh_38346 nf_hook_thresh 0 38346 &iscsi_stat_sess_show_attr_conn_timeout_errors_38346
+af9005_write_tuner_registers_38347 af9005_write_tuner_registers 0 38347 NULL
+snd_hda_add_pincfg_38354 snd_hda_add_pincfg 0 38354 NULL
+security_getxattr_38355 security_getxattr 0 38355 NULL
+prepare_header95_38540 prepare_header95 0 38540 NULL
+jffs2_user_getxattr_38541 jffs2_user_getxattr 0 38541 NULL
+btrfs_discard_extent_38547 btrfs_discard_extent 2 38547 NULL
-+xs_error_38560 xs_error 0 38560 NULL
++xs_error_38560 xs_error 0 38560 NULL nohasharray
++tcp_sendmsg_38560 tcp_sendmsg 3 38560 &xs_error_38560
+irda_sendmsg_dgram_38563 irda_sendmsg_dgram 4-0 38563 NULL
+il4965_rs_sta_dbgfs_scale_table_read_38564 il4965_rs_sta_dbgfs_scale_table_read 3-0 38564 NULL nohasharray
+iscsi_stat_login_show_attr_authorize_fails_38564 iscsi_stat_login_show_attr_authorize_fails 0 38564 &il4965_rs_sta_dbgfs_scale_table_read_38564
+snd_nm256_playback_copy_38567 snd_nm256_playback_copy 5 38567 NULL nohasharray
+sr9700_get_eeprom_len_38567 sr9700_get_eeprom_len 0 38567 &snd_nm256_playback_copy_38567
++skcipher_sendmsg_38570 skcipher_sendmsg 3 38570 NULL
+zd_reg2alpha2_38572 zd_reg2alpha2 0 38572 NULL
+srp_create_target_38575 srp_create_target 0-4 38575 NULL
+copy_ctl_value_to_user_38587 copy_ctl_value_to_user 4 38587 NULL
+p9_mount_tag_show_38744 p9_mount_tag_show 0 38744 NULL nohasharray
+extlog_print_38744 extlog_print 0 38744 &p9_mount_tag_show_38744
+clear_intrusion_38745 clear_intrusion 0-4 38745 NULL
++btusb_qca_send_vendor_req_38746 btusb_qca_send_vendor_req 4 38746 NULL
+microcode_write_38754 microcode_write 0-3 38754 NULL
+netxen_nic_get_eeprom_len_38756 netxen_nic_get_eeprom_len 0 38756 NULL
+get_fan_rpm_38760 get_fan_rpm 0 38760 NULL nohasharray
+wp512_init_38975 wp512_init 0 38975 NULL
+usb_maxpacket_38977 usb_maxpacket 0 38977 NULL nohasharray
+adfs_fplus_read_38977 adfs_fplus_read 0 38977 &usb_maxpacket_38977
-+addr_assign_type_show_38978 addr_assign_type_show 0 38978 NULL
++addr_assign_type_show_38978 addr_assign_type_show 0 38978 NULL nohasharray
++iwl_mvm_init_fw_regd_38978 iwl_mvm_init_fw_regd 0 38978 &addr_assign_type_show_38978
+_iommu_cpumask_show_38985 _iommu_cpumask_show 0 38985 NULL
+OSDSetBlock_38986 OSDSetBlock 2-4 38986 NULL nohasharray
+pti_tty_write_room_38986 pti_tty_write_room 0 38986 &OSDSetBlock_38986
+intel_nontranslate_map_sg_38992 intel_nontranslate_map_sg 0-3 38992 NULL
+bio_clone_range_38997 bio_clone_range 2 38997 NULL
+lpfc_idiag_extacc_write_38998 lpfc_idiag_extacc_write 3-0 38998 NULL
++udf_new_block_38999 udf_new_block 4 38999 NULL
+bh1770_set_lux_thresh_39000 bh1770_set_lux_thresh 0 39000 NULL
+mmio16write__write_file_39001 mmio16write__write_file 0 39001 NULL
+systemid_show_39002 systemid_show 0 39002 NULL
+write_battery_life_extender_39045 write_battery_life_extender 0 39045 NULL
+wl18xx_trigger_cmd_39046 wl18xx_trigger_cmd 0 39046 NULL
+power_limit_1_tmax_us_show_39050 power_limit_1_tmax_us_show 0 39050 NULL
-+do_write_kmem_39051 do_write_kmem 0-1-3 39051 NULL
++do_write_kmem_39051 do_write_kmem 0-1-3 39051 NULL nohasharray
++log_writes_status_39051 log_writes_status 5 39051 &do_write_kmem_39051
+__wil_up_39052 __wil_up 0 39052 NULL
+get_component_status_39053 get_component_status 0 39053 NULL
+gen10g_read_status_39059 gen10g_read_status 0 39059 NULL
+avoid_reset_quirk_show_39119 avoid_reset_quirk_show 0 39119 NULL
+__kfifo_to_user_r_39123 __kfifo_to_user_r 3-5 39123 NULL
+saa711x_set_size_39124 saa711x_set_size 0 39124 NULL
++l2tp_ip6_recvmsg_39130 l2tp_ip6_recvmsg 3 39130 NULL
+snd_vt1724_pcm_trigger_39131 snd_vt1724_pcm_trigger 0 39131 NULL
+ea_foreach_39133 ea_foreach 0 39133 NULL
+snd_pcm_plug_format_plugins_39136 snd_pcm_plug_format_plugins 0 39136 NULL
+msr_device_create_39175 msr_device_create 0 39175 NULL
+vpe_buf_prepare_39183 vpe_buf_prepare 0 39183 NULL
+wl1271_cmd_data_path_39185 wl1271_cmd_data_path 0 39185 NULL
++snd_hda_codec_parse_pcms_39188 snd_hda_codec_parse_pcms 0 39188 NULL
+ubi_more_update_data_39189 ubi_more_update_data 4-0 39189 NULL
+soc_camera_platform_s_stream_39190 soc_camera_platform_s_stream 0 39190 NULL nohasharray
+quota_scale_store_39190 quota_scale_store 0-3 39190 &soc_camera_platform_s_stream_39190
+adp8860_store_39328 adp8860_store 0-3 39328 NULL
+target_core_dev_attrib_attr_show_39329 target_core_dev_attrib_attr_show 0 39329 NULL
+flex_array_prealloc_39330 flex_array_prealloc 0 39330 NULL
++drm_dp_i2c_drain_msg_39331 drm_dp_i2c_drain_msg 0 39331 NULL
+gmbus_xfer_39341 gmbus_xfer 0-3 39341 NULL
+xen_hvm_setup_msi_irqs_39342 xen_hvm_setup_msi_irqs 2 39342 NULL
+wimax_msg_alloc_39343 wimax_msg_alloc 4 39343 NULL
+rtnl_port_size_39551 rtnl_port_size 0 39551 NULL
+pp_write_39554 pp_write 3-0 39554 NULL nohasharray
+sr_write_cmd_39554 sr_write_cmd 5-0 39554 &pp_write_39554
-+sis630_block_data_39556 sis630_block_data 0 39556 NULL
++sis630_block_data_39556 sis630_block_data 0 39556 NULL nohasharray
++set_pcm_default_values_39556 set_pcm_default_values 0 39556 &sis630_block_data_39556
+ol_dqblk_block_39558 ol_dqblk_block 2 39558 NULL
+cpulistaffinity_show_39560 cpulistaffinity_show 0 39560 NULL nohasharray
+uhid_dev_input2_39560 uhid_dev_input2 0 39560 &cpulistaffinity_show_39560 nohasharray
+bh1770_set_lux_rate_39960 bh1770_set_lux_rate 0-4 39960 NULL
+bh1770_get_prox_rate_avail_39962 bh1770_get_prox_rate_avail 0 39962 NULL
+prepare_39963 prepare 0 39963 NULL
++mv88e6xxx_phy_write_indirect_39966 mv88e6xxx_phy_write_indirect 2 39966 NULL
+bio_chain_clone_range_39967 bio_chain_clone_range 3 39967 NULL
+selinux_audit_rule_init_39969 selinux_audit_rule_init 0 39969 NULL
+fmvj18x_resume_39970 fmvj18x_resume 0 39970 NULL
+netlink_broadcast_filtered_40105 netlink_broadcast_filtered 0 40105 NULL
+xfs_rtbuf_get_40107 xfs_rtbuf_get 0 40107 NULL
+gen_pool_first_fit_40110 gen_pool_first_fit 2-3-4 40110 NULL
++snd_soc_dapm_new_pcm_40119 snd_soc_dapm_new_pcm 3 40119 NULL
+sctp_setsockopt_delayed_ack_40129 sctp_setsockopt_delayed_ack 3-0 40129 NULL nohasharray
+lp3971_i2c_read_40129 lp3971_i2c_read 0 40129 &sctp_setsockopt_delayed_ack_40129 nohasharray
+cachefiles_daemon_tag_40129 cachefiles_daemon_tag 0 40129 &lp3971_i2c_read_40129
+allocate_probes_40204 allocate_probes 1 40204 NULL
+selinux_socket_recvmsg_40208 selinux_socket_recvmsg 0 40208 NULL
+ecryptfs_inode_newsize_ok_40210 ecryptfs_inode_newsize_ok 0 40210 NULL
++generic_exec_single_40212 generic_exec_single 0 40212 NULL
+_nfs4_do_fsinfo_40215 _nfs4_do_fsinfo 0 40215 NULL
+sync_cached_firmware_buf_40217 sync_cached_firmware_buf 0 40217 NULL
+i40e_get_sset_count_40218 i40e_get_sset_count 0 40218 NULL
+pcnet_suspend_40283 pcnet_suspend 0 40283 &rx_xfr_hint_trig_read_40283
+ad7877_dac_store_40285 ad7877_dac_store 0-4 40285 NULL
+il_dbgfs_ucode_rx_stats_read_40286 il_dbgfs_ucode_rx_stats_read 0-3 40286 NULL
++ashmem_read_40287 ashmem_read 3 40287 NULL
+tracing_thresh_read_40295 tracing_thresh_read 3 40295 NULL
+dn_confirm_accept_40296 dn_confirm_accept 0 40296 NULL nohasharray
+aat2870_ldo_is_enabled_40296 aat2870_ldo_is_enabled 0 40296 &dn_confirm_accept_40296
+SyS_bind_40303 SyS_bind 3 40303 NULL
+ubi_io_write_data_40305 ubi_io_write_data 4-5-0 40305 NULL nohasharray
+device_online_40305 device_online 0 40305 &ubi_io_write_data_40305
++mv88e6xxx_phy_page_read_40309 mv88e6xxx_phy_page_read 0 40309 NULL
+wm8350_rtc_readtime_40313 wm8350_rtc_readtime 0 40313 NULL
+vlan_device_event_40315 vlan_device_event 0 40315 NULL
+prepare_40316 prepare 0 40316 NULL
+kmx61_set_mode_40839 kmx61_set_mode 0 40839 NULL
+show_in_status_40844 show_in_status 0 40844 NULL nohasharray
+can_rx_register_40844 can_rx_register 0 40844 &show_in_status_40844
++test_smp_read_40845 test_smp_read 3 40845 NULL
+nilfs_mdt_init_40849 nilfs_mdt_init 3 40849 NULL
+isku_sysfs_write_keys_thumbster_40851 isku_sysfs_write_keys_thumbster 6-0-5 40851 NULL nohasharray
+udp_lib_setsockopt_40851 udp_lib_setsockopt 0 40851 &isku_sysfs_write_keys_thumbster_40851 nohasharray
+i7core_inject_eccmask_show_40872 i7core_inject_eccmask_show 0 40872 NULL
+atomic_add_unless_40873 atomic_add_unless 0 40873 NULL
+snd_cx88_card_trigger_40885 snd_cx88_card_trigger 0 40885 NULL
++iwl_mvm_start_fw_dbg_conf_40886 iwl_mvm_start_fw_dbg_conf 0 40886 NULL
+wl12xx_cmd_build_probe_req_40888 wl12xx_cmd_build_probe_req 6-10-8 40888 NULL
+init_vbus_channel_40889 init_vbus_channel 1-2 40889 NULL
+store_global_beep_40893 store_global_beep 0-4 40893 NULL
+ks8995_write_41066 ks8995_write 0-4 41066 NULL
+recovery_start_show_41070 recovery_start_show 0 41070 NULL nohasharray
+ims_pcu_ofn_bit_show_41070 ims_pcu_ofn_bit_show 0 41070 &recovery_start_show_41070
++raw_recvmsg_41073 raw_recvmsg 3 41073 NULL
+sc_only_mode_read_41076 sc_only_mode_read 3-0 41076 NULL nohasharray
+usbvision_write_reg_41076 usbvision_write_reg 0 41076 &sc_only_mode_read_41076
+cfg80211_inform_bss_frame_41078 cfg80211_inform_bss_frame 4 41078 NULL
+cnic_init_id_tbl_41354 cnic_init_id_tbl 2 41354 NULL nohasharray
+show_temp_low_41354 show_temp_low 0 41354 &cnic_init_id_tbl_41354 nohasharray
+hsit_s_stream_41354 hsit_s_stream 0 41354 &show_temp_low_41354
++__cfg80211_alloc_vendor_skb_41356 __cfg80211_alloc_vendor_skb 3 41356 NULL
+jbd2_alloc_41359 jbd2_alloc 1 41359 NULL
+kovaplus_sysfs_show_actual_cpi_41367 kovaplus_sysfs_show_actual_cpi 0 41367 NULL
+max16065_show_alarm_41372 max16065_show_alarm 0 41372 NULL nohasharray
+dev_rescan_store_41481 dev_rescan_store 0-4 41481 NULL
+rndis_proc_write_41483 rndis_proc_write 0-3 41483 NULL nohasharray
+udc_bind_to_driver_41483 udc_bind_to_driver 0 41483 &rndis_proc_write_41483
++rocker_port_fwd_enable_41484 rocker_port_fwd_enable 0 41484 NULL
+ip1001_config_init_41490 ip1001_config_init 0 41490 NULL
+wep_interrupt_read_41492 wep_interrupt_read 3-0 41492 NULL
+btrfs_setsize_41495 btrfs_setsize 0 41495 NULL
+rng_dev_read_41581 rng_dev_read 3-0 41581 NULL nohasharray
+wl12xx_sdio_raw_write_41581 wl12xx_sdio_raw_write 0 41581 &rng_dev_read_41581
+bnx2x_vfpf_init_41583 bnx2x_vfpf_init 0 41583 NULL
-+security_task_setnice_41584 security_task_setnice 0 41584 NULL
++security_task_setnice_41584 security_task_setnice 0 41584 NULL nohasharray
++mv88e6xxx_wait_41584 mv88e6xxx_wait 0 41584 &security_task_setnice_41584
+nfsd_readv_41585 nfsd_readv 4 41585 NULL
+drbd_send_command_41586 drbd_send_command 4-6 41586 NULL
+batadv_tvlv_container_ogm_append_41588 batadv_tvlv_container_ogm_append 4 41588 NULL
+SyS_bpf_41770 SyS_bpf 3 41770 &blk_mq_hw_sysfs_run_show_41770
+mmc_sdio_power_restore_41772 mmc_sdio_power_restore 0 41772 NULL
+brcmf_cfg80211_vndr_cmds_dcmd_handler_41776 brcmf_cfg80211_vndr_cmds_dcmd_handler 4 41776 NULL
++x25_recvmsg_41793 x25_recvmsg 3 41793 NULL
+iwl_dbgfs_bt_notif_read_41794 iwl_dbgfs_bt_notif_read 3-0 41794 NULL
+flash_dev_run_41795 flash_dev_run 0 41795 NULL
+nilfs_sufile_alloc_41798 nilfs_sufile_alloc 0 41798 NULL
+resources_store_42255 resources_store 0-4 42255 NULL
+netxen_nic_map_indirect_address_128M_42257 netxen_nic_map_indirect_address_128M 2 42257 NULL nohasharray
+amd5536_udc_start_42257 amd5536_udc_start 0 42257 &netxen_nic_map_indirect_address_128M_42257
-+find_last_bit_42260 find_last_bit 0 42260 NULL
++find_last_bit_42260 find_last_bit 0-2 42260 NULL
+show_fc_host_port_name_42264 show_fc_host_port_name 0 42264 NULL
+ctnetlink_proto_size_42270 ctnetlink_proto_size 0 42270 NULL
+__pcpu_size_to_slot_42271 __pcpu_size_to_slot 0 42271 NULL
+sys_vmsplice_42533 sys_vmsplice 3 42533 &snd_emux_create_port_42533
+sdev_store_evt_capacity_change_reported_42538 sdev_store_evt_capacity_change_reported 0-4 42538 NULL
+mtip_hw_submit_io_42539 mtip_hw_submit_io 4 42539 NULL
-+mt9m111_set_hvflip_42542 mt9m111_set_hvflip 0 42542 NULL
++mt9m111_set_hvflip_42542 mt9m111_set_hvflip 0 42542 NULL nohasharray
++smk_read_unconfined_42542 smk_read_unconfined 3 42542 &mt9m111_set_hvflip_42542
+__wa_xfer_setup_42543 __wa_xfer_setup 0 42543 NULL nohasharray
+__register_ftrace_function_42543 __register_ftrace_function 0 42543 &__wa_xfer_setup_42543
+dbAllocNear_42546 dbAllocNear 0 42546 NULL
+rt2500pci_set_device_state_42620 rt2500pci_set_device_state 0 42620 NULL nohasharray
+vlan_dev_open_42620 vlan_dev_open 0 42620 &rt2500pci_set_device_state_42620
+secinfo_parse_42624 secinfo_parse 0 42624 NULL
-+mv88e6xxx_phy_read_42625 mv88e6xxx_phy_read 0 42625 NULL
++mv88e6xxx_phy_read_42625 mv88e6xxx_phy_read 0-2 42625 NULL
+sys_move_pages_42626 sys_move_pages 2 42626 NULL nohasharray
+map_show_42626 map_show 0 42626 &sys_move_pages_42626
+xfs_attr_leaf_removename_42629 xfs_attr_leaf_removename 0 42629 NULL
+crypto_ahash_walk_first_42630 crypto_ahash_walk_first 0 42630 NULL
+snd_hwdep_dev_register_42632 snd_hwdep_dev_register 0 42632 NULL
+ieee80211_if_fmt_dot11MeshHWMPactivePathTimeout_42635 ieee80211_if_fmt_dot11MeshHWMPactivePathTimeout 3 42635 NULL
++iommu_tbl_range_alloc_42638 iommu_tbl_range_alloc 5-3-6 42638 NULL
+b43legacy_wireless_core_init_42640 b43legacy_wireless_core_init 0 42640 NULL
+br_mdb_rehash_42643 br_mdb_rehash 2 42643 NULL
+num_controllers_42644 num_controllers 0 42644 NULL
+set_peripheral_43353 set_peripheral 0 43353 NULL
+gart_free_coherent_43362 gart_free_coherent 2-4 43362 NULL
+may_create_key_43363 may_create_key 0 43363 NULL
-+pm_print_times_show_43364 pm_print_times_show 0 43364 NULL
++pm_print_times_show_43364 pm_print_times_show 0 43364 NULL nohasharray
++btrfs_check_data_free_space_43364 btrfs_check_data_free_space 0 43364 &pm_print_times_show_43364
+pn_init_43370 pn_init 0 43370 NULL
+proc_sys_permission_43371 proc_sys_permission 0 43371 NULL nohasharray
+bnad_tx_msix_register_43371 bnad_tx_msix_register 0 43371 &proc_sys_permission_43371
+ll_direct_IO_26_43530 ll_direct_IO_26 4 43530 &alloc_instance_buffer_43530
+dvb_ca_en50221_io_write_43533 dvb_ca_en50221_io_write 3-0 43533 NULL nohasharray
+core_scsi3_alloc_aptpl_registration_43533 core_scsi3_alloc_aptpl_registration 0 43533 &dvb_ca_en50221_io_write_43533
-+read_events_43534 read_events 3 43534 NULL
++read_events_43534 read_events 3 43534 NULL nohasharray
++pdu_write_u_43534 pdu_write_u 3 43534 &read_events_43534
+cachefiles_daemon_write_43535 cachefiles_daemon_write 3-0 43535 NULL
+xfs_qm_vop_chown_reserve_43536 xfs_qm_vop_chown_reserve 0 43536 NULL
+store_43537 store 0-3 43537 NULL
+mptscsih_change_queue_depth_44196 mptscsih_change_queue_depth 2-0 44196 NULL nohasharray
+queue_int_on_old_endpoint_44196 queue_int_on_old_endpoint 0 44196 &mptscsih_change_queue_depth_44196
+pvclock_gtod_notify_44200 pvclock_gtod_notify 0 44200 NULL
-+iwl_init_alive_start_44203 iwl_init_alive_start 0 44203 NULL
++iwl_init_alive_start_44203 iwl_init_alive_start 0 44203 NULL nohasharray
++virtinput_cfg_select_44203 virtinput_cfg_select 0 44203 &iwl_init_alive_start_44203
+core_alua_show_access_type_44204 core_alua_show_access_type 0 44204 NULL
+roccat_common2_sysfs_read_info_44206 roccat_common2_sysfs_read_info 0-5-6 44206 NULL
+wl1271_acx_mem_map_44208 wl1271_acx_mem_map 0 44208 NULL
++__set_free_44211 __set_free 2 44211 NULL
+claim_ptd_buffers_44213 claim_ptd_buffers 3 44213 NULL nohasharray
+write_44213 write 0 44213 &claim_ptd_buffers_44213
+qib_assign_ctxt_44217 qib_assign_ctxt 0 44217 NULL
+enlarge_skb_44248 enlarge_skb 2 44248 NULL
+ecryptfs_init_lower_file_44249 ecryptfs_init_lower_file 0 44249 NULL
+rbd_parent_show_44252 rbd_parent_show 0 44252 NULL
++st33zp24_i2c_recv_44256 st33zp24_i2c_recv 4 44256 NULL
+tm6000_i2c_xfer_44260 tm6000_i2c_xfer 0-3 44260 NULL
+mgt_commit_44264 mgt_commit 0 44264 NULL nohasharray
+ec_bhf_open_44264 ec_bhf_open 0 44264 &mgt_commit_44264
+iwl_dbgfs_bf_params_write_44450 iwl_dbgfs_bf_params_write 0-3 44450 NULL nohasharray
+eth_change_mtu_44450 eth_change_mtu 0 44450 &iwl_dbgfs_bf_params_write_44450
+koneplus_sysfs_read_profilex_buttons_44454 koneplus_sysfs_read_profilex_buttons 0-5-6 44454 NULL
-+dma_mask_bits_show_44456 dma_mask_bits_show 0 44456 NULL
++dma_mask_bits_show_44456 dma_mask_bits_show 0 44456 NULL nohasharray
++sensor_hub_get_feature_44456 sensor_hub_get_feature 0-4 44456 &dma_mask_bits_show_44456
+af_alg_make_sg_44459 af_alg_make_sg 0-3 44459 NULL
+snd_pcm_do_suspend_44460 snd_pcm_do_suspend 0 44460 NULL
+___alloc_bootmem_node_nopanic_44461 ___alloc_bootmem_node_nopanic 2 44461 NULL
+sock_write_iter_44676 sock_write_iter 0 44676 NULL
+ipheth_rx_submit_44679 ipheth_rx_submit 0 44679 NULL nohasharray
+velocity_open_44679 velocity_open 0 44679 &ipheth_rx_submit_44679
++rawv6_sendmsg_44680 rawv6_sendmsg 3 44680 NULL
+fm10k_iov_alloc_data_44682 fm10k_iov_alloc_data 0-2 44682 NULL
+st_try_direct_io_show_44683 st_try_direct_io_show 0 44683 NULL
+cifs_setattr_nounix_44685 cifs_setattr_nounix 0 44685 NULL nohasharray
+inode_setsecurity_44924 inode_setsecurity 0 44924 NULL nohasharray
+ath5k_hw_write_ofdm_timings_44924 ath5k_hw_write_ofdm_timings 0 44924 &inode_setsecurity_44924
+lp855x_get_bl_ctl_mode_44927 lp855x_get_bl_ctl_mode 0 44927 NULL
++bcm_recvmsg_44928 bcm_recvmsg 3 44928 NULL
+get_cpu_vid_44938 get_cpu_vid 0 44938 NULL nohasharray
+store_rxbuf_44938 store_rxbuf 0-4 44938 &get_cpu_vid_44938
+loop_attr_do_show_backing_file_44940 loop_attr_do_show_backing_file 0 44940 NULL
+ptrace_writedata_45021 ptrace_writedata 4 45021 NULL nohasharray
+read_block_bitmap_45021 read_block_bitmap 2 45021 &ptrace_writedata_45021 nohasharray
+iscsi_tpg_param_store_FirstBurstLength_45021 iscsi_tpg_param_store_FirstBurstLength 0-3 45021 &read_block_bitmap_45021
-+ath10k_htt_connect_45022 ath10k_htt_connect 0 45022 NULL
++ath10k_htt_connect_45022 ath10k_htt_connect 0 45022 NULL nohasharray
++hfsplus_getxattr_45022 hfsplus_getxattr 0 45022 &ath10k_htt_connect_45022
+show_state_power_usage_45023 show_state_power_usage 0 45023 NULL nohasharray
+zd1211b_hw_init_hmac_45023 zd1211b_hw_init_hmac 0 45023 &show_state_power_usage_45023
-+dm_kvzalloc_45025 dm_kvzalloc 1 45025 NULL
++dm_kvzalloc_45025 dm_kvzalloc 1 45025 NULL nohasharray
++rose_sendmsg_45025 rose_sendmsg 3 45025 &dm_kvzalloc_45025
+hotplug_cfd_45029 hotplug_cfd 0 45029 NULL
+snd_seq_kernel_client_ctl_45032 snd_seq_kernel_client_ctl 0 45032 NULL
+vfio_ecap_init_45033 vfio_ecap_init 0 45033 NULL
+set_auto_temp_min_45111 set_auto_temp_min 0-4 45111 NULL
+pwr_missing_bcns_cnt_read_45113 pwr_missing_bcns_cnt_read 3-0 45113 NULL
+usbdev_read_45114 usbdev_read 3-0 45114 NULL
-+v9fs_xattr_user_set_45117 v9fs_xattr_user_set 0 45117 NULL
++v9fs_xattr_user_set_45117 v9fs_xattr_user_set 0 45117 NULL nohasharray
++sock_sendmsg_45117 sock_sendmsg 0 45117 &v9fs_xattr_user_set_45117
+edd_show_legacy_max_cylinder_45119 edd_show_legacy_max_cylinder 0 45119 NULL
+isku_sysfs_write_reset_45133 isku_sysfs_write_reset 6-0-5 45133 NULL nohasharray
+in_write_bytes_avail_show_45133 in_write_bytes_avail_show 0 45133 &isku_sysfs_write_reset_45133
+tcp_setsockopt_45152 tcp_setsockopt 0 45152 NULL nohasharray
+st_probe_45152 st_probe 0 45152 &tcp_setsockopt_45152
+device_write_45156 device_write 3-0 45156 NULL
-+usX2Y_urbs_start_45159 usX2Y_urbs_start 0 45159 NULL
++usX2Y_urbs_start_45159 usX2Y_urbs_start 0 45159 NULL nohasharray
++ocfs2_dq_frozen_trigger_45159 ocfs2_dq_frozen_trigger 4 45159 &usX2Y_urbs_start_45159
+SYSC_write_45160 SYSC_write 3-0 45160 NULL
+tomoyo_write_self_45161 tomoyo_write_self 3-0 45161 NULL
+xennet_create_queues_45162 xennet_create_queues 2 45162 NULL
+get_raw_temp_45318 get_raw_temp 0 45318 NULL
+__i2c_hid_command_45321 __i2c_hid_command 0 45321 NULL
+compass_command_45324 compass_command 0 45324 NULL
++quirk_strict_duplicate_filter_write_45325 quirk_strict_duplicate_filter_write 3 45325 NULL
+label_cpu_DTS_45336 label_cpu_DTS 0 45336 NULL nohasharray
+bnx2x_vfpf_config_mac_45336 bnx2x_vfpf_config_mac 0 45336 &label_cpu_DTS_45336
+copy_vm86_regs_from_user_45340 copy_vm86_regs_from_user 3 45340 NULL
+posix_lock_file_45352 posix_lock_file 0 45352 NULL
+isl1208_rtc_read_time_45356 isl1208_rtc_read_time 0 45356 NULL
+wl12xx_acx_set_rate_mgmt_params_45357 wl12xx_acx_set_rate_mgmt_params 0 45357 NULL
++xfs_file_aio_write_checks_45371 xfs_file_aio_write_checks 0 45371 NULL
+hotkey_poll_freq_store_45373 hotkey_poll_freq_store 0-4 45373 NULL
+null_alloc_repbuf_45375 null_alloc_repbuf 3 45375 NULL
+wmi_set_channel_45380 wmi_set_channel 0 45380 NULL
+b43_pcmcia_resume_45799 b43_pcmcia_resume 0 45799 &cbaf_cc_upload_45799
+raw_setsockopt_45800 raw_setsockopt 5-0 45800 NULL
+adp5520_bl_dark_dim_show_45802 adp5520_bl_dark_dim_show 0 45802 NULL nohasharray
-+michael_update_45802 michael_update 0 45802 &adp5520_bl_dark_dim_show_45802
++michael_update_45802 michael_update 0 45802 &adp5520_bl_dark_dim_show_45802 nohasharray
++quirk_simultaneous_discovery_read_45802 quirk_simultaneous_discovery_read 3 45802 &michael_update_45802
+kvmclock_cpufreq_notifier_45803 kvmclock_cpufreq_notifier 0 45803 NULL
+nct7802_read_fan_min_45804 nct7802_read_fan_min 0 45804 NULL
+lbs_rdbbp_read_45805 lbs_rdbbp_read 3-0 45805 NULL
+host_store_raid_offload_debug_45928 host_store_raid_offload_debug 0-4 45928 NULL
+ext2_xattr_security_get_45930 ext2_xattr_security_get 0 45930 NULL nohasharray
+_dln2_transfer_45930 _dln2_transfer 0 45930 &ext2_xattr_security_get_45930
-+request_ihex_firmware_45931 request_ihex_firmware 0 45931 NULL
++request_ihex_firmware_45931 request_ihex_firmware 0 45931 NULL nohasharray
++recomp_data_node_45931 recomp_data_node 0 45931 &request_ihex_firmware_45931
+bttv_s_ctrl_45933 bttv_s_ctrl 0 45933 NULL
+alloc_mr_45935 alloc_mr 1 45935 NULL nohasharray
+dlm_id_show_45935 dlm_id_show 0 45935 &alloc_mr_45935
+dn_device_event_46004 dn_device_event 0 46004 NULL
+ci_ll_read_46006 ci_ll_read 0 46006 NULL
+rtl2832_regmap_gather_write_46011 rtl2832_regmap_gather_write 0 46011 NULL
-+rt2800pci_set_device_state_46015 rt2800pci_set_device_state 0 46015 NULL
++rt2800pci_set_device_state_46015 rt2800pci_set_device_state 0 46015 NULL nohasharray
++snd_hdac_exec_verb_46015 snd_hdac_exec_verb 0 46015 &rt2800pci_set_device_state_46015
+rt2800mmio_enable_radio_46016 rt2800mmio_enable_radio 0 46016 NULL
+snd_cx231xx_capture_trigger_46017 snd_cx231xx_capture_trigger 0 46017 NULL
+acpi_ds_method_data_set_value_46018 acpi_ds_method_data_set_value 0 46018 NULL
+gpio_keys_store_disabled_switches_46139 gpio_keys_store_disabled_switches 0-4 46139 &twl6030_pwm_enable_46139
+nilfs_btree_assign_p_46142 nilfs_btree_assign_p 0 46142 NULL
+__walk_page_range_46146 __walk_page_range 0 46146 NULL
-+elan_i2c_get_checksum_46148 elan_i2c_get_checksum 0 46148 NULL
++elan_i2c_get_checksum_46148 elan_i2c_get_checksum 0 46148 NULL nohasharray
++pcibios_sriov_enable_46148 pcibios_sriov_enable 0 46148 &elan_i2c_get_checksum_46148
+set_temp_auto_temp_min_46149 set_temp_auto_temp_min 0-4 46149 NULL
+ddp_clear_map_46152 ddp_clear_map 4 46152 NULL
+dgram_bind_46155 dgram_bind 0 46155 NULL
+si470x_set_register_46160 si470x_set_register 0 46160 NULL
+ov9740_reg_write_array_46162 ov9740_reg_write_array 0 46162 NULL nohasharray
+top_off_timer_store_46162 top_off_timer_store 4-0 46162 &ov9740_reg_write_array_46162
++atalk_sendmsg_46165 atalk_sendmsg 3 46165 NULL
+qla2x00_sysfs_write_nvram_46166 qla2x00_sysfs_write_nvram 0-6-5 46166 NULL
+pcf8583_rtc_read_time_46169 pcf8583_rtc_read_time 0 46169 NULL
+write_index_46171 write_index 0 46171 NULL
+twl_direction_out_46182 twl_direction_out 2-0 46182 NULL nohasharray
+sync_inode_metadata_46182 sync_inode_metadata 0 46182 &twl_direction_out_46182
+vxge_os_dma_malloc_46184 vxge_os_dma_malloc 2 46184 NULL
-+kszphy_config_init_46188 kszphy_config_init 0 46188 NULL
++kszphy_config_init_46188 kszphy_config_init 0 46188 NULL nohasharray
++write8_reg_46188 write8_reg 4 46188 &kszphy_config_init_46188
+ax25_device_event_46189 ax25_device_event 0 46189 NULL
+atmel_set_mac_address_46192 atmel_set_mac_address 0 46192 NULL
+fq_resize_46195 fq_resize 2 46195 NULL
+c2port_show_dev_id_46410 c2port_show_dev_id 0 46410 NULL
+i2c_hid_output_raw_report_46413 i2c_hid_output_raw_report 0-3 46413 NULL nohasharray
+w1_master_attribute_show_slave_count_46413 w1_master_attribute_show_slave_count 0 46413 &i2c_hid_output_raw_report_46413
++platform_gpio_count_46416 platform_gpio_count 0 46416 NULL
+addr_to_user_46418 addr_to_user 0 46418 NULL
+vmbus_sendpacket_pagebuffer_46420 vmbus_sendpacket_pagebuffer 0 46420 NULL
+iscsi_tpg_param_show_ErrorRecoveryLevel_46422 iscsi_tpg_param_show_ErrorRecoveryLevel 0 46422 NULL
+set_min_uA_46584 set_min_uA 0-4 46584 NULL
+__iwl_up_46589 __iwl_up 0 46589 NULL
+snd_compr_write_data_46592 snd_compr_write_data 3-0 46592 NULL
++ec_device_read_46594 ec_device_read 3 46594 NULL
+copy_gr_arg_46595 copy_gr_arg 0 46595 NULL
+show_mute_46600 show_mute 0 46600 NULL nohasharray
+mode_store_46600 mode_store 0-4 46600 &show_mute_46600
+acerhdf_get_fanstate_47052 acerhdf_get_fanstate 0 47052 &wm8994_set_bits_47052
+final_47055 final 0 47055 NULL
+open_rx_47057 open_rx 0 47057 NULL
++udpv6_sendmsg_47060 udpv6_sendmsg 3 47060 NULL
+dg_dispatch_as_guest_47063 dg_dispatch_as_guest 0 47063 NULL
+ltc2945_show_value_47064 ltc2945_show_value 0 47064 NULL nohasharray
+read_pod_47064 read_pod 0 47064 <c2945_show_value_47064
+ses_recv_diag_47143 ses_recv_diag 4 47143 &acpi_ut_initialize_buffer_47143
+store_target_kb_47150 store_target_kb 0-4 47150 NULL
+sctp_get_port_47151 sctp_get_port 0 47151 NULL
-+get_attr_rdpmc_47155 get_attr_rdpmc 0 47155 NULL
++get_attr_rdpmc_47155 get_attr_rdpmc 0 47155 NULL nohasharray
++mwifiex_alloc_dma_align_buf_47155 mwifiex_alloc_dma_align_buf 1 47155 &get_attr_rdpmc_47155
+il4965_mac_start_47159 il4965_mac_start 0 47159 NULL
+gva_to_gpa_47160 gva_to_gpa 0 47160 NULL nohasharray
+show_streaming_47160 show_streaming 0 47160 &gva_to_gpa_47160
+SYSC_semop_47292 SYSC_semop 3 47292 NULL
+show_47293 show 0 47293 NULL
+uvc_video_enable_47296 uvc_video_enable 0 47296 NULL
++rhashtable_rehash_attach_47298 rhashtable_rehash_attach 0 47298 NULL
+tx_internal_desc_overflow_read_47300 tx_internal_desc_overflow_read 3-0 47300 NULL
+virtqueue_add_47306 virtqueue_add 3 47306 NULL
+il4965_fill_txpower_tbl_47307 il4965_fill_txpower_tbl 0 47307 NULL
+get_l4proto_47318 get_l4proto 0 47318 NULL
+usX2Y_usbpcm_urbs_start_47323 usX2Y_usbpcm_urbs_start 0 47323 NULL
+snd_sb16_playback_trigger_47332 snd_sb16_playback_trigger 0 47332 NULL
++sock_sendmsg_nosec_47333 sock_sendmsg_nosec 0 47333 NULL
+sctp_auth_set_active_key_47334 sctp_auth_set_active_key 0 47334 NULL nohasharray
+fd_configure_device_47334 fd_configure_device 0 47334 &sctp_auth_set_active_key_47334
+next_bitstream_store_47342 next_bitstream_store 0-4 47342 NULL
+show_ipv4_iface_bootproto_47376 show_ipv4_iface_bootproto 0 47376 NULL
+stmmac_enable_47377 stmmac_enable 0 47377 NULL
+shmem_getpage_47382 shmem_getpage 0 47382 NULL
++tun_recvmsg_47383 tun_recvmsg 3 47383 NULL
+nv_rd32_47390 nv_rd32 0 47390 NULL nohasharray
+trace_options_core_read_47390 trace_options_core_read 3 47390 &nv_rd32_47390
+pfkey_sendmsg_47394 pfkey_sendmsg 4-0 47394 NULL
+array_size_store_47421 array_size_store 0-3 47421 &vzalloc_47421
+mvs_task_prep_ata_47424 mvs_task_prep_ata 0 47424 NULL
+bLength_show_47432 bLength_show 0 47432 NULL
-+fop_write_47433 fop_write 0-3 47433 NULL
++fop_write_47433 fop_write 0-3 47433 NULL nohasharray
++caif_seqpkt_sendmsg_47433 caif_seqpkt_sendmsg 3 47433 &fop_write_47433
+dibx000_i2c_gated_tuner_xfer_47436 dibx000_i2c_gated_tuner_xfer 0-3 47436 NULL
+wl128x_configure_mcs_pll_47437 wl128x_configure_mcs_pll 0 47437 NULL
+niu_reset_tx_bmac_47440 niu_reset_tx_bmac 0 47440 NULL
+leb_read_sanity_check_47551 leb_read_sanity_check 0 47551 &drbg_statelen_47551
+pci_endrun_init_47554 pci_endrun_init 0 47554 NULL
+_ctl_diag_trigger_scsi_show_47558 _ctl_diag_trigger_scsi_show 0 47558 NULL
++acpi_gpio_package_count_47562 acpi_gpio_package_count 0 47562 NULL
+send_cmd_47563 send_cmd 0 47563 NULL
+xfs_inobt_alloc_block_47565 xfs_inobt_alloc_block 0 47565 NULL
+send_command_47567 send_command 0 47567 NULL nohasharray
+queue_attr_store_47683 queue_attr_store 0-4 47683 NULL
+mbus_show_47685 mbus_show 0 47685 NULL nohasharray
+gprs_set_mtu_47685 gprs_set_mtu 0 47685 &mbus_show_47685
++rtl8723b_parse_firmware_47686 rtl8723b_parse_firmware 0 47686 NULL
+ce6230_ctrl_msg_47692 ce6230_ctrl_msg 0 47692 NULL
+target_stat_scsi_lu_show_attr_num_cmds_47693 target_stat_scsi_lu_show_attr_num_cmds 0 47693 NULL nohasharray
+niu_reset_rx_bmac_47693 niu_reset_rx_bmac 0 47693 &target_stat_scsi_lu_show_attr_num_cmds_47693
+rtl_store_debug_level_47834 rtl_store_debug_level 0-4 47834 NULL
+pinconf_dbg_config_write_47835 pinconf_dbg_config_write 3-0 47835 NULL nohasharray
+lanai_send_47835 lanai_send 0 47835 &pinconf_dbg_config_write_47835
++raw_sendmsg_47838 raw_sendmsg 3 47838 NULL
+cmos_nvram_write_47839 cmos_nvram_write 0-6-5 47839 NULL
+did_show_47843 did_show 0 47843 NULL nohasharray
+alloc_ringdesc_47843 alloc_ringdesc 0 47843 &did_show_47843
+keyctl_instantiate_key_common_47889 keyctl_instantiate_key_common 4 47889 NULL
+read_prph_47892 read_prph 0 47892 NULL
+erst_exec_skip_next_instruction_if_true_47893 erst_exec_skip_next_instruction_if_true 0 47893 NULL
++add_fake_beep_paths_47898 add_fake_beep_paths 0 47898 NULL
+read_regr_47902 read_regr 0 47902 NULL nohasharray
+read_dsmargin_47902 read_dsmargin 0 47902 &read_regr_47902
+osd_req_read_sg_47905 osd_req_read_sg 5 47905 NULL
+dn_fib_count_nhs_48145 dn_fib_count_nhs 0 48145 NULL
+__tcp_push_pending_frames_48148 __tcp_push_pending_frames 2 48148 NULL
+SyS_vmsplice_48150 SyS_vmsplice 3 48150 NULL
-+_add_to_r4w_48152 _add_to_r4w 4 48152 NULL
++_add_to_r4w_48152 _add_to_r4w 4 48152 NULL nohasharray
++bitmap_onto_48152 bitmap_onto 4 48152 &_add_to_r4w_48152
+bnx2i_host_get_param_48156 bnx2i_host_get_param 0 48156 NULL
+isr_dma1_done_read_48159 isr_dma1_done_read 3-0 48159 NULL nohasharray
+rx4581_get_datetime_48159 rx4581_get_datetime 0 48159 &isr_dma1_done_read_48159
+b43legacy_chip_init_48439 b43legacy_chip_init 0 48439 NULL
+print_filtered_48442 print_filtered 0-2 48442 NULL
+snd_find_free_minor_48446 snd_find_free_minor 0 48446 NULL
-+vlv_pipe_crc_ctl_reg_48447 vlv_pipe_crc_ctl_reg 0 48447 NULL
++vlv_pipe_crc_ctl_reg_48447 vlv_pipe_crc_ctl_reg 0 48447 NULL nohasharray
++ext3_direct_IO_48447 ext3_direct_IO 3 48447 &vlv_pipe_crc_ctl_reg_48447
+shmem_add_to_page_cache_48451 shmem_add_to_page_cache 0 48451 NULL
+stac_beep_switch_ctl_48456 stac_beep_switch_ctl 0 48456 NULL nohasharray
+dlfb_ops_set_par_48456 dlfb_ops_set_par 0 48456 &stac_beep_switch_ctl_48456
+udp_lib_get_port_48545 udp_lib_get_port 0 48545 NULL nohasharray
+l2tp_ip6_open_48545 l2tp_ip6_open 0 48545 &udp_lib_get_port_48545
+nvbios_extend_48550 nvbios_extend 2 48550 NULL
++f2fs_direct_IO_48556 f2fs_direct_IO 3 48556 NULL
+b43_upload_initvals_48559 b43_upload_initvals 0 48559 NULL
+m88e1116r_config_init_48560 m88e1116r_config_init 0 48560 NULL
+ath10k_fw_stats_read_48561 ath10k_fw_stats_read 3-0 48561 NULL
+update_fw_48597 update_fw 0 48597 NULL
+get_register_interruptible_48598 get_register_interruptible 0 48598 NULL
+label_SKIN_48603 label_SKIN 0 48603 NULL
++ext4_ind_direct_IO_48607 ext4_ind_direct_IO 3 48607 NULL
+il3945_show_channels_48609 il3945_show_channels 0 48609 NULL
+ctrl_48612 ctrl 0 48612 NULL
+ufs_dtogd_48616 ufs_dtogd 0-2 48616 NULL
+uwb_radio_force_channel_48645 uwb_radio_force_channel 0 48645 NULL
+isl29003_set_mode_48650 isl29003_set_mode 0 48650 NULL
+ll_rw_extents_stats_pp_seq_write_48651 ll_rw_extents_stats_pp_seq_write 3 48651 NULL
-+__efx_reconfigure_port_48652 __efx_reconfigure_port 0 48652 NULL
++__efx_reconfigure_port_48652 __efx_reconfigure_port 0 48652 NULL nohasharray
++packet_recvmsg_48652 packet_recvmsg 3 48652 &__efx_reconfigure_port_48652
+mtd_read_48655 mtd_read 0 48655 NULL
+show_vrm_reg_48661 show_vrm_reg 0 48661 NULL nohasharray
+tg3_phy_toggle_auxctl_smdsp_48661 tg3_phy_toggle_auxctl_smdsp 0 48661 &show_vrm_reg_48661
+apds990x_lux_thresh_below_show_48763 apds990x_lux_thresh_below_show 0 48763 NULL
+l2cap_segment_sdu_48772 l2cap_segment_sdu 4 48772 NULL nohasharray
+event_buffer_read_48772 event_buffer_read 0-3 48772 &l2cap_segment_sdu_48772
-+rds_set_bool_option_48773 rds_set_bool_option 0 48773 NULL
++rds_set_bool_option_48773 rds_set_bool_option 0 48773 NULL nohasharray
++gpiod_count_48773 gpiod_count 0 48773 &rds_set_bool_option_48773
+boottime_set_48781 boottime_set 0-4 48781 NULL
+lm3533_ctrlbank_set_pwm_48784 lm3533_ctrlbank_set_pwm 0 48784 NULL
+transfer_48788 transfer 0 48788 NULL
+ntb_transport_rx_enqueue_48986 ntb_transport_rx_enqueue 0 48986 NULL
+show_48988 show 0 48988 NULL
+_alloc_set_attr_list_48991 _alloc_set_attr_list 4 48991 NULL
-+nes_store_nonidx_data_48992 nes_store_nonidx_data 0-3 48992 NULL
++nes_store_nonidx_data_48992 nes_store_nonidx_data 0-3 48992 NULL nohasharray
++mei_cl_alloc_cb_48992 mei_cl_alloc_cb 2 48992 &nes_store_nonidx_data_48992
+xen_memory_notifier_48993 xen_memory_notifier 0 48993 NULL
+rds_rm_size_48996 rds_rm_size 0-2 48996 NULL nohasharray
+rionet_open_48996 rionet_open 0 48996 &rds_rm_size_48996
+target_core_dev_pr_show_attr_res_pr_all_tgt_pts_49150 target_core_dev_pr_show_attr_res_pr_all_tgt_pts 0 49150 NULL
+atyfb_setup_generic_49151 atyfb_setup_generic 3 49151 NULL nohasharray
+divas_read_49151 divas_read 0-3 49151 &atyfb_setup_generic_49151 nohasharray
-+patch_vt1812_49151 patch_vt1812 0 49151 &divas_read_49151
++patch_vt1812_49151 patch_vt1812 0 49151 &divas_read_49151 nohasharray
++p9_client_zc_rpc_49151 p9_client_zc_rpc 7 49151 &patch_vt1812_49151
+bq24190_write_mask_49153 bq24190_write_mask 0 49153 NULL
+ipwireless_tty_received_49154 ipwireless_tty_received 3 49154 NULL
+f2fs_acl_count_49155 f2fs_acl_count 0-1 49155 NULL
+quirk_pcie_aspm_write_49416 quirk_pcie_aspm_write 0 49416 NULL
+kbd_backlight_mode_store_49419 kbd_backlight_mode_store 0-4 49419 NULL
+iscsi_nacl_attrib_show_random_r2t_offsets_49422 iscsi_nacl_attrib_show_random_r2t_offsets 0 49422 NULL
-+hdmiphy_s_stream_49426 hdmiphy_s_stream 0 49426 NULL
++hdmiphy_s_stream_49426 hdmiphy_s_stream 0 49426 NULL nohasharray
++gfs2_quota_check_49426 gfs2_quota_check 0 49426 &hdmiphy_s_stream_49426
+et131x_get_regs_len_49430 et131x_get_regs_len 0 49430 NULL
+ds1685_rtc_read_time_49432 ds1685_rtc_read_time 0 49432 NULL
+probe_kernel_read_49437 probe_kernel_read 0 49437 NULL
+write_pool_49718 write_pool 3-0 49718 NULL
+create_modalias_49720 create_modalias 0 49720 NULL
+alloc_kmem_cache_node_49725 alloc_kmem_cache_node 0 49725 NULL
++__netlink_insert_49728 __netlink_insert 0 49728 NULL
+pcnet_open_49729 pcnet_open 0 49729 NULL
+dev_pm_qos_constraints_allocate_49731 dev_pm_qos_constraints_allocate 0 49731 NULL
+sys_fsetxattr_49736 sys_fsetxattr 4 49736 NULL
+show_usblim_49746 show_usblim 0 49746 NULL nohasharray
+uvc_init_video_49746 uvc_init_video 0 49746 &show_usblim_49746
+firmware_loading_show_49748 firmware_loading_show 0 49748 NULL
-+__niu_wait_bits_clear_ipp_49750 __niu_wait_bits_clear_ipp 0 49750 NULL
++__niu_wait_bits_clear_ipp_49750 __niu_wait_bits_clear_ipp 0 49750 NULL nohasharray
++snd_hdac_get_connections_49750 snd_hdac_get_connections 0 49750 &__niu_wait_bits_clear_ipp_49750
+btrfs_chunk_num_stripes_49751 btrfs_chunk_num_stripes 0 49751 NULL
+fuse_wr_pages_49753 fuse_wr_pages 0-2-1 49753 NULL
+lifetime_write_kbytes_show_49754 lifetime_write_kbytes_show 0 49754 NULL
+ath6kl_fwlog_block_read_49836 ath6kl_fwlog_block_read 3-0 49836 NULL
+snd_azf3328_pcm_prepare_49838 snd_azf3328_pcm_prepare 0 49838 NULL nohasharray
+pci_add_dynid_49838 pci_add_dynid 0 49838 &snd_azf3328_pcm_prepare_49838
++hash_recvmsg_49844 hash_recvmsg 3 49844 NULL
+twl4030_write_49846 twl4030_write 2 49846 NULL
+show_lut_temp_49847 show_lut_temp 0 49847 NULL
+scsi_dispatch_cmd_entry_49848 scsi_dispatch_cmd_entry 3-0 49848 NULL
+kovaplus_sysfs_read_profile_settings_49882 kovaplus_sysfs_read_profile_settings 0-5-6 49882 NULL
+il_send_cmd_pdu_async_49891 il_send_cmd_pdu_async 0 49891 NULL
+tgr192_init_49892 tgr192_init 0 49892 NULL
++lb_throttle_49897 lb_throttle 0 49897 NULL
+ovs_key_attr_size_49898 ovs_key_attr_size 0 49898 NULL
+bnx2x_open_49905 bnx2x_open 0 49905 NULL
+ea_put_49907 ea_put 0 49907 NULL
+megasas_fw_crash_state_store_49923 megasas_fw_crash_state_store 0-4 49923 &show_voltage_label_49923
+_cpu_up_49927 _cpu_up 0 49927 NULL
+beacon_timeout_ms_store_49935 beacon_timeout_ms_store 0-4 49935 NULL
-+mxl301rf_set_params_49936 mxl301rf_set_params 0 49936 NULL
++mxl301rf_set_params_49936 mxl301rf_set_params 0 49936 NULL nohasharray
++md_setup_cluster_49936 md_setup_cluster 0 49936 &mxl301rf_set_params_49936
+gnttab_setup_auto_xlat_frames_49940 gnttab_setup_auto_xlat_frames 1 49940 NULL
+tpm_get_random_49950 tpm_get_random 0-3 49950 NULL
+iscsi_nacl_attrib_show_default_erl_49955 iscsi_nacl_attrib_show_default_erl 0 49955 NULL
+saa7706h_i2c_transfer_49957 saa7706h_i2c_transfer 3 49957 NULL
++__cfg80211_alloc_event_skb_49963 __cfg80211_alloc_event_skb 6 49963 NULL
+snd_soundfont_load_49964 snd_soundfont_load 0-3 49964 NULL
+store_temp_auto_boost_49966 store_temp_auto_boost 0-4 49966 NULL
++hda_widget_sysfs_init_49968 hda_widget_sysfs_init 0 49968 NULL
+bDeviceSubClass_show_49970 bDeviceSubClass_show 0 49970 NULL
+volume_write_49971 volume_write 0 49971 NULL
+set_a_bus_drop_49973 set_a_bus_drop 0-4 49973 NULL
+rose_device_event_50026 rose_device_event 0 50026 NULL
+xlog_recovery_process_trans_50028 xlog_recovery_process_trans 4 50028 NULL nohasharray
+qp_alloc_queue_50028 qp_alloc_queue 1 50028 &xlog_recovery_process_trans_50028
++caif_stream_sendmsg_50030 caif_stream_sendmsg 3 50030 NULL
+set_mtu_50032 set_mtu 0 50032 NULL
+ath10k_wmi_pdev_pktlog_enable_50033 ath10k_wmi_pdev_pktlog_enable 0 50033 NULL
+sky2_open_50034 sky2_open 0 50034 NULL
+mxl111sf_tuner_program_regs_50179 mxl111sf_tuner_program_regs 0 50179 NULL
+udc_create_dma_chain_50185 udc_create_dma_chain 0 50185 NULL
+ib_send_cm_drep_50186 ib_send_cm_drep 3 50186 NULL
++_mv88e6xxx_phy_write_indirect_50195 _mv88e6xxx_phy_write_indirect 0 50195 NULL
+store_beep_50196 store_beep 0-4 50196 NULL
+max_medium_access_timeouts_show_50197 max_medium_access_timeouts_show 0 50197 NULL
+cfg80211_roamed_bss_50198 cfg80211_roamed_bss 6-4 50198 NULL
+set_auto_brightness_50345 set_auto_brightness 0 50345 NULL
+__orinoco_up_50349 __orinoco_up 0 50349 NULL
+nr_overcommit_hugepages_show_50351 nr_overcommit_hugepages_show 0 50351 NULL
++efx_nic_update_stats_50352 efx_nic_update_stats 2 50352 NULL
+selinux_file_permission_50354 selinux_file_permission 0 50354 NULL
+isdn_ppp_read_50356 isdn_ppp_read 4-0 50356 NULL
+unpack_u16_chunk_50357 unpack_u16_chunk 0 50357 NULL
+ad7877_gpio3_show_50397 ad7877_gpio3_show 0 50397 NULL
+base_sock_create_50400 base_sock_create 0 50400 NULL
+snd_mask_refine_last_50406 snd_mask_refine_last 0 50406 NULL
-+inode_getsecctx_50410 inode_getsecctx 0 50410 NULL
++inode_getsecctx_50410 inode_getsecctx 0 50410 NULL nohasharray
++read8_reg_50410 read8_reg 4 50410 &inode_getsecctx_50410
+l2tp_ip_sendmsg_50411 l2tp_ip_sendmsg 4-0 50411 NULL
+recomp_data_node_50412 recomp_data_node 0 50412 NULL
+tg_set_rt_bandwidth_50413 tg_set_rt_bandwidth 0 50413 NULL
+mt2063_setreg_50645 mt2063_setreg 0 50645 NULL
+show_50648 show 0 50648 NULL
+ext3_readpage_50653 ext3_readpage 0 50653 NULL
++fat_direct_IO_50654 fat_direct_IO 3 50654 NULL
+show_fc_rport_node_name_50655 show_fc_rport_node_name 0 50655 NULL
+snd_seq_ioctl_set_queue_info_50657 snd_seq_ioctl_set_queue_info 0 50657 NULL
+raid56_parity_alloc_scrub_rbio_50658 raid56_parity_alloc_scrub_rbio 4 50658 NULL
+brcm_phy_setbits_51027 brcm_phy_setbits 0 51027 NULL
+fuse_conn_congestion_threshold_read_51028 fuse_conn_congestion_threshold_read 3-0 51028 NULL
+xfs_dir2_grow_inode_51030 xfs_dir2_grow_inode 0 51030 NULL
-+dump_midi_51040 dump_midi 3 51040 NULL
++mv88e6xxx_phy_read_indirect_51035 mv88e6xxx_phy_read_indirect 2 51035 NULL
++dump_midi_51040 dump_midi 3 51040 NULL nohasharray
++cma_free_write_51040 cma_free_write 2 51040 &dump_midi_51040
+usb_get_descriptor_51041 usb_get_descriptor 0 51041 NULL
+srpt_alloc_ioctx_51042 srpt_alloc_ioctx 2-3 51042 NULL nohasharray
-+i915_gem_object_get_pages_phys_51042 i915_gem_object_get_pages_phys 0 51042 &srpt_alloc_ioctx_51042
++i915_gem_object_get_pages_phys_51042 i915_gem_object_get_pages_phys 0 51042 &srpt_alloc_ioctx_51042 nohasharray
++req_run_51042 req_run 0 51042 &i915_gem_object_get_pages_phys_51042
+store_detach_51045 store_detach 0-4 51045 NULL
+show_51050 show 0 51050 NULL nohasharray
+carl9170_mac_reset_51050 carl9170_mac_reset 0 51050 &show_51050
+nilfs_checkpoints_next_checkpoint_show_51093 nilfs_checkpoints_next_checkpoint_show 0 51093 NULL
+solo_enc_v4l2_init_51094 solo_enc_v4l2_init 2 51094 NULL
+__ocfs2_find_path_51096 __ocfs2_find_path 0 51096 NULL
++hci_req_run_skb_51098 hci_req_run_skb 0 51098 NULL
+ath10k_vdev_start_51101 ath10k_vdev_start 0 51101 NULL
+target_stat_scsi_auth_intr_show_attr_att_count_51106 target_stat_scsi_auth_intr_show_attr_att_count 0 51106 NULL
+ti_recv_51110 ti_recv 3 51110 NULL nohasharray
+tx_sg_51567 tx_sg 0 51567 NULL
+batadv_tt_prepare_tvlv_local_data_51568 batadv_tt_prepare_tvlv_local_data 0 51568 NULL
+netlink_broadcast_51573 netlink_broadcast 0 51573 NULL
++bt_sock_stream_recvmsg_51582 bt_sock_stream_recvmsg 3 51582 NULL
+mlx4_en_vlan_rx_add_vid_51584 mlx4_en_vlan_rx_add_vid 0 51584 NULL
+eeprom_93xx46_store_erase_51585 eeprom_93xx46_store_erase 0-4 51585 NULL
+ixgb_get_eeprom_len_51586 ixgb_get_eeprom_len 0 51586 NULL
+iscsi_stat_logout_attr_show_52087 iscsi_stat_logout_attr_show 0 52087 &amd_ec_read_52087
+nsm_get_handle_52089 nsm_get_handle 4 52089 NULL nohasharray
+rt2x00debug_read_rf_52089 rt2x00debug_read_rf 0-3 52089 &nsm_get_handle_52089
++udp_recvmsg_52094 udp_recvmsg 3 52094 NULL
+affs_do_readpage_ofs_52095 affs_do_readpage_ofs 0 52095 NULL
+ulist_add_merge_52096 ulist_add_merge 0 52096 NULL
+mtrr_save_52097 mtrr_save 0 52097 NULL
+snd_rme96_capture_prepare_52380 snd_rme96_capture_prepare 0 52380 NULL
+iwl_nvm_init_52382 iwl_nvm_init 0 52382 NULL
+isdn_writebuf_stub_52383 isdn_writebuf_stub 4-0 52383 NULL
-+task_has_security_52386 task_has_security 0 52386 NULL
++task_has_security_52386 task_has_security 0 52386 NULL nohasharray
++nct7904_write_reg_52386 nct7904_write_reg 0 52386 &task_has_security_52386
+jfs_setxattr_52389 jfs_setxattr 4-0 52389 NULL
+input_print_modalias_bits_52395 input_print_modalias_bits 0 52395 NULL
+svc_partial_recvfrom_52396 svc_partial_recvfrom 4 52396 NULL
+show_id_ext_52472 show_id_ext 0 52472 NULL
+cifs_readpage_worker_52477 cifs_readpage_worker 0 52477 NULL nohasharray
+ieee80211_alloc_txb_52477 ieee80211_alloc_txb 2-1 52477 &cifs_readpage_worker_52477
++tipc_sendmsg_52481 tipc_sendmsg 3 52481 NULL
+ocfs2_extend_no_holes_52483 ocfs2_extend_no_holes 0 52483 NULL
+pch_i2c_wait_for_check_xfer_52485 pch_i2c_wait_for_check_xfer 0 52485 NULL nohasharray
+snd_hda_gen_build_controls_52485 snd_hda_gen_build_controls 0 52485 &pch_i2c_wait_for_check_xfer_52485
+set_reset_mode_52952 set_reset_mode 0 52952 &twl4030_madc_set_irq_52952
+dev_bus_rescan_store_52953 dev_bus_rescan_store 0-4 52953 NULL
+adv7170_write_52956 adv7170_write 0 52956 NULL
++cma_alloc_mem_52959 cma_alloc_mem 2 52959 NULL
+tpacpi_driver_wwan_emulstate_store_52960 tpacpi_driver_wwan_emulstate_store 0-3 52960 NULL
+ieee80211_if_fmt_fwded_mcast_52961 ieee80211_if_fmt_fwded_mcast 3 52961 NULL
+hx8357_spi_write_then_read_52964 hx8357_spi_write_then_read 3 52964 NULL
+C_SYSC_io_getevents_53191 C_SYSC_io_getevents 3 53191 NULL
+ti_write_room_53194 ti_write_room 0 53194 NULL
+xfs_btree_updkey_53195 xfs_btree_updkey 0 53195 NULL
++dax_io_53196 dax_io 4-3 53196 NULL
+hackrf_alloc_urbs_53198 hackrf_alloc_urbs 0 53198 NULL
+SyS_init_module_53202 SyS_init_module 2 53202 NULL
+toss_secs_write_53205 toss_secs_write 3-0 53205 NULL
+smack_sb_statfs_53255 smack_sb_statfs 0 53255 NULL
+xfs_trans_read_buf_map_53258 xfs_trans_read_buf_map 5-0 53258 NULL nohasharray
+target_core_dev_wwn_store_attr_vpd_protocol_identifier_53258 target_core_dev_wwn_store_attr_vpd_protocol_identifier 0-3 53258 &xfs_trans_read_buf_map_53258
++bcmgenet_alloc_rx_buffers_53259 bcmgenet_alloc_rx_buffers 0 53259 NULL
+ipr_change_queue_depth_53263 ipr_change_queue_depth 2-0 53263 NULL nohasharray
+ip6_tnl_dev_init_gen_53263 ip6_tnl_dev_init_gen 0 53263 &ipr_change_queue_depth_53263
+picolcd_operation_mode_store_53264 picolcd_operation_mode_store 0-4 53264 NULL
+dev_debug_store_53301 dev_debug_store 0-4 53301 NULL
+isku_sysfs_write_key_mask_53305 isku_sysfs_write_key_mask 6-0-5 53305 NULL nohasharray
+wishbone_serial_open_53305 wishbone_serial_open 0 53305 &isku_sysfs_write_key_mask_53305
++x25_sendmsg_53311 x25_sendmsg 3 53311 NULL
+dib7090p_rw_on_apb_53315 dib7090p_rw_on_apb 0-3 53315 NULL
+batadv_interface_rx_53325 batadv_interface_rx 4 53325 NULL
+usb_rapid_charge_show_53327 usb_rapid_charge_show 0 53327 NULL nohasharray
+powr1220_show_voltage_53637 powr1220_show_voltage 0 53637 NULL nohasharray
+iwl_set_mode_53637 iwl_set_mode 0 53637 &powr1220_show_voltage_53637
+si_fan_ctrl_set_fan_speed_percent_53640 si_fan_ctrl_set_fan_speed_percent 0 53640 NULL
-+nr_sendmsg_53656 nr_sendmsg 4-0 53656 NULL
++nr_sendmsg_53656 nr_sendmsg 4-0 53656 NULL nohasharray
++pn_sendmsg_53656 pn_sendmsg 3 53656 &nr_sendmsg_53656
+allocate_page_53658 allocate_page 0 53658 NULL nohasharray
+__bitmap_parse_53658 __bitmap_parse 0 53658 &allocate_page_53658
+__nfs4_proc_set_acl_53665 __nfs4_proc_set_acl 0 53665 NULL
+nes_show_ee_cmd_53765 nes_show_ee_cmd 0 53765 NULL nohasharray
+smo8800_misc_read_53765 smo8800_misc_read 0-3 53765 &nes_show_ee_cmd_53765
+store_53768 store 0-3 53768 NULL
++i915_gem_execbuffer_parse_53770 i915_gem_execbuffer_parse 5-6 53770 NULL
+ext4_walk_page_buffers_53771 ext4_walk_page_buffers 0 53771 NULL
+ext2_acl_count_53773 ext2_acl_count 0-1 53773 NULL
+radeon_show_edid1_53782 radeon_show_edid1 6-0-5 53782 NULL
+show_in_beep_54074 show_in_beep 0 54074 NULL
+ext3_xattr_security_get_54081 ext3_xattr_security_get 0 54081 NULL
+cachefiles_daemon_range_error_54092 cachefiles_daemon_range_error 0 54092 NULL
++bitmap_bitremap_54096 bitmap_bitremap 4 54096 NULL
+remove_id_store_54097 remove_id_store 0-3 54097 NULL
+snd_cs5535audio_trigger_54101 snd_cs5535audio_trigger 0 54101 NULL
+altera_set_ir_pre_54103 altera_set_ir_pre 2 54103 NULL nohasharray
+get_temp_alarm_54267 get_temp_alarm 0 54267 NULL
+mwifiex_getlog_read_54269 mwifiex_getlog_read 3-0 54269 NULL
+kstrtou16_from_user_54274 kstrtou16_from_user 2 54274 NULL
++snd_hda_query_supported_pcm_54275 snd_hda_query_supported_pcm 0 54275 NULL
+sizeof_long_54276 sizeof_long 0 54276 NULL
+ubi_calc_data_len_54279 ubi_calc_data_len 0-3 54279 NULL nohasharray
+bond_option_tlb_dynamic_lb_set_54279 bond_option_tlb_dynamic_lb_set 0 54279 &ubi_calc_data_len_54279
+o2nm_cluster_attr_idle_timeout_ms_read_54400 o2nm_cluster_attr_idle_timeout_ms_read 0 54400 NULL nohasharray
+set_gss_proxy_54400 set_gss_proxy 0 54400 &o2nm_cluster_attr_idle_timeout_ms_read_54400
+snd_pcm_add_chmap_ctls_54404 snd_pcm_add_chmap_ctls 0 54404 NULL
-+efx_nic_describe_stats_54407 efx_nic_describe_stats 0 54407 NULL
++efx_nic_describe_stats_54407 efx_nic_describe_stats 0-2 54407 NULL
++vmbus_sendpacket_ctl_54410 vmbus_sendpacket_ctl 0 54410 NULL
+__iscsi_disc_show_authenticate_target_54411 __iscsi_disc_show_authenticate_target 0 54411 NULL
+iio_trigger_register_54412 iio_trigger_register 0 54412 NULL
+ath10k_install_peer_wep_keys_54414 ath10k_install_peer_wep_keys 0 54414 NULL
+s5k83a_set_brightness_54578 s5k83a_set_brightness 0 54578 NULL
+rds_getname_54579 rds_getname 0 54579 NULL
+fw_iso_buffer_init_54582 fw_iso_buffer_init 3 54582 NULL
++pfkey_recvmsg_54588 pfkey_recvmsg 3 54588 NULL
+xfrm_polexpire_msgsize_54589 xfrm_polexpire_msgsize 0 54589 NULL
+sync_callback_54596 sync_callback 0 54596 NULL
+authorized_default_show_54600 authorized_default_show 0 54600 NULL nohasharray
+platform_get_irq_byname_54700 platform_get_irq_byname 0 54700 NULL
+smack_task_setscheduler_54707 smack_task_setscheduler 0 54707 NULL
+rfkill_fop_read_54711 rfkill_fop_read 3-0 54711 NULL
++wmi_echo_54712 wmi_echo 0 54712 NULL
+hpet_read_54717 hpet_read 0-3 54717 NULL nohasharray
+iio_trigger_write_current_54717 iio_trigger_write_current 0-4 54717 &hpet_read_54717
+_add_sg_continuation_descriptor_54721 _add_sg_continuation_descriptor 3 54721 NULL nohasharray
+nvkm_bar_create__54867 nvkm_bar_create_ 4 54867 NULL nohasharray
+cpuset_track_online_nodes_54867 cpuset_track_online_nodes 0 54867 &nvkm_bar_create__54867
+show_learning_54874 show_learning 0 54874 NULL
++xfs_vm_direct_IO_54876 xfs_vm_direct_IO 3 54876 NULL
+time_show_54879 time_show 0 54879 NULL nohasharray
+xfs_alloc_read_agfl_54879 xfs_alloc_read_agfl 0 54879 &time_show_54879
+mlx4_en_tunnel_steer_add_54880 mlx4_en_tunnel_steer_add 0 54880 NULL
+dev_exception_add_54979 dev_exception_add 0 54979 &ubi_change_vtbl_record_54979
+virtual_gb_show_54981 virtual_gb_show 0 54981 NULL
+_queue_data_54983 _queue_data 4 54983 NULL
-+cachefiles_daemon_inuse_54984 cachefiles_daemon_inuse 0 54984 NULL
++cachefiles_daemon_inuse_54984 cachefiles_daemon_inuse 0 54984 NULL nohasharray
++dev_queue_xmit_sk_54984 dev_queue_xmit_sk 0 54984 &cachefiles_daemon_inuse_54984
+net2280_start_54985 net2280_start 0 54985 NULL
+ext3_xattr_get_54989 ext3_xattr_get 0 54989 NULL nohasharray
+padlock_sha256_init_nano_54989 padlock_sha256_init_nano 0 54989 &ext3_xattr_get_54989
+cx231xx_v4l2_read_55014 cx231xx_v4l2_read 3-0 55014 NULL
+ipvlan_vlan_rx_add_vid_55020 ipvlan_vlan_rx_add_vid 0 55020 NULL
+driver_pin_configs_show_55022 driver_pin_configs_show 0 55022 NULL
++nfs_post_op_update_inode_55023 nfs_post_op_update_inode 0 55023 NULL
+error_error_null_Frame_tx_start_read_55024 error_error_null_Frame_tx_start_read 3-0 55024 NULL
+firmware_loading_store_55029 firmware_loading_store 0-4 55029 NULL
+ubifs_read_node_wbuf_55034 ubifs_read_node_wbuf 0 55034 NULL
+lanai_setup_tx_vci_55074 lanai_setup_tx_vci 0 55074 &iscsi_stat_tgt_attr_show_attr_inst_55074
+apei_exec_run_55075 apei_exec_run 0 55075 NULL
+bitmap_storage_alloc_55077 bitmap_storage_alloc 2-0 55077 NULL
-+fuse_read_interrupt_55081 fuse_read_interrupt 0 55081 NULL
++fuse_read_interrupt_55081 fuse_read_interrupt 0 55081 NULL nohasharray
++ath9k_hw_read_array_55081 ath9k_hw_read_array 3 55081 &fuse_read_interrupt_55081
+acq_write_55082 acq_write 0-3 55082 NULL nohasharray
+cdc_mbim_rx_add_vid_55082 cdc_mbim_rx_add_vid 0 55082 &acq_write_55082
+lnc_add_55085 lnc_add 0 55085 NULL
+gpio_trig_gpio_show_55336 gpio_trig_gpio_show 0 55336 NULL
+reg_read_55337 reg_read 0 55337 NULL
+vme_user_read_55338 vme_user_read 3 55338 NULL
++__set_pwm_55339 __set_pwm 0 55339 NULL
+read_byte_55340 read_byte 0 55340 NULL
+__wa_xfer_setup_sizes_55342 __wa_xfer_setup_sizes 0 55342 NULL
+SYSC_recvfrom_55346 SYSC_recvfrom 3 55346 NULL
+unmerge_and_remove_all_rmap_items_55557 unmerge_and_remove_all_rmap_items 0 55557 NULL
+show_55563 show 0 55563 NULL
+rpc_pipe_read_55564 rpc_pipe_read 0-3 55564 NULL
++snd_find_free_minor_55567 snd_find_free_minor 0 55567 NULL
+show_ipv6_iface_link_local_addr_55568 show_ipv6_iface_link_local_addr 0 55568 NULL
+sidtab_context_to_sid_55570 sidtab_context_to_sid 0 55570 NULL nohasharray
+patch_vt1708_55570 patch_vt1708 0 55570 &sidtab_context_to_sid_55570
+edt_ft5x06_register_read_55576 edt_ft5x06_register_read 0 55576 NULL
+compat_SyS_setsockopt_55581 compat_SyS_setsockopt 5 55581 NULL
+add_partition_55588 add_partition 2 55588 NULL
++mgmt_cmd_complete_55590 mgmt_cmd_complete 6 55590 NULL
+write_inode_55592 write_inode 0 55592 NULL
+ufx_reg_write_55594 ufx_reg_write 0 55594 NULL
+ip_vs_reply6_55598 ip_vs_reply6 0 55598 NULL
+wdt_restart_handle_56057 wdt_restart_handle 0 56057 &mwifiex_wait_queue_complete_56057
+dccp_sendmsg_56058 dccp_sendmsg 4-0 56058 NULL
+pm80x_rtc_read_time_56065 pm80x_rtc_read_time 0 56065 NULL
++quirk_strict_duplicate_filter_read_56073 quirk_strict_duplicate_filter_read 3 56073 NULL
+show_fc_rport_scsi_target_id_56077 show_fc_rport_scsi_target_id 0 56077 NULL nohasharray
+qp_dequeue_locked_56077 qp_dequeue_locked 0-5-3 56077 &show_fc_rport_scsi_target_id_56077
+nilfs_segctor_create_checkpoint_56078 nilfs_segctor_create_checkpoint 0 56078 NULL
+journal_init_revoke_table_56331 journal_init_revoke_table 1 56331 NULL
+axnet_suspend_56334 axnet_suspend 0 56334 NULL
+snd_rawmidi_read_56337 snd_rawmidi_read 3-0 56337 NULL
++f81232_port_enable_56338 f81232_port_enable 0 56338 NULL
+show_fcoe_ctlr_device_fcf_dev_loss_tmo_56343 show_fcoe_ctlr_device_fcf_dev_loss_tmo 0 56343 NULL
+show_line2_56346 show_line2 0 56346 NULL
+read_human_status_56349 read_human_status 0 56349 NULL
+tcp_cwnd_test_56547 tcp_cwnd_test 0 56547 NULL nohasharray
+megasas_sysfs_show_version_56547 megasas_sysfs_show_version 0 56547 &tcp_cwnd_test_56547
+ip_vs_prepare_tunneled_skb_56550 ip_vs_prepare_tunneled_skb 3 56550 NULL
++br_get_num_vlan_infos_56557 br_get_num_vlan_infos 0 56557 NULL
+vim2m_start_streaming_56558 vim2m_start_streaming 0 56558 NULL nohasharray
+xs_watch_56558 xs_watch 0 56558 &vim2m_start_streaming_56558 nohasharray
+mmc_blk_probe_56558 mmc_blk_probe 0 56558 &xs_watch_56558
+max197_show_range_56863 max197_show_range 0 56863 &gk20a_ram_get_56863 nohasharray
+target_stat_scsi_auth_intr_show_attr_inst_56863 target_stat_scsi_auth_intr_show_attr_inst 0 56863 &max197_show_range_56863 nohasharray
+dlfb_setup_modes_56863 dlfb_setup_modes 0 56863 &target_stat_scsi_auth_intr_show_attr_inst_56863
-+check_export_56865 check_export 0 56865 NULL
-+store_sched7_56868 store_sched7 0-4 56868 NULL
++check_export_56865 check_export 0 56865 NULL nohasharray
++btrfs_direct_IO_56865 btrfs_direct_IO 3 56865 &check_export_56865
++store_sched7_56868 store_sched7 0-4 56868 NULL nohasharray
++hci_mgmt_cmd_56868 hci_mgmt_cmd 4 56868 &store_sched7_56868
+mwl8k_cmd_get_stat_56876 mwl8k_cmd_get_stat 0 56876 NULL
+ims_pcu_ofn_bit_store_56878 ims_pcu_ofn_bit_store 0-4 56878 NULL
+ext3_xattr_ibody_get_56880 ext3_xattr_ibody_get 0 56880 NULL
+load_data_57279 load_data 0-3 57279 &crc32c_intel_final_57279
+mc44s803_set_params_57281 mc44s803_set_params 0 57281 NULL
+lbs_sleepparams_write_57283 lbs_sleepparams_write 3-0 57283 NULL nohasharray
-+read_iter_57283 read_iter 0 57283 &lbs_sleepparams_write_57283
++read_iter_57283 read_iter 0 57283 &lbs_sleepparams_write_57283 nohasharray
++hid_sensor_capture_sample_57283 hid_sensor_capture_sample 3 57283 &read_iter_57283
+infos_show_57284 infos_show 0 57284 NULL
+store_tolerance_57285 store_tolerance 0-4 57285 NULL
+ath6kl_wmi_cmd_send_57286 ath6kl_wmi_cmd_send 0 57286 NULL
+fscaps_show_57434 fscaps_show 0 57434 NULL nohasharray
+fuse_notify_inval_inode_57434 fuse_notify_inval_inode 0 57434 &fscaps_show_57434
+gadget_dev_desc_bDeviceSubClass_store_57437 gadget_dev_desc_bDeviceSubClass_store 0-3 57437 NULL
++ping_v6_sendmsg_57440 ping_v6_sendmsg 3 57440 NULL
+rss_key_write_57441 rss_key_write 3-0 57441 NULL
+vmxnet3_rq_init_all_57442 vmxnet3_rq_init_all 0 57442 NULL
+ov7670_s_gain_57445 ov7670_s_gain 0 57445 NULL
+qlcnic_get_pci_func_type_57685 qlcnic_get_pci_func_type 0 57685 NULL
+show_pwm_auto_vrdhot_ramp_57686 show_pwm_auto_vrdhot_ramp 0 57686 NULL
+rt2x00debug_read_eeprom_57690 rt2x00debug_read_eeprom 0-3 57690 NULL
++skcipher_all_sg_nents_57692 skcipher_all_sg_nents 0 57692 NULL
+f1x_match_to_this_node_57695 f1x_match_to_this_node 3 57695 NULL nohasharray
+i40evf_open_57695 i40evf_open 0 57695 &f1x_match_to_this_node_57695
+ks8842_set_mac_57697 ks8842_set_mac 0 57697 NULL
+rt2500usb_get_tx_data_len_57994 rt2500usb_get_tx_data_len 0 57994 NULL
+lmLogShutdown_57995 lmLogShutdown 0 57995 NULL
+lua_sysfs_write_control_57996 lua_sysfs_write_control 0-6-5 57996 NULL
++usb_dmac_prep_slave_sg_58000 usb_dmac_prep_slave_sg 3 58000 NULL
+rx_reset_counter_read_58001 rx_reset_counter_read 3-0 58001 NULL nohasharray
+btree_csum_one_bio_58001 btree_csum_one_bio 0 58001 &rx_reset_counter_read_58001
+pfkey_create_58010 pfkey_create 0 58010 NULL
+rndis_add_response_58544 rndis_add_response 2 58544 NULL nohasharray
+xfs_attr3_leaf_to_node_58544 xfs_attr3_leaf_to_node 0 58544 &rndis_add_response_58544
+mac80211_hwsim_get_et_sset_count_58547 mac80211_hwsim_get_et_sset_count 0 58547 NULL
++llcp_sock_sendmsg_58556 llcp_sock_sendmsg 3 58556 NULL
+twl4030_madc_read_channels_58559 twl4030_madc_read_channels 0 58559 NULL
+ath10k_debug_htt_stats_req_58561 ath10k_debug_htt_stats_req 0 58561 NULL
+wep_decrypt_fail_read_58567 wep_decrypt_fail_read 3-0 58567 NULL
+uwb_bce_print_IEs_58686 uwb_bce_print_IEs 4-0 58686 NULL
+tps6586x_writes_58689 tps6586x_writes 2-3-0 58689 NULL
+nfs_scan_commit_58690 nfs_scan_commit 0 58690 NULL
-+nilfs_segbuf_submit_bh_58691 nilfs_segbuf_submit_bh 0 58691 NULL
++nilfs_segbuf_submit_bh_58691 nilfs_segbuf_submit_bh 0 58691 NULL nohasharray
++snd_hda_gen_fix_pin_power_58691 snd_hda_gen_fix_pin_power 0 58691 &nilfs_segbuf_submit_bh_58691
+tpm_show_ppi_version_58692 tpm_show_ppi_version 0 58692 NULL
+tcm_loop_tpg_store_transport_status_58695 tcm_loop_tpg_store_transport_status 0-3 58695 NULL
+regulator_min_uA_show_58696 regulator_min_uA_show 0 58696 NULL
+ecryptfs_derive_iv_58784 ecryptfs_derive_iv 0 58784 NULL
+cyapa_gen5_calibrate_pwcs_58789 cyapa_gen5_calibrate_pwcs 0 58789 NULL
+show_58791 show 0 58791 NULL
++ipx_sendmsg_58794 ipx_sendmsg 3 58794 NULL
+regmap_calc_reg_len_58795 regmap_calc_reg_len 0 58795 NULL
+smack_inode_setxattr_58801 smack_inode_setxattr 0 58801 NULL
+dlm_lock_58802 dlm_lock 0 58802 NULL nohasharray
+usbhsg_ep_enable_58825 usbhsg_ep_enable 0 58825 NULL
+tnc_read_node_nm_58830 tnc_read_node_nm 0 58830 NULL
+pm8001_chip_ssp_io_req_58831 pm8001_chip_ssp_io_req 0 58831 NULL
-+ssp_disable_sensor_58838 ssp_disable_sensor 0 58838 NULL
++ssp_disable_sensor_58838 ssp_disable_sensor 0 58838 NULL nohasharray
++pppol2tp_recvmsg_58838 pppol2tp_recvmsg 3 58838 &ssp_disable_sensor_58838
+command_write_58841 command_write 3-0 58841 NULL nohasharray
+diolan_i2c_start_58841 diolan_i2c_start 0 58841 &command_write_58841
+vendor_show_58845 vendor_show 0 58845 NULL nohasharray
+parse_output_paths_60438 parse_output_paths 0 60438 NULL
+show_carrier_60439 show_carrier 0 60439 NULL nohasharray
+elan_i2c_iap_get_mode_60439 elan_i2c_iap_get_mode 0 60439 &show_carrier_60439
++tipc_recv_stream_60440 tipc_recv_stream 3 60440 NULL
+rx_data_60442 rx_data 4 60442 NULL nohasharray
+sysv_write_begin_60442 sysv_write_begin 0 60442 &rx_data_60442
+t4_wait_op_done_60444 t4_wait_op_done 0 60444 NULL nohasharray
+nvif_object_init_60848 nvif_object_init 6 60848 NULL
+pwr_tx_with_ps_read_60851 pwr_tx_with_ps_read 3-0 60851 NULL
+show_hardware_version_60852 show_hardware_version 0 60852 NULL
-+show_shost_supported_mode_60854 show_shost_supported_mode 0 60854 NULL
++show_shost_supported_mode_60854 show_shost_supported_mode 0 60854 NULL nohasharray
++l2cap_sock_recvmsg_60854 l2cap_sock_recvmsg 3 60854 &show_shost_supported_mode_60854
+htc_issue_send_60856 htc_issue_send 0 60856 NULL
+usb_bulk_msg_60861 usb_bulk_msg 0 60861 NULL
++hsu_dma_alloc_desc_60863 hsu_dma_alloc_desc 1 60863 NULL
+alloc_buf_60864 alloc_buf 3-2 60864 NULL
+generic_writepages_60871 generic_writepages 0 60871 NULL
+show_fc_vport_vport_last_state_60872 show_fc_vport_vport_last_state 0 60872 NULL
+ch341_configure_60897 ch341_configure 0 60897 NULL
+w1_master_attribute_show_timeout_60898 w1_master_attribute_show_timeout 0 60898 NULL
+pnp_assign_irq_60906 pnp_assign_irq 0 60906 NULL
-+ceph_sync_direct_write_60907 ceph_sync_direct_write 0 60907 NULL
++ceph_sync_direct_write_60907 ceph_sync_direct_write 0 60907 NULL nohasharray
++hugetlbfs_read_actor_60907 hugetlbfs_read_actor 0-4-2 60907 &ceph_sync_direct_write_60907
+iio_debugfs_read_reg_60908 iio_debugfs_read_reg 3-0 60908 NULL nohasharray
+hfs_writepage_60908 hfs_writepage 0 60908 &iio_debugfs_read_reg_60908
+dg_dispatch_as_host_60909 dg_dispatch_as_host 0 60909 NULL
+squashfs_read_metadata_61251 squashfs_read_metadata 0-5 61251 NULL
+efi_status_to_err_61254 efi_status_to_err 0 61254 NULL
+snd_ca0106_pcm_prepare_capture_61260 snd_ca0106_pcm_prepare_capture 0 61260 NULL
-+v9fs_mmap_file_read_61262 v9fs_mmap_file_read 3-0 61262 NULL
++v9fs_mmap_file_read_61262 v9fs_mmap_file_read 3-0 61262 NULL nohasharray
++jfs_direct_IO_61262 jfs_direct_IO 3 61262 &v9fs_mmap_file_read_61262
+submit_bh_61263 submit_bh 0 61263 NULL
+attr_sensitivity_show_tpkbd_61269 attr_sensitivity_show_tpkbd 0 61269 NULL nohasharray
+t3_sge_init_ecntxt_61269 t3_sge_init_ecntxt 0 61269 &attr_sensitivity_show_tpkbd_61269
+kone_sysfs_show_actual_dpi_61804 kone_sysfs_show_actual_dpi 0 61804 NULL
+show_blank_61805 show_blank 0 61805 NULL
+mls_compute_context_len_61812 mls_compute_context_len 0 61812 NULL nohasharray
-+pch_gbe_setup_rx_resources_61812 pch_gbe_setup_rx_resources 0 61812 &mls_compute_context_len_61812
++pch_gbe_setup_rx_resources_61812 pch_gbe_setup_rx_resources 0 61812 &mls_compute_context_len_61812 nohasharray
++udp_sendmsg_61812 udp_sendmsg 3 61812 &pch_gbe_setup_rx_resources_61812
+cifs_server_get_key_61813 cifs_server_get_key 0 61813 NULL
+show_pwm_ast_61818 show_pwm_ast 0 61818 NULL
+get_cap_size_61822 get_cap_size 0 61822 NULL
+br_get_size_61907 br_get_size 0 61907 NULL
+rx_filter_arp_filter_read_61914 rx_filter_arp_filter_read 3-0 61914 NULL nohasharray
+squashfs_security_get_61914 squashfs_security_get 0 61914 &rx_filter_arp_filter_read_61914
++irda_sendmsg_61916 irda_sendmsg 3 61916 NULL
+au0828_init_isoc_61917 au0828_init_isoc 3-2-4-0 61917 NULL
+sctp_sendmsg_61919 sctp_sendmsg 4-0 61919 NULL
+csrow_ce_count_show_61921 csrow_ce_count_show 0 61921 NULL nohasharray
+pptp_outbound_pkt_62269 pptp_outbound_pkt 0 62269 NULL
+chunk_size_store_62271 chunk_size_store 0-3 62271 NULL
+security_file_permission_62278 security_file_permission 0 62278 NULL
++get_random_int_62279 get_random_int 0 62279 NULL
+pcxhr_prepare_62280 pcxhr_prepare 0 62280 NULL nohasharray
+tcm_qla2xxx_tpg_attrib_show_generate_node_acls_62280 tcm_qla2xxx_tpg_attrib_show_generate_node_acls 0 62280 &pcxhr_prepare_62280
+dccp_init_sock_62281 dccp_init_sock 0 62281 NULL
+flush_62706 flush 0 62706 NULL
+bioset_integrity_create_62708 bioset_integrity_create 2 62708 NULL nohasharray
+target_stat_scsi_tgt_dev_attr_show_62708 target_stat_scsi_tgt_dev_attr_show 0 62708 &bioset_integrity_create_62708
++netlink_recvmsg_62712 netlink_recvmsg 3 62712 NULL
+target_configure_device_62714 target_configure_device 0 62714 NULL
+gfs2_log_write_62717 gfs2_log_write 3 62717 NULL nohasharray
+ubifs_getxattr_62717 ubifs_getxattr 0 62717 &gfs2_log_write_62717
+fsa9480_get_switch_62799 fsa9480_get_switch 0 62799 NULL
+show_cam_size_62800 show_cam_size 0 62800 NULL
+ad9523_store_62804 ad9523_store 0-4 62804 NULL
++quirk_simultaneous_discovery_write_62807 quirk_simultaneous_discovery_write 3 62807 NULL
+da9052_read_chg_current_62811 da9052_read_chg_current 0 62811 NULL nohasharray
+pcap_regulator_is_enabled_62811 pcap_regulator_is_enabled 0 62811 &da9052_read_chg_current_62811 nohasharray
+set_port0_62811 set_port0 0-4 62811 &pcap_regulator_is_enabled_62811
+show_pwmfreq_63024 show_pwmfreq 0 63024 NULL
+kstrtoull_from_user_63026 kstrtoull_from_user 2 63026 NULL nohasharray
+xfs_trans_reserve_63026 xfs_trans_reserve 0 63026 &kstrtoull_from_user_63026
-+nfs_revalidate_inode_63032 nfs_revalidate_inode 0 63032 NULL
++nfs_revalidate_inode_63032 nfs_revalidate_inode 0 63032 NULL nohasharray
++_save_mc_63032 _save_mc 0-3 63032 &nfs_revalidate_inode_63032
+__vb2_perform_fileio_63033 __vb2_perform_fileio 3-0 63033 NULL
+solo_i2c_master_xfer_63036 solo_i2c_master_xfer 0-3 63036 NULL
+pipeline_defrag_to_csum_swi_read_63037 pipeline_defrag_to_csum_swi_read 3-0 63037 NULL
+SyS_gethostname_63227 SyS_gethostname 2 63227 &nvkm_device_create__63227
+ttm_bo_global_show_63228 ttm_bo_global_show 0 63228 NULL
+stk17ta8_rtc_set_alarm_63230 stk17ta8_rtc_set_alarm 0 63230 NULL
++ext2_direct_IO_63231 ext2_direct_IO 3 63231 NULL
+ctxsize_63232 ctxsize 0 63232 NULL
+module_alloc_update_bounds_rw_63233 module_alloc_update_bounds_rw 1 63233 NULL
+mwl8k_cmd_get_hw_spec_ap_63234 mwl8k_cmd_get_hw_spec_ap 0 63234 NULL
+do_convert_63247 do_convert 0 63247 NULL
+setxattr_63249 setxattr 0 63249 NULL
+ptp_read_63251 ptp_read 4-0 63251 NULL
++_iwl_dbgfs_rx_phyinfo_write_63254 _iwl_dbgfs_rx_phyinfo_write 3 63254 NULL
+bond_option_arp_ip_targets_set_63257 bond_option_arp_ip_targets_set 0 63257 NULL
+kmx61_set_power_state_63260 kmx61_set_power_state 0 63260 NULL
+xfs_dir2_leaf_getdents_63262 xfs_dir2_leaf_getdents 3 63262 NULL
+iwl_dbgfs_bcast_filters_read_63489 iwl_dbgfs_bcast_filters_read 3-0 63489 NULL
+i2c_request_63490 i2c_request 0 63490 NULL
+pm8001_ctl_max_out_io_show_63492 pm8001_ctl_max_out_io_show 0 63492 NULL
++dwapb_gpio_to_irq_63493 dwapb_gpio_to_irq 2 63493 NULL
+show_crit_hyst_63497 show_crit_hyst 0 63497 NULL
+module_attr_show_63501 module_attr_show 0 63501 NULL
+snd_pcm_plug_write_transfer_63503 snd_pcm_plug_write_transfer 0-3 63503 NULL
+set_bredr_63975 set_bredr 4 63975 &diva_xdi_write_63975
+msi001_set_tuner_63978 msi001_set_tuner 0 63978 NULL
+genlmsg_new_unicast_63982 genlmsg_new_unicast 1 63982 NULL nohasharray
-+set_mode_63982 set_mode 0-4 63982 &genlmsg_new_unicast_63982
++set_mode_63982 set_mode 0-4 63982 &genlmsg_new_unicast_63982 nohasharray
++wil_rx_snaplen_63982 wil_rx_snaplen 0 63982 &set_mode_63982
+construct_key_and_link_63985 construct_key_and_link 3 63985 NULL
+core_alua_store_offline_bit_63989 core_alua_store_offline_bit 0-3 63989 NULL
+get_host_param_63991 get_host_param 0 63991 NULL nohasharray
+ea_len_64229 ea_len 0 64229 NULL
+header_len_64232 header_len 0 64232 NULL nohasharray
+zd1201_set_mac_address_64232 zd1201_set_mac_address 0 64232 &header_len_64232
-+em28xx_i2c_xfer_64233 em28xx_i2c_xfer 0-3 64233 NULL
++em28xx_i2c_xfer_64233 em28xx_i2c_xfer 0-3 64233 NULL nohasharray
++rhashtable_insert_rehash_64233 rhashtable_insert_rehash 0 64233 &em28xx_i2c_xfer_64233
+vprbrd_i2c_status_64236 vprbrd_i2c_status 0 64236 NULL
+xfrm_acquire_msgsize_64239 xfrm_acquire_msgsize 0 64239 NULL
+brcmf_sdiod_send_buf_64245 brcmf_sdiod_send_buf 3 64245 NULL nohasharray
+map_region_64328 map_region 1 64328 NULL
+sisusbcon_clear_64329 sisusbcon_clear 5-3-4 64329 NULL
+set_pwm_temp_map_64330 set_pwm_temp_map 0-4 64330 NULL
-+ov9650_set_red_balance_64331 ov9650_set_red_balance 0 64331 NULL
++ov9650_set_red_balance_64331 ov9650_set_red_balance 0 64331 NULL nohasharray
++tipc_send_packet_64331 tipc_send_packet 3 64331 &ov9650_set_red_balance_64331
+ts_write_64336 ts_write 3-0 64336 NULL
+qla8044_write_optrom_data_64338 qla8044_write_optrom_data 4 64338 NULL
+usbtmc_write_64340 usbtmc_write 3-0 64340 NULL
+kstrtoul_from_user_64569 kstrtoul_from_user 2-0 64569 NULL
+osst_version_show_64570 osst_version_show 0 64570 NULL nohasharray
+l2tp_ip6_disconnect_64570 l2tp_ip6_disconnect 0 64570 &osst_version_show_64570
++blockdev_direct_IO_64571 blockdev_direct_IO 4 64571 NULL
+do_erase_64574 do_erase 4 64574 NULL
+__c2port_show_rev_id_64583 __c2port_show_rev_id 0 64583 NULL
+snd_usb_init_sample_rate_64586 snd_usb_init_sample_rate 0 64586 NULL
+regcache_flat_write_64702 regcache_flat_write 0 64702 NULL
+show_temp_hyst_64705 show_temp_hyst 0 64705 NULL
+_cx25821_start_audio_dma_64707 _cx25821_start_audio_dma 0 64707 NULL
++virtio_cread8_64708 virtio_cread8 0 64708 NULL
+__feat_register_sp_64712 __feat_register_sp 6-0 64712 NULL
+snd_pcm_oss_capture_position_fixup_64713 snd_pcm_oss_capture_position_fixup 0 64713 NULL nohasharray
+show_in_input2_64713 show_in_input2 0 64713 &snd_pcm_oss_capture_position_fixup_64713
+core_alua_show_secondary_write_metadata_64979 core_alua_show_secondary_write_metadata 0 64979 NULL nohasharray
+proc_sys_call_handler_64979 proc_sys_call_handler 0 64979 &core_alua_show_secondary_write_metadata_64979
+show_tcpRtoAlgorithm_64982 show_tcpRtoAlgorithm 0 64982 NULL
++l2tp_ip6_sendmsg_64989 l2tp_ip6_sendmsg 3 64989 NULL
+i7core_inject_store_col_64991 i7core_inject_store_col 0-4 64991 NULL
+sq905_command_64994 sq905_command 0 64994 NULL
+pskb_pull_65005 pskb_pull 2 65005 NULL nohasharray
+sh_mobile_ceu_videobuf_prepare_65016 sh_mobile_ceu_videobuf_prepare 0 65016 NULL
+llc_ui_listen_65018 llc_ui_listen 0 65018 NULL
+mag3110_show_samp_freq_avail_65028 mag3110_show_samp_freq_avail 0 65028 NULL
++test_ecdh_read_65032 test_ecdh_read 3 65032 NULL
+insert_dent_65034 insert_dent 7 65034 NULL
+root_id_show_65050 root_id_show 0 65050 NULL
+keene_cmd_set_65052 keene_cmd_set 0 65052 NULL
+pcibios_enable_device_65059 pcibios_enable_device 0 65059 &__erst_record_id_cache_add_one_65059 nohasharray
+be_cmd_get_active_mac_65059 be_cmd_get_active_mac 0 65059 &pcibios_enable_device_65059
+fw_write_65069 fw_write 3 65069 NULL
-+count_run_65072 count_run 0-4-5 65072 NULL nohasharray
++count_run_65072 count_run 0-4-5-2 65072 NULL nohasharray
+bnx2fc_process_l2_frame_compl_65072 bnx2fc_process_l2_frame_compl 3 65072 &count_run_65072
+koneplus_sysfs_write_info_65073 koneplus_sysfs_write_info 0-6-5 65073 NULL
+__alloc_bootmem_node_high_65076 __alloc_bootmem_node_high 2 65076 NULL nohasharray
+ttm_mem_zone_show_65319 ttm_mem_zone_show 0 65319 NULL
+write_acpi_int_65322 write_acpi_int 0 65322 NULL nohasharray
+ivtv_start_decoding_65322 ivtv_start_decoding 0 65322 &write_acpi_int_65322
++ocfs2_prepare_inode_for_write_65323 ocfs2_prepare_inode_for_write 0 65323 NULL
+pci_vpd_find_tag_65325 pci_vpd_find_tag 0-2 65325 NULL
+ds1685_rtc_sysfs_time_regs_show_65330 ds1685_rtc_sysfs_time_regs_show 0 65330 NULL
+dccp_setsockopt_service_65336 dccp_setsockopt_service 4-0 65336 NULL
+regmap_write_65478 regmap_write 0 65478 NULL
+ath_rx_edma_init_65483 ath_rx_edma_init 2 65483 NULL nohasharray
+activate_65483 activate 0 65483 &ath_rx_edma_init_65483
-+sock_recvmsg_nosec_65484 sock_recvmsg_nosec 3 65484 NULL
++sock_recvmsg_nosec_65484 sock_recvmsg_nosec 3-0 65484 NULL
+ixgbevf_get_regs_len_65486 ixgbevf_get_regs_len 0 65486 NULL
+show_temp3_beep_65487 show_temp3_beep 0 65487 NULL
+dpcm_state_read_file_65489 dpcm_state_read_file 3-0 65489 NULL nohasharray
+selnl_msglen_65499 selnl_msglen 0 65499 NULL
+wm8350_rtc_setalarm_65501 wm8350_rtc_setalarm 0 65501 NULL
+__xudc_ep_enable_65502 __xudc_ep_enable 0 65502 NULL
++ax25_recvmsg_65505 ax25_recvmsg 3 65505 NULL
+dcdbas_smi_request_65515 dcdbas_smi_request 0 65515 NULL
+tdfxfb_check_var_65516 tdfxfb_check_var 0 65516 NULL
+cyapa_gen3_write_blocks_65517 cyapa_gen3_write_blocks 0 65517 NULL
+#endif
diff --git a/tools/gcc/size_overflow_plugin/size_overflow_plugin.c b/tools/gcc/size_overflow_plugin/size_overflow_plugin.c
new file mode 100644
-index 0000000..6d103b8
+index 0000000..d7f4062
--- /dev/null
+++ b/tools/gcc/size_overflow_plugin/size_overflow_plugin.c
@@ -0,0 +1,256 @@
+tree size_overflow_type_TI;
+
+static struct plugin_info size_overflow_plugin_info = {
-+ .version = "20150512",
++ .version = "20150614",
+ .help = "no-size-overflow\tturn off size overflow checking\n",
+};
+
+}
diff --git a/tools/gcc/size_overflow_plugin/size_overflow_transform_core.c b/tools/gcc/size_overflow_plugin/size_overflow_transform_core.c
new file mode 100644
-index 0000000..c38a410
+index 0000000..c9d7068
--- /dev/null
+++ b/tools/gcc/size_overflow_plugin/size_overflow_transform_core.c
-@@ -0,0 +1,962 @@
+@@ -0,0 +1,966 @@
+/*
+ * Copyright 2011-2015 by Emese Revfy <re.emese@gmail.com>
+ * Licensed under the GPL v2, or (at your option) v3
+static gphi *overflow_create_phi_node(struct visited *visited, gphi *oldstmt, tree result)
+{
+ basic_block bb;
++ gimple stmt;
+ gphi *phi;
+ gimple_seq seq;
+ gimple_stmt_iterator gsi = gsi_for_stmt(oldstmt);
+ result = create_new_var(size_overflow_type);
+ }
+
-+ phi = create_phi_node(result, bb);
++ stmt = create_phi_node(result, bb);
++ phi = as_a_gphi(stmt);
+ gimple_phi_set_result(phi, make_ssa_name(result, phi));
+ seq = phi_nodes(bb);
+ gsi = gsi_last(seq);
+
+static void insert_cond_result(basic_block bb_true, const_gimple stmt, const_tree arg, bool min)
+{
++ gimple call_stmt;
+ gcall *func_stmt;
+ const_gimple def_stmt;
+ const_tree loc_line;
+ ssa_name = create_string_param(ssa_name);
+
+ // void report_size_overflow(const char *file, unsigned int line, const char *func, const char *ssa_name)
-+ func_stmt = gimple_build_call(report_size_overflow_decl, 4, loc_file, loc_line, current_func, ssa_name);
++ call_stmt = gimple_build_call(report_size_overflow_decl, 4, loc_file, loc_line, current_func, ssa_name);
++ func_stmt = as_a_gcall(call_stmt);
+ gsi_insert_after(&gsi, func_stmt, GSI_CONTINUE_LINKING);
+
+ report_node = cgraph_get_create_node(report_size_overflow_decl);
+}
diff --git a/tools/gcc/stackleak_plugin.c b/tools/gcc/stackleak_plugin.c
new file mode 100644
-index 0000000..1d296ce
+index 0000000..155e2c5
--- /dev/null
+++ b/tools/gcc/stackleak_plugin.c
-@@ -0,0 +1,432 @@
+@@ -0,0 +1,436 @@
+/*
+ * Copyright 2011-2015 by the PaX Team <pageexec@freemail.hu>
+ * Licensed under the GPL v2
+
+static void stackleak_check_alloca(gimple_stmt_iterator *gsi)
+{
++ gimple stmt;
+ gcall *check_alloca;
+ tree alloca_size;
+ cgraph_node_ptr node;
+
+ // insert call to void pax_check_alloca(unsigned long size)
+ alloca_size = gimple_call_arg(gsi_stmt(*gsi), 0);
-+ check_alloca = gimple_build_call(check_function_decl, 1, alloca_size);
++ stmt = gimple_build_call(check_function_decl, 1, alloca_size);
++ check_alloca = as_a_gcall(stmt);
+ gsi_insert_before(gsi, check_alloca, GSI_SAME_STMT);
+
+ // update the cgraph
+
+static void stackleak_add_instrumentation(gimple_stmt_iterator *gsi)
+{
++ gimple stmt;
+ gcall *track_stack;
+ cgraph_node_ptr node;
+ int frequency;
+ basic_block bb;
+
+ // insert call to void pax_track_stack(void)
-+ track_stack = gimple_build_call(track_function_decl, 0);
++ stmt = gimple_build_call(track_function_decl, 0);
++ track_stack = as_a_gcall(stmt);
+ gsi_insert_after(gsi, track_stack, GSI_CONTINUE_LINKING);
+
+ // update the cgraph
#endif /* _TOOLS_LINUX_COMPILER_H */
diff --git a/tools/lib/api/Makefile b/tools/lib/api/Makefile
-index 36c08b1..87c72d1 100644
+index 8bd9606..abacd96 100644
--- a/tools/lib/api/Makefile
+++ b/tools/lib/api/Makefile
-@@ -21,7 +21,7 @@ LIB_OBJS += $(OUTPUT)fd/array.o
+@@ -16,7 +16,7 @@ MAKEFLAGS += --no-print-directory
+ LIBFILE = $(OUTPUT)libapi.a
- LIBFILE = libapikfs.a
+ CFLAGS := $(EXTRA_WARNINGS) $(EXTRA_CFLAGS)
+-CFLAGS += -ggdb3 -Wall -Wextra -std=gnu99 -Werror -O6 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fPIC
++CFLAGS += -ggdb3 -Wall -Wextra -std=gnu99 -Werror -O6 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $(EXTRA_WARNINGS) $(EXTRA_CFLAGS) -fPIC
+ CFLAGS += -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
--CFLAGS = -ggdb3 -Wall -Wextra -std=gnu99 -Werror -O6 -D_FORTIFY_SOURCE=2 $(EXTRA_WARNINGS) $(EXTRA_CFLAGS) -fPIC
-+CFLAGS = -ggdb3 -Wall -Wextra -std=gnu99 -Werror -O6 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $(EXTRA_WARNINGS) $(EXTRA_CFLAGS) -fPIC
- EXTLIBS = -lelf -lpthread -lrt -lm
- ALL_CFLAGS = $(CFLAGS) $(BASIC_CFLAGS) -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
- ALL_LDFLAGS = $(LDFLAGS)
+ RM = rm -f
diff --git a/tools/perf/util/include/asm/alternative-asm.h b/tools/perf/util/include/asm/alternative-asm.h
-index 6789d788..4afd019e 100644
+index 3a3a0f1..6cf679d 100644
--- a/tools/perf/util/include/asm/alternative-asm.h
+++ b/tools/perf/util/include/asm/alternative-asm.h
-@@ -5,4 +5,7 @@
-
+@@ -6,4 +6,7 @@
#define altinstruction_entry #
+ #define ALTERNATIVE_2 #
+ .macro pax_force_retaddr rip=0, reload=0
+ .endm
})
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
-index f8f3f5fe..9bc113f 100644
+index 9097741..2472109 100644
--- a/virt/kvm/kvm_main.c
+++ b/virt/kvm/kvm_main.c
@@ -81,12 +81,17 @@ LIST_HEAD(vm_list);
static cpumask_var_t cpus_hardware_enabled;
- static int kvm_usage_count = 0;
+ static int kvm_usage_count;
-static atomic_t hardware_enable_failed;
+static atomic_unchecked_t hardware_enable_failed;
+};
struct dentry *kvm_debugfs_dir;
-
-@@ -791,7 +796,7 @@ int __kvm_set_memory_region(struct kvm *kvm,
+ EXPORT_SYMBOL_GPL(kvm_debugfs_dir);
+@@ -784,7 +789,7 @@ int __kvm_set_memory_region(struct kvm *kvm,
/* We can read the guest memory with __xxx_user() later on. */
if ((mem->slot < KVM_USER_MEM_SLOTS) &&
((mem->userspace_addr & (PAGE_SIZE - 1)) ||
(void __user *)(unsigned long)mem->userspace_addr,
mem->memory_size)))
goto out;
-@@ -1729,9 +1734,17 @@ EXPORT_SYMBOL_GPL(kvm_read_guest_cached);
+@@ -1714,9 +1719,17 @@ EXPORT_SYMBOL_GPL(kvm_read_guest_cached);
int kvm_clear_guest_page(struct kvm *kvm, gfn_t gfn, int offset, int len)
{
}
EXPORT_SYMBOL_GPL(kvm_clear_guest_page);
-@@ -2007,7 +2020,7 @@ static int kvm_vcpu_release(struct inode *inode, struct file *filp)
+@@ -1993,7 +2006,7 @@ static int kvm_vcpu_release(struct inode *inode, struct file *filp)
return 0;
}
.release = kvm_vcpu_release,
.unlocked_ioctl = kvm_vcpu_ioctl,
#ifdef CONFIG_KVM_COMPAT
-@@ -2724,7 +2737,7 @@ out:
+@@ -2713,7 +2726,7 @@ out:
}
#endif
.release = kvm_vm_release,
.unlocked_ioctl = kvm_vm_ioctl,
#ifdef CONFIG_KVM_COMPAT
-@@ -2795,7 +2808,7 @@ out:
+@@ -2784,7 +2797,7 @@ out:
return r;
}
.unlocked_ioctl = kvm_dev_ioctl,
.compat_ioctl = kvm_dev_ioctl,
.llseek = noop_llseek,
-@@ -2821,7 +2834,7 @@ static void hardware_enable_nolock(void *junk)
+@@ -2810,7 +2823,7 @@ static void hardware_enable_nolock(void *junk)
if (r) {
cpumask_clear_cpu(cpu, cpus_hardware_enabled);
- atomic_inc(&hardware_enable_failed);
+ atomic_inc_unchecked(&hardware_enable_failed);
- printk(KERN_INFO "kvm: enabling virtualization on "
- "CPU%d failed\n", cpu);
+ pr_info("kvm: enabling virtualization on CPU%d failed\n", cpu);
}
-@@ -2877,10 +2890,10 @@ static int hardware_enable_all(void)
+ }
+@@ -2865,10 +2878,10 @@ static int hardware_enable_all(void)
kvm_usage_count++;
if (kvm_usage_count == 1) {
hardware_disable_all_nolock();
r = -EBUSY;
}
-@@ -3287,7 +3300,7 @@ static void kvm_sched_out(struct preempt_notifier *pn,
+@@ -3276,7 +3289,7 @@ static void kvm_sched_out(struct preempt_notifier *pn,
kvm_arch_vcpu_put(vcpu);
}
struct module *module)
{
int r;
-@@ -3334,7 +3347,7 @@ int kvm_init(void *opaque, unsigned vcpu_size, unsigned vcpu_align,
+@@ -3323,7 +3336,7 @@ int kvm_init(void *opaque, unsigned vcpu_size, unsigned vcpu_align,
if (!vcpu_align)
vcpu_align = __alignof__(struct kvm_vcpu);
kvm_vcpu_cache = kmem_cache_create("kvm_vcpu", vcpu_size, vcpu_align,
if (!kvm_vcpu_cache) {
r = -ENOMEM;
goto out_free_3;
-@@ -3344,9 +3357,11 @@ int kvm_init(void *opaque, unsigned vcpu_size, unsigned vcpu_align,
+@@ -3333,9 +3346,11 @@ int kvm_init(void *opaque, unsigned vcpu_size, unsigned vcpu_align,
if (r)
goto out_free;
r = misc_register(&kvm_dev);
if (r) {
-@@ -3356,9 +3371,6 @@ int kvm_init(void *opaque, unsigned vcpu_size, unsigned vcpu_align,
+@@ -3345,9 +3360,6 @@ int kvm_init(void *opaque, unsigned vcpu_size, unsigned vcpu_align,
register_syscore_ops(&kvm_syscore_ops);
-
r = kvm_init_debug();
if (r) {
- printk(KERN_ERR "kvm: create debugfs files failed\n");
+ pr_err("kvm: create debugfs files failed\n");