aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--main/linux-grsec/APKBUILD6
-rw-r--r--main/linux-grsec/grsecurity-2.1.14-2.6.30.4-200908090749.patch (renamed from main/linux-grsec/grsecurity-2.1.14-2.6.30.4-200908051916.patch)335
2 files changed, 255 insertions, 86 deletions
diff --git a/main/linux-grsec/APKBUILD b/main/linux-grsec/APKBUILD
index 08e386e29b..625989df1b 100644
--- a/main/linux-grsec/APKBUILD
+++ b/main/linux-grsec/APKBUILD
@@ -4,7 +4,7 @@ _flavor=grsec
pkgname=linux-${_flavor}
pkgver=2.6.30.4
_kernver=2.6.30
-pkgrel=2
+pkgrel=3
pkgdesc="Linux kernel with grsecurity"
url=http://grsecurity.net
depends="mkinitfs"
@@ -13,7 +13,7 @@ _config=${config:-kernelconfig}
install="$pkgname.post-install $pkgname.post-upgrade"
source="ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-$_kernver.tar.bz2
ftp://ftp.kernel.org/pub/linux/kernel/v2.6/patch-$pkgver.bz2
- grsecurity-2.1.14-2.6.30.4-200908051916.patch
+ grsecurity-2.1.14-2.6.30.4-200908090749.patch
linux-nbma-mroute-v4-2.6.30.diff
net-next-2.6.git-5ef12d98a19254ee5dc851bd83e214b43ec1f725.patch
$_config
@@ -113,7 +113,7 @@ dev() {
md5sums="7a80058a6382e5108cdb5554d1609615 linux-2.6.30.tar.bz2
d0fc44b54ba5953140b3f2aa9a1f2580 patch-2.6.30.4.bz2
-9a0d6d6ce67289e24c6e3ef4441b6388 grsecurity-2.1.14-2.6.30.4-200908051916.patch
+78f3778d96c03006ba0b4c96ed885cd6 grsecurity-2.1.14-2.6.30.4-200908090749.patch
7420c0b1095335990313656b114e1379 linux-nbma-mroute-v4-2.6.30.diff
ca05fd252783b82e01610e775cf56498 net-next-2.6.git-5ef12d98a19254ee5dc851bd83e214b43ec1f725.patch
60adb085be0ab268c0f27279ae2b2bab kernelconfig
diff --git a/main/linux-grsec/grsecurity-2.1.14-2.6.30.4-200908051916.patch b/main/linux-grsec/grsecurity-2.1.14-2.6.30.4-200908090749.patch
index 5d0902c211..3fff0bbb81 100644
--- a/main/linux-grsec/grsecurity-2.1.14-2.6.30.4-200908051916.patch
+++ b/main/linux-grsec/grsecurity-2.1.14-2.6.30.4-200908090749.patch
@@ -7086,7 +7086,7 @@ diff -urNp linux-2.6.30.4/arch/x86/include/asm/uaccess_64.h linux-2.6.30.4/arch/
#endif /* _ASM_X86_UACCESS_64_H */
diff -urNp linux-2.6.30.4/arch/x86/include/asm/uaccess.h linux-2.6.30.4/arch/x86/include/asm/uaccess.h
--- linux-2.6.30.4/arch/x86/include/asm/uaccess.h 2009-07-30 20:32:40.364705510 -0400
-+++ linux-2.6.30.4/arch/x86/include/asm/uaccess.h 2009-07-30 20:32:47.926577259 -0400
++++ linux-2.6.30.4/arch/x86/include/asm/uaccess.h 2009-08-09 07:48:47.926451868 -0400
@@ -8,8 +8,10 @@
#include <linux/thread_info.h>
#include <linux/prefetch.h>
@@ -7111,22 +7111,32 @@ diff -urNp linux-2.6.30.4/arch/x86/include/asm/uaccess.h linux-2.6.30.4/arch/x86
#define segment_eq(a, b) ((a).seg == (b).seg)
-@@ -187,9 +194,12 @@ extern int __get_user_bad(void);
+@@ -183,13 +190,21 @@ extern int __get_user_bad(void);
+ asm volatile("call __put_user_" #size : "=a" (__ret_pu) \
+ : "0" ((typeof(*(ptr)))(x)), "c" (ptr) : "ebx")
+
+-
++#ifdef CONFIG_X86_32
++#define _ASM_LOAD_USER_DS(ds) "movw %w" #ds ",%%ds\n"
++#define _ASM_LOAD_KERNEL_DS "pushl %%ss; popl %%ds\n"
++#else
++#define _ASM_LOAD_USER_DS(ds)
++#define _ASM_LOAD_KERNEL_DS
++#endif
#ifdef CONFIG_X86_32
#define __put_user_asm_u64(x, addr, err, errret) \
- asm volatile("1: movl %%eax,0(%2)\n" \
- "2: movl %%edx,4(%2)\n" \
-+ asm volatile(" movw %w5,%%ds\n" \
++ asm volatile(_ASM_LOAD_USER_DS(5) \
+ "1: movl %%eax,%%ds:0(%2)\n" \
+ "2: movl %%edx,%%ds:4(%2)\n" \
"3:\n" \
-+ " pushl %%ss\n" \
-+ " popl %%ds\n" \
++ _ASM_LOAD_KERNEL_DS \
".section .fixup,\"ax\"\n" \
"4: movl %3,%0\n" \
" jmp 3b\n" \
-@@ -197,7 +207,8 @@ extern int __get_user_bad(void);
+@@ -197,15 +212,18 @@ extern int __get_user_bad(void);
_ASM_EXTABLE(1b, 4b) \
_ASM_EXTABLE(2b, 4b) \
: "=r" (err) \
@@ -7135,110 +7145,89 @@ diff -urNp linux-2.6.30.4/arch/x86/include/asm/uaccess.h linux-2.6.30.4/arch/x86
+ "r"(__USER_DS))
#define __put_user_asm_ex_u64(x, addr) \
- asm volatile("1: movl %%eax,0(%1)\n" \
-@@ -373,6 +384,22 @@ do { \
- } \
+- asm volatile("1: movl %%eax,0(%1)\n" \
+- "2: movl %%edx,4(%1)\n" \
++ asm volatile(_ASM_LOAD_USER_DS(2) \
++ "1: movl %%eax,%%ds:0(%1)\n" \
++ "2: movl %%edx,%%ds:4(%1)\n" \
+ "3:\n" \
++ _ASM_LOAD_KERNEL_DS \
+ _ASM_EXTABLE(1b, 2b - 1b) \
+ _ASM_EXTABLE(2b, 3b - 2b) \
+- : : "A" (x), "r" (addr))
++ : : "A" (x), "r" (addr), "r"(__USER_DS))
+
+ #define __put_user_x8(x, ptr, __ret_pu) \
+ asm volatile("call __put_user_8" : "=a" (__ret_pu) \
+@@ -374,16 +392,18 @@ do { \
} while (0)
-+#ifdef CONFIG_X86_32
-+#define __get_user_asm(x, addr, err, itype, rtype, ltype, errret) \
-+ asm volatile(" movw %w5,%%ds\n" \
-+ "1: mov"itype" %%ds:%2,%"rtype"1\n" \
-+ "2:\n" \
-+ " pushl %%ss\n" \
-+ " popl %%ds\n" \
-+ ".section .fixup,\"ax\"\n" \
-+ "3: movl %3,%0\n" \
-+ " xor"itype" %"rtype"1,%"rtype"1\n" \
-+ " jmp 2b\n" \
-+ ".previous\n" \
-+ _ASM_EXTABLE(1b, 3b) \
-+ : "=r" (err), ltype (x) \
-+ : "m" (__m(addr)), "i" (errret), "0" (err), "r"(__USER_DS))
-+#else
#define __get_user_asm(x, addr, err, itype, rtype, ltype, errret) \
- asm volatile("1: mov"itype" %2,%"rtype"1\n" \
+- asm volatile("1: mov"itype" %2,%"rtype"1\n" \
++ asm volatile(_ASM_LOAD_USER_DS(5) \
++ "1: mov"itype" %%ds:%2,%"rtype"1\n" \
"2:\n" \
-@@ -384,6 +411,7 @@ do { \
++ _ASM_LOAD_KERNEL_DS \
+ ".section .fixup,\"ax\"\n" \
+ "3: mov %3,%0\n" \
+ " xor"itype" %"rtype"1,%"rtype"1\n" \
+ " jmp 2b\n" \
+ ".previous\n" \
_ASM_EXTABLE(1b, 3b) \
- : "=r" (err), ltype(x) \
- : "m" (__m(addr)), "i" (errret), "0" (err))
-+#endif
+- : "=r" (err), ltype(x) \
+- : "m" (__m(addr)), "i" (errret), "0" (err))
++ : "=r" (err), ltype (x) \
++ : "m" (__m(addr)), "i" (errret), "0" (err), "r"(__USER_DS))
#define __get_user_size_ex(x, ptr, size) \
do { \
-@@ -406,11 +434,22 @@ do { \
- } \
+@@ -407,10 +427,12 @@ do { \
} while (0)
-+#ifdef CONFIG_X86_32
-+#define __get_user_asm_ex(x, addr, itype, rtype, ltype) \
-+ asm volatile(" movw %w2,%%ds\n" \
-+ "1: mov"itype" %%ds:%1,%"rtype"0\n" \
-+ "2:\n" \
-+ " pushl %%ss\n" \
-+ " popl %%ds\n" \
-+ _ASM_EXTABLE(1b, 2b - 1b) \
-+ : ltype(x) : "m" (__m(addr)), "r"(__USER_DS))
-+#else
#define __get_user_asm_ex(x, addr, itype, rtype, ltype) \
- asm volatile("1: mov"itype" %1,%"rtype"0\n" \
+- asm volatile("1: mov"itype" %1,%"rtype"0\n" \
++ asm volatile(_ASM_LOAD_USER_DS(2) \
++ "1: mov"itype" %%ds:%1,%"rtype"0\n" \
"2:\n" \
++ _ASM_LOAD_KERNEL_DS \
_ASM_EXTABLE(1b, 2b - 1b) \
- : ltype(x) : "m" (__m(addr)))
-+#endif
+- : ltype(x) : "m" (__m(addr)))
++ : ltype(x) : "m" (__m(addr)), "r"(__USER_DS))
#define __put_user_nocheck(x, ptr, size) \
({ \
-@@ -437,6 +476,22 @@ struct __large_struct { unsigned long bu
- * we do not write to any memory gcc knows about, so there are no
+@@ -438,21 +460,26 @@ struct __large_struct { unsigned long bu
* aliasing issues.
*/
-+#ifdef CONFIG_X86_32
-+#define __put_user_asm(x, addr, err, itype, rtype, ltype, errret) \
-+ asm volatile(" movw %w5,%%ds\n" \
-+ "1: mov"itype" %"rtype"1,%%ds:%2\n" \
-+ "2:\n" \
-+ " pushl %%ss\n" \
-+ " popl %%ds\n" \
-+ ".section .fixup,\"ax\"\n" \
-+ "3: movl %3,%0\n" \
-+ " jmp 2b\n" \
-+ ".previous\n" \
-+ _ASM_EXTABLE(1b, 3b) \
-+ : "=r"(err) \
-+ : ltype (x), "m" (__m(addr)), "i" (errret), "0" (err),\
-+ "r"(__USER_DS))
-+#else
#define __put_user_asm(x, addr, err, itype, rtype, ltype, errret) \
- asm volatile("1: mov"itype" %"rtype"1,%2\n" \
+- asm volatile("1: mov"itype" %"rtype"1,%2\n" \
++ asm volatile(_ASM_LOAD_USER_DS(5) \
++ "1: mov"itype" %"rtype"1,%%ds:%2\n" \
"2:\n" \
-@@ -447,12 +502,24 @@ struct __large_struct { unsigned long bu
++ _ASM_LOAD_KERNEL_DS \
+ ".section .fixup,\"ax\"\n" \
+ "3: mov %3,%0\n" \
+ " jmp 2b\n" \
+ ".previous\n" \
_ASM_EXTABLE(1b, 3b) \
: "=r"(err) \
- : ltype(x), "m" (__m(addr)), "i" (errret), "0" (err))
-+#endif
+- : ltype(x), "m" (__m(addr)), "i" (errret), "0" (err))
++ : ltype (x), "m" (__m(addr)), "i" (errret), "0" (err),\
++ "r"(__USER_DS))
-+#ifdef CONFIG_X86_32
-+#define __put_user_asm_ex(x, addr, itype, rtype, ltype) \
-+ asm volatile(" movw %w2,%%ds\n" \
-+ "1: mov"itype" %"rtype"0,%%ds:%1\n" \
-+ "2:\n" \
-+ " pushl %%ss\n" \
-+ " popl %%ds\n" \
-+ _ASM_EXTABLE(1b, 2b - 1b) \
-+ : : ltype(x), "m" (__m(addr)), "r"(__USER_DS))
-+#else
#define __put_user_asm_ex(x, addr, itype, rtype, ltype) \
- asm volatile("1: mov"itype" %"rtype"0,%1\n" \
+- asm volatile("1: mov"itype" %"rtype"0,%1\n" \
++ asm volatile(_ASM_LOAD_USER_DS(2) \
++ "1: mov"itype" %"rtype"0,%%ds:%1\n" \
"2:\n" \
++ _ASM_LOAD_KERNEL_DS \
_ASM_EXTABLE(1b, 2b - 1b) \
- : : ltype(x), "m" (__m(addr)))
-+#endif
+- : : ltype(x), "m" (__m(addr)))
++ : : ltype(x), "m" (__m(addr)), "r"(__USER_DS))
/*
* uaccess_try and catch
-@@ -567,6 +634,7 @@ extern struct movsl_mask {
+@@ -567,6 +594,7 @@ extern struct movsl_mask {
#define ARCH_HAS_NOCACHE_UACCESS 1
@@ -18854,6 +18843,30 @@ diff -urNp linux-2.6.30.4/drivers/media/video/stk-webcam.c linux-2.6.30.4/driver
.open = stk_v4l_vm_open,
.close = stk_v4l_vm_close
};
+diff -urNp linux-2.6.30.4/drivers/media/video/usbvideo/konicawc.c linux-2.6.30.4/drivers/media/video/usbvideo/konicawc.c
+--- linux-2.6.30.4/drivers/media/video/usbvideo/konicawc.c 2009-07-24 17:47:51.000000000 -0400
++++ linux-2.6.30.4/drivers/media/video/usbvideo/konicawc.c 2009-08-09 07:48:48.178565450 -0400
+@@ -225,7 +225,7 @@ static void konicawc_register_input(stru
+ int error;
+
+ usb_make_path(dev, cam->input_physname, sizeof(cam->input_physname));
+- strncat(cam->input_physname, "/input0", sizeof(cam->input_physname));
++ strlcat(cam->input_physname, "/input0", sizeof(cam->input_physname));
+
+ cam->input = input_dev = input_allocate_device();
+ if (!input_dev) {
+diff -urNp linux-2.6.30.4/drivers/media/video/usbvideo/quickcam_messenger.c linux-2.6.30.4/drivers/media/video/usbvideo/quickcam_messenger.c
+--- linux-2.6.30.4/drivers/media/video/usbvideo/quickcam_messenger.c 2009-07-24 17:47:51.000000000 -0400
++++ linux-2.6.30.4/drivers/media/video/usbvideo/quickcam_messenger.c 2009-08-09 07:48:48.199403940 -0400
+@@ -89,7 +89,7 @@ static void qcm_register_input(struct qc
+ int error;
+
+ usb_make_path(dev, cam->input_physname, sizeof(cam->input_physname));
+- strncat(cam->input_physname, "/input0", sizeof(cam->input_physname));
++ strlcat(cam->input_physname, "/input0", sizeof(cam->input_physname));
+
+ cam->input = input_dev = input_allocate_device();
+ if (!input_dev) {
diff -urNp linux-2.6.30.4/drivers/media/video/uvc/uvc_v4l2.c linux-2.6.30.4/drivers/media/video/uvc/uvc_v4l2.c
--- linux-2.6.30.4/drivers/media/video/uvc/uvc_v4l2.c 2009-07-24 17:47:51.000000000 -0400
+++ linux-2.6.30.4/drivers/media/video/uvc/uvc_v4l2.c 2009-07-30 09:48:10.034661447 -0400
@@ -18914,6 +18927,95 @@ diff -urNp linux-2.6.30.4/drivers/media/video/zoran/zoran_driver.c linux-2.6.30.
.open = zoran_vm_open,
.close = zoran_vm_close,
};
+diff -urNp linux-2.6.30.4/drivers/message/i2o/i2o_proc.c linux-2.6.30.4/drivers/message/i2o/i2o_proc.c
+--- linux-2.6.30.4/drivers/message/i2o/i2o_proc.c 2009-07-24 17:47:51.000000000 -0400
++++ linux-2.6.30.4/drivers/message/i2o/i2o_proc.c 2009-08-09 07:48:48.246416282 -0400
+@@ -259,13 +259,6 @@ static char *scsi_devices[] = {
+ "Array Controller Device"
+ };
+
+-static char *chtostr(u8 * chars, int n)
+-{
+- char tmp[256];
+- tmp[0] = 0;
+- return strncat(tmp, (char *)chars, n);
+-}
+-
+ static int i2o_report_query_status(struct seq_file *seq, int block_status,
+ char *group)
+ {
+@@ -842,8 +835,7 @@ static int i2o_seq_show_ddm_table(struct
+
+ seq_printf(seq, "%-#7x", ddm_table.i2o_vendor_id);
+ seq_printf(seq, "%-#8x", ddm_table.module_id);
+- seq_printf(seq, "%-29s",
+- chtostr(ddm_table.module_name_version, 28));
++ seq_printf(seq, "%-.28s", ddm_table.module_name_version);
+ seq_printf(seq, "%9d ", ddm_table.data_size);
+ seq_printf(seq, "%8d", ddm_table.code_size);
+
+@@ -944,8 +936,8 @@ static int i2o_seq_show_drivers_stored(s
+
+ seq_printf(seq, "%-#7x", dst->i2o_vendor_id);
+ seq_printf(seq, "%-#8x", dst->module_id);
+- seq_printf(seq, "%-29s", chtostr(dst->module_name_version, 28));
+- seq_printf(seq, "%-9s", chtostr(dst->date, 8));
++ seq_printf(seq, "%-.28s", dst->module_name_version);
++ seq_printf(seq, "%-.8s", dst->date);
+ seq_printf(seq, "%8d ", dst->module_size);
+ seq_printf(seq, "%8d ", dst->mpb_size);
+ seq_printf(seq, "0x%04x", dst->module_flags);
+@@ -1276,14 +1268,10 @@ static int i2o_seq_show_dev_identity(str
+ seq_printf(seq, "Device Class : %s\n", i2o_get_class_name(work16[0]));
+ seq_printf(seq, "Owner TID : %0#5x\n", work16[2]);
+ seq_printf(seq, "Parent TID : %0#5x\n", work16[3]);
+- seq_printf(seq, "Vendor info : %s\n",
+- chtostr((u8 *) (work32 + 2), 16));
+- seq_printf(seq, "Product info : %s\n",
+- chtostr((u8 *) (work32 + 6), 16));
+- seq_printf(seq, "Description : %s\n",
+- chtostr((u8 *) (work32 + 10), 16));
+- seq_printf(seq, "Product rev. : %s\n",
+- chtostr((u8 *) (work32 + 14), 8));
++ seq_printf(seq, "Vendor info : %.16s\n", (u8 *) (work32 + 2));
++ seq_printf(seq, "Product info : %.16s\n", (u8 *) (work32 + 6));
++ seq_printf(seq, "Description : %.16s\n", (u8 *) (work32 + 10));
++ seq_printf(seq, "Product rev. : %.8s\n", (u8 *) (work32 + 14));
+
+ seq_printf(seq, "Serial number : ");
+ print_serial_number(seq, (u8 *) (work32 + 16),
+@@ -1328,10 +1316,8 @@ static int i2o_seq_show_ddm_identity(str
+ }
+
+ seq_printf(seq, "Registering DDM TID : 0x%03x\n", result.ddm_tid);
+- seq_printf(seq, "Module name : %s\n",
+- chtostr(result.module_name, 24));
+- seq_printf(seq, "Module revision : %s\n",
+- chtostr(result.module_rev, 8));
++ seq_printf(seq, "Module name : %.24s\n", result.module_name);
++ seq_printf(seq, "Module revision : %.8s\n", result.module_rev);
+
+ seq_printf(seq, "Serial number : ");
+ print_serial_number(seq, result.serial_number, sizeof(result) - 36);
+@@ -1362,14 +1348,10 @@ static int i2o_seq_show_uinfo(struct seq
+ return 0;
+ }
+
+- seq_printf(seq, "Device name : %s\n",
+- chtostr(result.device_name, 64));
+- seq_printf(seq, "Service name : %s\n",
+- chtostr(result.service_name, 64));
+- seq_printf(seq, "Physical name : %s\n",
+- chtostr(result.physical_location, 64));
+- seq_printf(seq, "Instance number : %s\n",
+- chtostr(result.instance_number, 4));
++ seq_printf(seq, "Device name : %.64s\n", result.device_name);
++ seq_printf(seq, "Service name : %.64s\n", result.service_name);
++ seq_printf(seq, "Physical name : %.64s\n", result.physical_location);
++ seq_printf(seq, "Instance number : %.4s\n", result.instance_number);
+
+ return 0;
+ }
diff -urNp linux-2.6.30.4/drivers/misc/ibmasm/ibmasmfs.c linux-2.6.30.4/drivers/misc/ibmasm/ibmasmfs.c
--- linux-2.6.30.4/drivers/misc/ibmasm/ibmasmfs.c 2009-07-24 17:47:51.000000000 -0400
+++ linux-2.6.30.4/drivers/misc/ibmasm/ibmasmfs.c 2009-07-30 09:48:10.036598829 -0400
@@ -19256,6 +19358,38 @@ diff -urNp linux-2.6.30.4/drivers/pcmcia/yenta_socket.c linux-2.6.30.4/drivers/p
};
MODULE_DEVICE_TABLE(pci, yenta_table);
+diff -urNp linux-2.6.30.4/drivers/platform/x86/wmi.c linux-2.6.30.4/drivers/platform/x86/wmi.c
+--- linux-2.6.30.4/drivers/platform/x86/wmi.c 2009-07-24 17:47:51.000000000 -0400
++++ linux-2.6.30.4/drivers/platform/x86/wmi.c 2009-08-09 07:48:48.278373587 -0400
+@@ -270,7 +270,7 @@ u32 method_id, const struct acpi_buffer
+ acpi_status status;
+ struct acpi_object_list input;
+ union acpi_object params[3];
+- char method[4] = "WM";
++ char method[5] = "WM";
+
+ if (!find_guid(guid_string, &wblock))
+ return AE_ERROR;
+@@ -328,8 +328,8 @@ struct acpi_buffer *out)
+ acpi_status status, wc_status = AE_ERROR;
+ struct acpi_object_list input, wc_input;
+ union acpi_object wc_params[1], wq_params[1];
+- char method[4];
+- char wc_method[4] = "WC";
++ char method[5];
++ char wc_method[5] = "WC";
+
+ if (!guid_string || !out)
+ return AE_BAD_PARAMETER;
+@@ -410,7 +410,7 @@ const struct acpi_buffer *in)
+ acpi_handle handle;
+ struct acpi_object_list input;
+ union acpi_object params[2];
+- char method[4] = "WS";
++ char method[5] = "WS";
+
+ if (!guid_string || !in)
+ return AE_BAD_DATA;
diff -urNp linux-2.6.30.4/drivers/pnp/pnpbios/bioscalls.c linux-2.6.30.4/drivers/pnp/pnpbios/bioscalls.c
--- linux-2.6.30.4/drivers/pnp/pnpbios/bioscalls.c 2009-07-24 17:47:51.000000000 -0400
+++ linux-2.6.30.4/drivers/pnp/pnpbios/bioscalls.c 2009-07-30 09:48:10.045642944 -0400
@@ -34794,7 +34928,7 @@ diff -urNp linux-2.6.30.4/include/asm-generic/int-ll64.h linux-2.6.30.4/include/
#define S16_C(x) x
diff -urNp linux-2.6.30.4/include/asm-generic/vmlinux.lds.h linux-2.6.30.4/include/asm-generic/vmlinux.lds.h
--- linux-2.6.30.4/include/asm-generic/vmlinux.lds.h 2009-07-24 17:47:51.000000000 -0400
-+++ linux-2.6.30.4/include/asm-generic/vmlinux.lds.h 2009-08-05 19:08:00.537007471 -0400
++++ linux-2.6.30.4/include/asm-generic/vmlinux.lds.h 2009-08-09 07:48:48.045905474 -0400
@@ -121,6 +121,7 @@
.rodata : AT(ADDR(.rodata) - LOAD_OFFSET) { \
VMLINUX_SYMBOL(__start_rodata) = .; \
@@ -34803,8 +34937,22 @@ diff -urNp linux-2.6.30.4/include/asm-generic/vmlinux.lds.h linux-2.6.30.4/inclu
*(__vermagic) /* Kernel version magic */ \
*(__markers_strings) /* Markers: strings */ \
*(__tracepoints_strings)/* Tracepoints: strings */ \
-@@ -478,8 +479,9 @@
+@@ -468,22 +469,24 @@
+ * section in the linker script will go there too. @phdr should have
+ * a leading colon.
+ *
+- * Note that this macros defines __per_cpu_load as an absolute symbol.
++ * Note that this macros defines per_cpu_load as an absolute symbol.
+ * If there is no need to put the percpu section at a predetermined
+ * address, use PERCPU().
+ */
+ #define PERCPU_VADDR(vaddr, phdr) \
+- VMLINUX_SYMBOL(__per_cpu_load) = .; \
+- .data.percpu vaddr : AT(VMLINUX_SYMBOL(__per_cpu_load) \
++ per_cpu_load = .; \
++ .data.percpu vaddr : AT(VMLINUX_SYMBOL(per_cpu_load) \
- LOAD_OFFSET) { \
++ VMLINUX_SYMBOL(__per_cpu_load) = . + per_cpu_load; \
VMLINUX_SYMBOL(__per_cpu_start) = .; \
*(.data.percpu.first) \
- *(.data.percpu.page_aligned) \
@@ -34814,6 +34962,11 @@ diff -urNp linux-2.6.30.4/include/asm-generic/vmlinux.lds.h linux-2.6.30.4/inclu
*(.data.percpu.shared_aligned) \
VMLINUX_SYMBOL(__per_cpu_end) = .; \
} phdr \
+- . = VMLINUX_SYMBOL(__per_cpu_load) + SIZEOF(.data.percpu);
++ . = VMLINUX_SYMBOL(per_cpu_load) + SIZEOF(.data.percpu);
+
+ /**
+ * PERCPU - define output section for percpu area, simple version
diff -urNp linux-2.6.30.4/include/drm/drm_pciids.h linux-2.6.30.4/include/drm/drm_pciids.h
--- linux-2.6.30.4/include/drm/drm_pciids.h 2009-07-24 17:47:51.000000000 -0400
+++ linux-2.6.30.4/include/drm/drm_pciids.h 2009-07-30 09:48:10.106233963 -0400
@@ -44559,6 +44712,22 @@ diff -urNp linux-2.6.30.4/sound/usb/usx2y/usx2yhwdeppcm.c linux-2.6.30.4/sound/u
.open = snd_usX2Y_hwdep_pcm_vm_open,
.close = snd_usX2Y_hwdep_pcm_vm_close,
.fault = snd_usX2Y_hwdep_pcm_vm_fault,
+diff -urNp linux-2.6.30.4/usr/gen_init_cpio.c linux-2.6.30.4/usr/gen_init_cpio.c
+--- linux-2.6.30.4/usr/gen_init_cpio.c 2009-07-24 17:47:51.000000000 -0400
++++ linux-2.6.30.4/usr/gen_init_cpio.c 2009-08-09 07:48:48.304466902 -0400
+@@ -383,9 +383,10 @@ static char *cpio_replace_env(char *new_
+ *env_var = *expanded = '\0';
+ strncat(env_var, start + 2, end - start - 2);
+ strncat(expanded, new_location, start - new_location);
+- strncat(expanded, getenv(env_var), PATH_MAX);
+- strncat(expanded, end + 1, PATH_MAX);
++ strncat(expanded, getenv(env_var), PATH_MAX - strlen(expanded));
++ strncat(expanded, end + 1, PATH_MAX - strlen(expanded));
+ strncpy(new_location, expanded, PATH_MAX);
++ new_location[PATH_MAX] = 0;
+ } else
+ break;
+ }
diff -urNp linux-2.6.30.4/virt/kvm/kvm_main.c linux-2.6.30.4/virt/kvm/kvm_main.c
--- linux-2.6.30.4/virt/kvm/kvm_main.c 2009-07-24 17:47:51.000000000 -0400
+++ linux-2.6.30.4/virt/kvm/kvm_main.c 2009-07-30 12:42:02.581987537 -0400