summaryrefslogtreecommitdiffstats
path: root/freed-ora/current/f12
diff options
context:
space:
mode:
authorAlexandre Oliva <lxoliva@fsfla.org>2010-08-22 20:34:02 +0000
committerAlexandre Oliva <lxoliva@fsfla.org>2010-08-22 20:34:02 +0000
commit59daa4f8d41d222039b487a255901aa7124ff015 (patch)
tree81ec2b6073f1ce295500f5535db165f16705a71a /freed-ora/current/f12
parent768de216c4cfa5a7e5db18c32d4a8227f784bddc (diff)
downloadlinux-libre-raptor-59daa4f8d41d222039b487a255901aa7124ff015.tar.gz
linux-libre-raptor-59daa4f8d41d222039b487a255901aa7124ff015.zip
2.6.32.19-163.fc12
Diffstat (limited to 'freed-ora/current/f12')
-rw-r--r--freed-ora/current/f12/kernel.spec30
-rw-r--r--freed-ora/current/f12/mm-fix-page-table-unmap-for-stack-guard-page-properly.patch71
-rw-r--r--freed-ora/current/f12/mm-fix-up-some-user-visible-effects-of-the-stack-guard-page.patch85
-rw-r--r--freed-ora/current/f12/ssb_check_for_sprom.patch185
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
-
OpenPOWER on IntegriCloud