diff options
author | Anthony G. Basile <blueness@gentoo.org> | 2014-01-11 18:06:33 -0500 |
---|---|---|
committer | Anthony G. Basile <blueness@gentoo.org> | 2014-01-11 18:06:33 -0500 |
commit | f9d957c49bf73121d7c3acf6c0e607de834344eb (patch) | |
tree | 669dc84430a91e0d42eab4bea7452dfad6b68f2a | |
parent | Grsec/PaX: 3.0-3.2.54-201401051649 (diff) | |
download | hardened-patchset-20140109.tar.gz hardened-patchset-20140109.tar.bz2 hardened-patchset-20140109.zip |
Grsec/PaX: 3.0-{3.2.54,3.12.7}-20140109183720140109
-rw-r--r-- | 3.12.7/0000_README (renamed from 3.12.6/0000_README) | 2 | ||||
-rw-r--r-- | 3.12.7/4420_grsecurity-3.0-3.12.7-201401091837.patch (renamed from 3.12.6/4420_grsecurity-3.0-3.12.6-201401021726.patch) | 929 | ||||
-rw-r--r-- | 3.12.7/4425_grsec_remove_EI_PAX.patch (renamed from 3.12.6/4425_grsec_remove_EI_PAX.patch) | 0 | ||||
-rw-r--r-- | 3.12.7/4427_force_XATTR_PAX_tmpfs.patch (renamed from 3.12.6/4427_force_XATTR_PAX_tmpfs.patch) | 0 | ||||
-rw-r--r-- | 3.12.7/4430_grsec-remove-localversion-grsec.patch (renamed from 3.12.6/4430_grsec-remove-localversion-grsec.patch) | 0 | ||||
-rw-r--r-- | 3.12.7/4435_grsec-mute-warnings.patch (renamed from 3.12.6/4435_grsec-mute-warnings.patch) | 0 | ||||
-rw-r--r-- | 3.12.7/4440_grsec-remove-protected-paths.patch (renamed from 3.12.6/4440_grsec-remove-protected-paths.patch) | 0 | ||||
-rw-r--r-- | 3.12.7/4450_grsec-kconfig-default-gids.patch (renamed from 3.12.6/4450_grsec-kconfig-default-gids.patch) | 0 | ||||
-rw-r--r-- | 3.12.7/4465_selinux-avc_audit-log-curr_ip.patch (renamed from 3.12.6/4465_selinux-avc_audit-log-curr_ip.patch) | 0 | ||||
-rw-r--r-- | 3.12.7/4470_disable-compat_vdso.patch (renamed from 3.12.6/4470_disable-compat_vdso.patch) | 0 | ||||
-rw-r--r-- | 3.12.7/4475_emutramp_default_on.patch (renamed from 3.12.6/4475_emutramp_default_on.patch) | 2 | ||||
-rw-r--r-- | 3.2.54/0000_README | 2 | ||||
-rw-r--r-- | 3.2.54/4420_grsecurity-3.0-3.2.54-201401091839.patch (renamed from 3.2.54/4420_grsecurity-3.0-3.2.54-201401051649.patch) | 93 |
13 files changed, 496 insertions, 532 deletions
diff --git a/3.12.6/0000_README b/3.12.7/0000_README index 0c79077..298b491 100644 --- a/3.12.6/0000_README +++ b/3.12.7/0000_README @@ -2,7 +2,7 @@ README ----------------------------------------------------------------------------- Individual Patch Descriptions: ----------------------------------------------------------------------------- -Patch: 4420_grsecurity-3.0-3.12.6-201401021726.patch +Patch: 4420_grsecurity-3.0-3.12.7-201401091837.patch From: http://www.grsecurity.net Desc: hardened-sources base patch from upstream grsecurity diff --git a/3.12.6/4420_grsecurity-3.0-3.12.6-201401021726.patch b/3.12.7/4420_grsecurity-3.0-3.12.7-201401091837.patch index e1b8944..923bea4 100644 --- a/3.12.6/4420_grsecurity-3.0-3.12.6-201401021726.patch +++ b/3.12.7/4420_grsecurity-3.0-3.12.7-201401091837.patch @@ -229,7 +229,7 @@ index b89a739..79768fb 100644 +zconf.lex.c zoffset.h diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt -index fcbb736..5508d8c 100644 +index 4f7c57c..a2dc685 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt @@ -1031,6 +1031,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted. @@ -243,7 +243,7 @@ index fcbb736..5508d8c 100644 hashdist= [KNL,NUMA] Large hashes allocated during boot are distributed across NUMA nodes. Defaults on for 64-bit NUMA, off otherwise. -@@ -1999,6 +2003,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted. +@@ -2001,6 +2005,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted. noexec=on: enable non-executable mappings (default) noexec=off: disable non-executable mappings @@ -254,7 +254,7 @@ index fcbb736..5508d8c 100644 nosmap [X86] Disable SMAP (Supervisor Mode Access Prevention) even if it is supported by processor. -@@ -2266,6 +2274,25 @@ bytes respectively. Such letter suffixes can also be entirely omitted. +@@ -2268,6 +2276,25 @@ 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. @@ -281,7 +281,7 @@ index fcbb736..5508d8c 100644 pcd. [PARIDE] diff --git a/Makefile b/Makefile -index 2b23383..a66cff0 100644 +index c2f0b79..2e5e090 100644 --- a/Makefile +++ b/Makefile @@ -241,8 +241,9 @@ CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \ @@ -8003,7 +8003,7 @@ index 3a9ed6a..b534681 100644 addi r3,r1,STACK_FRAME_OVERHEAD lwz r4,_DAR(r1) diff --git a/arch/powerpc/kernel/module_32.c b/arch/powerpc/kernel/module_32.c -index 2e3200c..72095ce 100644 +index 2e3200c..7118986 100644 --- a/arch/powerpc/kernel/module_32.c +++ b/arch/powerpc/kernel/module_32.c @@ -162,7 +162,7 @@ int module_frob_arch_sections(Elf32_Ehdr *hdr, @@ -8035,6 +8035,15 @@ index 2e3200c..72095ce 100644 /* Find this entry, or if that fails, the next avail. entry */ while (entry->jump[0]) { +@@ -300,7 +305,7 @@ int apply_relocate_add(Elf32_Shdr *sechdrs, + } + #ifdef CONFIG_DYNAMIC_FTRACE + module->arch.tramp = +- do_plt_call(module->module_core, ++ do_plt_call(module->module_core_rx, + (unsigned long)ftrace_caller, + sechdrs, module); + #endif diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c index 96d2fdf..f6d10c8 100644 --- a/arch/powerpc/kernel/process.c @@ -16996,7 +17005,7 @@ index 81bb91b..9392125 100644 /* diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.h -index 3d19994..732a48c 100644 +index bbc8b12..f228861 100644 --- a/arch/x86/include/asm/pgtable.h +++ b/arch/x86/include/asm/pgtable.h @@ -45,6 +45,7 @@ extern struct mm_struct *pgd_page_get_mm(struct page *page); @@ -17119,7 +17128,7 @@ index 3d19994..732a48c 100644 #include <linux/mm_types.h> #include <linux/mmdebug.h> #include <linux/log2.h> -@@ -563,7 +638,7 @@ static inline unsigned long pud_page_vaddr(pud_t pud) +@@ -570,7 +645,7 @@ static inline unsigned long pud_page_vaddr(pud_t pud) * Currently stuck as a macro due to indirect forward reference to * linux/mmzone.h's __section_mem_map_addr() definition: */ @@ -17128,7 +17137,7 @@ index 3d19994..732a48c 100644 /* Find an entry in the second-level page table.. */ static inline pmd_t *pmd_offset(pud_t *pud, unsigned long address) -@@ -603,7 +678,7 @@ static inline unsigned long pgd_page_vaddr(pgd_t pgd) +@@ -610,7 +685,7 @@ static inline unsigned long pgd_page_vaddr(pgd_t pgd) * Currently stuck as a macro due to indirect forward reference to * linux/mmzone.h's __section_mem_map_addr() definition: */ @@ -17137,7 +17146,7 @@ index 3d19994..732a48c 100644 /* to find an entry in a page-table-directory. */ static inline unsigned long pud_index(unsigned long address) -@@ -618,7 +693,7 @@ static inline pud_t *pud_offset(pgd_t *pgd, unsigned long address) +@@ -625,7 +700,7 @@ static inline pud_t *pud_offset(pgd_t *pgd, unsigned long address) static inline int pgd_bad(pgd_t pgd) { @@ -17146,7 +17155,7 @@ index 3d19994..732a48c 100644 } static inline int pgd_none(pgd_t pgd) -@@ -641,7 +716,12 @@ static inline int pgd_none(pgd_t pgd) +@@ -648,7 +723,12 @@ static inline int pgd_none(pgd_t pgd) * pgd_offset() returns a (pgd_t *) * pgd_index() is used get the offset into the pgd page's array of pgd_t's; */ @@ -17160,7 +17169,7 @@ index 3d19994..732a48c 100644 /* * a shortcut which implies the use of the kernel's pgd, instead * of a process's -@@ -652,6 +732,23 @@ static inline int pgd_none(pgd_t pgd) +@@ -659,6 +739,23 @@ static inline int pgd_none(pgd_t pgd) #define KERNEL_PGD_BOUNDARY pgd_index(PAGE_OFFSET) #define KERNEL_PGD_PTRS (PTRS_PER_PGD - KERNEL_PGD_BOUNDARY) @@ -17184,7 +17193,7 @@ index 3d19994..732a48c 100644 #ifndef __ASSEMBLY__ extern int direct_gbpages; -@@ -818,11 +915,24 @@ static inline void pmdp_set_wrprotect(struct mm_struct *mm, +@@ -825,11 +922,24 @@ static inline void pmdp_set_wrprotect(struct mm_struct *mm, * dst and src can be on the same page, but the range must not overlap, * and must not cross a page boundary. */ @@ -27338,7 +27347,7 @@ index b110fe6..d9c19f2 100644 out: diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c -index dec48bf..f4d21f7 100644 +index 1673940..4bce95e 100644 --- a/arch/x86/kvm/lapic.c +++ b/arch/x86/kvm/lapic.c @@ -55,7 +55,7 @@ @@ -27391,7 +27400,7 @@ index c0bc803..6837a50 100644 local_irq_disable(); diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c -index 2b2fce1..da76be4 100644 +index 6128914..8be1dd2 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c @@ -1316,12 +1316,12 @@ static void vmcs_write64(unsigned long field, u64 value) @@ -31195,10 +31204,10 @@ index 3aaeffc..42ea9fb 100644 + return ret ? -EFAULT : 0; +} diff --git a/arch/x86/mm/gup.c b/arch/x86/mm/gup.c -index dd74e46..0970b01 100644 +index 0596e8e..9de0b1c 100644 --- a/arch/x86/mm/gup.c +++ b/arch/x86/mm/gup.c -@@ -255,7 +255,7 @@ int __get_user_pages_fast(unsigned long start, int nr_pages, int write, +@@ -268,7 +268,7 @@ int __get_user_pages_fast(unsigned long start, int nr_pages, int write, addr = start; len = (unsigned long) nr_pages << PAGE_SHIFT; end = start + len; @@ -31207,7 +31216,7 @@ index dd74e46..0970b01 100644 (void __user *)start, len))) return 0; -@@ -331,6 +331,10 @@ int get_user_pages_fast(unsigned long start, int nr_pages, int write, +@@ -344,6 +344,10 @@ int get_user_pages_fast(unsigned long start, int nr_pages, int write, goto slow_irqon; #endif @@ -35322,7 +35331,7 @@ index cfb7447..98f2149 100644 unsigned long timeout_msec) { diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c -index 81a94a3..b711c74 100644 +index 2c2780a..5ebc310 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c @@ -98,7 +98,7 @@ static unsigned int ata_dev_set_xfermode(struct ata_device *dev); @@ -35334,7 +35343,7 @@ index 81a94a3..b711c74 100644 struct ata_force_param { const char *name; -@@ -4809,7 +4809,7 @@ void ata_qc_free(struct ata_queued_cmd *qc) +@@ -4823,7 +4823,7 @@ void ata_qc_free(struct ata_queued_cmd *qc) struct ata_port *ap; unsigned int tag; @@ -35343,7 +35352,7 @@ index 81a94a3..b711c74 100644 ap = qc->ap; qc->flags = 0; -@@ -4825,7 +4825,7 @@ void __ata_qc_complete(struct ata_queued_cmd *qc) +@@ -4839,7 +4839,7 @@ void __ata_qc_complete(struct ata_queued_cmd *qc) struct ata_port *ap; struct ata_link *link; @@ -35352,7 +35361,7 @@ index 81a94a3..b711c74 100644 WARN_ON_ONCE(!(qc->flags & ATA_QCFLAG_ACTIVE)); ap = qc->ap; link = qc->dev->link; -@@ -5944,6 +5944,7 @@ static void ata_finalize_port_ops(struct ata_port_operations *ops) +@@ -5958,6 +5958,7 @@ static void ata_finalize_port_ops(struct ata_port_operations *ops) return; spin_lock(&lock); @@ -35360,7 +35369,7 @@ index 81a94a3..b711c74 100644 for (cur = ops->inherits; cur; cur = cur->inherits) { void **inherit = (void **)cur; -@@ -5957,8 +5958,9 @@ static void ata_finalize_port_ops(struct ata_port_operations *ops) +@@ -5971,8 +5972,9 @@ static void ata_finalize_port_ops(struct ata_port_operations *ops) if (IS_ERR(*pp)) *pp = NULL; @@ -35371,7 +35380,7 @@ index 81a94a3..b711c74 100644 spin_unlock(&lock); } -@@ -6151,7 +6153,7 @@ int ata_host_register(struct ata_host *host, struct scsi_host_template *sht) +@@ -6165,7 +6167,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++) { @@ -35381,10 +35390,10 @@ index 81a94a3..b711c74 100644 } diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c -index ab58556..ed19dd2 100644 +index 377eb88..8591b44 100644 --- a/drivers/ata/libata-scsi.c +++ b/drivers/ata/libata-scsi.c -@@ -4114,7 +4114,7 @@ int ata_sas_port_init(struct ata_port *ap) +@@ -4135,7 +4135,7 @@ int ata_sas_port_init(struct ata_port *ap) if (rc) return rc; @@ -38934,10 +38943,10 @@ index a6f4cb5..6b2beb2 100644 if (IS_GEN6(dev) || IS_GEN7(dev)) { seq_printf(m, diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c -index d5c784d..06e5c36 100644 +index 5a25f24..5af2004 100644 --- a/drivers/gpu/drm/i915/i915_dma.c +++ b/drivers/gpu/drm/i915/i915_dma.c -@@ -1263,7 +1263,7 @@ static bool i915_switcheroo_can_switch(struct pci_dev *pdev) +@@ -1271,7 +1271,7 @@ static bool i915_switcheroo_can_switch(struct pci_dev *pdev) bool can_switch; spin_lock(&dev->count_lock); @@ -39105,7 +39114,7 @@ index 4b91228..590c643 100644 iir = I915_READ(IIR); diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c -index f535670..bde09e2 100644 +index aad6f7b..dcc91447 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c @@ -10019,13 +10019,13 @@ struct intel_quirk { @@ -39815,10 +39824,10 @@ index 71245d6..94c556d 100644 return radeon_debugfs_add_files(rdev, radeon_mem_types_list, i); diff --git a/drivers/gpu/drm/radeon/rs690.c b/drivers/gpu/drm/radeon/rs690.c -index 1447d79..40b2a5b 100644 +index 3c38f0a..13816e3 100644 --- a/drivers/gpu/drm/radeon/rs690.c +++ b/drivers/gpu/drm/radeon/rs690.c -@@ -345,9 +345,11 @@ static void rs690_crtc_bandwidth_compute(struct radeon_device *rdev, +@@ -355,9 +355,11 @@ static void rs690_crtc_bandwidth_compute(struct radeon_device *rdev, if (max_bandwidth.full > rdev->pm.sideport_bandwidth.full && rdev->pm.sideport_bandwidth.full) max_bandwidth = rdev->pm.sideport_bandwidth; @@ -41516,7 +41525,7 @@ index 922a7fe..bb035db 100644 gameport->dev.release = gameport_release_port; if (gameport->parent) diff --git a/drivers/input/input.c b/drivers/input/input.c -index e75d015..57d1c28 100644 +index 74f4798..d9f7168 100644 --- a/drivers/input/input.c +++ b/drivers/input/input.c @@ -1734,7 +1734,7 @@ EXPORT_SYMBOL_GPL(input_class); @@ -44741,10 +44750,10 @@ index e1dd8c7..9f91b3f 100644 /* service connection information */ struct ath10k_htc_svc_conn_req { diff --git a/drivers/net/wireless/ath/ath9k/ar9002_mac.c b/drivers/net/wireless/ath/ath9k/ar9002_mac.c -index 8d78253..bebbb68 100644 +index a366d6b..b6f28f8 100644 --- a/drivers/net/wireless/ath/ath9k/ar9002_mac.c +++ b/drivers/net/wireless/ath/ath9k/ar9002_mac.c -@@ -184,8 +184,8 @@ ar9002_set_txdesc(struct ath_hw *ah, void *ds, struct ath_tx_info *i) +@@ -218,8 +218,8 @@ ar9002_set_txdesc(struct ath_hw *ah, void *ds, struct ath_tx_info *i) ads->ds_txstatus6 = ads->ds_txstatus7 = 0; ads->ds_txstatus8 = ads->ds_txstatus9 = 0; @@ -44755,7 +44764,7 @@ index 8d78253..bebbb68 100644 ctl1 = i->buf_len[0] | (i->is_last ? 0 : AR_TxMore); ctl6 = SM(i->keytype, AR_EncrType); -@@ -199,26 +199,26 @@ ar9002_set_txdesc(struct ath_hw *ah, void *ds, struct ath_tx_info *i) +@@ -233,26 +233,26 @@ ar9002_set_txdesc(struct ath_hw *ah, void *ds, struct ath_tx_info *i) if ((i->is_first || i->is_last) && i->aggr != AGGR_BUF_MIDDLE && i->aggr != AGGR_BUF_LAST) { @@ -44789,7 +44798,7 @@ index 8d78253..bebbb68 100644 return; } -@@ -243,7 +243,7 @@ ar9002_set_txdesc(struct ath_hw *ah, void *ds, struct ath_tx_info *i) +@@ -277,7 +277,7 @@ ar9002_set_txdesc(struct ath_hw *ah, void *ds, struct ath_tx_info *i) break; } @@ -44798,7 +44807,7 @@ index 8d78253..bebbb68 100644 | (i->flags & ATH9K_TXDESC_VMF ? AR_VirtMoreFrag : 0) | SM(i->txpower, AR_XmitPower) | (i->flags & ATH9K_TXDESC_VEOL ? AR_VEOL : 0) -@@ -253,19 +253,19 @@ ar9002_set_txdesc(struct ath_hw *ah, void *ds, struct ath_tx_info *i) +@@ -287,19 +287,19 @@ ar9002_set_txdesc(struct ath_hw *ah, void *ds, struct ath_tx_info *i) | (i->flags & ATH9K_TXDESC_RTSENA ? AR_RTSEnable : (i->flags & ATH9K_TXDESC_CTSENA ? AR_CTSEnable : 0)); @@ -45673,40 +45682,10 @@ index f4a18f5..ff2463c 100644 int retval = -ENOMEM; diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c -index 7128cfd..6fdc261 100644 +index 7128cfd..a0640d6 100644 --- a/drivers/pci/pci-sysfs.c +++ b/drivers/pci/pci-sysfs.c -@@ -634,6 +634,9 @@ pci_write_config(struct file* filp, struct kobject *kobj, - loff_t init_off = off; - u8 *data = (u8*) buf; - -+ if (!capable(CAP_SYS_RAWIO)) -+ return -EPERM; -+ - if (off > dev->cfg_size) - return 0; - if (off + count > dev->cfg_size) { -@@ -940,6 +943,9 @@ pci_mmap_resource(struct kobject *kobj, struct bin_attribute *attr, - resource_size_t start, end; - int i; - -+ if (!capable(CAP_SYS_RAWIO)) -+ return -EPERM; -+ - for (i = 0; i < PCI_ROM_RESOURCE; i++) - if (res == &pdev->resource[i]) - break; -@@ -997,6 +1003,9 @@ pci_resource_io(struct file *filp, struct kobject *kobj, - unsigned long port = off; - int i; - -+ if (!capable(CAP_SYS_RAWIO)) -+ return -EPERM; -+ - for (i = 0; i < PCI_ROM_RESOURCE; i++) - if (res == &pdev->resource[i]) - break; -@@ -1083,7 +1092,7 @@ static int pci_create_attr(struct pci_dev *pdev, int num, int write_combine) +@@ -1083,7 +1083,7 @@ static int pci_create_attr(struct pci_dev *pdev, int num, int write_combine) { /* allocate attribute structure, piggyback attribute name */ int name_len = write_combine ? 13 : 10; @@ -45715,7 +45694,7 @@ index 7128cfd..6fdc261 100644 int retval; res_attr = kzalloc(sizeof(*res_attr) + name_len, GFP_ATOMIC); -@@ -1268,7 +1277,7 @@ static struct device_attribute reset_attr = __ATTR(reset, 0200, NULL, reset_stor +@@ -1268,7 +1268,7 @@ static struct device_attribute reset_attr = __ATTR(reset, 0200, NULL, reset_stor static int pci_create_capabilities_sysfs(struct pci_dev *dev) { int retval; @@ -45724,7 +45703,7 @@ index 7128cfd..6fdc261 100644 /* If the device has VPD, try to expose it in sysfs. */ if (dev->vpd) { -@@ -1315,7 +1324,7 @@ int __must_check pci_create_sysfs_dev_files (struct pci_dev *pdev) +@@ -1315,7 +1315,7 @@ int __must_check pci_create_sysfs_dev_files (struct pci_dev *pdev) { int retval; int rom_size = 0; @@ -45777,20 +45756,10 @@ index 7ef0f86..17b710f 100644 /* No printks while decoding is disabled! */ if (!dev->mmio_always_on) { diff --git a/drivers/pci/proc.c b/drivers/pci/proc.c -index cdc7836..0c964c9 100644 +index cdc7836..528635c 100644 --- a/drivers/pci/proc.c +++ b/drivers/pci/proc.c -@@ -117,6 +117,9 @@ proc_bus_pci_write(struct file *file, const char __user *buf, size_t nbytes, lof - int size = dev->cfg_size; - int cnt; - -+ if (!capable(CAP_SYS_RAWIO)) -+ return -EPERM; -+ - if (pos >= size) - return 0; - if (nbytes >= size) -@@ -434,7 +437,16 @@ static const struct file_operations proc_bus_pci_dev_operations = { +@@ -434,7 +434,16 @@ static const struct file_operations proc_bus_pci_dev_operations = { static int __init pci_proc_init(void) { struct pci_dev *dev = NULL; @@ -46167,7 +46136,7 @@ index cc439fd..8fa30df 100644 #endif /* CONFIG_SYSFS */ diff --git a/drivers/power/power_supply_core.c b/drivers/power/power_supply_core.c -index 00e6672..2642c08 100644 +index 557af94..84dc1fe 100644 --- a/drivers/power/power_supply_core.c +++ b/drivers/power/power_supply_core.c @@ -24,7 +24,10 @@ @@ -47893,10 +47862,10 @@ index e51b09a..5ebac31 100644 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 d90dbb0..6cbe585 100644 +index e5e3965..a7b487c 100644 --- a/drivers/target/target_core_device.c +++ b/drivers/target/target_core_device.c -@@ -1431,7 +1431,7 @@ struct se_device *target_alloc_device(struct se_hba *hba, const char *name) +@@ -1436,7 +1436,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); @@ -48341,10 +48310,19 @@ index c0f76da..d974c32 100644 dlci_get(dlci->gsm->dlci[0]); mux_get(dlci->gsm); diff --git a/drivers/tty/n_tty.c b/drivers/tty/n_tty.c -index 4d6f430..0810fa9 100644 +index d4a89db..dbe8d8c 100644 --- a/drivers/tty/n_tty.c +++ b/drivers/tty/n_tty.c -@@ -2504,6 +2504,7 @@ void n_tty_inherit_ops(struct tty_ldisc_ops *ops) +@@ -114,7 +114,7 @@ struct n_tty_data { + int minimum_to_wake; + + /* consumer-published */ +- size_t read_tail; ++ size_t read_tail __intentional_overflow(-1); + size_t line_start; + + /* protected by output lock */ +@@ -2509,6 +2509,7 @@ void n_tty_inherit_ops(struct tty_ldisc_ops *ops) { *ops = tty_ldisc_N_TTY; ops->owner = NULL; @@ -49441,7 +49419,7 @@ index 2a3bbdf..91d72cf 100644 file->f_version = event_count; return POLLIN | POLLRDNORM; diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c -index 71dc5d7..300db0e 100644 +index 71dc5d7..d4c488f 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, @@ -49453,7 +49431,7 @@ index 71dc5d7..300db0e 100644 loff_t pos; int i; -@@ -229,16 +229,16 @@ static ssize_t usbdev_read(struct file *file, char __user *buf, size_t nbytes, +@@ -229,22 +229,22 @@ static ssize_t usbdev_read(struct file *file, char __user *buf, size_t nbytes, for (i = 0; nbytes && i < dev->descriptor.bNumConfigurations; i++) { struct usb_config_descriptor *config = (struct usb_config_descriptor *)dev->rawdescriptors[i]; @@ -49473,6 +49451,13 @@ index 71dc5d7..300db0e 100644 if (len > nbytes) len = nbytes; + /* Simply don't write (skip over) unallocated parts */ + if (alloclen > (*ppos - pos)) { +- alloclen -= (*ppos - pos); ++ alloclen = alloclen + pos - *ppos; + if (copy_to_user(buf, + dev->rawdescriptors[i] + (*ppos - pos), + min(len, alloclen))) { diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c index f20a044..d1059aa 100644 --- a/drivers/usb/core/hcd.c @@ -53330,10 +53315,10 @@ index 789bc25..fafaeea 100644 &data); if (!inode) { diff --git a/fs/aio.c b/fs/aio.c -index 6efb7f6..ec354de 100644 +index 062a5f6..e5618e0 100644 --- a/fs/aio.c +++ b/fs/aio.c -@@ -338,7 +338,7 @@ static int aio_setup_ring(struct kioctx *ctx) +@@ -374,7 +374,7 @@ static int aio_setup_ring(struct kioctx *ctx) size += sizeof(struct io_event) * nr_events; nr_pages = PFN_UP(size); @@ -53342,16 +53327,6 @@ index 6efb7f6..ec354de 100644 return -EINVAL; file = aio_private_file(ctx, nr_pages); -@@ -652,7 +652,8 @@ static struct kioctx *ioctx_alloc(unsigned nr_events) - aio_nr += ctx->max_reqs; - spin_unlock(&aio_nr_lock); - -- percpu_ref_get(&ctx->users); /* io_setup() will drop this ref */ -+ percpu_ref_get(&ctx->users); /* io_setup() will drop this ref */ -+ percpu_ref_get(&ctx->reqs); /* free_ioctx_users() will drop this */ - - err = ioctx_add_table(ctx, mm); - if (err) diff --git a/fs/attr.c b/fs/attr.c index 1449adb..a2038c2 100644 --- a/fs/attr.c @@ -53526,7 +53501,7 @@ index 89dec7f..361b0d75 100644 fd_offset + ex.a_text); if (error != N_DATADDR(ex)) { diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c -index 4c94a79..2610454 100644 +index 4c94a79..228e9da 100644 --- a/fs/binfmt_elf.c +++ b/fs/binfmt_elf.c @@ -34,6 +34,7 @@ @@ -53695,7 +53670,7 @@ index 4c94a79..2610454 100644 } error = load_addr; -@@ -538,6 +569,315 @@ out: +@@ -538,6 +569,322 @@ out: return error; } @@ -53929,34 +53904,41 @@ index 4c94a79..2610454 100644 + unsigned long pax_flags_hardmode = 0UL, pax_flags_softmode = 0UL; + + xattr_size = pax_getxattr(file->f_path.dentry, xattr_value, sizeof xattr_value); -+ if (xattr_size <= 0 || xattr_size > sizeof xattr_value) ++ switch (xattr_size) { ++ default: + return ~0UL; + -+ for (i = 0; i < xattr_size; i++) -+ switch (xattr_value[i]) { -+ default: -+ return ~0UL; -+ -+#define parse_flag(option1, option2, flag) \ -+ case option1: \ -+ if (pax_flags_hardmode & MF_PAX_##flag) \ -+ return ~0UL; \ -+ pax_flags_hardmode |= MF_PAX_##flag; \ -+ break; \ -+ case option2: \ -+ if (pax_flags_softmode & MF_PAX_##flag) \ -+ return ~0UL; \ -+ pax_flags_softmode |= MF_PAX_##flag; \ -+ break; ++ case -ENODATA: ++ break; ++ ++ case 0 ... sizeof xattr_value: ++ for (i = 0; i < xattr_size; i++) ++ switch (xattr_value[i]) { ++ default: ++ return ~0UL; ++ ++#define parse_flag(option1, option2, flag) \ ++ case option1: \ ++ if (pax_flags_hardmode & MF_PAX_##flag) \ ++ return ~0UL; \ ++ pax_flags_hardmode |= MF_PAX_##flag; \ ++ break; \ ++ case option2: \ ++ if (pax_flags_softmode & MF_PAX_##flag) \ ++ return ~0UL; \ ++ pax_flags_softmode |= MF_PAX_##flag; \ ++ break; + -+ parse_flag('p', 'P', PAGEEXEC); -+ parse_flag('e', 'E', EMUTRAMP); -+ parse_flag('m', 'M', MPROTECT); -+ parse_flag('r', 'R', RANDMMAP); -+ parse_flag('s', 'S', SEGMEXEC); ++ parse_flag('p', 'P', PAGEEXEC); ++ parse_flag('e', 'E', EMUTRAMP); ++ parse_flag('m', 'M', MPROTECT); ++ parse_flag('r', 'R', RANDMMAP); ++ parse_flag('s', 'S', SEGMEXEC); + +#undef parse_flag -+ } ++ } ++ break; ++ } + + if (pax_flags_hardmode & pax_flags_softmode) + return ~0UL; @@ -54011,7 +53993,7 @@ index 4c94a79..2610454 100644 /* * These are the functions used to load ELF style executables and shared * libraries. There is no binary dependent code anywhere else. -@@ -554,6 +894,11 @@ static unsigned long randomize_stack_top(unsigned long stack_top) +@@ -554,6 +901,11 @@ static unsigned long randomize_stack_top(unsigned long stack_top) { unsigned int random_variable = 0; @@ -54023,7 +54005,7 @@ index 4c94a79..2610454 100644 if ((current->flags & PF_RANDOMIZE) && !(current->personality & ADDR_NO_RANDOMIZE)) { random_variable = get_random_int() & STACK_RND_MASK; -@@ -572,7 +917,7 @@ static int load_elf_binary(struct linux_binprm *bprm) +@@ -572,7 +924,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; @@ -54032,7 +54014,7 @@ index 4c94a79..2610454 100644 struct elf_phdr *elf_ppnt, *elf_phdata; unsigned long elf_bss, elf_brk; int retval, i; -@@ -582,12 +927,12 @@ static int load_elf_binary(struct linux_binprm *bprm) +@@ -582,12 +934,12 @@ static int load_elf_binary(struct linux_binprm *bprm) unsigned long start_code, end_code, start_data, end_data; unsigned long reloc_func_desc __maybe_unused = 0; int executable_stack = EXSTACK_DEFAULT; @@ -54046,7 +54028,7 @@ index 4c94a79..2610454 100644 loc = kmalloc(sizeof(*loc), GFP_KERNEL); if (!loc) { -@@ -723,11 +1068,82 @@ static int load_elf_binary(struct linux_binprm *bprm) +@@ -723,11 +1075,82 @@ static int load_elf_binary(struct linux_binprm *bprm) goto out_free_dentry; /* OK, This is the point of no return */ @@ -54130,7 +54112,7 @@ index 4c94a79..2610454 100644 if (elf_read_implies_exec(loc->elf_ex, executable_stack)) current->personality |= READ_IMPLIES_EXEC; -@@ -817,6 +1233,20 @@ static int load_elf_binary(struct linux_binprm *bprm) +@@ -817,6 +1240,20 @@ static int load_elf_binary(struct linux_binprm *bprm) #else load_bias = ELF_PAGESTART(ELF_ET_DYN_BASE - vaddr); #endif @@ -54151,7 +54133,7 @@ index 4c94a79..2610454 100644 } error = elf_map(bprm->file, load_bias + vaddr, elf_ppnt, -@@ -849,9 +1279,9 @@ static int load_elf_binary(struct linux_binprm *bprm) +@@ -849,9 +1286,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. */ @@ -54164,7 +54146,7 @@ index 4c94a79..2610454 100644 /* set_brk can never work. Avoid overflows. */ send_sig(SIGKILL, current, 0); retval = -EINVAL; -@@ -890,17 +1320,45 @@ static int load_elf_binary(struct linux_binprm *bprm) +@@ -890,17 +1327,45 @@ static int load_elf_binary(struct linux_binprm *bprm) goto out_free_dentry; } if (likely(elf_bss != elf_brk) && unlikely(padzero(elf_bss))) { @@ -54216,7 +54198,7 @@ index 4c94a79..2610454 100644 load_bias); if (!IS_ERR((void *)elf_entry)) { /* -@@ -1122,7 +1580,7 @@ static bool always_dump_vma(struct vm_area_struct *vma) +@@ -1122,7 +1587,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, @@ -54225,7 +54207,7 @@ index 4c94a79..2610454 100644 { #define FILTER(type) (mm_flags & (1UL << MMF_DUMP_##type)) -@@ -1160,7 +1618,7 @@ static unsigned long vma_dump_size(struct vm_area_struct *vma, +@@ -1160,7 +1625,7 @@ static unsigned long vma_dump_size(struct vm_area_struct *vma, if (vma->vm_file == NULL) return 0; @@ -54234,7 +54216,7 @@ index 4c94a79..2610454 100644 goto whole; /* -@@ -1385,9 +1843,9 @@ static void fill_auxv_note(struct memelfnote *note, struct mm_struct *mm) +@@ -1385,9 +1850,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; @@ -54246,7 +54228,7 @@ index 4c94a79..2610454 100644 fill_note(note, "CORE", NT_AUXV, i * sizeof(elf_addr_t), auxv); } -@@ -1396,7 +1854,7 @@ static void fill_siginfo_note(struct memelfnote *note, user_siginfo_t *csigdata, +@@ -1396,7 +1861,7 @@ static void fill_siginfo_note(struct memelfnote *note, user_siginfo_t *csigdata, { mm_segment_t old_fs = get_fs(); set_fs(KERNEL_DS); @@ -54255,7 +54237,7 @@ index 4c94a79..2610454 100644 set_fs(old_fs); fill_note(note, "CORE", NT_SIGINFO, sizeof(*csigdata), csigdata); } -@@ -2023,14 +2481,14 @@ static void fill_extnum_info(struct elfhdr *elf, struct elf_shdr *shdr4extnum, +@@ -2023,14 +2488,14 @@ static void fill_extnum_info(struct elfhdr *elf, struct elf_shdr *shdr4extnum, } static size_t elf_core_vma_data_size(struct vm_area_struct *gate_vma, @@ -54272,7 +54254,7 @@ index 4c94a79..2610454 100644 return size; } -@@ -2123,7 +2581,7 @@ static int elf_core_dump(struct coredump_params *cprm) +@@ -2123,7 +2588,7 @@ static int elf_core_dump(struct coredump_params *cprm) dataoff = offset = roundup(offset, ELF_EXEC_PAGESIZE); @@ -54281,7 +54263,7 @@ index 4c94a79..2610454 100644 offset += elf_core_extra_data_size(); e_shoff = offset; -@@ -2137,10 +2595,12 @@ static int elf_core_dump(struct coredump_params *cprm) +@@ -2137,10 +2602,12 @@ static int elf_core_dump(struct coredump_params *cprm) offset = dataoff; size += sizeof(*elf); @@ -54294,7 +54276,7 @@ index 4c94a79..2610454 100644 if (size > cprm->limit || !dump_write(cprm->file, phdr4note, sizeof(*phdr4note))) goto end_coredump; -@@ -2154,7 +2614,7 @@ static int elf_core_dump(struct coredump_params *cprm) +@@ -2154,7 +2621,7 @@ static int elf_core_dump(struct coredump_params *cprm) phdr.p_offset = offset; phdr.p_vaddr = vma->vm_start; phdr.p_paddr = 0; @@ -54303,7 +54285,7 @@ index 4c94a79..2610454 100644 phdr.p_memsz = vma->vm_end - vma->vm_start; offset += phdr.p_filesz; phdr.p_flags = vma->vm_flags & VM_READ ? PF_R : 0; -@@ -2165,6 +2625,7 @@ static int elf_core_dump(struct coredump_params *cprm) +@@ -2165,6 +2632,7 @@ static int elf_core_dump(struct coredump_params *cprm) phdr.p_align = ELF_EXEC_PAGESIZE; size += sizeof(phdr); @@ -54311,7 +54293,7 @@ index 4c94a79..2610454 100644 if (size > cprm->limit || !dump_write(cprm->file, &phdr, sizeof(phdr))) goto end_coredump; -@@ -2189,7 +2650,7 @@ static int elf_core_dump(struct coredump_params *cprm) +@@ -2189,7 +2657,7 @@ static int elf_core_dump(struct coredump_params *cprm) unsigned long addr; unsigned long end; @@ -54320,7 +54302,7 @@ index 4c94a79..2610454 100644 for (addr = vma->vm_start; addr < end; addr += PAGE_SIZE) { struct page *page; -@@ -2198,6 +2659,7 @@ static int elf_core_dump(struct coredump_params *cprm) +@@ -2198,6 +2666,7 @@ static int elf_core_dump(struct coredump_params *cprm) page = get_dump_page(addr); if (page) { void *kaddr = kmap(page); @@ -54328,7 +54310,7 @@ index 4c94a79..2610454 100644 stop = ((size += PAGE_SIZE) > cprm->limit) || !dump_write(cprm->file, kaddr, PAGE_SIZE); -@@ -2215,6 +2677,7 @@ static int elf_core_dump(struct coredump_params *cprm) +@@ -2215,6 +2684,7 @@ static int elf_core_dump(struct coredump_params *cprm) if (e_phnum == PN_XNUM) { size += sizeof(*shdr4extnum); @@ -54336,7 +54318,7 @@ index 4c94a79..2610454 100644 if (size > cprm->limit || !dump_write(cprm->file, shdr4extnum, sizeof(*shdr4extnum))) -@@ -2235,6 +2698,167 @@ out: +@@ -2235,6 +2705,167 @@ out: #endif /* CONFIG_ELF_CORE */ @@ -55084,10 +55066,10 @@ index 7ddddf2..2e12dbc 100644 } retry: diff --git a/fs/cifs/link.c b/fs/cifs/link.c -index 7e36ceb..109252f 100644 +index 477e53b..7a32216 100644 --- a/fs/cifs/link.c +++ b/fs/cifs/link.c -@@ -624,7 +624,7 @@ symlink_exit: +@@ -620,7 +620,7 @@ symlink_exit: void cifs_put_link(struct dentry *direntry, struct nameidata *nd, void *cookie) { @@ -56680,10 +56662,10 @@ index dc5d572..4c21f8e 100644 if (free_clusters >= (nclusters + dirty_clusters + resv_clusters)) diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h -index af815ea..99294a6 100644 +index 745faaa..a072816 100644 --- a/fs/ext4/ext4.h +++ b/fs/ext4/ext4.h -@@ -1256,19 +1256,19 @@ struct ext4_sb_info { +@@ -1266,19 +1266,19 @@ struct ext4_sb_info { unsigned long s_mb_last_start; /* stats for buddy allocator */ @@ -56714,7 +56696,7 @@ index af815ea..99294a6 100644 /* locality groups */ diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c -index a41e3ba..e574a00 100644 +index 04a5c75..09894fa 100644 --- a/fs/ext4/mballoc.c +++ b/fs/ext4/mballoc.c @@ -1880,7 +1880,7 @@ void ext4_mb_simple_scan_group(struct ext4_allocation_context *ac, @@ -56794,7 +56776,7 @@ index a41e3ba..e574a00 100644 } if (ac->ac_op == EXT4_MB_HISTORY_ALLOC) -@@ -3578,7 +3578,7 @@ ext4_mb_new_inode_pa(struct ext4_allocation_context *ac) +@@ -3583,7 +3583,7 @@ ext4_mb_new_inode_pa(struct ext4_allocation_context *ac) trace_ext4_mb_new_inode_pa(ac, pa); ext4_mb_use_inode_pa(ac, pa); @@ -56803,7 +56785,7 @@ index a41e3ba..e574a00 100644 ei = EXT4_I(ac->ac_inode); grp = ext4_get_group_info(sb, ac->ac_b_ex.fe_group); -@@ -3638,7 +3638,7 @@ ext4_mb_new_group_pa(struct ext4_allocation_context *ac) +@@ -3643,7 +3643,7 @@ ext4_mb_new_group_pa(struct ext4_allocation_context *ac) trace_ext4_mb_new_group_pa(ac, pa); ext4_mb_use_group_pa(ac, pa); @@ -56812,7 +56794,7 @@ index a41e3ba..e574a00 100644 grp = ext4_get_group_info(sb, ac->ac_b_ex.fe_group); lg = ac->ac_lg; -@@ -3727,7 +3727,7 @@ ext4_mb_release_inode_pa(struct ext4_buddy *e4b, struct buffer_head *bitmap_bh, +@@ -3732,7 +3732,7 @@ ext4_mb_release_inode_pa(struct ext4_buddy *e4b, struct buffer_head *bitmap_bh, * from the bitmap and continue. */ } @@ -56821,7 +56803,7 @@ index a41e3ba..e574a00 100644 return err; } -@@ -3745,7 +3745,7 @@ ext4_mb_release_group_pa(struct ext4_buddy *e4b, +@@ -3750,7 +3750,7 @@ ext4_mb_release_group_pa(struct ext4_buddy *e4b, ext4_get_group_no_and_offset(sb, pa->pa_pstart, &group, &bit); BUG_ON(group != e4b->bd_group && pa->pa_len != 0); mb_free_blocks(pa->pa_inode, e4b, bit, pa->pa_len); @@ -56844,7 +56826,7 @@ index 214461e..3614c89 100644 "MMP failure info: last update time: %llu, last update " "node: %s, last update device: %s\n", diff --git a/fs/ext4/super.c b/fs/ext4/super.c -index 2c2e6cb..7c3ee62 100644 +index b947e0a..c102e3b 100644 --- a/fs/ext4/super.c +++ b/fs/ext4/super.c @@ -1251,7 +1251,7 @@ static ext4_fsblk_t get_sb_block(void **data) @@ -61268,7 +61250,7 @@ index 6b6a993..807cccc 100644 kfree(s); } diff --git a/fs/proc/stat.c b/fs/proc/stat.c -index 1cf86c0..f61473c 100644 +index 1cf86c0..0ee1ca5 100644 --- a/fs/proc/stat.c +++ b/fs/proc/stat.c @@ -11,6 +11,7 @@ @@ -61279,7 +61261,7 @@ index 1cf86c0..f61473c 100644 #ifndef arch_irq_stat_cpu #define arch_irq_stat_cpu(cpu) 0 -@@ -87,13 +88,28 @@ static int show_stat(struct seq_file *p, void *v) +@@ -87,6 +88,18 @@ static int show_stat(struct seq_file *p, void *v) u64 sum_softirq = 0; unsigned int per_softirq_sums[NR_SOFTIRQS] = {0}; struct timespec boottime; @@ -61298,17 +61280,15 @@ index 1cf86c0..f61473c 100644 user = nice = system = idle = iowait = irq = softirq = steal = 0; - guest = guest_nice = 0; +@@ -94,6 +107,7 @@ static int show_stat(struct seq_file *p, void *v) getboottime(&boottime); jif = boottime.tv_sec; -+ if (!unrestricted) -+ jif = 0; + if (unrestricted) { for_each_possible_cpu(i) { user += kcpustat_cpu(i).cpustat[CPUTIME_USER]; nice += kcpustat_cpu(i).cpustat[CPUTIME_NICE]; -@@ -116,6 +132,7 @@ static int show_stat(struct seq_file *p, void *v) +@@ -116,6 +130,7 @@ static int show_stat(struct seq_file *p, void *v) } } sum += arch_irq_stat(); @@ -61316,7 +61296,7 @@ index 1cf86c0..f61473c 100644 seq_puts(p, "cpu "); seq_put_decimal_ull(p, ' ', cputime64_to_clock_t(user)); -@@ -131,6 +148,7 @@ static int show_stat(struct seq_file *p, void *v) +@@ -131,6 +146,7 @@ static int show_stat(struct seq_file *p, void *v) seq_putc(p, '\n'); for_each_online_cpu(i) { @@ -61324,7 +61304,7 @@ index 1cf86c0..f61473c 100644 /* Copy values here to work around gcc-2.95.3, gcc-2.96 */ user = kcpustat_cpu(i).cpustat[CPUTIME_USER]; nice = kcpustat_cpu(i).cpustat[CPUTIME_NICE]; -@@ -142,6 +160,7 @@ static int show_stat(struct seq_file *p, void *v) +@@ -142,6 +158,7 @@ static int show_stat(struct seq_file *p, void *v) steal = kcpustat_cpu(i).cpustat[CPUTIME_STEAL]; guest = kcpustat_cpu(i).cpustat[CPUTIME_GUEST]; guest_nice = kcpustat_cpu(i).cpustat[CPUTIME_GUEST_NICE]; @@ -61332,7 +61312,7 @@ index 1cf86c0..f61473c 100644 seq_printf(p, "cpu%d", i); seq_put_decimal_ull(p, ' ', cputime64_to_clock_t(user)); seq_put_decimal_ull(p, ' ', cputime64_to_clock_t(nice)); -@@ -159,7 +178,7 @@ static int show_stat(struct seq_file *p, void *v) +@@ -159,7 +176,7 @@ static int show_stat(struct seq_file *p, void *v) /* sum again ? it could be updated? */ for_each_irq_nr(j) @@ -61341,17 +61321,16 @@ index 1cf86c0..f61473c 100644 seq_printf(p, "\nctxt %llu\n" -@@ -167,11 +186,11 @@ static int show_stat(struct seq_file *p, void *v) +@@ -167,11 +184,11 @@ static int show_stat(struct seq_file *p, void *v) "processes %lu\n" "procs_running %lu\n" "procs_blocked %lu\n", - nr_context_switches(), -- (unsigned long)jif, ++ unrestricted ? nr_context_switches() : 0ULL, + (unsigned long)jif, - total_forks, - nr_running(), - nr_iowait()); -+ unrestricted ? nr_context_switches() : 0ULL, -+ unrestricted ? (unsigned long)jif : 0UL, + unrestricted ? total_forks : 0UL, + unrestricted ? nr_running() : 0UL, + unrestricted ? nr_iowait() : 0UL); @@ -73999,7 +73978,7 @@ index 810431d..0ec4804f 100644 * (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 f330d28..d93bba9 100644 +index b12079a..86683e3 100644 --- a/include/asm-generic/pgtable.h +++ b/include/asm-generic/pgtable.h @@ -599,11 +599,10 @@ static inline int pmd_none_or_trans_huge_or_clear_bad(pmd_t *pmd) @@ -74266,18 +74245,6 @@ index 729a4d1..9b304ae 100644 static inline kuid_t audit_get_loginuid(struct task_struct *tsk) { -diff --git a/include/linux/auxvec.h b/include/linux/auxvec.h -index 669fef5..3e0fbe4 100644 ---- a/include/linux/auxvec.h -+++ b/include/linux/auxvec.h -@@ -3,6 +3,6 @@ - - #include <uapi/linux/auxvec.h> - --#define AT_VECTOR_SIZE_BASE 19 /* NEW_AUX_ENT entries in auxiliary table */ -+#define AT_VECTOR_SIZE_BASE 20 /* NEW_AUX_ENT entries in auxiliary table */ - /* number of "#define AT_.*" above, minus {AT_NULL, AT_IGNORE, AT_NOTELF} */ - #endif /* _LINUX_AUXVEC_H */ diff --git a/include/linux/binfmts.h b/include/linux/binfmts.h index 7554fd4..0f86379 100644 --- a/include/linux/binfmts.h @@ -76912,10 +76879,10 @@ index 0fbbc7a..db081e3 100644 int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu); diff --git a/include/linux/libata.h b/include/linux/libata.h -index 0e23c26..6ad8c33 100644 +index 9b50337..712d748 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h -@@ -972,7 +972,7 @@ struct ata_port_operations { +@@ -973,7 +973,7 @@ struct ata_port_operations { * fields must be pointers. */ const struct ata_port_operations *inherits; @@ -77310,7 +77277,7 @@ index 8b6e55e..c4edf39 100644 #endif /* __KERNEL__ */ #endif /* _LINUX_MM_H */ diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h -index d9851ee..619492d 100644 +index 8e082f1..f61f576 100644 --- a/include/linux/mm_types.h +++ b/include/linux/mm_types.h @@ -289,6 +289,8 @@ struct vm_area_struct { @@ -77322,8 +77289,8 @@ index d9851ee..619492d 100644 }; struct core_thread { -@@ -436,6 +438,24 @@ struct mm_struct { - int first_nid; +@@ -444,6 +446,24 @@ struct mm_struct { + bool tlb_flush_pending; #endif struct uprobes_state uprobes_state; + @@ -78201,13 +78168,13 @@ index 4106721..132d42c 100644 * 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/reboot.h b/include/linux/reboot.h -index 8e00f9f..9449b55 100644 +index 9e7db9e..7d4fd72 100644 --- a/include/linux/reboot.h +++ b/include/linux/reboot.h -@@ -43,9 +43,9 @@ extern int unregister_reboot_notifier(struct notifier_block *); - * Architecture-specific implementations of sys_reboot commands. +@@ -44,9 +44,9 @@ extern int unregister_reboot_notifier(struct notifier_block *); */ + extern void migrate_to_reboot_cpu(void); -extern void machine_restart(char *cmd); -extern void machine_halt(void); -extern void machine_power_off(void); @@ -78217,7 +78184,7 @@ index 8e00f9f..9449b55 100644 extern void machine_shutdown(void); struct pt_regs; -@@ -56,9 +56,9 @@ extern void machine_crash_shutdown(struct pt_regs *); +@@ -57,9 +57,9 @@ extern void machine_crash_shutdown(struct pt_regs *); */ extern void kernel_restart_prepare(char *cmd); @@ -78230,7 +78197,7 @@ index 8e00f9f..9449b55 100644 extern int C_A_D; /* for sysctl */ void ctrl_alt_del(void); -@@ -72,7 +72,7 @@ extern int orderly_poweroff(bool force); +@@ -73,7 +73,7 @@ extern int orderly_poweroff(bool force); * Emergency restart, callable from an interrupt handler. */ @@ -80409,10 +80376,10 @@ index d22cb0a..c6ba150 100644 struct snd_soc_platform { const char *name; diff --git a/include/target/target_core_base.h b/include/target/target_core_base.h -index 5bdb8b7..bb1096c 100644 +index 23bfd10..1ff3e35 100644 --- a/include/target/target_core_base.h +++ b/include/target/target_core_base.h -@@ -663,7 +663,7 @@ struct se_device { +@@ -664,7 +664,7 @@ struct se_device { spinlock_t stats_lock; /* Active commands on this virtual SE device */ atomic_t simple_cmds; @@ -81761,10 +81728,10 @@ index 4e66bf9..cdccecf 100644 +} +EXPORT_SYMBOL(inode_capable_nolog); diff --git a/kernel/cgroup.c b/kernel/cgroup.c -index 5c9127d..f871169 100644 +index b6fd783..7f526b7 100644 --- a/kernel/cgroup.c +++ b/kernel/cgroup.c -@@ -5844,7 +5844,7 @@ static int cgroup_css_links_read(struct cgroup_subsys_state *css, +@@ -5855,7 +5855,7 @@ static int cgroup_css_links_read(struct cgroup_subsys_state *css, struct css_set *cset = link->cset; struct task_struct *task; int count = 0; @@ -82424,7 +82391,7 @@ index a949819..a5f127d 100644 { struct signal_struct *sig = current->signal; diff --git a/kernel/fork.c b/kernel/fork.c -index 086fe73..72c1122 100644 +index 690cfac..3be2d98 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -319,7 +319,7 @@ static struct task_struct *dup_task_struct(struct task_struct *orig) @@ -82626,7 +82593,7 @@ index 086fe73..72c1122 100644 } static inline int mm_alloc_pgd(struct mm_struct *mm) -@@ -688,8 +733,8 @@ struct mm_struct *mm_access(struct task_struct *task, unsigned int mode) +@@ -689,8 +734,8 @@ struct mm_struct *mm_access(struct task_struct *task, unsigned int mode) return ERR_PTR(err); mm = get_task_mm(task); @@ -82637,7 +82604,7 @@ index 086fe73..72c1122 100644 mmput(mm); mm = ERR_PTR(-EACCES); } -@@ -911,13 +956,20 @@ static int copy_fs(unsigned long clone_flags, struct task_struct *tsk) +@@ -912,13 +957,20 @@ static int copy_fs(unsigned long clone_flags, struct task_struct *tsk) spin_unlock(&fs->lock); return -EAGAIN; } @@ -82659,7 +82626,7 @@ index 086fe73..72c1122 100644 return 0; } -@@ -1128,7 +1180,7 @@ init_task_pid(struct task_struct *task, enum pid_type type, struct pid *pid) +@@ -1129,7 +1181,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. */ @@ -82668,7 +82635,7 @@ index 086fe73..72c1122 100644 unsigned long stack_start, unsigned long stack_size, int __user *child_tidptr, -@@ -1200,6 +1252,9 @@ static struct task_struct *copy_process(unsigned long clone_flags, +@@ -1201,6 +1253,9 @@ static struct task_struct *copy_process(unsigned long clone_flags, DEBUG_LOCKS_WARN_ON(!p->softirqs_enabled); #endif retval = -EAGAIN; @@ -82678,7 +82645,7 @@ index 086fe73..72c1122 100644 if (atomic_read(&p->real_cred->user->processes) >= task_rlimit(p, RLIMIT_NPROC)) { if (p->real_cred->user != INIT_USER && -@@ -1449,6 +1504,11 @@ static struct task_struct *copy_process(unsigned long clone_flags, +@@ -1450,6 +1505,11 @@ static struct task_struct *copy_process(unsigned long clone_flags, goto bad_fork_free_pid; } @@ -82690,7 +82657,7 @@ index 086fe73..72c1122 100644 if (likely(p->pid)) { ptrace_init_task(p, (clone_flags & CLONE_PTRACE) || trace); -@@ -1534,6 +1594,8 @@ bad_fork_cleanup_count: +@@ -1535,6 +1595,8 @@ bad_fork_cleanup_count: bad_fork_free: free_task(p); fork_out: @@ -82699,7 +82666,7 @@ index 086fe73..72c1122 100644 return ERR_PTR(retval); } -@@ -1595,6 +1657,7 @@ long do_fork(unsigned long clone_flags, +@@ -1596,6 +1658,7 @@ long do_fork(unsigned long clone_flags, p = copy_process(clone_flags, stack_start, stack_size, child_tidptr, NULL, trace); @@ -82707,7 +82674,7 @@ index 086fe73..72c1122 100644 /* * Do this prior waking up the new thread - the thread pointer * might get invalid after that point, if the thread exits quickly. -@@ -1609,6 +1672,8 @@ long do_fork(unsigned long clone_flags, +@@ -1610,6 +1673,8 @@ long do_fork(unsigned long clone_flags, if (clone_flags & CLONE_PARENT_SETTID) put_user(nr, parent_tidptr); @@ -82716,7 +82683,7 @@ index 086fe73..72c1122 100644 if (clone_flags & CLONE_VFORK) { p->vfork_done = &vfork; init_completion(&vfork); -@@ -1725,7 +1790,7 @@ void __init proc_caches_init(void) +@@ -1726,7 +1791,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); @@ -82725,7 +82692,7 @@ index 086fe73..72c1122 100644 mmap_init(); nsproxy_cache_init(); } -@@ -1765,7 +1830,7 @@ static int unshare_fs(unsigned long unshare_flags, struct fs_struct **new_fsp) +@@ -1766,7 +1831,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 */ @@ -82734,7 +82701,7 @@ index 086fe73..72c1122 100644 return 0; *new_fsp = copy_fs_struct(fs); -@@ -1872,7 +1937,8 @@ SYSCALL_DEFINE1(unshare, unsigned long, unshare_flags) +@@ -1873,7 +1938,8 @@ SYSCALL_DEFINE1(unshare, unsigned long, unshare_flags) fs = current->fs; spin_lock(&fs->lock); current->fs = new_fs; @@ -83034,7 +83001,7 @@ index e30ac0f..3528cac 100644 /* diff --git a/kernel/kexec.c b/kernel/kexec.c -index ecd783d..9aa270c 100644 +index 355e13a..06b25d2 100644 --- a/kernel/kexec.c +++ b/kernel/kexec.c @@ -1044,7 +1044,8 @@ asmlinkage long compat_sys_kexec_load(unsigned long entry, @@ -85852,7 +85819,7 @@ index 5ac63c9..d912786 100644 #else static void register_sched_domain_sysctl(void) diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c -index 513fc2f..906a851 100644 +index 7765ad8..774519f 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -869,7 +869,7 @@ void task_numa_fault(int node, int pages, bool migrated) @@ -85864,7 +85831,7 @@ index 513fc2f..906a851 100644 p->mm->numa_scan_offset = 0; } -@@ -5840,7 +5840,7 @@ static void nohz_idle_balance(int this_cpu, enum cpu_idle_type idle) { } +@@ -5847,7 +5847,7 @@ static void nohz_idle_balance(int this_cpu, 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). */ @@ -86790,7 +86757,7 @@ index b8b8560..75b1a09 100644 ret = -EIO; bt->dropped_file = debugfs_create_file("dropped", 0444, dir, bt, diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c -index f3bd09ee..9bb9586 100644 +index 1345d9f..db46efe 100644 --- a/kernel/trace/ftrace.c +++ b/kernel/trace/ftrace.c @@ -1944,12 +1944,17 @@ ftrace_code_disable(struct module *mod, struct dyn_ftrace *rec) @@ -88166,7 +88133,7 @@ index ae4846f..b0acebe 100644 send_sig(SIGXFSZ, current, 0); return -EFBIG; diff --git a/mm/fremap.c b/mm/fremap.c -index 5bff081..bfa6e93 100644 +index bbc4d66..117b798 100644 --- a/mm/fremap.c +++ b/mm/fremap.c @@ -163,6 +163,11 @@ SYSCALL_DEFINE5(remap_file_pages, unsigned long, start, unsigned long, size, @@ -88181,36 +88148,6 @@ index 5bff081..bfa6e93 100644 /* * Make sure the vma is shared, that it supports prefaulting, * and that the remapped range is valid and fully within -@@ -208,9 +213,10 @@ get_write_lock: - if (mapping_cap_account_dirty(mapping)) { - unsigned long addr; - struct file *file = get_file(vma->vm_file); -+ /* mmap_region may free vma; grab the info now */ -+ vm_flags = ACCESS_ONCE(vma->vm_flags); - -- addr = mmap_region(file, start, size, -- vma->vm_flags, pgoff); -+ addr = mmap_region(file, start, size, vm_flags, pgoff); - fput(file); - if (IS_ERR_VALUE(addr)) { - err = addr; -@@ -218,7 +224,7 @@ get_write_lock: - BUG_ON(addr != start); - err = 0; - } -- goto out; -+ goto out_freed; - } - mutex_lock(&mapping->i_mmap_mutex); - flush_dcache_mmap_lock(mapping); -@@ -253,6 +259,7 @@ get_write_lock: - out: - if (vma) - vm_flags = vma->vm_flags; -+out_freed: - if (likely(!has_write_lock)) - up_read(&mm->mmap_sem); - else diff --git a/mm/highmem.c b/mm/highmem.c index b32b70c..e512eb0 100644 --- a/mm/highmem.c @@ -88520,7 +88457,7 @@ index 539eeb9..e24a987 100644 if (end == start) return error; diff --git a/mm/memory-failure.c b/mm/memory-failure.c -index bf3351b..aea800d 100644 +index 9aea53f..f239c30 100644 --- a/mm/memory-failure.c +++ b/mm/memory-failure.c @@ -61,7 +61,7 @@ int sysctl_memory_failure_early_kill __read_mostly = 0; @@ -88550,7 +88487,7 @@ index bf3351b..aea800d 100644 { reserved, reserved, "reserved kernel", me_kernel }, /* * free pages are specially detected outside this table: -@@ -1053,7 +1053,7 @@ int memory_failure(unsigned long pfn, int trapno, int flags) +@@ -1063,7 +1063,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; @@ -88559,7 +88496,7 @@ index bf3351b..aea800d 100644 /* * We need/can do nothing about count=0 pages. -@@ -1083,7 +1083,7 @@ int memory_failure(unsigned long pfn, int trapno, int flags) +@@ -1093,7 +1093,7 @@ int memory_failure(unsigned long pfn, int trapno, int flags) if (!PageHWPoison(hpage) || (hwpoison_filter(p) && TestClearPageHWPoison(p)) || (p != hpage && TestSetPageHWPoison(hpage))) { @@ -88568,7 +88505,7 @@ index bf3351b..aea800d 100644 return 0; } set_page_hwpoison_huge_page(hpage); -@@ -1152,7 +1152,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 (hwpoison_filter(p)) { if (TestClearPageHWPoison(p)) @@ -88577,7 +88514,7 @@ index bf3351b..aea800d 100644 unlock_page(hpage); put_page(hpage); return 0; -@@ -1370,7 +1370,7 @@ int unpoison_memory(unsigned long pfn) +@@ -1380,7 +1380,7 @@ int unpoison_memory(unsigned long pfn) return 0; } if (TestClearPageHWPoison(p)) @@ -88586,7 +88523,7 @@ index bf3351b..aea800d 100644 pr_info("MCE: Software-unpoisoned free page %#lx\n", pfn); return 0; } -@@ -1384,7 +1384,7 @@ int unpoison_memory(unsigned long pfn) +@@ -1394,7 +1394,7 @@ int unpoison_memory(unsigned long pfn) */ if (TestClearPageHWPoison(page)) { pr_info("MCE: Software-unpoisoned page %#lx\n", pfn); @@ -88595,16 +88532,21 @@ index bf3351b..aea800d 100644 freeit = 1; if (PageHuge(page)) clear_page_hwpoison_huge_page(page); -@@ -1521,7 +1521,7 @@ static int soft_offline_huge_page(struct page *page, int flags) - } else { - set_page_hwpoison_huge_page(hpage); - dequeue_hwpoisoned_huge_page(hpage); -- atomic_long_add(1 << compound_order(hpage), -+ atomic_long_add_unchecked(1 << compound_order(hpage), - &num_poisoned_pages); +@@ -1533,11 +1533,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); +- atomic_long_add(1 << compound_order(hpage), ++ atomic_long_add_unchecked(1 << compound_order(hpage), + &num_poisoned_pages); + } else { + SetPageHWPoison(page); +- atomic_long_inc(&num_poisoned_pages); ++ atomic_long_inc_unchecked(&num_poisoned_pages); + } } return ret; -@@ -1560,7 +1560,7 @@ static int __soft_offline_page(struct page *page, int flags) +@@ -1576,7 +1576,7 @@ static int __soft_offline_page(struct page *page, int flags) put_page(page); pr_info("soft_offline: %#lx: invalidated\n", pfn); SetPageHWPoison(page); @@ -88613,7 +88555,7 @@ index bf3351b..aea800d 100644 return 0; } -@@ -1605,7 +1605,7 @@ static int __soft_offline_page(struct page *page, int flags) +@@ -1621,7 +1621,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); @@ -88622,7 +88564,7 @@ index bf3351b..aea800d 100644 } } else { pr_info("soft offline: %#lx: isolation failed: %d, page count %d, type %lx\n", -@@ -1666,11 +1666,11 @@ int soft_offline_page(struct page *page, int flags) +@@ -1682,11 +1682,11 @@ int soft_offline_page(struct page *page, int flags) if (PageHuge(page)) { set_page_hwpoison_huge_page(hpage); dequeue_hwpoisoned_huge_page(hpage); @@ -89332,7 +89274,7 @@ index d176154..cd1b387 100644 mm = get_task_mm(tsk); if (!mm) diff --git a/mm/mempolicy.c b/mm/mempolicy.c -index 0472964..7d5a0ea 100644 +index 6b22d8f9..8b5f6cf 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c @@ -746,6 +746,10 @@ static int mbind_range(struct mm_struct *mm, unsigned long start, @@ -89408,10 +89350,10 @@ index 0472964..7d5a0ea 100644 capable(CAP_SYS_NICE) ? MPOL_MF_MOVE_ALL : MPOL_MF_MOVE); diff --git a/mm/migrate.c b/mm/migrate.c -index c046927..6996b40 100644 +index e3cf71d..c94506c 100644 --- a/mm/migrate.c +++ b/mm/migrate.c -@@ -1404,8 +1404,7 @@ SYSCALL_DEFINE6(move_pages, pid_t, pid, unsigned long, nr_pages, +@@ -1406,8 +1406,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) && @@ -89422,7 +89364,7 @@ index c046927..6996b40 100644 err = -EPERM; goto out; diff --git a/mm/mlock.c b/mm/mlock.c -index d480cd6..0f98458 100644 +index 192e6ee..b044449 100644 --- a/mm/mlock.c +++ b/mm/mlock.c @@ -14,6 +14,7 @@ @@ -89433,7 +89375,7 @@ index d480cd6..0f98458 100644 #include <linux/sched.h> #include <linux/export.h> #include <linux/rmap.h> -@@ -568,7 +569,7 @@ static int do_mlock(unsigned long start, size_t len, int on) +@@ -588,7 +589,7 @@ static int do_mlock(unsigned long start, size_t len, int on) { unsigned long nstart, end, tmp; struct vm_area_struct * vma, * prev; @@ -89442,7 +89384,7 @@ index d480cd6..0f98458 100644 VM_BUG_ON(start & ~PAGE_MASK); VM_BUG_ON(len != PAGE_ALIGN(len)); -@@ -577,6 +578,9 @@ static int do_mlock(unsigned long start, size_t len, int on) +@@ -597,6 +598,9 @@ static int do_mlock(unsigned long start, size_t len, int on) return -EINVAL; if (end == start) return 0; @@ -89452,7 +89394,7 @@ index d480cd6..0f98458 100644 vma = find_vma(current->mm, start); if (!vma || vma->vm_start > start) return -ENOMEM; -@@ -588,6 +592,11 @@ static int do_mlock(unsigned long start, size_t len, int on) +@@ -608,6 +612,11 @@ static int do_mlock(unsigned long start, size_t len, int on) for (nstart = start ; ; ) { vm_flags_t newflags; @@ -89464,7 +89406,7 @@ index d480cd6..0f98458 100644 /* Here we know that vma->vm_start <= nstart < vma->vm_end. */ newflags = vma->vm_flags & ~VM_LOCKED; -@@ -700,6 +709,7 @@ SYSCALL_DEFINE2(mlock, unsigned long, start, size_t, len) +@@ -720,6 +729,7 @@ SYSCALL_DEFINE2(mlock, unsigned long, start, size_t, len) lock_limit >>= PAGE_SHIFT; /* check against resource limits */ @@ -89472,7 +89414,7 @@ index d480cd6..0f98458 100644 if ((locked <= lock_limit) || capable(CAP_IPC_LOCK)) error = do_mlock(start, len, 1); up_write(¤t->mm->mmap_sem); -@@ -734,6 +744,11 @@ static int do_mlockall(int flags) +@@ -754,6 +764,11 @@ static int do_mlockall(int flags) for (vma = current->mm->mmap; vma ; vma = prev->vm_next) { vm_flags_t newflags; @@ -89484,7 +89426,7 @@ index d480cd6..0f98458 100644 newflags = vma->vm_flags & ~VM_LOCKED; if (flags & MCL_CURRENT) newflags |= VM_LOCKED; -@@ -767,6 +782,7 @@ SYSCALL_DEFINE1(mlockall, int, flags) +@@ -787,6 +802,7 @@ SYSCALL_DEFINE1(mlockall, int, flags) lock_limit >>= PAGE_SHIFT; ret = -ENOMEM; @@ -90754,7 +90696,7 @@ index 362e5f1..8968e02 100644 vma->vm_page_prot = vm_get_page_prot(vma->vm_flags); diff --git a/mm/mprotect.c b/mm/mprotect.c -index 6c3f56f..b2340b0 100644 +index 7651a57..d761c62 100644 --- a/mm/mprotect.c +++ b/mm/mprotect.c @@ -23,10 +23,18 @@ @@ -90776,7 +90718,7 @@ index 6c3f56f..b2340b0 100644 #ifndef pgprot_modify static inline pgprot_t pgprot_modify(pgprot_t oldprot, pgprot_t newprot) -@@ -241,6 +249,48 @@ unsigned long change_protection(struct vm_area_struct *vma, unsigned long start, +@@ -250,6 +258,48 @@ unsigned long change_protection(struct vm_area_struct *vma, unsigned long start, return pages; } @@ -90825,7 +90767,7 @@ index 6c3f56f..b2340b0 100644 int mprotect_fixup(struct vm_area_struct *vma, struct vm_area_struct **pprev, unsigned long start, unsigned long end, unsigned long newflags) -@@ -253,11 +303,29 @@ mprotect_fixup(struct vm_area_struct *vma, struct vm_area_struct **pprev, +@@ -262,11 +312,29 @@ mprotect_fixup(struct vm_area_struct *vma, struct vm_area_struct **pprev, int error; int dirty_accountable = 0; @@ -90855,7 +90797,7 @@ index 6c3f56f..b2340b0 100644 /* * If we make a private mapping writable we increase our commit; * but (without finer accounting) cannot reduce our commit if we -@@ -274,6 +342,42 @@ mprotect_fixup(struct vm_area_struct *vma, struct vm_area_struct **pprev, +@@ -283,6 +351,42 @@ mprotect_fixup(struct vm_area_struct *vma, struct vm_area_struct **pprev, } } @@ -90898,7 +90840,7 @@ index 6c3f56f..b2340b0 100644 /* * First try to merge with previous and/or next vma. */ -@@ -304,9 +408,21 @@ success: +@@ -313,9 +417,21 @@ success: * vm_flags and vm_page_prot are protected by the mmap_sem * held in write mode. */ @@ -90921,7 +90863,7 @@ index 6c3f56f..b2340b0 100644 if (vma_wants_writenotify(vma)) { vma->vm_page_prot = vm_get_page_prot(newflags & ~VM_SHARED); -@@ -345,6 +461,17 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len, +@@ -354,6 +470,17 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len, end = start + len; if (end <= start) return -ENOMEM; @@ -90939,7 +90881,7 @@ index 6c3f56f..b2340b0 100644 if (!arch_validate_prot(prot)) return -EINVAL; -@@ -352,7 +479,7 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len, +@@ -361,7 +488,7 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len, /* * Does the application expect PROT_READ to imply PROT_EXEC: */ @@ -90948,7 +90890,7 @@ index 6c3f56f..b2340b0 100644 prot |= PROT_EXEC; vm_flags = calc_vm_prot_bits(prot); -@@ -384,6 +511,11 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len, +@@ -393,6 +520,11 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len, if (start > vma->vm_start) prev = vma; @@ -90960,7 +90902,7 @@ index 6c3f56f..b2340b0 100644 for (nstart = start ; ; ) { unsigned long newflags; -@@ -394,6 +526,14 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len, +@@ -403,6 +535,14 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len, /* newflags >> 4 shift VM_MAY% in place of VM_% */ if ((newflags & ~(newflags >> 4)) & (VM_READ | VM_WRITE | VM_EXEC)) { @@ -90975,7 +90917,7 @@ index 6c3f56f..b2340b0 100644 error = -EACCES; goto out; } -@@ -408,6 +548,9 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len, +@@ -417,6 +557,9 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len, error = mprotect_fixup(vma, &prev, nstart, tmp, newflags); if (error) goto out; @@ -91173,7 +91115,7 @@ index 6380758..4064aec 100644 unsigned long bg_thresh, unsigned long dirty, diff --git a/mm/page_alloc.c b/mm/page_alloc.c -index dd886fa..7686339 100644 +index 317ea74..a4a1977 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -61,6 +61,7 @@ @@ -91347,7 +91289,7 @@ index fd26d04..0cea1b0 100644 if (!mm || IS_ERR(mm)) { rc = IS_ERR(mm) ? PTR_ERR(mm) : -ESRCH; diff --git a/mm/rmap.c b/mm/rmap.c -index fd3ee7a..e4baa1f 100644 +index b9d2222..e4baa1f 100644 --- a/mm/rmap.c +++ b/mm/rmap.c @@ -163,6 +163,10 @@ int anon_vma_prepare(struct vm_area_struct *vma) @@ -91449,18 +91391,6 @@ index fd3ee7a..e4baa1f 100644 } /* -@@ -600,7 +636,11 @@ pte_t *__page_check_address(struct page *page, struct mm_struct *mm, - spinlock_t *ptl; - - if (unlikely(PageHuge(page))) { -+ /* when pud is not present, pte will be NULL */ - pte = huge_pte_offset(mm, address); -+ if (!pte) -+ return NULL; -+ - ptl = &mm->page_table_lock; - goto check; - } diff --git a/mm/shmem.c b/mm/shmem.c index 8297623..6b9dfe9 100644 --- a/mm/shmem.c @@ -92810,10 +92740,18 @@ index 1074543..136dbe0 100644 if (v->nr_pages) seq_printf(m, " pages=%d", v->nr_pages); diff --git a/mm/vmstat.c b/mm/vmstat.c -index 5a442a7..5eb281e 100644 +index 5a442a7..dbbda4a 100644 --- a/mm/vmstat.c +++ b/mm/vmstat.c -@@ -79,7 +79,7 @@ void vm_events_fold_cpu(int cpu) +@@ -20,6 +20,7 @@ + #include <linux/writeback.h> + #include <linux/compaction.h> + #include <linux/mm_inline.h> ++#include <linux/grsecurity.h> + + #include "internal.h" + +@@ -79,7 +80,7 @@ void vm_events_fold_cpu(int cpu) * * vm_stat contains the global counters */ @@ -92822,7 +92760,7 @@ index 5a442a7..5eb281e 100644 EXPORT_SYMBOL(vm_stat); #ifdef CONFIG_SMP -@@ -423,7 +423,7 @@ static inline void fold_diff(int *diff) +@@ -423,7 +424,7 @@ static inline void fold_diff(int *diff) for (i = 0; i < NR_VM_ZONE_STAT_ITEMS; i++) if (diff[i]) @@ -92831,7 +92769,7 @@ index 5a442a7..5eb281e 100644 } /* -@@ -455,7 +455,7 @@ static void refresh_cpu_vm_stats(void) +@@ -455,7 +456,7 @@ static void refresh_cpu_vm_stats(void) v = this_cpu_xchg(p->vm_stat_diff[i], 0); if (v) { @@ -92840,7 +92778,7 @@ index 5a442a7..5eb281e 100644 global_diff[i] += v; #ifdef CONFIG_NUMA /* 3 seconds idle till flush */ -@@ -517,7 +517,7 @@ void cpu_vm_stats_fold(int cpu) +@@ -517,7 +518,7 @@ void cpu_vm_stats_fold(int cpu) v = p->vm_stat_diff[i]; p->vm_stat_diff[i] = 0; @@ -92849,7 +92787,7 @@ index 5a442a7..5eb281e 100644 global_diff[i] += v; } } -@@ -537,8 +537,8 @@ void drain_zonestat(struct zone *zone, struct per_cpu_pageset *pset) +@@ -537,8 +538,8 @@ void drain_zonestat(struct zone *zone, struct per_cpu_pageset *pset) if (pset->vm_stat_diff[i]) { int v = pset->vm_stat_diff[i]; pset->vm_stat_diff[i] = 0; @@ -92860,7 +92798,31 @@ index 5a442a7..5eb281e 100644 } } #endif -@@ -1281,10 +1281,20 @@ static int __init setup_vmstat(void) +@@ -1148,10 +1149,22 @@ static void *vmstat_start(struct seq_file *m, loff_t *pos) + stat_items_size += sizeof(struct vm_event_state); + #endif + +- v = kmalloc(stat_items_size, GFP_KERNEL); ++ v = kzalloc(stat_items_size, GFP_KERNEL); + m->private = v; + if (!v) + return ERR_PTR(-ENOMEM); ++ ++#ifdef CONFIG_GRKERNSEC_PROC_ADD ++#if defined(CONFIG_GRKERNSEC_PROC_USER) || defined(CONFIG_GRKERNSEC_PROC_USERGROUP) ++ if (!uid_eq(current_uid(), GLOBAL_ROOT_UID) ++#ifdef CONFIG_GRKERNSEC_PROC_USERGROUP ++ && !in_group_p(grsec_proc_gid) ++#endif ++ ) ++ return (unsigned long *)m->private + *pos; ++#endif ++#endif ++ + for (i = 0; i < NR_VM_ZONE_STAT_ITEMS; i++) + v[i] = global_page_state(i); + v += NR_VM_ZONE_STAT_ITEMS; +@@ -1281,10 +1294,16 @@ static int __init setup_vmstat(void) start_cpu_timer(cpu); #endif #ifdef CONFIG_PROC_FS @@ -92875,11 +92837,7 @@ index 5a442a7..5eb281e 100644 +#endif + proc_create("buddyinfo", gr_mode, NULL, &fragmentation_file_operations); + proc_create("pagetypeinfo", gr_mode, NULL, &pagetypeinfo_file_ops); -+#ifdef CONFIG_GRKERNSEC_PROC_USERGROUP -+ proc_create("vmstat", gr_mode | S_IRGRP, NULL, &proc_vmstat_file_operations); -+#else -+ proc_create("vmstat", gr_mode, NULL, &proc_vmstat_file_operations); -+#endif ++ proc_create("vmstat", S_IRUGO, NULL, &proc_vmstat_file_operations); + proc_create("zoneinfo", gr_mode, NULL, &proc_zoneinfo_file_operations); + } #endif @@ -99026,21 +98984,10 @@ index 5de5660..d3deb89 100644 -e 's@^#include <linux/compiler.h>@@' \ -e 's/(^|[^a-zA-Z0-9])__packed([^a-zA-Z0-9_]|$)/\1__attribute__((packed))\2/g' \ diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh -index 32b10f5..64eeb30 100644 +index 2dcb377..a82c500 100644 --- a/scripts/link-vmlinux.sh +++ b/scripts/link-vmlinux.sh -@@ -82,7 +82,9 @@ kallsyms() - kallsymopt="${kallsymopt} --all-symbols" - fi - -- kallsymopt="${kallsymopt} --page-offset=$CONFIG_PAGE_OFFSET" -+ if [ -z "${CONFIG_X86_32}" ] || [ -z "${CONFIG_PAX_KERNEXEC}" ]; then -+ kallsymopt="${kallsymopt} --page-offset=$CONFIG_PAGE_OFFSET" -+ fi - - local aflags="${KBUILD_AFLAGS} ${KBUILD_AFLAGS_KERNEL} \ - ${NOSTDINC_FLAGS} ${LINUXINCLUDE} ${KBUILD_CPPFLAGS}" -@@ -160,7 +162,7 @@ else +@@ -162,7 +162,7 @@ else fi; # final build of init/ @@ -99307,10 +99254,10 @@ index f5eb43d..1814de8 100644 shdr = (Elf_Shdr *)((char *)ehdr + _r(&ehdr->e_shoff)); shstrtab_sec = shdr + r2(&ehdr->e_shstrndx); diff --git a/security/Kconfig b/security/Kconfig -index e9c6ac7..8433964 100644 +index e9c6ac7..9551ea7 100644 --- a/security/Kconfig +++ b/security/Kconfig -@@ -4,6 +4,959 @@ +@@ -4,6 +4,958 @@ menu "Security options" @@ -99621,7 +99568,6 @@ index e9c6ac7..8433964 100644 + select CIFS_XATTR if CIFS + select EXT2_FS_XATTR if EXT2_FS + select EXT3_FS_XATTR if EXT3_FS -+ select EXT4_FS_XATTR if EXT4_FS + select JFFS2_FS_XATTR if JFFS2_FS + select REISERFS_FS_XATTR if REISERFS_FS + select SQUASHFS_XATTR if SQUASHFS @@ -100270,7 +100216,7 @@ index e9c6ac7..8433964 100644 source security/keys/Kconfig config SECURITY_DMESG_RESTRICT -@@ -103,7 +1056,7 @@ config INTEL_TXT +@@ -103,7 +1055,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 @@ -100625,36 +100571,10 @@ index fc3e662..7844c60 100644 lock = &avc_cache.slots_lock[hvalue]; diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c -index d9a78fd..ae3ad22 100644 +index 392a044..5e931be 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c -@@ -4297,8 +4297,10 @@ static int selinux_socket_sock_rcv_skb(struct sock *sk, struct sk_buff *skb) - } - err = avc_has_perm(sk_sid, peer_sid, SECCLASS_PEER, - PEER__RECV, &ad); -- if (err) -+ if (err) { - selinux_netlbl_err(skb, err, 0); -+ return err; -+ } - } - - if (secmark_active) { -@@ -5521,11 +5523,11 @@ static int selinux_setprocattr(struct task_struct *p, - /* Check for ptracing, and update the task SID if ok. - Otherwise, leave SID unchanged and fail. */ - ptsid = 0; -- task_lock(p); -+ rcu_read_lock(); - tracer = ptrace_parent(p); - if (tracer) - ptsid = task_sid(tracer); -- task_unlock(p); -+ rcu_read_unlock(); - - if (tracer) { - error = avc_has_perm(ptsid, sid, SECCLASS_PROCESS, -@@ -5662,7 +5664,7 @@ static int selinux_key_getsecurity(struct key *key, char **_buffer) +@@ -5693,7 +5693,7 @@ static int selinux_key_getsecurity(struct key *key, char **_buffer) #endif @@ -100663,7 +100583,7 @@ index d9a78fd..ae3ad22 100644 .name = "selinux", .ptrace_access_check = selinux_ptrace_access_check, -@@ -6014,6 +6016,9 @@ static void selinux_nf_ip_exit(void) +@@ -6045,6 +6045,9 @@ static void selinux_nf_ip_exit(void) #ifdef CONFIG_SECURITY_SELINUX_DISABLE static int selinux_disabled; @@ -100673,7 +100593,7 @@ index d9a78fd..ae3ad22 100644 int selinux_disable(void) { if (ss_initialized) { -@@ -6031,7 +6036,9 @@ int selinux_disable(void) +@@ -6062,7 +6065,9 @@ int selinux_disable(void) selinux_disabled = 1; selinux_enabled = 0; @@ -100685,10 +100605,10 @@ index d9a78fd..ae3ad22 100644 /* Try to destroy the avc node cache */ avc_disable(); diff --git a/security/selinux/include/xfrm.h b/security/selinux/include/xfrm.h -index 6713f04..c57ecef 100644 +index c1af4e1..bcb003c 100644 --- a/security/selinux/include/xfrm.h +++ b/security/selinux/include/xfrm.h -@@ -52,7 +52,7 @@ static inline void selinux_xfrm_notify_policyload(void) +@@ -53,7 +53,7 @@ static inline void selinux_xfrm_notify_policyload(void) { struct net *net; @@ -103424,10 +103344,10 @@ index 0000000..679b9ef +} diff --git a/tools/gcc/size_overflow_hash.data b/tools/gcc/size_overflow_hash.data new file mode 100644 -index 0000000..a0c9844 +index 0000000..afbbf8f --- /dev/null +++ b/tools/gcc/size_overflow_hash.data -@@ -0,0 +1,7723 @@ +@@ -0,0 +1,7725 @@ +intel_fake_agp_alloc_by_type_1 intel_fake_agp_alloc_by_type 1 1 NULL +ocfs2_get_refcount_tree_3 ocfs2_get_refcount_tree 0 3 NULL +batadv_orig_node_del_if_4 batadv_orig_node_del_if 2 4 NULL @@ -103442,8 +103362,8 @@ index 0000000..a0c9844 +snd_korg1212_copy_to_92 snd_korg1212_copy_to 6 92 NULL +load_msg_95 load_msg 2 95 NULL +device_flush_iotlb_115 device_flush_iotlb 2-3 115 NULL -+ipath_verbs_send_117 ipath_verbs_send 5-3 117 NULL nohasharray -+write_all_supers_117 write_all_supers 0 117 &ipath_verbs_send_117 ++write_all_supers_117 write_all_supers 0 117 NULL nohasharray ++ipath_verbs_send_117 ipath_verbs_send 5-3 117 &write_all_supers_117 +init_q_132 init_q 4 132 NULL +ocfs2_local_alloc_slide_window_134 ocfs2_local_alloc_slide_window 0 134 NULL +memstick_alloc_host_142 memstick_alloc_host 1 142 NULL @@ -104442,8 +104362,8 @@ index 0000000..a0c9844 +usb_allocate_stream_buffers_8964 usb_allocate_stream_buffers 3 8964 NULL +qib_qsfp_dump_8966 qib_qsfp_dump 0-3 8966 NULL +venus_mkdir_8967 venus_mkdir 4 8967 NULL -+seq_open_net_8968 seq_open_net 4 8968 NULL nohasharray -+vol_cdev_read_8968 vol_cdev_read 3 8968 &seq_open_net_8968 ++vol_cdev_read_8968 vol_cdev_read 3 8968 NULL nohasharray ++seq_open_net_8968 seq_open_net 4 8968 &vol_cdev_read_8968 +bio_integrity_get_tag_8974 bio_integrity_get_tag 3 8974 NULL +btrfs_alloc_free_block_8986 btrfs_alloc_free_block 3-8 8986 NULL +jbd2_journal_blocks_per_page_9004 jbd2_journal_blocks_per_page 0 9004 NULL @@ -104859,8 +104779,8 @@ index 0000000..a0c9844 +shash_compat_setkey_12267 shash_compat_setkey 3 12267 NULL +add_sctp_bind_addr_12269 add_sctp_bind_addr 3 12269 NULL +note_last_dentry_12285 note_last_dentry 3 12285 NULL -+il_dbgfs_nvm_read_12288 il_dbgfs_nvm_read 3 12288 NULL nohasharray -+roundup_to_multiple_of_64_12288 roundup_to_multiple_of_64 0-1 12288 &il_dbgfs_nvm_read_12288 ++roundup_to_multiple_of_64_12288 roundup_to_multiple_of_64 0-1 12288 NULL nohasharray ++il_dbgfs_nvm_read_12288 il_dbgfs_nvm_read 3 12288 &roundup_to_multiple_of_64_12288 +wrap_min_12303 wrap_min 0-1-2 12303 NULL +bt_sock_recvmsg_12316 bt_sock_recvmsg 4 12316 NULL +pcbit_writecmd_12332 pcbit_writecmd 2 12332 NULL @@ -104978,6 +104898,7 @@ index 0000000..a0c9844 +kvm_read_nested_guest_page_13337 kvm_read_nested_guest_page 5-2 13337 NULL +get_bits_13353 get_bits 0-2 13353 NULL +hscx_empty_fifo_13360 hscx_empty_fifo 2 13360 NULL ++snd_ctl_elem_info_13363 snd_ctl_elem_info 0 13363 NULL +iso_sched_alloc_13377 iso_sched_alloc 1 13377 NULL nohasharray +wep_key_not_found_read_13377 wep_key_not_found_read 3 13377 &iso_sched_alloc_13377 +ext4_meta_trans_blocks_13380 ext4_meta_trans_blocks 0-3-2 13380 NULL @@ -105119,8 +105040,8 @@ index 0000000..a0c9844 +efx_mdio_check_mmds_14486 efx_mdio_check_mmds 2 14486 NULL nohasharray +ieee80211_if_read_dot11MeshGateAnnouncementProtocol_14486 ieee80211_if_read_dot11MeshGateAnnouncementProtocol 3 14486 &efx_mdio_check_mmds_14486 +ocfs2_debug_read_14507 ocfs2_debug_read 3 14507 NULL -+ep0_write_14536 ep0_write 3 14536 NULL nohasharray -+dataflash_read_user_otp_14536 dataflash_read_user_otp 3-2 14536 &ep0_write_14536 ++dataflash_read_user_otp_14536 dataflash_read_user_otp 3-2 14536 NULL nohasharray ++ep0_write_14536 ep0_write 3 14536 &dataflash_read_user_otp_14536 +register_trace_sched_switch_14545 register_trace_sched_switch 0 14545 NULL +picolcd_debug_eeprom_read_14549 picolcd_debug_eeprom_read 3 14549 NULL +drm_vmalloc_dma_14550 drm_vmalloc_dma 1 14550 NULL @@ -105156,8 +105077,8 @@ index 0000000..a0c9844 +keys_proc_write_14792 keys_proc_write 3 14792 NULL +ext4_kvmalloc_14796 ext4_kvmalloc 1 14796 NULL +__kfifo_in_14797 __kfifo_in 3-0 14797 NULL -+hpet_readl_14801 hpet_readl 0 14801 NULL nohasharray -+snd_als300_gcr_read_14801 snd_als300_gcr_read 0 14801 &hpet_readl_14801 ++snd_als300_gcr_read_14801 snd_als300_gcr_read 0 14801 NULL nohasharray ++hpet_readl_14801 hpet_readl 0 14801 &snd_als300_gcr_read_14801 +changed_cb_14819 changed_cb 0 14819 NULL +do_tune_cpucache_14828 do_tune_cpucache 2 14828 NULL +mrp_attr_create_14853 mrp_attr_create 3 14853 NULL @@ -105850,8 +105771,8 @@ index 0000000..a0c9844 +cpulist_scnprintf_20648 cpulist_scnprintf 2-0 20648 NULL +oz_add_farewell_20652 oz_add_farewell 5 20652 NULL +oz_cdev_read_20659 oz_cdev_read 3 20659 NULL -+snd_hdsp_playback_copy_20676 snd_hdsp_playback_copy 5 20676 NULL nohasharray -+btrfs_qgroup_reserve_20676 btrfs_qgroup_reserve 0 20676 &snd_hdsp_playback_copy_20676 ++btrfs_qgroup_reserve_20676 btrfs_qgroup_reserve 0 20676 NULL nohasharray ++snd_hdsp_playback_copy_20676 snd_hdsp_playback_copy 5 20676 &btrfs_qgroup_reserve_20676 +get_user_page_nowait_20682 get_user_page_nowait 3 20682 NULL nohasharray +dvb_dmxdev_buffer_read_20682 dvb_dmxdev_buffer_read 0-4 20682 &get_user_page_nowait_20682 +cpumask_size_20683 cpumask_size 0 20683 NULL @@ -106517,8 +106438,8 @@ index 0000000..a0c9844 +read_sb_page_26119 read_sb_page 5 26119 NULL +__fswab64_26155 __fswab64 0 26155 NULL +copy_oldmem_page_26164 copy_oldmem_page 3 26164 NULL -+gfs2_xattr_acl_get_26166 gfs2_xattr_acl_get 0 26166 NULL nohasharray -+ath6kl_roam_table_read_26166 ath6kl_roam_table_read 3 26166 &gfs2_xattr_acl_get_26166 ++ath6kl_roam_table_read_26166 ath6kl_roam_table_read 3 26166 NULL nohasharray ++gfs2_xattr_acl_get_26166 gfs2_xattr_acl_get 0 26166 &ath6kl_roam_table_read_26166 +disk_devt_26180 disk_devt 0 26180 NULL +cgroup_setxattr_26188 cgroup_setxattr 4 26188 NULL +ieee80211_if_fmt_dot11MeshTTL_26198 ieee80211_if_fmt_dot11MeshTTL 3 26198 NULL @@ -106846,8 +106767,8 @@ index 0000000..a0c9844 +xz_dec_init_29029 xz_dec_init 2 29029 NULL +i915_gem_object_bind_to_vm_29035 i915_gem_object_bind_to_vm 0 29035 NULL +ieee80211_if_read_ht_opmode_29044 ieee80211_if_read_ht_opmode 3 29044 NULL -+ProcessGetHostMibs_29049 ProcessGetHostMibs 0 29049 NULL nohasharray -+rxrpc_sendmsg_29049 rxrpc_sendmsg 4 29049 &ProcessGetHostMibs_29049 ++rxrpc_sendmsg_29049 rxrpc_sendmsg 4 29049 NULL nohasharray ++ProcessGetHostMibs_29049 ProcessGetHostMibs 0 29049 &rxrpc_sendmsg_29049 +btrfs_root_bytenr_29058 btrfs_root_bytenr 0 29058 NULL +iso_packets_buffer_init_29061 iso_packets_buffer_init 3-4 29061 NULL +roundup_64_29066 roundup_64 2-0-1 29066 NULL @@ -107079,6 +107000,7 @@ index 0000000..a0c9844 +size_inside_page_31141 size_inside_page 0-1-2 31141 NULL +w9966_v4l_read_31148 w9966_v4l_read 3 31148 NULL +ch_do_scsi_31171 ch_do_scsi 4 31171 NULL ++crypto_rng_seedsize_31196 crypto_rng_seedsize 0 31196 NULL +r592_read_fifo_pio_31198 r592_read_fifo_pio 3 31198 NULL +mtdchar_readoob_31200 mtdchar_readoob 4 31200 NULL +__btrfs_free_reserved_extent_31207 __btrfs_free_reserved_extent 2 31207 NULL @@ -107459,8 +107381,8 @@ index 0000000..a0c9844 +av7110_vbi_write_34384 av7110_vbi_write 3 34384 NULL +usbvision_v4l2_read_34386 usbvision_v4l2_read 3 34386 NULL +read_rbu_image_type_34387 read_rbu_image_type 6 34387 NULL -+iwl_calib_set_34400 iwl_calib_set 3 34400 NULL nohasharray -+ivtv_read_pos_34400 ivtv_read_pos 3 34400 &iwl_calib_set_34400 ++ivtv_read_pos_34400 ivtv_read_pos 3 34400 NULL nohasharray ++iwl_calib_set_34400 iwl_calib_set 3 34400 &ivtv_read_pos_34400 +wd_exp_mode_write_34407 wd_exp_mode_write 3 34407 NULL +nl80211_send_disassoc_34424 nl80211_send_disassoc 4 34424 NULL +security_socket_create_34439 security_socket_create 0 34439 NULL @@ -107470,13 +107392,13 @@ index 0000000..a0c9844 +i2o_parm_field_get_34477 i2o_parm_field_get 5 34477 NULL +ocfs2_block_group_clear_bits_34484 ocfs2_block_group_clear_bits 0 34484 NULL +security_inode_permission_34488 security_inode_permission 0 34488 NULL -+SyS_pwritev_34494 SyS_pwritev 3 34494 NULL nohasharray -+__ffs64_34494 __ffs64 1-0 34494 &SyS_pwritev_34494 ++__ffs64_34494 __ffs64 1-0 34494 NULL nohasharray ++SyS_pwritev_34494 SyS_pwritev 3 34494 &__ffs64_34494 +qp_alloc_res_34496 qp_alloc_res 5 34496 NULL +lu_buf_check_and_alloc_34505 lu_buf_check_and_alloc 2 34505 NULL +snd_pcm_hw_param_value_34525 snd_pcm_hw_param_value 0 34525 NULL -+ext4_fallocate_34537 ext4_fallocate 4-3 34537 NULL nohasharray -+tracing_stats_read_34537 tracing_stats_read 3 34537 &ext4_fallocate_34537 ++tracing_stats_read_34537 tracing_stats_read 3 34537 NULL nohasharray ++ext4_fallocate_34537 ext4_fallocate 4-3 34537 &tracing_stats_read_34537 +hugetlbfs_read_actor_34547 hugetlbfs_read_actor 4-5-2-0 34547 NULL +dbBackSplit_34561 dbBackSplit 0 34561 NULL +alloc_ieee80211_rsl_34564 alloc_ieee80211_rsl 1 34564 NULL nohasharray @@ -107489,8 +107411,8 @@ index 0000000..a0c9844 +cw1200_queue_init_34599 cw1200_queue_init 4 34599 &ceph_msgpool_init_34599 +__add_prelim_ref_34600 __add_prelim_ref 0 34600 NULL +brcmf_cfg80211_mgmt_tx_34608 brcmf_cfg80211_mgmt_tx 7 34608 NULL -+__jffs2_ref_totlen_34609 __jffs2_ref_totlen 0 34609 NULL nohasharray -+mtd_write_34609 mtd_write 0 34609 &__jffs2_ref_totlen_34609 ++mtd_write_34609 mtd_write 0 34609 NULL nohasharray ++__jffs2_ref_totlen_34609 __jffs2_ref_totlen 0 34609 &mtd_write_34609 +apei_get_nvs_resources_34616 apei_get_nvs_resources 0 34616 NULL +__cfg80211_disconnected_34622 __cfg80211_disconnected 3 34622 NULL +cnic_alloc_dma_34641 cnic_alloc_dma 3 34641 NULL @@ -107956,11 +107878,11 @@ index 0000000..a0c9844 +snd_pcm_playback_rewind_38249 snd_pcm_playback_rewind 0-2 38249 NULL +from_dblock_38256 from_dblock 0-1 38256 NULL +vmci_qp_broker_set_page_store_38260 vmci_qp_broker_set_page_store 3-2 38260 NULL -+SYSC_msgrcv_38268 SYSC_msgrcv 3 38268 NULL nohasharray -+ieee80211_if_read_auto_open_plinks_38268 ieee80211_if_read_auto_open_plinks 3 38268 &SYSC_msgrcv_38268 nohasharray -+mthca_alloc_icm_table_38268 mthca_alloc_icm_table 4-3 38268 &ieee80211_if_read_auto_open_plinks_38268 -+xfs_bmdr_to_bmbt_38275 xfs_bmdr_to_bmbt 5 38275 NULL nohasharray -+xfs_bmbt_to_bmdr_38275 xfs_bmbt_to_bmdr 3 38275 &xfs_bmdr_to_bmbt_38275 ++ieee80211_if_read_auto_open_plinks_38268 ieee80211_if_read_auto_open_plinks 3 38268 NULL nohasharray ++SYSC_msgrcv_38268 SYSC_msgrcv 3 38268 &ieee80211_if_read_auto_open_plinks_38268 nohasharray ++mthca_alloc_icm_table_38268 mthca_alloc_icm_table 4-3 38268 &SYSC_msgrcv_38268 ++xfs_bmbt_to_bmdr_38275 xfs_bmbt_to_bmdr 3 38275 NULL nohasharray ++xfs_bmdr_to_bmbt_38275 xfs_bmdr_to_bmbt 5 38275 &xfs_bmbt_to_bmdr_38275 +ftdi_process_packet_38281 ftdi_process_packet 4 38281 NULL +gpa_to_gfn_38291 gpa_to_gfn 0-1 38291 NULL +ucma_query_path_38305 ucma_query_path 3 38305 NULL @@ -108033,8 +107955,8 @@ index 0000000..a0c9844 +ext3_trim_all_free_38929 ext3_trim_all_free 4-3-2 38929 NULL +il_dbgfs_sram_write_38942 il_dbgfs_sram_write 3 38942 NULL +__ath6kl_wmi_send_mgmt_cmd_38971 __ath6kl_wmi_send_mgmt_cmd 7 38971 NULL -+C_SYSC_preadv64_38977 C_SYSC_preadv64 3 38977 NULL nohasharray -+usb_maxpacket_38977 usb_maxpacket 0 38977 &C_SYSC_preadv64_38977 ++usb_maxpacket_38977 usb_maxpacket 0 38977 NULL nohasharray ++C_SYSC_preadv64_38977 C_SYSC_preadv64 3 38977 &usb_maxpacket_38977 +OSDSetBlock_38986 OSDSetBlock 2-4 38986 NULL +lpfc_idiag_extacc_write_38998 lpfc_idiag_extacc_write 3 38998 NULL +udf_new_block_38999 udf_new_block 4 38999 NULL @@ -108098,8 +108020,8 @@ index 0000000..a0c9844 +ext_depth_39607 ext_depth 0 39607 NULL +nfs_idmap_get_key_39616 nfs_idmap_get_key 2 39616 NULL +sdio_readb_39618 sdio_readb 0 39618 NULL -+set_dev_class_39645 set_dev_class 4 39645 NULL nohasharray -+dm_exception_table_init_39645 dm_exception_table_init 2 39645 &set_dev_class_39645 ++dm_exception_table_init_39645 dm_exception_table_init 2 39645 NULL nohasharray ++set_dev_class_39645 set_dev_class 4 39645 &dm_exception_table_init_39645 +snd_rme32_capture_copy_39653 snd_rme32_capture_copy 5 39653 NULL +tcp_try_rmem_schedule_39657 tcp_try_rmem_schedule 3 39657 NULL +kvm_read_guest_cached_39666 kvm_read_guest_cached 4 39666 NULL @@ -108543,8 +108465,8 @@ index 0000000..a0c9844 +usb_alloc_urb_43436 usb_alloc_urb 1 43436 NULL +ath6kl_wmi_roam_tbl_event_rx_43440 ath6kl_wmi_roam_tbl_event_rx 3 43440 NULL +ocfs2_rotate_tree_left_43442 ocfs2_rotate_tree_left 0 43442 NULL -+usemap_size_43443 usemap_size 0-2-1 43443 NULL nohasharray -+usb_string_43443 usb_string 0 43443 &usemap_size_43443 ++usb_string_43443 usb_string 0 43443 NULL nohasharray ++usemap_size_43443 usemap_size 0-2-1 43443 &usb_string_43443 +get_vm_area_size_43444 get_vm_area_size 0 43444 NULL +nvme_trans_device_id_page_43466 nvme_trans_device_id_page 4 43466 NULL +calculate_discard_block_size_43480 calculate_discard_block_size 0 43480 NULL nohasharray @@ -108853,8 +108775,8 @@ index 0000000..a0c9844 +dma_tx_errors_read_46060 dma_tx_errors_read 3 46060 &__ocfs2_move_extent_46060 +sel_commit_bools_write_46077 sel_commit_bools_write 3 46077 NULL +arizona_set_irq_wake_46101 arizona_set_irq_wake 2 46101 NULL -+memcg_update_array_size_46111 memcg_update_array_size 1 46111 NULL nohasharray -+il3945_ucode_general_stats_read_46111 il3945_ucode_general_stats_read 3 46111 &memcg_update_array_size_46111 ++il3945_ucode_general_stats_read_46111 il3945_ucode_general_stats_read 3 46111 NULL nohasharray ++memcg_update_array_size_46111 memcg_update_array_size 1 46111 &il3945_ucode_general_stats_read_46111 +C_SYSC_writev_46113 C_SYSC_writev 3 46113 NULL +mlx4_ib_alloc_fast_reg_page_list_46119 mlx4_ib_alloc_fast_reg_page_list 2 46119 NULL +paging32_walk_addr_nested_46121 paging32_walk_addr_nested 3 46121 NULL @@ -108874,8 +108796,8 @@ index 0000000..a0c9844 +mpi_read_raw_data_46248 mpi_read_raw_data 2 46248 NULL +ReadReg_46277 ReadReg 0 46277 NULL +sg_proc_write_dressz_46316 sg_proc_write_dressz 3 46316 NULL -+__hwahc_dev_set_key_46328 __hwahc_dev_set_key 5 46328 NULL nohasharray -+compat_SyS_readv_46328 compat_SyS_readv 3 46328 &__hwahc_dev_set_key_46328 ++compat_SyS_readv_46328 compat_SyS_readv 3 46328 NULL nohasharray ++__hwahc_dev_set_key_46328 __hwahc_dev_set_key 5 46328 &compat_SyS_readv_46328 +iwl_dbgfs_chain_noise_read_46355 iwl_dbgfs_chain_noise_read 3 46355 NULL +smk_write_direct_46363 smk_write_direct 3 46363 NULL +__iommu_calculate_agaw_46366 __iommu_calculate_agaw 2 46366 NULL @@ -109095,8 +109017,8 @@ index 0000000..a0c9844 +set_discoverable_48141 set_discoverable 4 48141 NULL +dn_fib_count_nhs_48145 dn_fib_count_nhs 0 48145 NULL +get_cur_inode_state_48149 get_cur_inode_state 0 48149 NULL -+_add_to_r4w_48152 _add_to_r4w 4 48152 NULL nohasharray -+bitmap_onto_48152 bitmap_onto 4 48152 &_add_to_r4w_48152 ++bitmap_onto_48152 bitmap_onto 4 48152 NULL nohasharray ++_add_to_r4w_48152 _add_to_r4w 4 48152 &bitmap_onto_48152 +isr_dma1_done_read_48159 isr_dma1_done_read 3 48159 NULL +c4iw_id_table_alloc_48163 c4iw_id_table_alloc 3 48163 NULL +ocfs2_find_next_zero_bit_unaligned_48170 ocfs2_find_next_zero_bit_unaligned 2-3 48170 NULL nohasharray @@ -109178,8 +109100,8 @@ index 0000000..a0c9844 +vc_do_resize_48842 vc_do_resize 4-3 48842 NULL +comedi_buf_write_alloc_48846 comedi_buf_write_alloc 0-2 48846 NULL +suspend_dtim_interval_write_48854 suspend_dtim_interval_write 3 48854 NULL -+C_SYSC_pwritev64_48864 C_SYSC_pwritev64 3 48864 NULL nohasharray -+viafb_dvp1_proc_write_48864 viafb_dvp1_proc_write 3 48864 &C_SYSC_pwritev64_48864 ++viafb_dvp1_proc_write_48864 viafb_dvp1_proc_write 3 48864 NULL nohasharray ++C_SYSC_pwritev64_48864 C_SYSC_pwritev64 3 48864 &viafb_dvp1_proc_write_48864 +ide_port_alloc_devices_48866 ide_port_alloc_devices 2 48866 NULL +__ffs_ep0_read_events_48868 __ffs_ep0_read_events 3 48868 NULL +ext2_alloc_branch_48889 ext2_alloc_branch 4 48889 NULL @@ -109435,8 +109357,8 @@ index 0000000..a0c9844 +dpcm_show_state_50827 dpcm_show_state 0 50827 NULL +acpi_ev_install_gpe_block_50829 acpi_ev_install_gpe_block 2 50829 NULL +SetArea_50835 SetArea 4 50835 NULL nohasharray -+create_mem_extents_50835 create_mem_extents 0 50835 &SetArea_50835 nohasharray -+mask_from_50835 mask_from 0-1-2 50835 &create_mem_extents_50835 ++mask_from_50835 mask_from 0-1-2 50835 &SetArea_50835 nohasharray ++create_mem_extents_50835 create_mem_extents 0 50835 &mask_from_50835 +videobuf_dma_init_user_50839 videobuf_dma_init_user 3-4 50839 NULL +btrfs_search_slot_for_read_50843 btrfs_search_slot_for_read 0 50843 NULL +self_check_write_50856 self_check_write 0-5 50856 NULL @@ -109528,8 +109450,8 @@ index 0000000..a0c9844 +load_pdptrs_51541 load_pdptrs 3 51541 NULL +__alloc_eip_netdev_51549 __alloc_eip_netdev 1 51549 NULL +ixgb_get_eeprom_len_51586 ixgb_get_eeprom_len 0 51586 NULL -+get_cur_path_51589 get_cur_path 0 51589 NULL nohasharray -+snd_interval_refine_first_51589 snd_interval_refine_first 0 51589 &get_cur_path_51589 ++snd_interval_refine_first_51589 snd_interval_refine_first 0 51589 NULL nohasharray ++get_cur_path_51589 get_cur_path 0 51589 &snd_interval_refine_first_51589 +aac_convert_sgraw2_51598 aac_convert_sgraw2 4 51598 NULL +table_size_to_number_of_entries_51613 table_size_to_number_of_entries 0-1 51613 NULL +extent_fiemap_51621 extent_fiemap 3 51621 NULL @@ -109565,8 +109487,8 @@ index 0000000..a0c9844 +get_indirect_ea_51869 get_indirect_ea 4 51869 NULL +user_read_51881 user_read 3 51881 NULL +dbAdjCtl_51888 dbAdjCtl 0 51888 NULL -+SyS_mq_timedsend_51896 SyS_mq_timedsend 3 51896 NULL nohasharray -+virt_to_phys_51896 virt_to_phys 0 51896 &SyS_mq_timedsend_51896 ++virt_to_phys_51896 virt_to_phys 0 51896 NULL nohasharray ++SyS_mq_timedsend_51896 SyS_mq_timedsend 3 51896 &virt_to_phys_51896 +commit_fs_roots_51898 commit_fs_roots 0 51898 NULL +uvhub_to_first_node_51916 uvhub_to_first_node 0 51916 NULL +wmi_set_ie_51919 wmi_set_ie 3 51919 NULL @@ -109778,8 +109700,8 @@ index 0000000..a0c9844 +nr_sendmsg_53656 nr_sendmsg 4 53656 NULL +fuse_fill_write_pages_53682 fuse_fill_write_pages 0-4 53682 NULL +v4l2_event_subscribe_53687 v4l2_event_subscribe 3 53687 NULL -+bdev_logical_block_size_53690 bdev_logical_block_size 0 53690 NULL nohasharray -+igb_alloc_q_vector_53690 igb_alloc_q_vector 6-4 53690 &bdev_logical_block_size_53690 ++igb_alloc_q_vector_53690 igb_alloc_q_vector 6-4 53690 NULL nohasharray ++bdev_logical_block_size_53690 bdev_logical_block_size 0 53690 &igb_alloc_q_vector_53690 +find_overflow_devnum_53711 find_overflow_devnum 0 53711 NULL +bio_integrity_split_53714 bio_integrity_split 3 53714 NULL +__ocfs2_resv_find_window_53721 __ocfs2_resv_find_window 3 53721 NULL @@ -109982,8 +109904,8 @@ index 0000000..a0c9844 +lov_get_stripecnt_55297 lov_get_stripecnt 0-3 55297 NULL +gsm_control_modem_55303 gsm_control_modem 3 55303 NULL +wimax_msg_len_55304 wimax_msg_len 0 55304 NULL -+__get_vm_area_node_55305 __get_vm_area_node 6 55305 NULL nohasharray -+qp_alloc_guest_work_55305 qp_alloc_guest_work 5-3 55305 &__get_vm_area_node_55305 ++qp_alloc_guest_work_55305 qp_alloc_guest_work 5-3 55305 NULL nohasharray ++__get_vm_area_node_55305 __get_vm_area_node 6 55305 &qp_alloc_guest_work_55305 +__vxge_hw_vpath_initialize_55328 __vxge_hw_vpath_initialize 2 55328 NULL +do_shmat_55336 do_shmat 5 55336 NULL +vme_user_read_55338 vme_user_read 3 55338 NULL @@ -110167,8 +110089,8 @@ index 0000000..a0c9844 +__bitmap_clear_bits_56912 __bitmap_clear_bits 3 56912 NULL +strcspn_56913 strcspn 0 56913 NULL +__kfifo_out_56927 __kfifo_out 0-3 56927 NULL -+CopyBufferToControlPacket_56933 CopyBufferToControlPacket 0 56933 NULL nohasharray -+journal_init_revoke_56933 journal_init_revoke 2 56933 &CopyBufferToControlPacket_56933 ++journal_init_revoke_56933 journal_init_revoke 2 56933 NULL nohasharray ++CopyBufferToControlPacket_56933 CopyBufferToControlPacket 0 56933 &journal_init_revoke_56933 +nouveau_xtensa_create__56952 nouveau_xtensa_create_ 8 56952 NULL +diva_get_driver_info_56967 diva_get_driver_info 0 56967 NULL +nouveau_device_create__56984 nouveau_device_create_ 6 56984 NULL @@ -110284,8 +110206,8 @@ index 0000000..a0c9844 +kiblnd_create_tx_pool_57846 kiblnd_create_tx_pool 2 57846 NULL +process_all_new_xattrs_57881 process_all_new_xattrs 0 57881 NULL +xt_alloc_table_info_57903 xt_alloc_table_info 1 57903 NULL -+iio_read_first_n_kfifo_57910 iio_read_first_n_kfifo 2 57910 NULL nohasharray -+atomic_add_return_unchecked_57910 atomic_add_return_unchecked 0-1 57910 &iio_read_first_n_kfifo_57910 ++atomic_add_return_unchecked_57910 atomic_add_return_unchecked 0-1 57910 NULL nohasharray ++iio_read_first_n_kfifo_57910 iio_read_first_n_kfifo 2 57910 &atomic_add_return_unchecked_57910 +memcg_caches_array_size_57918 memcg_caches_array_size 0-1 57918 NULL +twl_i2c_write_57923 twl_i2c_write 3-4 57923 NULL +__snd_gf1_look16_57925 __snd_gf1_look16 0 57925 NULL @@ -110525,8 +110447,8 @@ index 0000000..a0c9844 +xlog_bread_offset_60030 xlog_bread_offset 3 60030 NULL +bio_integrity_hw_sectors_60039 bio_integrity_hw_sectors 0-2 60039 NULL +do_ip6t_set_ctl_60040 do_ip6t_set_ctl 4 60040 NULL -+vcs_size_60050 vcs_size 0 60050 NULL nohasharray -+pin_2_irq_60050 pin_2_irq 0-3 60050 &vcs_size_60050 ++pin_2_irq_60050 pin_2_irq 0-3 60050 NULL nohasharray ++vcs_size_60050 vcs_size 0 60050 &pin_2_irq_60050 +gru_alloc_gts_60056 gru_alloc_gts 3-2 60056 NULL +open_cur_inode_file_60057 open_cur_inode_file 0 60057 NULL +compat_writev_60063 compat_writev 3 60063 NULL @@ -111153,12 +111075,12 @@ index 0000000..a0c9844 +nvme_trans_standard_inquiry_page_65526 nvme_trans_standard_inquiry_page 4 65526 NULL diff --git a/tools/gcc/size_overflow_plugin.c b/tools/gcc/size_overflow_plugin.c new file mode 100644 -index 0000000..5515dcb +index 0000000..62a1ae8 --- /dev/null +++ b/tools/gcc/size_overflow_plugin.c -@@ -0,0 +1,3927 @@ +@@ -0,0 +1,4050 @@ +/* -+ * Copyright 2011, 2012, 2013 by Emese Revfy <re.emese@gmail.com> ++ * Copyright 2011, 2012, 2013, 2014 by Emese Revfy <re.emese@gmail.com> + * Licensed under the GPL v2, or (at your option) v3 + * + * Homepage: @@ -111286,7 +111208,7 @@ index 0000000..5515dcb +static tree dup_assign(struct pointer_set_t *visited, gimple oldstmt, const_tree node, tree rhs1, tree rhs2, tree __unused rhs3); + +static struct plugin_info size_overflow_plugin_info = { -+ .version = "20131214beta", ++ .version = "20140102beta", + .help = "no-size-overflow\tturn off size overflow checking\n", +}; + @@ -114733,6 +114655,141 @@ index 0000000..5515dcb + create_asm_stmt(str, build_string(1, "0"), build_string(3, "=rm"), &asm_data); +} + ++// Insert an asm stmt with "MARK_TURN_OFF", "MARK_YES" or "MARK_NOT_INTENTIONAL". ++static bool create_mark_asm(gimple stmt, enum mark mark) ++{ ++ struct asm_data asm_data; ++ const char *asm_str; ++ ++ switch (mark) { ++ case MARK_TURN_OFF: ++ asm_str = TURN_OFF_ASM_STR; ++ break; ++ case MARK_NOT_INTENTIONAL: ++ case MARK_YES: ++ asm_str = YES_ASM_STR; ++ break; ++ default: ++ gcc_unreachable(); ++ } ++ ++ asm_data.def_stmt = stmt; ++ asm_data.output = gimple_call_lhs(stmt); ++ ++ if (asm_data.output == NULL_TREE) { ++ asm_data.input = gimple_call_arg(stmt, 0); ++ if (is_gimple_constant(asm_data.input)) ++ return false; ++ asm_data.output = NULL; ++ create_asm_stmt(asm_str, build_string(2, "rm"), NULL, &asm_data); ++ return true; ++ } ++ ++ create_asm_input(stmt, 0, &asm_data); ++ gcc_assert(asm_data.input != NULL_TREE); ++ ++ create_asm_stmt(asm_str, build_string(1, "0"), build_string(3, "=rm"), &asm_data); ++ return true; ++} ++ ++static bool is_from_cast(const_tree node) ++{ ++ gimple def_stmt = get_def_stmt(node); ++ ++ if (!def_stmt) ++ return false; ++ ++ if (gimple_assign_cast_p(def_stmt)) ++ return true; ++ ++ return false; ++} ++ ++// Skip duplication when there is a minus expr and the type of rhs1 or rhs2 is a pointer_type. ++static bool skip_ptr_minus(gimple stmt) ++{ ++ const_tree rhs1, rhs2, ptr1_rhs, ptr2_rhs; ++ ++ if (gimple_assign_rhs_code(stmt) != MINUS_EXPR) ++ return false; ++ ++ rhs1 = gimple_assign_rhs1(stmt); ++ if (!is_from_cast(rhs1)) ++ return false; ++ ++ rhs2 = gimple_assign_rhs2(stmt); ++ if (!is_from_cast(rhs2)) ++ return false; ++ ++ ptr1_rhs = gimple_assign_rhs1(get_def_stmt(rhs1)); ++ ptr2_rhs = gimple_assign_rhs1(get_def_stmt(rhs2)); ++ ++ if (TREE_CODE(TREE_TYPE(ptr1_rhs)) != POINTER_TYPE && TREE_CODE(TREE_TYPE(ptr2_rhs)) != POINTER_TYPE) ++ return false; ++ ++ create_mark_asm(stmt, MARK_YES); ++ return true; ++} ++ ++static void walk_use_def_ptr(struct pointer_set_t *visited, const_tree lhs) ++{ ++ gimple def_stmt; ++ ++ def_stmt = get_def_stmt(lhs); ++ if (!def_stmt) ++ return; ++ ++ if (pointer_set_insert(visited, def_stmt)) ++ return; ++ ++ switch (gimple_code(def_stmt)) { ++ case GIMPLE_NOP: ++ case GIMPLE_ASM: ++ case GIMPLE_CALL: ++ break; ++ case GIMPLE_PHI: { ++ unsigned int i, n = gimple_phi_num_args(def_stmt); ++ ++ pointer_set_insert(visited, def_stmt); ++ ++ for (i = 0; i < n; i++) { ++ tree arg = gimple_phi_arg_def(def_stmt, i); ++ ++ walk_use_def_ptr(visited, arg); ++ } ++ } ++ case GIMPLE_ASSIGN: ++ switch (gimple_num_ops(def_stmt)) { ++ case 2: ++ walk_use_def_ptr(visited, gimple_assign_rhs1(def_stmt)); ++ return; ++ case 3: ++ if (skip_ptr_minus(def_stmt)) ++ return; ++ ++ walk_use_def_ptr(visited, gimple_assign_rhs1(def_stmt)); ++ walk_use_def_ptr(visited, gimple_assign_rhs2(def_stmt)); ++ return; ++ default: ++ return; ++ } ++ default: ++ debug_gimple_stmt((gimple)def_stmt); ++ error("%s: unknown gimple code", __func__); ++ gcc_unreachable(); ++ } ++} ++ ++// Look for a ptr - ptr expression (e.g., cpuset_common_file_read() s - page) ++static void insert_mark_not_intentional_asm_at_ptr(const_tree arg) ++{ ++ struct pointer_set_t *visited; ++ ++ visited = pointer_set_create(); ++ walk_use_def_ptr(visited, arg); ++ pointer_set_destroy(visited); ++} ++ +// Determine the return value and insert the asm stmt to mark the return stmt. +static void insert_asm_ret(gimple stmt) +{ @@ -114755,6 +114812,10 @@ index 0000000..5515dcb + + arg = gimple_call_arg(stmt, argnum - 1); + gcc_assert(arg != NULL_TREE); ++ ++ // skip all ptr - ptr expressions ++ insert_mark_not_intentional_asm_at_ptr(arg); ++ + create_size_overflow_asm(stmt, arg, argnum); +} + @@ -114814,35 +114875,17 @@ index 0000000..5515dcb + +/* + * Look up the intentional_overflow attribute that turns off ipa based duplication -+ * on the callee function, if found insert an asm stmt with "MARK_TURN_OFF". ++ * on the callee function. + */ -+static bool create_mark_turn_off_asm(gimple stmt) ++static bool is_mark_turn_off_attribute(gimple stmt) +{ + enum mark mark; -+ struct asm_data asm_data; + const_tree fndecl = gimple_call_fndecl(stmt); + + mark = get_intentional_attr_type(DECL_ORIGIN(fndecl)); -+ if (mark != MARK_TURN_OFF) -+ return false; -+ -+ asm_data.def_stmt = stmt; -+ asm_data.output = gimple_call_lhs(stmt); -+ -+ if (asm_data.output == NULL_TREE) { -+ asm_data.input = gimple_call_arg(stmt, 0); -+ if (is_gimple_constant(asm_data.input)) -+ return false; -+ asm_data.output = NULL; -+ create_asm_stmt(TURN_OFF_ASM_STR, build_string(2, "rm"), NULL, &asm_data); ++ if (mark == MARK_TURN_OFF) + return true; -+ } -+ -+ create_asm_input(stmt, 0, &asm_data); -+ gcc_assert(asm_data.input != NULL_TREE); -+ -+ create_asm_stmt(TURN_OFF_ASM_STR, build_string(1, "0"), build_string(3, "=rm"), &asm_data); -+ return true; ++ return false; +} + +// If the argument(s) of the callee function is/are in the hash table or are marked by an attribute then mark the call stmt with an asm stmt @@ -114859,8 +114902,10 @@ index 0000000..5515dcb + return; + fndecl = DECL_ORIGIN(fndecl); + -+ if (create_mark_turn_off_asm(stmt)) ++ if (is_mark_turn_off_attribute(stmt)) { ++ create_mark_asm(stmt, MARK_TURN_OFF); + return; ++ } + + search_interesting_args(fndecl, orig_argnums); + diff --git a/3.12.6/4425_grsec_remove_EI_PAX.patch b/3.12.7/4425_grsec_remove_EI_PAX.patch index cf65d90..cf65d90 100644 --- a/3.12.6/4425_grsec_remove_EI_PAX.patch +++ b/3.12.7/4425_grsec_remove_EI_PAX.patch diff --git a/3.12.6/4427_force_XATTR_PAX_tmpfs.patch b/3.12.7/4427_force_XATTR_PAX_tmpfs.patch index 23e60cd..23e60cd 100644 --- a/3.12.6/4427_force_XATTR_PAX_tmpfs.patch +++ b/3.12.7/4427_force_XATTR_PAX_tmpfs.patch diff --git a/3.12.6/4430_grsec-remove-localversion-grsec.patch b/3.12.7/4430_grsec-remove-localversion-grsec.patch index 31cf878..31cf878 100644 --- a/3.12.6/4430_grsec-remove-localversion-grsec.patch +++ b/3.12.7/4430_grsec-remove-localversion-grsec.patch diff --git a/3.12.6/4435_grsec-mute-warnings.patch b/3.12.7/4435_grsec-mute-warnings.patch index ed941d5..ed941d5 100644 --- a/3.12.6/4435_grsec-mute-warnings.patch +++ b/3.12.7/4435_grsec-mute-warnings.patch diff --git a/3.12.6/4440_grsec-remove-protected-paths.patch b/3.12.7/4440_grsec-remove-protected-paths.patch index 05710b1..05710b1 100644 --- a/3.12.6/4440_grsec-remove-protected-paths.patch +++ b/3.12.7/4440_grsec-remove-protected-paths.patch diff --git a/3.12.6/4450_grsec-kconfig-default-gids.patch b/3.12.7/4450_grsec-kconfig-default-gids.patch index cdd1703..cdd1703 100644 --- a/3.12.6/4450_grsec-kconfig-default-gids.patch +++ b/3.12.7/4450_grsec-kconfig-default-gids.patch diff --git a/3.12.6/4465_selinux-avc_audit-log-curr_ip.patch b/3.12.7/4465_selinux-avc_audit-log-curr_ip.patch index 04ec3fb..04ec3fb 100644 --- a/3.12.6/4465_selinux-avc_audit-log-curr_ip.patch +++ b/3.12.7/4465_selinux-avc_audit-log-curr_ip.patch diff --git a/3.12.6/4470_disable-compat_vdso.patch b/3.12.7/4470_disable-compat_vdso.patch index 209dfae..209dfae 100644 --- a/3.12.6/4470_disable-compat_vdso.patch +++ b/3.12.7/4470_disable-compat_vdso.patch diff --git a/3.12.6/4475_emutramp_default_on.patch b/3.12.7/4475_emutramp_default_on.patch index 30f6978..cfde6f8 100644 --- a/3.12.6/4475_emutramp_default_on.patch +++ b/3.12.7/4475_emutramp_default_on.patch @@ -10,7 +10,7 @@ See bug: diff -Naur linux-3.9.2-hardened.orig/security/Kconfig linux-3.9.2-hardened/security/Kconfig --- linux-3.9.2-hardened.orig/security/Kconfig 2013-05-18 08:53:41.000000000 -0400 +++ linux-3.9.2-hardened/security/Kconfig 2013-05-18 09:17:57.000000000 -0400 -@@ -428,7 +428,7 @@ +@@ -427,7 +427,7 @@ config PAX_EMUTRAMP bool "Emulate trampolines" if (PAX_PAGEEXEC || PAX_SEGMEXEC) && (PARISC || X86) diff --git a/3.2.54/0000_README b/3.2.54/0000_README index ffb2597..d65044f 100644 --- a/3.2.54/0000_README +++ b/3.2.54/0000_README @@ -134,7 +134,7 @@ Patch: 1053_linux-3.2.54.patch From: http://www.kernel.org Desc: Linux 3.2.54 -Patch: 4420_grsecurity-3.0-3.2.54-201401051649.patch +Patch: 4420_grsecurity-3.0-3.2.54-201401091839.patch From: http://www.grsecurity.net Desc: hardened-sources base patch from upstream grsecurity diff --git a/3.2.54/4420_grsecurity-3.0-3.2.54-201401051649.patch b/3.2.54/4420_grsecurity-3.0-3.2.54-201401091839.patch index 3e204e8..5e87908 100644 --- a/3.2.54/4420_grsecurity-3.0-3.2.54-201401051649.patch +++ b/3.2.54/4420_grsecurity-3.0-3.2.54-201401091839.patch @@ -44214,43 +44214,10 @@ index 9350af9..68623c4 100644 int retval = -ENOMEM; diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c -index 106be0d..4a79e67 100644 +index 106be0d..45a52b5 100644 --- a/drivers/pci/pci-sysfs.c +++ b/drivers/pci/pci-sysfs.c -@@ -505,6 +505,10 @@ pci_write_config(struct file* filp, struct kobject *kobj, - loff_t init_off = off; - u8 *data = (u8*) buf; - -+#ifdef CONFIG_GRKERNSEC_KMEM -+ return -EPERM; -+#endif -+ - if (off > dev->cfg_size) - return 0; - if (off + count > dev->cfg_size) { -@@ -807,6 +811,10 @@ pci_mmap_resource(struct kobject *kobj, struct bin_attribute *attr, - resource_size_t start, end; - int i; - -+#ifdef CONFIG_GRKERNSEC_KMEM -+ return -EPERM; -+#endif -+ - for (i = 0; i < PCI_ROM_RESOURCE; i++) - if (res == &pdev->resource[i]) - break; -@@ -914,6 +922,10 @@ pci_write_resource_io(struct file *filp, struct kobject *kobj, - struct bin_attribute *attr, char *buf, - loff_t off, size_t count) - { -+#ifdef CONFIG_GRKERNSEC_KMEM -+ return -EPERM; -+#endif -+ - return pci_resource_io(filp, kobj, attr, buf, off, count, true); - } - -@@ -950,7 +962,7 @@ static int pci_create_attr(struct pci_dev *pdev, int num, int write_combine) +@@ -950,7 +950,7 @@ static int pci_create_attr(struct pci_dev *pdev, int num, int write_combine) { /* allocate attribute structure, piggyback attribute name */ int name_len = write_combine ? 13 : 10; @@ -44259,7 +44226,7 @@ index 106be0d..4a79e67 100644 int retval; res_attr = kzalloc(sizeof(*res_attr) + name_len, GFP_ATOMIC); -@@ -1135,7 +1147,7 @@ static struct device_attribute reset_attr = __ATTR(reset, 0200, NULL, reset_stor +@@ -1135,7 +1135,7 @@ static struct device_attribute reset_attr = __ATTR(reset, 0200, NULL, reset_stor static int pci_create_capabilities_sysfs(struct pci_dev *dev) { int retval; @@ -44268,7 +44235,7 @@ index 106be0d..4a79e67 100644 /* If the device has VPD, try to expose it in sysfs. */ if (dev->vpd) { -@@ -1182,7 +1194,7 @@ int __must_check pci_create_sysfs_dev_files (struct pci_dev *pdev) +@@ -1182,7 +1182,7 @@ int __must_check pci_create_sysfs_dev_files (struct pci_dev *pdev) { int retval; int rom_size = 0; @@ -44321,43 +44288,10 @@ index 9005380..c497080 100644 if (!dev->mmio_always_on) { pci_read_config_word(dev, PCI_COMMAND, &orig_cmd); diff --git a/drivers/pci/proc.c b/drivers/pci/proc.c -index 27911b5..2bf4653 100644 +index 27911b5..5b6db88 100644 --- a/drivers/pci/proc.c +++ b/drivers/pci/proc.c -@@ -135,6 +135,10 @@ proc_bus_pci_write(struct file *file, const char __user *buf, size_t nbytes, lof - int size = dp->size; - int cnt; - -+#ifdef CONFIG_GRKERNSEC_KMEM -+ return -EPERM; -+#endif -+ - if (pos >= size) - return 0; - if (nbytes >= size) -@@ -211,6 +215,10 @@ static long proc_bus_pci_ioctl(struct file *file, unsigned int cmd, - #endif /* HAVE_PCI_MMAP */ - int ret = 0; - -+#ifdef CONFIG_GRKERNSEC_KMEM -+ return -EPERM; -+#endif -+ - switch (cmd) { - case PCIIOC_CONTROLLER: - ret = pci_domain_nr(dev->bus); -@@ -251,6 +259,10 @@ static int proc_bus_pci_mmap(struct file *file, struct vm_area_struct *vma) - struct pci_filp_private *fpriv = file->private_data; - int i, ret; - -+#ifdef CONFIG_GRKERNSEC_KMEM -+ return -EPERM; -+#endif -+ - if (!capable(CAP_SYS_RAWIO)) - return -EPERM; - -@@ -476,7 +488,16 @@ static const struct file_operations proc_bus_pci_dev_operations = { +@@ -476,7 +476,16 @@ static const struct file_operations proc_bus_pci_dev_operations = { static int __init pci_proc_init(void) { struct pci_dev *dev = NULL; @@ -44374,21 +44308,6 @@ index 27911b5..2bf4653 100644 proc_create("devices", 0, proc_bus_pci_dir, &proc_bus_pci_dev_operations); proc_initialized = 1; -diff --git a/drivers/pci/syscall.c b/drivers/pci/syscall.c -index e1c1ec5..bef4210 100644 ---- a/drivers/pci/syscall.c -+++ b/drivers/pci/syscall.c -@@ -92,6 +92,10 @@ SYSCALL_DEFINE5(pciconfig_write, unsigned long, bus, unsigned long, dfn, - u32 dword; - int err = 0; - -+#ifdef CONFIG_GRKERNSEC_KMEM -+ return -EPERM -+#endif -+ - if (!capable(CAP_SYS_ADMIN)) - return -EPERM; - diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c index 26fba2d..693b4d3 100644 --- a/drivers/platform/x86/asus-wmi.c |