From 7a13889372df953c05b448f388c2d577bf02c8fa Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 10 Apr 2012 12:01:37 -0700 Subject: [PATCH] 3.0-stable patches added patches: mmc-atmel-mci-correct-data-timeout-computation.patch modpost-fix-modpost-license-checking-of-vmlinux.o.patch modpost-fix-modpost-s-license-checking-v3.patch sysctl-fix-write-access-to-dmesg_restrict-kptr_restrict.patch --- ...mci-correct-data-timeout-computation.patch | 40 ++++++++++ ...odpost-license-checking-of-vmlinux.o.patch | 70 +++++++++++++++++ ...st-fix-modpost-s-license-checking-v3.patch | 76 +++++++++++++++++++ queue-3.0/series | 4 + ...cess-to-dmesg_restrict-kptr_restrict.patch | 69 +++++++++++++++++ 5 files changed, 259 insertions(+) create mode 100644 queue-3.0/mmc-atmel-mci-correct-data-timeout-computation.patch create mode 100644 queue-3.0/modpost-fix-modpost-license-checking-of-vmlinux.o.patch create mode 100644 queue-3.0/modpost-fix-modpost-s-license-checking-v3.patch create mode 100644 queue-3.0/sysctl-fix-write-access-to-dmesg_restrict-kptr_restrict.patch diff --git a/queue-3.0/mmc-atmel-mci-correct-data-timeout-computation.patch b/queue-3.0/mmc-atmel-mci-correct-data-timeout-computation.patch new file mode 100644 index 00000000000..f4df2edf1e3 --- /dev/null +++ b/queue-3.0/mmc-atmel-mci-correct-data-timeout-computation.patch @@ -0,0 +1,40 @@ +From 66292ad92c6d3f2f1c137a1c826b331ca8595dfd Mon Sep 17 00:00:00 2001 +From: Ludovic Desroches +Date: Wed, 28 Mar 2012 12:28:33 +0200 +Subject: mmc: atmel-mci: correct data timeout computation + +From: Ludovic Desroches + +commit 66292ad92c6d3f2f1c137a1c826b331ca8595dfd upstream. + +The HSMCI operates at a rate of up to Master Clock divided by two. +Moreover previous calculation can cause overflows and so wrong +timeouts. + +Signed-off-by: Ludovic Desroches +Acked-by: Nicolas Ferre +Signed-off-by: Chris Ball +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/mmc/host/atmel-mci.c | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +--- a/drivers/mmc/host/atmel-mci.c ++++ b/drivers/mmc/host/atmel-mci.c +@@ -468,7 +468,14 @@ err: + static inline unsigned int ns_to_clocks(struct atmel_mci *host, + unsigned int ns) + { +- return (ns * (host->bus_hz / 1000000) + 999) / 1000; ++ /* ++ * It is easier here to use us instead of ns for the timeout, ++ * it prevents from overflows during calculation. ++ */ ++ unsigned int us = DIV_ROUND_UP(ns, 1000); ++ ++ /* Maximum clock frequency is host->bus_hz/2 */ ++ return us * (DIV_ROUND_UP(host->bus_hz, 2000000)); + } + + static void atmci_set_timeout(struct atmel_mci *host, diff --git a/queue-3.0/modpost-fix-modpost-license-checking-of-vmlinux.o.patch b/queue-3.0/modpost-fix-modpost-license-checking-of-vmlinux.o.patch new file mode 100644 index 00000000000..2d6b688f554 --- /dev/null +++ b/queue-3.0/modpost-fix-modpost-license-checking-of-vmlinux.o.patch @@ -0,0 +1,70 @@ +From 258f742635360175564e9470eb060ff4d4b984e7 Mon Sep 17 00:00:00 2001 +From: Frank Rowand +Date: Mon, 9 Apr 2012 17:59:03 -0700 +Subject: modpost: Fix modpost license checking of vmlinux.o + +From: Frank Rowand + +commit 258f742635360175564e9470eb060ff4d4b984e7 upstream. + +Commit f02e8a6596b7 ("module: Sort exported symbols") sorts symbols +placing each of them in its own elf section. This sorting and merging +into the canonical sections are done by the linker. + +Unfortunately modpost to generate Module.symvers file parses vmlinux.o +(which is not linked yet) and all modules object files (which aren't +linked yet). These aren't sanitized by the linker yet. That breaks +modpost that can't detect license properly for modules. + +This patch makes modpost aware of the new exported symbols structure. + +[ This above is a slightly corrected version of the explanation of the + problem, copied from commit 62a2635610db ("modpost: Fix modpost's + license checking V3"). That commit fixed the problem for module + object files, but not for vmlinux.o. This patch fixes modpost for + vmlinux.o. ] + +Signed-off-by: Frank Rowand +Signed-off-by: Alessio Igor Bogani +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + scripts/mod/modpost.c | 7 +++++-- + scripts/mod/modpost.h | 1 + + 2 files changed, 6 insertions(+), 2 deletions(-) + +--- a/scripts/mod/modpost.c ++++ b/scripts/mod/modpost.c +@@ -132,8 +132,10 @@ static struct module *new_module(char *m + /* strip trailing .o */ + s = strrchr(p, '.'); + if (s != NULL) +- if (strcmp(s, ".o") == 0) ++ if (strcmp(s, ".o") == 0) { + *s = '\0'; ++ mod->is_dot_o = 1; ++ } + + /* add to list */ + mod->name = p; +@@ -587,7 +589,8 @@ static void handle_modversions(struct mo + unsigned int crc; + enum export export; + +- if (!is_vmlinux(mod->name) && strncmp(symname, "__ksymtab", 9) == 0) ++ if ((!is_vmlinux(mod->name) || mod->is_dot_o) && ++ strncmp(symname, "__ksymtab", 9) == 0) + export = export_from_secname(info, get_secindex(info, sym)); + else + export = export_from_sec(info, get_secindex(info, sym)); +--- a/scripts/mod/modpost.h ++++ b/scripts/mod/modpost.h +@@ -113,6 +113,7 @@ struct module { + int has_cleanup; + struct buffer dev_table_buf; + char srcversion[25]; ++ int is_dot_o; + }; + + struct elf_info { diff --git a/queue-3.0/modpost-fix-modpost-s-license-checking-v3.patch b/queue-3.0/modpost-fix-modpost-s-license-checking-v3.patch new file mode 100644 index 00000000000..c7026563895 --- /dev/null +++ b/queue-3.0/modpost-fix-modpost-s-license-checking-v3.patch @@ -0,0 +1,76 @@ +From 62a2635610dbc83c5e8d724e00941eee4d18c186 Mon Sep 17 00:00:00 2001 +From: Alessio Igor Bogani +Date: Thu, 14 Jul 2011 08:51:16 +0200 +Subject: modpost: Fix modpost's license checking V3 + +From: Alessio Igor Bogani + +commit 62a2635610dbc83c5e8d724e00941eee4d18c186 upstream. + +The commit f02e8a6 sorts symbols placing each of them in its own elf section. +The sorting and merging into the canonical sections are done by the linker. +Unfortunately modpost to generate Module.symvers file parses vmlinux +(already linked) and all modules object files (which aren't linked yet). +These aren't sanitized by the linker yet. That breaks modpost that can't +detect license properly for modules. This patch makes modpost aware of +the new exported symbols structure. + +Thanks to Arnaud Lacombe and Anders Kaseorg + for providing useful suggestions about code. + +This work was supported by a hardware donation from the CE Linux Forum. + +Reported-by: Jan Beulich +Signed-off-by: Alessio Igor Bogani +Signed-off-by: Rusty Russell +Signed-off-by: Greg Kroah-Hartman + +--- + scripts/mod/modpost.c | 29 ++++++++++++++++++++++++++++- + 1 file changed, 28 insertions(+), 1 deletion(-) + +--- a/scripts/mod/modpost.c ++++ b/scripts/mod/modpost.c +@@ -254,6 +254,28 @@ static enum export export_no(const char + return export_unknown; + } + ++static const char *sec_name(struct elf_info *elf, int secindex); ++ ++#define strstarts(str, prefix) (strncmp(str, prefix, strlen(prefix)) == 0) ++ ++static enum export export_from_secname(struct elf_info *elf, unsigned int sec) ++{ ++ const char *secname = sec_name(elf, sec); ++ ++ if (strstarts(secname, "___ksymtab+")) ++ return export_plain; ++ else if (strstarts(secname, "___ksymtab_unused+")) ++ return export_unused; ++ else if (strstarts(secname, "___ksymtab_gpl+")) ++ return export_gpl; ++ else if (strstarts(secname, "___ksymtab_unused_gpl+")) ++ return export_unused_gpl; ++ else if (strstarts(secname, "___ksymtab_gpl_future+")) ++ return export_gpl_future; ++ else ++ return export_unknown; ++} ++ + static enum export export_from_sec(struct elf_info *elf, unsigned int sec) + { + if (sec == elf->export_sec) +@@ -563,7 +585,12 @@ static void handle_modversions(struct mo + Elf_Sym *sym, const char *symname) + { + unsigned int crc; +- enum export export = export_from_sec(info, get_secindex(info, sym)); ++ enum export export; ++ ++ if (!is_vmlinux(mod->name) && strncmp(symname, "__ksymtab", 9) == 0) ++ export = export_from_secname(info, get_secindex(info, sym)); ++ else ++ export = export_from_sec(info, get_secindex(info, sym)); + + switch (sym->st_shndx) { + case SHN_COMMON: diff --git a/queue-3.0/series b/queue-3.0/series index e44e01e6ef1..99231da1688 100644 --- a/queue-3.0/series +++ b/queue-3.0/series @@ -24,3 +24,7 @@ kgdbts-fix-kernel-oops-with-config_debug_rodata.patch kgdbts-1-of-2-fix-single-step-awareness-to-work-correctly-with-smp.patch kgdbts-2-of-2-fix-single-step-awareness-to-work-correctly-with-smp.patch x86-kgdb-fix-debug_rodata-limitation-using-text_poke.patch +mmc-atmel-mci-correct-data-timeout-computation.patch +sysctl-fix-write-access-to-dmesg_restrict-kptr_restrict.patch +modpost-fix-modpost-s-license-checking-v3.patch +modpost-fix-modpost-license-checking-of-vmlinux.o.patch diff --git a/queue-3.0/sysctl-fix-write-access-to-dmesg_restrict-kptr_restrict.patch b/queue-3.0/sysctl-fix-write-access-to-dmesg_restrict-kptr_restrict.patch new file mode 100644 index 00000000000..d47ec3e3718 --- /dev/null +++ b/queue-3.0/sysctl-fix-write-access-to-dmesg_restrict-kptr_restrict.patch @@ -0,0 +1,69 @@ +From 620f6e8e855d6d447688a5f67a4e176944a084e8 Mon Sep 17 00:00:00 2001 +From: Kees Cook +Date: Wed, 4 Apr 2012 11:40:19 -0700 +Subject: sysctl: fix write access to dmesg_restrict/kptr_restrict + +From: Kees Cook + +commit 620f6e8e855d6d447688a5f67a4e176944a084e8 upstream. + +Commit bfdc0b4 adds code to restrict access to dmesg_restrict, +however, it incorrectly alters kptr_restrict rather than +dmesg_restrict. + +The original patch from Richard Weinberger +(https://lkml.org/lkml/2011/3/14/362) alters dmesg_restrict as +expected, and so the patch seems to have been misapplied. + +This adds the CAP_SYS_ADMIN check to both dmesg_restrict and +kptr_restrict, since both are sensitive. + +Reported-by: Phillip Lougher +Signed-off-by: Kees Cook +Acked-by: Serge Hallyn +Acked-by: Richard Weinberger +Signed-off-by: James Morris +Signed-off-by: Greg Kroah-Hartman + +--- + kernel/sysctl.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +--- a/kernel/sysctl.c ++++ b/kernel/sysctl.c +@@ -172,7 +172,7 @@ static int proc_taint(struct ctl_table * + #endif + + #ifdef CONFIG_PRINTK +-static int proc_dmesg_restrict(struct ctl_table *table, int write, ++static int proc_dointvec_minmax_sysadmin(struct ctl_table *table, int write, + void __user *buffer, size_t *lenp, loff_t *ppos); + #endif + +@@ -709,7 +709,7 @@ static struct ctl_table kern_table[] = { + .data = &dmesg_restrict, + .maxlen = sizeof(int), + .mode = 0644, +- .proc_handler = proc_dointvec_minmax, ++ .proc_handler = proc_dointvec_minmax_sysadmin, + .extra1 = &zero, + .extra2 = &one, + }, +@@ -718,7 +718,7 @@ static struct ctl_table kern_table[] = { + .data = &kptr_restrict, + .maxlen = sizeof(int), + .mode = 0644, +- .proc_handler = proc_dmesg_restrict, ++ .proc_handler = proc_dointvec_minmax_sysadmin, + .extra1 = &zero, + .extra2 = &two, + }, +@@ -2416,7 +2416,7 @@ static int proc_taint(struct ctl_table * + } + + #ifdef CONFIG_PRINTK +-static int proc_dmesg_restrict(struct ctl_table *table, int write, ++static int proc_dointvec_minmax_sysadmin(struct ctl_table *table, int write, + void __user *buffer, size_t *lenp, loff_t *ppos) + { + if (write && !capable(CAP_SYS_ADMIN)) -- 2.47.3