diff options
author | Alexandre Oliva <lxoliva@fsfla.org> | 2010-08-22 20:34:02 +0000 |
---|---|---|
committer | Alexandre Oliva <lxoliva@fsfla.org> | 2010-08-22 20:34:02 +0000 |
commit | 59daa4f8d41d222039b487a255901aa7124ff015 (patch) | |
tree | 81ec2b6073f1ce295500f5535db165f16705a71a /freed-ora/current/f12 | |
parent | 768de216c4cfa5a7e5db18c32d4a8227f784bddc (diff) | |
download | linux-libre-raptor-59daa4f8d41d222039b487a255901aa7124ff015.tar.gz linux-libre-raptor-59daa4f8d41d222039b487a255901aa7124ff015.zip |
2.6.32.19-163.fc12
Diffstat (limited to 'freed-ora/current/f12')
4 files changed, 179 insertions, 192 deletions
diff --git a/freed-ora/current/f12/kernel.spec b/freed-ora/current/f12/kernel.spec index e0ea8b621..a52debb37 100644 --- a/freed-ora/current/f12/kernel.spec +++ b/freed-ora/current/f12/kernel.spec @@ -47,7 +47,7 @@ Summary: The Linux kernel # reset this by hand to 1 (or to 0 and then use rpmdev-bumpspec). # scripts/rebase.sh should be made to do that for you, actually. # -%global baserelease 161 +%global baserelease 163 %global fedora_build %{baserelease} # base_sublevel is the kernel version we're starting with and patching @@ -824,9 +824,6 @@ Patch12340: ice1712-fix-revo71-mixer-names.patch # rhbz#572653 Patch12370: linux-2.6-b43_-Rewrite-DMA-Tx-status-handling-sanity-checks.patch -# rhbz#533746 -Patch12380: ssb_check_for_sprom.patch - # backport iwlwifi fixes (thanks, sgruszka!) -- drop when stable catches-up Patch12391: iwlwifi-reset-card-during-probe.patch @@ -868,6 +865,8 @@ Patch14130: kvm-mmu-fix-conflict-access-permissions-in-direct-sp.patch Patch14140: hid-01-usbhid-initialize-interface-pointers-early-enough.patch Patch14141: hid-02-fix-suspend-crash-by-moving-initializations-earlier.patch +Patch14150: mm-fix-page-table-unmap-for-stack-guard-page-properly.patch +Patch14160: mm-fix-up-some-user-visible-effects-of-the-stack-guard-page.patch # ============================================================================== %endif @@ -1563,9 +1562,6 @@ ApplyPatch ice1712-fix-revo71-mixer-names.patch # rhbz#572653 ApplyPatch linux-2.6-b43_-Rewrite-DMA-Tx-status-handling-sanity-checks.patch -# rhbz#533746 -#ApplyPatch ssb_check_for_sprom.patch - # backport iwlwifi fixes (thanks, sgruszka!) -- drop when stable catches-up ApplyPatch iwlwifi-reset-card-during-probe.patch @@ -1610,6 +1606,10 @@ ApplyPatch kvm-mmu-fix-conflict-access-permissions-in-direct-sp.patch ApplyPatch hid-01-usbhid-initialize-interface-pointers-early-enough.patch ApplyPatch hid-02-fix-suspend-crash-by-moving-initializations-earlier.patch +# Fix fallout from stack guard page +ApplyPatch mm-fix-page-table-unmap-for-stack-guard-page-properly.patch +ApplyPatch mm-fix-up-some-user-visible-effects-of-the-stack-guard-page.patch + # END OF PATCH APPLICATIONS ==================================================== %endif @@ -1617,6 +1617,8 @@ ApplyPatch hid-02-fix-suspend-crash-by-moving-initializations-earlier.patch chmod +x scripts/checkpatch.pl +touch .scmversion + # only deal with configs if we are going to build for the arch %ifnarch %nobuildarches @@ -2260,6 +2262,20 @@ fi %kernel_variant_files -k vmlinux %{with_kdump} kdump %changelog +* Wed Aug 18 2010 Chuck Ebbert <cebbert@redhat.com> 2.6.32.19-163 +- Bump version. + +* Tue Aug 17 2010 Kyle McMartin <kyle@redhat.com> +- Touch .scmversion in the kernel top level to prevent scripts/setlocalversion + from recursing into our fedpkg git tree and trying to decide whether the + kernel git is modified (obviously not, since it's a tarball.) Fixes make + local. + +* Tue Aug 17 2010 Chuck Ebbert <cebbert@redhat.com> 2.6.32.19-162 +- Fix fallout from the stack guard page fixes. + (mm-fix-page-table-unmap-for-stack-guard-page-properly.patch, + mm-fix-up-some-user-visible-effects-of-the-stack-guard-page.patch) + * Sun Aug 15 2010 Alexandre Oliva <lxoliva@fsfla.org> -libre - Adjusted patch-libre-2.6.32.19. diff --git a/freed-ora/current/f12/mm-fix-page-table-unmap-for-stack-guard-page-properly.patch b/freed-ora/current/f12/mm-fix-page-table-unmap-for-stack-guard-page-properly.patch new file mode 100644 index 000000000..0989fe3b7 --- /dev/null +++ b/freed-ora/current/f12/mm-fix-page-table-unmap-for-stack-guard-page-properly.patch @@ -0,0 +1,71 @@ +From: Linus Torvalds <torvalds@linux-foundation.org> +Date: Sat, 14 Aug 2010 18:44:56 +0000 (-0700) +Subject: mm: fix page table unmap for stack guard page properly +X-Git-Tag: v2.6.36-rc1~20 +X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=11ac552477e32835cb6970bf0a70c210807f5673 + +mm: fix page table unmap for stack guard page properly + +We do in fact need to unmap the page table _before_ doing the whole +stack guard page logic, because if it is needed (mainly 32-bit x86 with +PAE and CONFIG_HIGHPTE, but other architectures may use it too) then it +will do a kmap_atomic/kunmap_atomic. + +And those kmaps will create an atomic region that we cannot do +allocations in. However, the whole stack expand code will need to do +anon_vma_prepare() and vma_lock_anon_vma() and they cannot do that in an +atomic region. + +Now, a better model might actually be to do the anon_vma_prepare() when +_creating_ a VM_GROWSDOWN segment, and not have to worry about any of +this at page fault time. But in the meantime, this is the +straightforward fix for the issue. + +See https://bugzilla.kernel.org/show_bug.cgi?id=16588 for details. + +Reported-by: Wylda <wylda@volny.cz> +Reported-by: Sedat Dilek <sedat.dilek@gmail.com> +Reported-by: Mike Pagano <mpagano@gentoo.org> +Reported-by: François Valenduc <francois.valenduc@tvcablenet.be> +Tested-by: Ed Tomlinson <edt@aei.ca> +Cc: Pekka Enberg <penberg@kernel.org> +Cc: Greg KH <gregkh@suse.de> +Cc: stable@kernel.org +Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> +--- + +diff --git a/mm/memory.c b/mm/memory.c +index 9b3b73f..b6e5fd2 100644 +--- a/mm/memory.c ++++ b/mm/memory.c +@@ -2792,24 +2792,23 @@ static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma, + spinlock_t *ptl; + pte_t entry; + +- if (check_stack_guard_page(vma, address) < 0) { +- pte_unmap(page_table); ++ pte_unmap(page_table); ++ ++ /* Check if we need to add a guard page to the stack */ ++ if (check_stack_guard_page(vma, address) < 0) + return VM_FAULT_SIGBUS; +- } + ++ /* Use the zero-page for reads */ + if (!(flags & FAULT_FLAG_WRITE)) { + entry = pte_mkspecial(pfn_pte(my_zero_pfn(address), + vma->vm_page_prot)); +- ptl = pte_lockptr(mm, pmd); +- spin_lock(ptl); ++ page_table = pte_offset_map_lock(mm, pmd, address, &ptl); + if (!pte_none(*page_table)) + goto unlock; + goto setpte; + } + + /* Allocate our own private page. */ +- pte_unmap(page_table); +- + if (unlikely(anon_vma_prepare(vma))) + goto oom; + page = alloc_zeroed_user_highpage_movable(vma, address); diff --git a/freed-ora/current/f12/mm-fix-up-some-user-visible-effects-of-the-stack-guard-page.patch b/freed-ora/current/f12/mm-fix-up-some-user-visible-effects-of-the-stack-guard-page.patch new file mode 100644 index 000000000..095a9336d --- /dev/null +++ b/freed-ora/current/f12/mm-fix-up-some-user-visible-effects-of-the-stack-guard-page.patch @@ -0,0 +1,85 @@ +From: Linus Torvalds <torvalds@linux-foundation.org> +Date: Sun, 15 Aug 2010 18:35:52 +0000 (-0700) +Subject: mm: fix up some user-visible effects of the stack guard page +X-Git-Tag: v2.6.36-rc1~5 +X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=d7824370e26325c881b665350ce64fb0a4fde24a + +mm: fix up some user-visible effects of the stack guard page + +This commit makes the stack guard page somewhat less visible to user +space. It does this by: + + - not showing the guard page in /proc/<pid>/maps + + It looks like lvm-tools will actually read /proc/self/maps to figure + out where all its mappings are, and effectively do a specialized + "mlockall()" in user space. By not showing the guard page as part of + the mapping (by just adding PAGE_SIZE to the start for grows-up + pages), lvm-tools ends up not being aware of it. + + - by also teaching the _real_ mlock() functionality not to try to lock + the guard page. + + That would just expand the mapping down to create a new guard page, + so there really is no point in trying to lock it in place. + +It would perhaps be nice to show the guard page specially in +/proc/<pid>/maps (or at least mark grow-down segments some way), but +let's not open ourselves up to more breakage by user space from programs +that depends on the exact deails of the 'maps' file. + +Special thanks to Henrique de Moraes Holschuh for diving into lvm-tools +source code to see what was going on with the whole new warning. + +Reported-and-tested-by: François Valenduc <francois.valenduc@tvcablenet.be +Reported-by: Henrique de Moraes Holschuh <hmh@hmh.eng.br> +Cc: stable@kernel.org +Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> +--- + +diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c +index aea1d3f..439fc1f 100644 +--- a/fs/proc/task_mmu.c ++++ b/fs/proc/task_mmu.c +@@ -210,6 +210,7 @@ static void show_map_vma(struct seq_file *m, struct vm_area_struct *vma) + int flags = vma->vm_flags; + unsigned long ino = 0; + unsigned long long pgoff = 0; ++ unsigned long start; + dev_t dev = 0; + int len; + +@@ -220,8 +221,13 @@ static void show_map_vma(struct seq_file *m, struct vm_area_struct *vma) + pgoff = ((loff_t)vma->vm_pgoff) << PAGE_SHIFT; + } + ++ /* We don't show the stack guard page in /proc/maps */ ++ start = vma->vm_start; ++ if (vma->vm_flags & VM_GROWSDOWN) ++ start += PAGE_SIZE; ++ + seq_printf(m, "%08lx-%08lx %c%c%c%c %08llx %02x:%02x %lu %n", +- vma->vm_start, ++ start, + vma->vm_end, + flags & VM_READ ? 'r' : '-', + flags & VM_WRITE ? 'w' : '-', +diff --git a/mm/mlock.c b/mm/mlock.c +index 3f82720..49e5e4c 100644 +--- a/mm/mlock.c ++++ b/mm/mlock.c +@@ -167,6 +167,14 @@ static long __mlock_vma_pages_range(struct vm_area_struct *vma, + if (vma->vm_flags & VM_WRITE) + gup_flags |= FOLL_WRITE; + ++ /* We don't try to access the guard page of a stack vma */ ++ if (vma->vm_flags & VM_GROWSDOWN) { ++ if (start == vma->vm_start) { ++ start += PAGE_SIZE; ++ nr_pages--; ++ } ++ } ++ + while (nr_pages > 0) { + int i; + diff --git a/freed-ora/current/f12/ssb_check_for_sprom.patch b/freed-ora/current/f12/ssb_check_for_sprom.patch deleted file mode 100644 index 7df784f85..000000000 --- a/freed-ora/current/f12/ssb_check_for_sprom.patch +++ /dev/null @@ -1,185 +0,0 @@ -From 380bed7aa858cbe2d4eeb783e2bed7d01828518d Mon Sep 17 00:00:00 2001 -From: John W. Linville <linville@tuxdriver.com> -Date: Fri, 19 Mar 2010 14:58:01 -0400 -Subject: [PATCH v4] ssb: do not read SPROM if it does not exist - -Attempting to read registers that don't exist on the SSB bus can cause -hangs on some boxes. At least some b43 devices are 'in the wild' that -don't have SPROMs at all. When the SSB bus support loads, it attempts -to read these (non-existant) SPROMs and causes hard hangs on the box -- -no console output, etc. - -This patch adds some intelligence to determine whether or not the SPROM -is present before attempting to read it. This avoids those hard hangs -on those devices with no SPROM attached to their SSB bus. The -SSB-attached devices (e.g. b43, et al.) won't work, but at least the box -will survive to test further patches. :-) - -Signed-off-by: John W. Linville <linville@tuxdriver.com> -Cc: Larry Finger <Larry.Finger@lwfinger.net> -Cc: Michael Buesch <mb@bu3sch.de> -Cc: stable@kernel.org ---- -Version 4, move read of ChipCommon status register to ssb_chipcommon_init -Version 3, add missing semi-colon... :-( -Version 2, check the correct place for ChipCommon core revision... :-) - - drivers/ssb/driver_chipcommon.c | 3 +++ - drivers/ssb/pci.c | 3 +++ - drivers/ssb/sprom.c | 22 ++++++++++++++++++++++ - include/linux/ssb/ssb.h | 3 +++ - include/linux/ssb/ssb_driver_chipcommon.h | 15 +++++++++++++++ - 5 files changed, 46 insertions(+), 0 deletions(-) - -diff --git a/drivers/ssb/driver_chipcommon.c b/drivers/ssb/driver_chipcommon.c -index 9681536..6cf288d 100644 ---- a/drivers/ssb/driver_chipcommon.c -+++ b/drivers/ssb/driver_chipcommon.c -@@ -233,6 +233,9 @@ void ssb_chipcommon_init(struct ssb_chipcommon *cc) - { - if (!cc->dev) - return; /* We don't have a ChipCommon */ -+ if (cc->dev->id.revision >= 11) { -+ cc->status = chipco_read32(cc, SSB_CHIPCO_CHIPSTAT); -+ } - ssb_pmu_init(cc); - chipco_powercontrol_init(cc); - ssb_chipco_set_clockmode(cc, SSB_CLKMODE_FAST); -diff --git a/drivers/ssb/pci.c b/drivers/ssb/pci.c -index 9e50896..2f7b16d 100644 ---- a/drivers/ssb/pci.c -+++ b/drivers/ssb/pci.c -@@ -620,6 +620,9 @@ static int ssb_pci_sprom_get(struct ssb_bus *bus, - int err = -ENOMEM; - u16 *buf; - -+ if (!ssb_is_sprom_available(bus)) -+ return -ENODEV; -+ - buf = kcalloc(SSB_SPROMSIZE_WORDS_R123, sizeof(u16), GFP_KERNEL); - if (!buf) - goto out; -diff --git a/drivers/ssb/sprom.c b/drivers/ssb/sprom.c -index d0e6762..55eb9b0 100644 ---- a/drivers/ssb/sprom.c -+++ b/drivers/ssb/sprom.c -@@ -175,3 +175,25 @@ const struct ssb_sprom *ssb_get_fallback_sprom(void) - { - return fallback_sprom; - } -+ -+bool ssb_is_sprom_available(struct ssb_bus *bus) -+{ -+ /* status register only exists on chipcomon rev >= 11 */ -+ if (bus->chipco.dev->id.revision < 11) -+ return true; -+ -+ switch (bus->chip_id) { -+ case 0x4312: -+ return SSB_CHIPCO_CHST_4312_SPROM_PRESENT(bus->chipco.status); -+ case 0x4322: -+ return SSB_CHIPCO_CHST_4322_SPROM_PRESENT(bus->chipco.status); -+ case 0x4325: -+ return SSB_CHIPCO_CHST_4325_SPROM_PRESENT(bus->chipco.status); -+ default: -+ break; -+ } -+ if (bus->chipco.dev->id.revision >= 31) -+ return bus->chipco.capabilities & SSB_CHIPCO_CAP_SPROM; -+ -+ return true; -+} -diff --git a/include/linux/ssb/ssb.h b/include/linux/ssb/ssb.h -index 24f9885..3b4da23 100644 ---- a/include/linux/ssb/ssb.h -+++ b/include/linux/ssb/ssb.h -@@ -394,6 +394,9 @@ extern int ssb_bus_sdiobus_register(struct ssb_bus *bus, - - extern void ssb_bus_unregister(struct ssb_bus *bus); - -+/* Does the device have an SPROM? */ -+extern bool ssb_is_sprom_available(struct ssb_bus *bus); -+ - /* Set a fallback SPROM. - * See kdoc at the function definition for complete documentation. */ - extern int ssb_arch_set_fallback_sprom(const struct ssb_sprom *sprom); -diff --git a/include/linux/ssb/ssb_driver_chipcommon.h b/include/linux/ssb/ssb_driver_chipcommon.h -index 4e27acf..2cdf249 100644 ---- a/include/linux/ssb/ssb_driver_chipcommon.h -+++ b/include/linux/ssb/ssb_driver_chipcommon.h -@@ -53,6 +53,7 @@ - #define SSB_CHIPCO_CAP_64BIT 0x08000000 /* 64-bit Backplane */ - #define SSB_CHIPCO_CAP_PMU 0x10000000 /* PMU available (rev >= 20) */ - #define SSB_CHIPCO_CAP_ECI 0x20000000 /* ECI available (rev >= 20) */ -+#define SSB_CHIPCO_CAP_SPROM 0x40000000 /* SPROM present */ - #define SSB_CHIPCO_CORECTL 0x0008 - #define SSB_CHIPCO_CORECTL_UARTCLK0 0x00000001 /* Drive UART with internal clock */ - #define SSB_CHIPCO_CORECTL_SE 0x00000002 /* sync clk out enable (corerev >= 3) */ -@@ -385,6 +386,7 @@ - - - /** Chip specific Chip-Status register contents. */ -+#define SSB_CHIPCO_CHST_4322_SPROM_EXISTS 0x00000040 /* SPROM present */ - #define SSB_CHIPCO_CHST_4325_SPROM_OTP_SEL 0x00000003 - #define SSB_CHIPCO_CHST_4325_DEFCIS_SEL 0 /* OTP is powered up, use def. CIS, no SPROM */ - #define SSB_CHIPCO_CHST_4325_SPROM_SEL 1 /* OTP is powered up, SPROM is present */ -@@ -398,6 +400,18 @@ - #define SSB_CHIPCO_CHST_4325_RCAL_VALUE_SHIFT 4 - #define SSB_CHIPCO_CHST_4325_PMUTOP_2B 0x00000200 /* 1 for 2b, 0 for to 2a */ - -+/** Macros to determine SPROM presence based on Chip-Status register. */ -+#define SSB_CHIPCO_CHST_4312_SPROM_PRESENT(status) \ -+ ((status & SSB_CHIPCO_CHST_4325_SPROM_OTP_SEL) != \ -+ SSB_CHIPCO_CHST_4325_OTP_SEL) -+#define SSB_CHIPCO_CHST_4322_SPROM_PRESENT(status) \ -+ (status & SSB_CHIPCO_CHST_4322_SPROM_EXISTS) -+#define SSB_CHIPCO_CHST_4325_SPROM_PRESENT(status) \ -+ (((status & SSB_CHIPCO_CHST_4325_SPROM_OTP_SEL) != \ -+ SSB_CHIPCO_CHST_4325_DEFCIS_SEL) && \ -+ ((status & SSB_CHIPCO_CHST_4325_SPROM_OTP_SEL) != \ -+ SSB_CHIPCO_CHST_4325_OTP_SEL)) -+ - - - /** Clockcontrol masks and values **/ -@@ -564,6 +578,7 @@ struct ssb_chipcommon_pmu { - struct ssb_chipcommon { - struct ssb_device *dev; - u32 capabilities; -+ u32 status; - /* Fast Powerup Delay constant */ - u16 fast_pwrup_delay; - struct ssb_chipcommon_pmu pmu; --- -1.6.2.5 - -From ec032742062ad1b01dfe75cfccdbc5b850837c23 Mon Sep 17 00:00:00 2001 -From: John W. Linville <linville@tuxdriver.com> -Date: Tue, 30 Mar 2010 13:47:39 -0400 -Subject: [PATCH] ssb: avoid null ptr deref in ssb_is_sprom_available - -Some older devices don't have chipcommon, but they do have SPROM. - -Signed-off-by: John W. Linville <linville@tuxdriver.com> ---- - drivers/ssb/sprom.c | 4 ++++ - 1 files changed, 4 insertions(+), 0 deletions(-) - -diff --git a/drivers/ssb/sprom.c b/drivers/ssb/sprom.c -index 55eb9b0..874d8f1 100644 ---- a/drivers/ssb/sprom.c -+++ b/drivers/ssb/sprom.c -@@ -178,6 +178,10 @@ const struct ssb_sprom *ssb_get_fallback_sprom(void) - - bool ssb_is_sprom_available(struct ssb_bus *bus) - { -+ /* some older devices don't have chipcommon, but they have sprom */ -+ if (!bus->chipco.dev) -+ return true; -+ - /* status register only exists on chipcomon rev >= 11 */ - if (bus->chipco.dev->id.revision < 11) - return true; --- -1.6.2.5 - |