[Users] 2.6.18-194.8.1.el5.028stab070.2 (was: [Announce] New kernel
released: RHEL5 testing 2.6.18-194.8.1.el5 028stab070.2)
Solar Designer
solar at openwall.com
Thu Jul 22 13:13:55 EDT 2010
Kir, all -
We've briefly tested the -194.8.1.el5.028stab070.2 "RHEL5 testing" kernel -
works well so far.
Moreover, we have a patch on top of it, which is now part of the kernel
package on Owl-current (yes, it is built on top of this kernel version):
http://cvsweb.openwall.com/cgi/cvsweb.cgi/Owl/packages/kernel/
and we even have test Owl-current ISOs with this kernel:
lftp mirrors.kernel.org:/openwall/Owl/current/iso> ls | fgrep 0721
-rw-r--r-- 455M 2010-07-21 20:33 Owl-current-20100721-i686.iso.gz
-rw-r--r-- 460M 2010-07-21 20:39 Owl-current-20100721-x86_64.iso.gz
I've extracted the changes that I think are potentially upstream'able by
you (and some might be upstream'able by Red Hat), and attached the
resulting smaller patch to this message. From diffstat, with my comments:
arch/i386/kernel/cpu/amd.c | 3 +
arch/i386/kernel/cpu/intel_cacheinfo.c | 5 ++
arch/x86_64/Kconfig | 1
fs/Kconfig | 1
include/linux/dmar.h | 4 --
These are build fixes for certain reasonable .config settings other
than your defaults. The build would fail without the above changes.
drivers/dca/Kconfig | 2 -
Bug fix to allow CONFIG_DCA=y to be set. Without this change, when the
kernel is built with module support, only CONFIG_DCA=m would be possible
(and the setting would not appear in e.g. menuconfig at all).
drivers/ata/Kconfig | 6 ++-
drivers/ata/ahci.c | 20 ++++++++++
drivers/ata/pata_marvell.c | 61 +++++++++++++++++++++++----------
AHCI vs. Marvell PATA driver co-existence fixes backported from 2.6.34.1,
with the corresponding messages made more verbose (by me). I have a
specific machine that benefits from this (tested).
fs/proc/base.c | 8 ++--
The procfs entry perms changes I proposed in here.
--- The changes above this line might be upstream'able by Red Hat. ---
drivers/parisc/eisa_eeprom.c | 2 -
net/llc/af_llc.c | 4 ++
Security fixes to subsystems that Red Hat does not support (so they
deliberately don't include such fixes). I don't care much either, but
these were part of a larger set of fixes I was dealing with (most are
replaced by Red Hat's revisions by now). Feel free to include or
disregard (if you, like Red Hat, support builds with your configs only).
kernel/panic.c | 2 -
Reverting Red Hat's change of default for panic_on_oops from 1 (Red
Hat's setting) to 0 (kernel.org). Since Red Hat won't provide support
for OpenVZ kernels and since your support procedures might not benefit
from panic_on_oops, you could want to keep it at the k.o default.
The security implications of this are non-trivial. Either setting has
its pros and cons from a security standpoint.
13 files changed, 88 insertions(+), 31 deletions(-)
Very minor changes overall, as you can see. :-)
Alexander
-------------- next part --------------
diff -urp linux-2.6.18-194.8.1.el5.028stab070.2/arch/i386/kernel/cpu/amd.c linux-2.6.18-194.8.1.el5.028stab070.2-owl/arch/i386/kernel/cpu/amd.c
--- linux-2.6.18-194.8.1.el5.028stab070.2/arch/i386/kernel/cpu/amd.c 2010-07-08 16:01:49 +0000
+++ linux-2.6.18-194.8.1.el5.028stab070.2-owl/arch/i386/kernel/cpu/amd.c 2010-07-15 11:13:30 +0000
@@ -45,11 +45,14 @@ static void __cpuinit amd_fixup_dcm(stru
if (cpu_has(c, X86_FEATURE_AMD_DCM))
return;
+#if 0
+/* early_is_k8_nb() is only defined under arch/x86_64/ */
/* proceed only if there is a valid AMD northbridge
* (not in virtualized environments!)
*/
if (!early_is_k8_nb(read_pci_config(0, 24, 3, 0x00)))
return;
+#endif
rdmsrl(0xc001100c, value);
diff -urp linux-2.6.18-194.8.1.el5.028stab070.2/arch/i386/kernel/cpu/intel_cacheinfo.c linux-2.6.18-194.8.1.el5.028stab070.2-owl/arch/i386/kernel/cpu/intel_cacheinfo.c
--- linux-2.6.18-194.8.1.el5.028stab070.2/arch/i386/kernel/cpu/intel_cacheinfo.c 2010-07-08 16:01:51 +0000
+++ linux-2.6.18-194.8.1.el5.028stab070.2-owl/arch/i386/kernel/cpu/intel_cacheinfo.c 2010-07-15 16:27:01 +0000
@@ -47,10 +47,12 @@ static void wbinvd_on_cpu(int cpu)
smp_call_function_single(cpu, __wbinvd, NULL, 0, 1);
}
+#if 0
static int wbinvd_on_all_cpus(void)
{
return on_each_cpu(__wbinvd, NULL, 0, 1);
}
+#endif
/* from arch/x86/kernel/cpu/amd.c upstream */
static int amd_get_nb_id(int cpu)
@@ -331,9 +333,12 @@ amd_check_l3_disable(int index, struct _
(boot_cpu_data.x86_mask < 0x1)))
return;
+#if 0
+/* num_k8_northbridges is only defined under arch/x86_64/ */
/* not in virtualized environments */
if (num_k8_northbridges == 0)
return;
+#endif
this_leaf->can_disable = true;
this_leaf->l3_indices = amd_calc_l3_indices();
diff -urp linux-2.6.18-194.8.1.el5.028stab070.2/arch/x86_64/Kconfig linux-2.6.18-194.8.1.el5.028stab070.2-owl/arch/x86_64/Kconfig
--- linux-2.6.18-194.8.1.el5.028stab070.2/arch/x86_64/Kconfig 2010-07-08 16:01:51 +0000
+++ linux-2.6.18-194.8.1.el5.028stab070.2-owl/arch/x86_64/Kconfig 2010-07-15 11:07:35 +0000
@@ -476,6 +476,7 @@ config IOMMU
default y
select SWIOTLB
select AGP
+ select IOMMU_HELPER
depends on PCI && !X86_64_XEN
help
Support for full DMA access of devices with 32bit memory access only
diff -urp linux-2.6.18-194.8.1.el5.028stab070.2/drivers/ata/Kconfig linux-2.6.18-194.8.1.el5.028stab070.2-owl/drivers/ata/Kconfig
--- linux-2.6.18-194.8.1.el5.028stab070.2/drivers/ata/Kconfig 2010-07-08 16:01:25 +0000
+++ linux-2.6.18-194.8.1.el5.028stab070.2-owl/drivers/ata/Kconfig 2010-07-21 17:48:59 +0000
@@ -445,8 +445,10 @@ config PATA_MARVELL
tristate "Marvell PATA support via legacy mode"
depends on PCI
help
- This option enables limited support for the Marvell 88SE6145 ATA
- controller.
+ This option enables limited support for the Marvell 88SE61xx ATA
+ controllers. If you wish to use only the SATA ports then select
+ the AHCI driver alone. If you wish to use the PATA port or both
+ SATA and PATA include this driver.
If unsure, say N.
diff -urp linux-2.6.18-194.8.1.el5.028stab070.2/drivers/ata/ahci.c linux-2.6.18-194.8.1.el5.028stab070.2-owl/drivers/ata/ahci.c
--- linux-2.6.18-194.8.1.el5.028stab070.2/drivers/ata/ahci.c 2010-07-08 16:01:42 +0000
+++ linux-2.6.18-194.8.1.el5.028stab070.2-owl/drivers/ata/ahci.c 2010-07-21 17:47:07 +0000
@@ -616,6 +616,15 @@ module_param(ahci_em_messages, int, 0444
MODULE_PARM_DESC(ahci_em_messages,
"Set AHCI Enclosure Management Message type (0 = disabled, 1 = LED");
+#if defined(CONFIG_PATA_MARVELL) || defined(CONFIG_PATA_MARVELL_MODULE)
+static int marvell_enable;
+#else
+static int marvell_enable = 1;
+#endif
+module_param(marvell_enable, int, 0644);
+MODULE_PARM_DESC(marvell_enable, "Marvell SATA via AHCI (1 = enabled)");
+
+
static inline int ahci_nr_ports(u32 cap)
{
return (cap & 0x1f) + 1;
@@ -735,6 +744,8 @@ static void ahci_save_initial_config(str
"MV_AHCI HACK: port_map %x -> %x\n",
port_map,
port_map & mv);
+ dev_printk(KERN_ERR, &pdev->dev,
+ "Disabling your PATA port on the Marvell SATA/PATA controller, which is unsupported by the AHCI driver. Use the boot option 'ahci.marvell_enable=0' to avoid this and let the likely slower Marvell PATA driver take over, supporting both SATA and PATA ports.\n");
port_map &= mv;
}
@@ -2568,6 +2579,15 @@ static int ahci_init_one(struct pci_dev
if (!printed_version++)
dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n");
+ /* The AHCI driver can only drive the SATA ports, the PATA driver
+ can drive them all so if both drivers are selected make sure
+ AHCI stays out of the way */
+ if (pdev->vendor == PCI_VENDOR_ID_MARVELL && !marvell_enable) {
+ dev_printk(KERN_ERR, &pdev->dev,
+ "Skipping the Marvell SATA/PATA controller in order to let the Marvell PATA driver take over. Use the boot option 'ahci.marvell_enable=1' to avoid this, likely gaining a bit of performance but losing support for your PATA port.\n");
+ return -ENODEV;
+ }
+
/* acquire resources */
rc = pcim_enable_device(pdev);
if (rc)
diff -urp linux-2.6.18-194.8.1.el5.028stab070.2/drivers/ata/pata_marvell.c linux-2.6.18-194.8.1.el5.028stab070.2-owl/drivers/ata/pata_marvell.c
--- linux-2.6.18-194.8.1.el5.028stab070.2/drivers/ata/pata_marvell.c 2010-07-08 16:01:25 +0000
+++ linux-2.6.18-194.8.1.el5.028stab070.2-owl/drivers/ata/pata_marvell.c 2010-07-21 17:44:34 +0000
@@ -5,7 +5,7 @@
* isn't making full use of the device functionality but it is
* easy to get working.
*
- * (c) 2006 Red Hat <alan at redhat.com>
+ * (c) 2006 Red Hat
*/
#include <linux/kernel.h>
@@ -20,29 +20,30 @@
#include <linux/ata.h>
#define DRV_NAME "pata_marvell"
-#define DRV_VERSION "0.1.4"
+#define DRV_VERSION "0.1.6"
/**
- * marvell_pre_reset - check for 40/80 pin
- * @link: link
- * @deadline: deadline jiffies for the operation
+ * marvell_pata_active - check if PATA is active
+ * @pdev: PCI device
*
- * Perform the PATA port setup we need.
+ * Returns 1 if the PATA port may be active. We know how to check this
+ * for the 6145 but not the other devices
*/
-static int marvell_pre_reset(struct ata_link *link, unsigned long deadline)
+static int marvell_pata_active(struct pci_dev *pdev)
{
- struct ata_port *ap = link->ap;
- struct pci_dev *pdev = to_pci_dev(ap->host->dev);
+ int i;
u32 devices;
void __iomem *barp;
- int i;
- /* Check if our port is enabled */
+ /* We don't yet know how to do this for other devices */
+ if (pdev->device != 0x6145)
+ return 1;
barp = pci_iomap(pdev, 5, 0x10);
if (barp == NULL)
return -ENOMEM;
+
printk("BAR5:");
for(i = 0; i <= 0x0F; i++)
printk("%02X:%02X ", i, ioread8(barp + i));
@@ -51,9 +52,27 @@ static int marvell_pre_reset(struct ata_
devices = ioread32(barp + 0x0C);
pci_iounmap(pdev, barp);
- if ((pdev->device == 0x6145) && (ap->port_no == 0) &&
- (!(devices & 0x10))) /* PATA enable ? */
- return -ENOENT;
+ if (devices & 0x10)
+ return 1;
+ return 0;
+}
+
+/**
+ * marvell_pre_reset - probe begin
+ * @link: link
+ * @deadline: deadline jiffies for the operation
+ *
+ * Perform the PATA port setup we need.
+ */
+
+static int marvell_pre_reset(struct ata_link *link, unsigned long deadline)
+{
+ struct ata_port *ap = link->ap;
+ struct pci_dev *pdev = to_pci_dev(ap->host->dev);
+
+ if (pdev->device == 0x6145 && ap->port_no == 0 &&
+ !marvell_pata_active(pdev)) /* PATA enable ? */
+ return -ENOENT;
return ata_sff_prereset(link, deadline);
}
@@ -107,8 +126,8 @@ static int marvell_init_one (struct pci_
static const struct ata_port_info info = {
.flags = ATA_FLAG_SLAVE_POSS,
- .pio_mask = 0x1f,
- .mwdma_mask = 0x07,
+ .pio_mask = ATA_PIO4,
+ .mwdma_mask = ATA_MWDMA2,
.udma_mask = ATA_UDMA5,
.port_ops = &marvell_ops,
@@ -117,8 +136,8 @@ static int marvell_init_one (struct pci_
/* Slave possible as its magically mapped not real */
.flags = ATA_FLAG_SLAVE_POSS,
- .pio_mask = 0x1f,
- .mwdma_mask = 0x07,
+ .pio_mask = ATA_PIO4,
+ .mwdma_mask = ATA_MWDMA2,
.udma_mask = ATA_UDMA6,
.port_ops = &marvell_ops,
@@ -128,6 +147,12 @@ static int marvell_init_one (struct pci_
if (pdev->device == 0x6101)
ppi[1] = &ata_dummy_port_info;
+#if defined(CONFIG_SATA_AHCI) || defined(CONFIG_SATA_AHCI_MODULE)
+ if (!marvell_pata_active(pdev)) {
+ printk(KERN_INFO DRV_NAME ": PATA port not active, deferring to AHCI driver.\n");
+ return -ENODEV;
+ }
+#endif
return ata_pci_sff_init_one(pdev, ppi, &marvell_sht, NULL);
}
diff -urp linux-2.6.18-194.8.1.el5.028stab070.2/drivers/dca/Kconfig linux-2.6.18-194.8.1.el5.028stab070.2-owl/drivers/dca/Kconfig
--- linux-2.6.18-194.8.1.el5.028stab070.2/drivers/dca/Kconfig 2010-07-08 16:01:32 +0000
+++ linux-2.6.18-194.8.1.el5.028stab070.2-owl/drivers/dca/Kconfig 2010-07-20 13:33:13 +0000
@@ -3,7 +3,7 @@
#
config DCA
- tristate
+ tristate "DCA server configuration"
depends on DMA_ENGINE_V3 && PCI
default m
---help---
diff -urp linux-2.6.18-194.8.1.el5.028stab070.2/drivers/parisc/eisa_eeprom.c linux-2.6.18-194.8.1.el5.028stab070.2-owl/drivers/parisc/eisa_eeprom.c
--- linux-2.6.18-194.8.1.el5.028stab070.2/drivers/parisc/eisa_eeprom.c 2006-09-20 03:42:06 +0000
+++ linux-2.6.18-194.8.1.el5.028stab070.2-owl/drivers/parisc/eisa_eeprom.c 2009-08-10 06:51:35 +0000
@@ -54,7 +54,7 @@ static ssize_t eisa_eeprom_read(struct f
ssize_t ret;
int i;
- if (*ppos >= HPEE_MAX_LENGTH)
+ if (*ppos < 0 || *ppos >= HPEE_MAX_LENGTH)
return 0;
count = *ppos + count < HPEE_MAX_LENGTH ? count : HPEE_MAX_LENGTH - *ppos;
diff -urp linux-2.6.18-194.8.1.el5.028stab070.2/fs/Kconfig linux-2.6.18-194.8.1.el5.028stab070.2-owl/fs/Kconfig
--- linux-2.6.18-194.8.1.el5.028stab070.2/fs/Kconfig 2010-07-08 16:01:52 +0000
+++ linux-2.6.18-194.8.1.el5.028stab070.2-owl/fs/Kconfig 2010-07-15 11:43:05 +0000
@@ -473,6 +473,7 @@ config QFMT_V2
config SIM_FS
tristate "VPS filesystem"
depends on VZ_QUOTA
+ select EXPORTFS
default m
help
This file system is a part of Virtuozzo. It intoduces a fake
diff -urp linux-2.6.18-194.8.1.el5.028stab070.2/fs/proc/base.c linux-2.6.18-194.8.1.el5.028stab070.2-owl/fs/proc/base.c
--- linux-2.6.18-194.8.1.el5.028stab070.2/fs/proc/base.c 2010-07-08 16:01:52 +0000
+++ linux-2.6.18-194.8.1.el5.028stab070.2-owl/fs/proc/base.c 2010-07-15 11:30:25 +0000
@@ -260,10 +260,10 @@ static struct pid_entry tgid_base_stuff[
S_IFREG|S_IRUGO|S_IWUSR),
#endif
#ifdef CONFIG_TASK_IO_ACCOUNTING
- E(PROC_TGID_IO, "io", S_IFREG|S_IRUGO),
+ E(PROC_TGID_IO, "io", S_IFREG|S_IRUSR),
#endif
#ifdef CONFIG_STACKTRACE_PROC
- E(PROC_TGID_STACK, "stack", S_IFREG|S_IRUGO),
+ E(PROC_TGID_STACK, "stack", S_IFREG|S_IRUSR),
#endif
{0,0,NULL,0}
@@ -310,10 +310,10 @@ static struct pid_entry tid_base_stuff[]
#endif
E(PROC_TID_LIMITS, "limits", S_IFREG|S_IRUSR),
#ifdef CONFIG_TASK_IO_ACCOUNTING
- E(PROC_TID_IO, "io", S_IFREG|S_IRUGO),
+ E(PROC_TID_IO, "io", S_IFREG|S_IRUSR),
#endif
#ifdef CONFIG_STACKTRACE_PROC
- E(PROC_TID_STACK, "stack", S_IFREG|S_IRUGO),
+ E(PROC_TID_STACK, "stack", S_IFREG|S_IRUSR),
#endif
{0,0,NULL,0}
diff -urp linux-2.6.18-194.8.1.el5.028stab070.2/include/linux/dmar.h linux-2.6.18-194.8.1.el5.028stab070.2-owl/include/linux/dmar.h
--- linux-2.6.18-194.8.1.el5.028stab070.2/include/linux/dmar.h 2010-07-08 16:01:47 +0000
+++ linux-2.6.18-194.8.1.el5.028stab070.2-owl/include/linux/dmar.h 2010-07-15 11:07:35 +0000
@@ -125,10 +125,6 @@ extern int irq_remapped(int irq);
extern struct intel_iommu *map_dev_to_ir(struct pci_dev *dev);
extern struct intel_iommu *map_ioapic_to_ir(int apic);
#else
-static inline int enable_drhd_fault_handling(void)
-{
- return -1;
-}
static inline int alloc_irte(struct intel_iommu *iommu, int irq, u16 count)
{
return -1;
diff -urp linux-2.6.18-194.8.1.el5.028stab070.2/kernel/panic.c linux-2.6.18-194.8.1.el5.028stab070.2-owl/kernel/panic.c
--- linux-2.6.18-194.8.1.el5.028stab070.2/kernel/panic.c 2010-07-08 16:01:52 +0000
+++ linux-2.6.18-194.8.1.el5.028stab070.2-owl/kernel/panic.c 2010-07-15 11:07:35 +0000
@@ -20,7 +20,7 @@
#include <linux/kexec.h>
#include <linux/debug_locks.h>
-int panic_on_oops = 1;
+int panic_on_oops;
int tainted = 1;
static int pause_on_oops;
static int pause_on_oops_flag;
diff -urp linux-2.6.18-194.8.1.el5.028stab070.2/net/llc/af_llc.c linux-2.6.18-194.8.1.el5.028stab070.2-owl/net/llc/af_llc.c
--- linux-2.6.18-194.8.1.el5.028stab070.2/net/llc/af_llc.c 2006-09-20 03:42:06 +0000
+++ linux-2.6.18-194.8.1.el5.028stab070.2-owl/net/llc/af_llc.c 2009-08-26 10:16:29 +0000
@@ -155,6 +155,9 @@ static int llc_ui_create(struct socket *
struct sock *sk;
int rc = -ESOCKTNOSUPPORT;
+ if (!capable(CAP_NET_RAW))
+ return -EPERM;
+
if (likely(sock->type == SOCK_DGRAM || sock->type == SOCK_STREAM)) {
rc = -ENOMEM;
sk = llc_sk_alloc(PF_LLC, GFP_KERNEL, &llc_proto);
@@ -911,6 +914,7 @@ static int llc_ui_getname(struct socket
struct llc_sock *llc = llc_sk(sk);
int rc = 0;
+ memset(&sllc, 0, sizeof(sllc));
lock_sock(sk);
if (sock_flag(sk, SOCK_ZAPPED))
goto out;
More information about the Users
mailing list