diff options
author | Natanael Copa <ncopa@alpinelinux.org> | 2012-12-11 08:48:38 +0000 |
---|---|---|
committer | Natanael Copa <ncopa@alpinelinux.org> | 2012-12-11 09:16:01 +0000 |
commit | 35913da22f50d2d0602cd8146346423812b02b92 (patch) | |
tree | c64e5eaecd308a5b230003bd0bd9eda76e75375c /main/linux-grsec | |
parent | 80aa523c971b108d5f472ca5ac576e7deda46240 (diff) | |
download | aports-35913da22f50d2d0602cd8146346423812b02b92.tar.bz2 aports-35913da22f50d2d0602cd8146346423812b02b92.tar.xz |
main/linux-grsec: upgrade to 3.6.10
Diffstat (limited to 'main/linux-grsec')
-rw-r--r-- | main/linux-grsec/APKBUILD | 12 | ||||
-rw-r--r-- | main/linux-grsec/grsecurity-2.9.1-3.6.10-201212101818.patch (renamed from main/linux-grsec/grsecurity-2.9.1-3.6.9-201212071641.patch) | 264 | ||||
-rw-r--r-- | main/linux-grsec/pax-fpu-regression.patch | 19 |
3 files changed, 44 insertions, 251 deletions
diff --git a/main/linux-grsec/APKBUILD b/main/linux-grsec/APKBUILD index 5d07a7c60..77a4c5f49 100644 --- a/main/linux-grsec/APKBUILD +++ b/main/linux-grsec/APKBUILD @@ -2,9 +2,9 @@ _flavor=grsec pkgname=linux-${_flavor} -pkgver=3.6.9 +pkgver=3.6.10 _kernver=3.6 -pkgrel=3 +pkgrel=0 pkgdesc="Linux kernel with grsecurity" url=http://grsecurity.net depends="mkinitfs linux-firmware" @@ -14,8 +14,7 @@ _config=${config:-kernelconfig.${CARCH}} install= source="http://ftp.kernel.org/pub/linux/kernel/v3.x/linux-$_kernver.tar.xz http://ftp.kernel.org/pub/linux/kernel/v3.x/patch-$pkgver.xz - grsecurity-2.9.1-3.6.9-201212071641.patch - pax-fpu-regression.patch + grsecurity-2.9.1-3.6.10-201212101818.patch 0004-arp-flush-arp-cache-on-device-change.patch @@ -140,9 +139,8 @@ dev() { } md5sums="1a1760420eac802c541a20ab51a093d1 linux-3.6.tar.xz -a7c656034599f90dcbc50895b69022aa patch-3.6.9.xz -6e2dc33e621d993fd921d7dc85b56561 grsecurity-2.9.1-3.6.9-201212071641.patch -699548fb6e34efc5790390a074b0d50a pax-fpu-regression.patch +406a52f90a2ddc78a3ecdf4fe46e7cf7 patch-3.6.10.xz +ef2ddd73dc2f0cd30687a540e09c0366 grsecurity-2.9.1-3.6.10-201212101818.patch 776adeeb5272093574f8836c5037dd7d 0004-arp-flush-arp-cache-on-device-change.patch 373db5888708938c6b1baed6da781fcb kernelconfig.x86 190788fb10e79abce9d570d5e87ec3b4 kernelconfig.x86_64" diff --git a/main/linux-grsec/grsecurity-2.9.1-3.6.9-201212071641.patch b/main/linux-grsec/grsecurity-2.9.1-3.6.10-201212101818.patch index 972461701..2c09d999d 100644 --- a/main/linux-grsec/grsecurity-2.9.1-3.6.9-201212071641.patch +++ b/main/linux-grsec/grsecurity-2.9.1-3.6.10-201212101818.patch @@ -251,7 +251,7 @@ index ad7e2e5..199f49e 100644 pcd. [PARIDE] diff --git a/Makefile b/Makefile -index 978af72..1121485 100644 +index 686b83c..5e0a360 100644 --- a/Makefile +++ b/Makefile @@ -241,8 +241,9 @@ CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \ @@ -10603,7 +10603,7 @@ index 75ce3f4..882e801 100644 #endif /* _ASM_X86_EMERGENCY_RESTART_H */ diff --git a/arch/x86/include/asm/fpu-internal.h b/arch/x86/include/asm/fpu-internal.h -index 75f4c6d..9215c4a 100644 +index 04cb0f8..1da4bc9 100644 --- a/arch/x86/include/asm/fpu-internal.h +++ b/arch/x86/include/asm/fpu-internal.h @@ -82,10 +82,12 @@ static inline void sanitize_i387_state(struct task_struct *tsk) @@ -10648,7 +10648,23 @@ index 75f4c6d..9215c4a 100644 X86_FEATURE_FXSR, "m" (*fx)); -@@ -271,7 +275,7 @@ static inline int restore_fpu_checking(struct task_struct *tsk) +@@ -250,7 +254,14 @@ static inline int __save_init_fpu(struct task_struct *tsk) + + static inline int fpu_fxrstor_checking(struct fpu *fpu) + { +- return fxrstor_checking(&fpu->state->fxsave); ++ int ret; ++ mm_segment_t fs; ++ ++ fs = get_fs(); ++ set_fs(KERNEL_DS); ++ ret = fxrstor_checking(&fpu->state->fxsave); ++ set_fs(fs); ++ return ret; + } + + static inline int fpu_restore_checking(struct fpu *fpu) +@@ -271,7 +282,7 @@ static inline int restore_fpu_checking(struct task_struct *tsk) "emms\n\t" /* clear stack tags */ "fildl %P[addr]", /* set F?P to defined value */ X86_FEATURE_FXSAVE_LEAK, @@ -10657,30 +10673,6 @@ index 75f4c6d..9215c4a 100644 return fpu_restore_checking(&tsk->thread.fpu); } -@@ -334,14 +338,17 @@ static inline void __thread_fpu_begin(struct task_struct *tsk) - typedef struct { int preload; } fpu_switch_t; - - /* -- * FIXME! We could do a totally lazy restore, but we need to -- * add a per-cpu "this was the task that last touched the FPU -- * on this CPU" variable, and the task needs to have a "I last -- * touched the FPU on this CPU" and check them. -+ * Must be run with preemption disabled: this clears the fpu_owner_task, -+ * on this CPU. - * -- * We don't do that yet, so "fpu_lazy_restore()" always returns -- * false, but some day.. -+ * This will disable any lazy FPU state restore of the current FPU state, -+ * but if the current thread owns the FPU, it will still be saved by. - */ -+static inline void __cpu_disable_lazy_restore(unsigned int cpu) -+{ -+ per_cpu(fpu_owner_task, cpu) = NULL; -+} -+ - static inline int fpu_lazy_restore(struct task_struct *new, unsigned int cpu) - { - return new == this_cpu_read_stable(fpu_owner_task) && diff --git a/arch/x86/include/asm/futex.h b/arch/x86/include/asm/futex.h index 71ecbcb..11df950 100644 --- a/arch/x86/include/asm/futex.h @@ -14157,10 +14149,10 @@ index d30a6a9..79becab 100644 obj-y += proc.o capflags.o powerflags.o common.o obj-y += vmware.o hypervisor.o mshyperv.o diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c -index 9d92e19..49d7d79 100644 +index e4da438..8b1c97c 100644 --- a/arch/x86/kernel/cpu/amd.c +++ b/arch/x86/kernel/cpu/amd.c -@@ -724,7 +724,7 @@ static unsigned int __cpuinit amd_size_cache(struct cpuinfo_x86 *c, +@@ -738,7 +738,7 @@ static unsigned int __cpuinit amd_size_cache(struct cpuinfo_x86 *c, unsigned int size) { /* AMD errata T13 (order #21922) */ @@ -19252,19 +19244,10 @@ index b280908..6de349e 100644 if (err) diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c -index 7c5a8c3..8a54a1a 100644 +index 23c39cf..52ed8d9 100644 --- a/arch/x86/kernel/smpboot.c +++ b/arch/x86/kernel/smpboot.c -@@ -68,6 +68,8 @@ - #include <asm/mwait.h> - #include <asm/apic.h> - #include <asm/io_apic.h> -+#include <asm/i387.h> -+#include <asm/fpu-internal.h> - #include <asm/setup.h> - #include <asm/uv/uv.h> - #include <linux/mc146818rtc.h> -@@ -670,6 +672,7 @@ static int __cpuinit do_boot_cpu(int apicid, int cpu, struct task_struct *idle) +@@ -672,6 +672,7 @@ static int __cpuinit do_boot_cpu(int apicid, int cpu, struct task_struct *idle) idle->thread.sp = (unsigned long) (((struct pt_regs *) (THREAD_SIZE + task_stack_page(idle))) - 1); per_cpu(current_task, cpu) = idle; @@ -19272,7 +19255,7 @@ index 7c5a8c3..8a54a1a 100644 #ifdef CONFIG_X86_32 /* Stack for startup_32 can be just as for start_secondary onwards */ -@@ -677,11 +680,13 @@ static int __cpuinit do_boot_cpu(int apicid, int cpu, struct task_struct *idle) +@@ -679,11 +680,13 @@ static int __cpuinit do_boot_cpu(int apicid, int cpu, struct task_struct *idle) #else clear_tsk_thread_flag(idle, TIF_FORK); initial_gs = per_cpu_offset(cpu); @@ -19289,9 +19272,9 @@ index 7c5a8c3..8a54a1a 100644 initial_code = (unsigned long)start_secondary; stack_start = idle->thread.sp; -@@ -817,6 +822,15 @@ int __cpuinit native_cpu_up(unsigned int cpu, struct task_struct *tidle) - - per_cpu(cpu_state, cpu) = CPU_UP_PREPARE; +@@ -822,6 +825,15 @@ int __cpuinit native_cpu_up(unsigned int cpu, struct task_struct *tidle) + /* the FPU context is blank, nobody can own it */ + __cpu_disable_lazy_restore(cpu); +#ifdef CONFIG_PAX_PER_CPU_PGD + clone_pgd_range(get_cpu_pgd(cpu) + KERNEL_PGD_BOUNDARY, @@ -28155,10 +28138,10 @@ index 251c7b62..000462d 100644 bool enable = !device_may_wakeup(&dev->dev); device_set_wakeup_enable(&dev->dev, enable); diff --git a/drivers/acpi/processor_driver.c b/drivers/acpi/processor_driver.c -index bfc31cb..8213ce1 100644 +index bebe17f..3d0c1d8 100644 --- a/drivers/acpi/processor_driver.c +++ b/drivers/acpi/processor_driver.c -@@ -551,7 +551,7 @@ static int __cpuinit acpi_processor_add(struct acpi_device *device) +@@ -552,7 +552,7 @@ static int __cpuinit acpi_processor_add(struct acpi_device *device) return 0; #endif @@ -34061,7 +34044,7 @@ index 1cbfc6b..56e1dbb 100644 /*----------------------------------------------------------------*/ diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c -index 05bb49e..84d7ce6 100644 +index 7077dcf..facc1e9 100644 --- a/drivers/md/raid1.c +++ b/drivers/md/raid1.c @@ -1810,7 +1810,7 @@ static int fix_sync_read_error(struct r1bio *r1_bio) @@ -35099,7 +35082,7 @@ index 57d64b8..623dd86 100644 MODULE_PARM_DESC(X, desc); #else diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c -index 0875ecf..794cdf3 100644 +index b028b5e..2ef481f 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c @@ -3051,9 +3051,8 @@ static void bnx2x_drv_info_ether_stat(struct bnx2x *bp) @@ -38197,7 +38180,7 @@ index 0d4aa82..f7832d4 100644 /* core tmem accessor functions */ diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c -index 7502660..f214d9f 100644 +index c87ef74..6d32e54 100644 --- a/drivers/target/target_core_transport.c +++ b/drivers/target/target_core_transport.c @@ -1098,7 +1098,7 @@ struct se_device *transport_add_device_to_core_hba( @@ -70594,7 +70577,7 @@ index 98ec494..4241d6d 100644 default: diff --git a/kernel/sched/auto_group.c b/kernel/sched/auto_group.c -index 0984a21..7e50319 100644 +index 15f60d0..7e50319 100644 --- a/kernel/sched/auto_group.c +++ b/kernel/sched/auto_group.c @@ -11,7 +11,7 @@ @@ -70615,38 +70598,6 @@ index 0984a21..7e50319 100644 ag->tg = tg; #ifdef CONFIG_RT_GROUP_SCHED /* -@@ -143,15 +143,11 @@ autogroup_move_group(struct task_struct *p, struct autogroup *ag) - - p->signal->autogroup = autogroup_kref_get(ag); - -- if (!ACCESS_ONCE(sysctl_sched_autogroup_enabled)) -- goto out; -- - t = p; - do { - sched_move_task(t); - } while_each_thread(p, t); - --out: - unlock_task_sighand(p, &flags); - autogroup_kref_put(prev); - } -diff --git a/kernel/sched/auto_group.h b/kernel/sched/auto_group.h -index 8bd0471..443232e 100644 ---- a/kernel/sched/auto_group.h -+++ b/kernel/sched/auto_group.h -@@ -4,11 +4,6 @@ - #include <linux/rwsem.h> - - struct autogroup { -- /* -- * reference doesn't mean how many thread attach to this -- * autogroup now. It just stands for the number of task -- * could use this autogroup. -- */ - struct kref kref; - struct task_group *tg; - struct rw_semaphore lock; diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 1a48cdb..d3949ff 100644 --- a/kernel/sched/core.c @@ -71760,7 +71711,7 @@ index d4545f4..a9010a1 100644 local_irq_save(flags); diff --git a/kernel/workqueue.c b/kernel/workqueue.c -index 872bd6d..b727b3a 100644 +index 6d42247..b727b3a 100644 --- a/kernel/workqueue.c +++ b/kernel/workqueue.c @@ -1422,7 +1422,7 @@ retry: @@ -71781,18 +71732,6 @@ index 872bd6d..b727b3a 100644 if (test_and_set_bit(WORK_STRUCT_PENDING_BIT, work_data_bits(rebind_work))) -@@ -2266,8 +2266,10 @@ static int rescuer_thread(void *__wq) - repeat: - set_current_state(TASK_INTERRUPTIBLE); - -- if (kthread_should_stop()) -+ if (kthread_should_stop()) { -+ __set_current_state(TASK_RUNNING); - return 0; -+ } - - /* - * See whether any cpu is asking for help. Unbounded diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index 2403a63..5c4be4c 100644 --- a/lib/Kconfig.debug @@ -72532,7 +72471,7 @@ index 14d260f..b2a80fd 100644 if (end == start) goto out; diff --git a/mm/memory-failure.c b/mm/memory-failure.c -index a6e2141..0e32042 100644 +index 3dd21e2..0e32042 100644 --- a/mm/memory-failure.c +++ b/mm/memory-failure.c @@ -61,7 +61,7 @@ int sysctl_memory_failure_early_kill __read_mostly = 0; @@ -72607,25 +72546,7 @@ index a6e2141..0e32042 100644 &mce_bad_pages); set_page_hwpoison_huge_page(hpage); dequeue_hwpoisoned_huge_page(hpage); -@@ -1474,9 +1474,17 @@ int soft_offline_page(struct page *page, int flags) - { - int ret; - unsigned long pfn = page_to_pfn(page); -+ struct page *hpage = compound_trans_head(page); - - if (PageHuge(page)) - return soft_offline_huge_page(page, flags); -+ if (PageTransHuge(hpage)) { -+ if (PageAnon(hpage) && unlikely(split_huge_page(hpage))) { -+ pr_info("soft offline: %#lx: failed to split THP\n", -+ pfn); -+ return -EBUSY; -+ } -+ } - - ret = get_any_page(page, pfn, flags); - if (ret < 0) -@@ -1572,7 +1580,7 @@ int soft_offline_page(struct page *page, int flags) +@@ -1580,7 +1580,7 @@ int soft_offline_page(struct page *page, int flags) return ret; done: @@ -76350,47 +76271,6 @@ index 1b7e22a..3fcd4f3 100644 } return pgd; } -diff --git a/mm/sparse.c b/mm/sparse.c -index fac95f2..a83de2f 100644 ---- a/mm/sparse.c -+++ b/mm/sparse.c -@@ -617,7 +617,7 @@ static void __kfree_section_memmap(struct page *memmap, unsigned long nr_pages) - { - return; /* XXX: Not implemented yet */ - } --static void free_map_bootmem(struct page *page, unsigned long nr_pages) -+static void free_map_bootmem(struct page *memmap, unsigned long nr_pages) - { - } - #else -@@ -658,10 +658,11 @@ static void __kfree_section_memmap(struct page *memmap, unsigned long nr_pages) - get_order(sizeof(struct page) * nr_pages)); - } - --static void free_map_bootmem(struct page *page, unsigned long nr_pages) -+static void free_map_bootmem(struct page *memmap, unsigned long nr_pages) - { - unsigned long maps_section_nr, removing_section_nr, i; - unsigned long magic; -+ struct page *page = virt_to_page(memmap); - - for (i = 0; i < nr_pages; i++, page++) { - magic = (unsigned long) page->lru.next; -@@ -710,13 +711,10 @@ static void free_section_usemap(struct page *memmap, unsigned long *usemap) - */ - - if (memmap) { -- struct page *memmap_page; -- memmap_page = virt_to_page(memmap); -- - nr_pages = PAGE_ALIGN(PAGES_PER_SECTION * sizeof(struct page)) - >> PAGE_SHIFT; - -- free_map_bootmem(memmap_page, nr_pages); -+ free_map_bootmem(memmap, nr_pages); - } - } - diff --git a/mm/swap.c b/mm/swap.c index 7782588..228c784 100644 --- a/mm/swap.c @@ -76675,72 +76555,6 @@ index 2bb90b1..3795e47 100644 v->addr, v->addr + v->size, v->size); if (v->caller) -diff --git a/mm/vmscan.c b/mm/vmscan.c -index 40db7d1..be5a9c1 100644 ---- a/mm/vmscan.c -+++ b/mm/vmscan.c -@@ -2383,6 +2383,19 @@ static void age_active_anon(struct zone *zone, struct scan_control *sc) - } while (memcg); - } - -+static bool zone_balanced(struct zone *zone, int order, -+ unsigned long balance_gap, int classzone_idx) -+{ -+ if (!zone_watermark_ok_safe(zone, order, high_wmark_pages(zone) + -+ balance_gap, classzone_idx, 0)) -+ return false; -+ -+ if (COMPACTION_BUILD && order && !compaction_suitable(zone, order)) -+ return false; -+ -+ return true; -+} -+ - /* - * pgdat_balanced is used when checking if a node is balanced for high-order - * allocations. Only zones that meet watermarks and are in a zone allowed -@@ -2461,8 +2474,7 @@ static bool prepare_kswapd_sleep(pg_data_t *pgdat, int order, long remaining, - continue; - } - -- if (!zone_watermark_ok_safe(zone, order, high_wmark_pages(zone), -- i, 0)) -+ if (!zone_balanced(zone, order, 0, i)) - all_zones_ok = false; - else - balanced += zone->present_pages; -@@ -2571,8 +2583,7 @@ loop_again: - break; - } - -- if (!zone_watermark_ok_safe(zone, order, -- high_wmark_pages(zone), 0, 0)) { -+ if (!zone_balanced(zone, order, 0, 0)) { - end_zone = i; - break; - } else { -@@ -2648,9 +2659,8 @@ loop_again: - testorder = 0; - - if ((buffer_heads_over_limit && is_highmem_idx(i)) || -- !zone_watermark_ok_safe(zone, testorder, -- high_wmark_pages(zone) + balance_gap, -- end_zone, 0)) { -+ !zone_balanced(zone, testorder, -+ balance_gap, end_zone)) { - shrink_zone(zone, &sc); - - reclaim_state->reclaimed_slab = 0; -@@ -2677,8 +2687,7 @@ loop_again: - continue; - } - -- if (!zone_watermark_ok_safe(zone, testorder, -- high_wmark_pages(zone), end_zone, 0)) { -+ if (!zone_balanced(zone, testorder, 0, end_zone)) { - all_zones_ok = 0; - /* - * We are still under min water mark. This diff --git a/mm/vmstat.c b/mm/vmstat.c index df7a674..8b4a4f3 100644 --- a/mm/vmstat.c @@ -81291,7 +81105,7 @@ index 5c11312..72742b5 100644 write_hex_cnt = 0; for (i = 0; i < logo_clutsize; i++) { diff --git a/security/Kconfig b/security/Kconfig -index e9c6ac7..e7feb0d 100644 +index e9c6ac7..152c2e3 100644 --- a/security/Kconfig +++ b/security/Kconfig @@ -4,6 +4,896 @@ @@ -81872,7 +81686,7 @@ index e9c6ac7..e7feb0d 100644 +config PAX_KERNEXEC + bool "Enforce non-executable kernel pages" + default y if GRKERNSEC_CONFIG_AUTO && (GRKERNSEC_CONFIG_VIRT_NONE || (GRKERNSEC_CONFIG_VIRT_EPT && GRKERNSEC_CONFIG_VIRT_GUEST) || (GRKERNSEC_CONFIG_VIRT_EPT && GRKERNSEC_CONFIG_VIRT_KVM)) -+ depends on (PPC || X86) && (!X86_32 || X86_WP_WORKS_OK) && !XEN ++ depends on X86 && (!X86_32 || X86_WP_WORKS_OK) && !XEN + select PAX_PER_CPU_PGD if X86_64 || (X86_32 && X86_PAE) + select PAX_KERNEXEC_PLUGIN if X86_64 + help @@ -82643,7 +82457,7 @@ index 4c1cc51..16040040 100644 } } else if (runtime->access == SNDRV_PCM_ACCESS_RW_NONINTERLEAVED) { diff --git a/sound/core/pcm_compat.c b/sound/core/pcm_compat.c -index 91cdf94..4085161 100644 +index 91cdf943..4085161 100644 --- a/sound/core/pcm_compat.c +++ b/sound/core/pcm_compat.c @@ -31,7 +31,7 @@ static int snd_pcm_ioctl_delay_compat(struct snd_pcm_substream *substream, diff --git a/main/linux-grsec/pax-fpu-regression.patch b/main/linux-grsec/pax-fpu-regression.patch deleted file mode 100644 index 7ec5b3374..000000000 --- a/main/linux-grsec/pax-fpu-regression.patch +++ /dev/null @@ -1,19 +0,0 @@ -diff -u linux-3.6.9-pax/arch/x86/include/asm/fpu-internal.h linux-3.6.9-pax/arch/x86/include/asm/fpu-internal.h ---- linux-3.6.9-pax/arch/x86/include/asm/fpu-internal.h 2012-11-30 20:11:38.909016648 +0100 -+++ linux-3.6.9-pax/arch/x86/include/asm/fpu-internal.h 2012-12-10 00:53:24.196782810 +0100 -@@ -254,7 +254,14 @@ - - static inline int fpu_fxrstor_checking(struct fpu *fpu) - { -- return fxrstor_checking(&fpu->state->fxsave); -+ int ret; -+ mm_segment_t fs; -+ -+ fs = get_fs(); -+ set_fs(KERNEL_DS); -+ ret = fxrstor_checking(&fpu->state->fxsave); -+ set_fs(fs); -+ return ret; - } - - static inline int fpu_restore_checking(struct fpu *fpu) |