From 5303115081e923df0c9da95b510f1424cf7a4db8 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 12 Mar 2013 14:55:28 -0700 Subject: [PATCH] 3.0-stable patches added patches: decnet-fix-disappearing-sysctl-entries.patch dmi_scan-fix-missing-check-for-_dmi_-signature-in-smbios_present.patch --- ...cnet-fix-disappearing-sysctl-entries.patch | 115 ++++++++++++++++++ ...or-_dmi_-signature-in-smbios_present.patch | 53 ++++++++ queue-3.0/series | 2 + 3 files changed, 170 insertions(+) create mode 100644 queue-3.0/decnet-fix-disappearing-sysctl-entries.patch create mode 100644 queue-3.0/dmi_scan-fix-missing-check-for-_dmi_-signature-in-smbios_present.patch 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 index 00000000000..657217ef4e7 --- /dev/null +++ b/queue-3.0/decnet-fix-disappearing-sysctl-entries.patch @@ -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 +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 +Signed-off-by: "Eric W. Biederman" +Acked-by: David Miller +Signed-off-by: Greg Kroah-Hartman +--- + 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 index 00000000000..1ef4c6be883 --- /dev/null +++ b/queue-3.0/dmi_scan-fix-missing-check-for-_dmi_-signature-in-smbios_present.patch @@ -0,0 +1,53 @@ +From a40e7cf8f06b4e322ba902e4e9f6a6b0c2daa907 Mon Sep 17 00:00:00 2001 +From: Ben Hutchings +Date: Fri, 8 Mar 2013 12:43:32 -0800 +Subject: dmi_scan: fix missing check for _DMI_ signature in smbios_present() + +From: Ben Hutchings + +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 +Reported-by: Tim McGrath +Tested-by: Tim Mcgrath +Cc: Zhenzhong Duan +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + 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) diff --git a/queue-3.0/series b/queue-3.0/series index 8bb49a328bf..ded3b080afa 100644 --- a/queue-3.0/series +++ b/queue-3.0/series @@ -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 -- 2.47.3