]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.0-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 12 Mar 2013 21:55:28 +0000 (14:55 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 12 Mar 2013 21:55:28 +0000 (14:55 -0700)
added patches:
decnet-fix-disappearing-sysctl-entries.patch
dmi_scan-fix-missing-check-for-_dmi_-signature-in-smbios_present.patch

queue-3.0/decnet-fix-disappearing-sysctl-entries.patch [new file with mode: 0644]
queue-3.0/dmi_scan-fix-missing-check-for-_dmi_-signature-in-smbios_present.patch [new file with mode: 0644]
queue-3.0/series

diff --git a/queue-3.0/decnet-fix-disappearing-sysctl-entries.patch b/queue-3.0/decnet-fix-disappearing-sysctl-entries.patch
new file mode 100644 (file)
index 0000000..657217e
--- /dev/null
@@ -0,0 +1,115 @@
+From ebiederm@xmission.com  Tue Mar 12 14:52:56 2013
+From: ebiederm@xmission.com (Eric W. Biederman)
+Date: Mon, 11 Mar 2013 17:41:28 -0700
+Subject: decnet: Fix disappearing sysctl entries
+To: stable@vger.kernel.org
+Cc: Larry Baker <baker@usgs.gov>
+Message-ID: <8738w1ih53.fsf@xmission.com>
+
+
+When decnet is built as a module a simple:
+echo 0.0 >/proc/sys/net/decnet/node_address
+
+results in most of the sysctl entries under /proc/sys/net/decnet and
+/proc/sys/net/decnet/conf disappearing.
+
+For more details see http://www.spinics.net/lists/netdev/msg226123.html.
+
+This change applies the same workaround used in
+net/core/sysctl_net_core.c and net/ipv6/sysctl_net_ipv6.c of creating
+a skeleton of decnet sysctl entries before doing anything else.
+
+The problem first appeared in kernel 2.6.27.  The later rewrite of
+sysctl in kernel 3.4 restored the previous behavior and eliminated the
+need for this workaround.
+
+This patch was heavily inspired by a similar but more complex patch by
+Larry Baker.
+
+Reported-by: Larry Baker <baker@usgs.gov>
+Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
+Acked-by: David Miller <davem@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ net/decnet/af_decnet.c         |    4 ++++
+ net/decnet/sysctl_net_decnet.c |   28 ++++++++++++++++++++++++++++
+ 2 files changed, 32 insertions(+)
+
+--- a/net/decnet/af_decnet.c
++++ b/net/decnet/af_decnet.c
+@@ -2355,6 +2355,8 @@ static const struct proto_ops dn_proto_o
+       .sendpage =     sock_no_sendpage,
+ };
++void dn_register_sysctl_skeleton(void);
++void dn_unregister_sysctl_skeleton(void);
+ void dn_register_sysctl(void);
+ void dn_unregister_sysctl(void);
+@@ -2375,6 +2377,7 @@ static int __init decnet_init(void)
+       if (rc != 0)
+               goto out;
++      dn_register_sysctl_skeleton();
+       dn_neigh_init();
+       dn_dev_init();
+       dn_route_init();
+@@ -2414,6 +2417,7 @@ static void __exit decnet_exit(void)
+       dn_fib_cleanup();
+       proc_net_remove(&init_net, "decnet");
++      dn_unregister_sysctl_skeleton();
+       proto_unregister(&dn_proto);
+--- a/net/decnet/sysctl_net_decnet.c
++++ b/net/decnet/sysctl_net_decnet.c
+@@ -55,6 +55,7 @@ static int max_decnet_no_fc_max_cwnd[] =
+ static char node_name[7] = "???";
+ static struct ctl_table_header *dn_table_header = NULL;
++static struct ctl_table_header *dn_skeleton_table_header = NULL;
+ /*
+  * ctype.h :-)
+@@ -356,6 +357,27 @@ static struct ctl_path dn_path[] = {
+       { }
+ };
++static struct ctl_table empty[1];
++
++static struct ctl_table dn_skeleton[] = {
++      {
++              .procname = "conf",
++              .mode = 0555,
++              .child = empty,
++      },
++      { }
++};
++
++void dn_register_sysctl_skeleton(void)
++{
++      dn_skeleton_table_header = register_sysctl_paths(dn_path, dn_skeleton);
++}
++
++void dn_unregister_sysctl_skeleton(void)
++{
++      unregister_sysctl_table(dn_skeleton_table_header);
++}
++
+ void dn_register_sysctl(void)
+ {
+       dn_table_header = register_sysctl_paths(dn_path, dn_table);
+@@ -367,6 +389,12 @@ void dn_unregister_sysctl(void)
+ }
+ #else  /* CONFIG_SYSCTL */
++void dn_register_sysctl_skeleton(void)
++{
++}
++void dn_unregister_sysctl_skeleton(void)
++{
++}
+ void dn_unregister_sysctl(void)
+ {
+ }
diff --git a/queue-3.0/dmi_scan-fix-missing-check-for-_dmi_-signature-in-smbios_present.patch b/queue-3.0/dmi_scan-fix-missing-check-for-_dmi_-signature-in-smbios_present.patch
new file mode 100644 (file)
index 0000000..1ef4c6b
--- /dev/null
@@ -0,0 +1,53 @@
+From a40e7cf8f06b4e322ba902e4e9f6a6b0c2daa907 Mon Sep 17 00:00:00 2001
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Fri, 8 Mar 2013 12:43:32 -0800
+Subject: dmi_scan: fix missing check for _DMI_ signature in smbios_present()
+
+From: Ben Hutchings <ben@decadent.org.uk>
+
+commit a40e7cf8f06b4e322ba902e4e9f6a6b0c2daa907 upstream.
+
+Commit 9f9c9cbb6057 ("drivers/firmware/dmi_scan.c: fetch dmi version
+from SMBIOS if it exists") hoisted the check for "_DMI_" into
+dmi_scan_machine(), which means that we don't bother to check for
+"_DMI_" at offset 16 in an SMBIOS entry.  smbios_present() may also call
+dmi_present() for an address where we found "_SM_", if it failed further
+validation.
+
+Check for "_DMI_" in smbios_present() before calling dmi_present().
+
+[akpm@linux-foundation.org: fix build]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+Reported-by: Tim McGrath <tmhikaru@gmail.com>
+Tested-by: Tim Mcgrath <tmhikaru@gmail.com>
+Cc: Zhenzhong Duan <zhenzhong.duan@oracle.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/firmware/dmi_scan.c |    5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+--- a/drivers/firmware/dmi_scan.c
++++ b/drivers/firmware/dmi_scan.c
+@@ -442,7 +442,6 @@ static int __init dmi_present(const char
+ static int __init smbios_present(const char __iomem *p)
+ {
+       u8 buf[32];
+-      int offset = 0;
+       memcpy_fromio(buf, p, 32);
+       if ((buf[5] < 32) && dmi_checksum(buf, buf[5])) {
+@@ -461,9 +460,9 @@ static int __init smbios_present(const c
+                       dmi_ver = 0x0206;
+                       break;
+               }
+-              offset = 16;
++              return memcmp(p + 16, "_DMI_", 5) || dmi_present(p + 16);
+       }
+-      return dmi_present(buf + offset);
++      return 1;
+ }
+ void __init dmi_scan_machine(void)
index 8bb49a328bf22bfd99eb037882a0d26c7c85137a..ded3b080afad03914d8293fe0acd40a3fcfeea68 100644 (file)
@@ -17,3 +17,5 @@ keys-fix-race-with-concurrent-install_user_keyrings.patch
 vfs-fix-pipe-counter-breakage.patch
 fix-memory-leak-in-cpufreq-stats.patch
 ftrace-update-the-kconfig-for-dynamic_ftrace.patch
+decnet-fix-disappearing-sysctl-entries.patch
+dmi_scan-fix-missing-check-for-_dmi_-signature-in-smbios_present.patch