diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Kconfig | 2 | ||||
-rw-r--r-- | lib/Kconfig.debug | 122 | ||||
-rw-r--r-- | lib/Kconfig.kgdb | 3 | ||||
-rw-r--r-- | lib/devres.c | 58 | ||||
-rw-r--r-- | lib/digsig.c | 41 | ||||
-rw-r--r-- | lib/dynamic_debug.c | 165 | ||||
-rw-r--r-- | lib/hexdump.c | 4 | ||||
-rw-r--r-- | lib/mpi/mpi-internal.h | 4 | ||||
-rw-r--r-- | lib/mpi/mpicoder.c | 8 | ||||
-rw-r--r-- | lib/parser.c | 6 | ||||
-rw-r--r-- | lib/swiotlb.c | 47 | ||||
-rw-r--r-- | lib/vsprintf.c | 7 | ||||
-rw-r--r-- | lib/xz/Kconfig | 34 |
13 files changed, 284 insertions, 217 deletions
diff --git a/lib/Kconfig b/lib/Kconfig index 75cdb77fa49d..3958dc4389f9 100644 --- a/lib/Kconfig +++ b/lib/Kconfig | |||
@@ -322,7 +322,7 @@ config CPUMASK_OFFSTACK | |||
322 | 322 | ||
323 | config DISABLE_OBSOLETE_CPUMASK_FUNCTIONS | 323 | config DISABLE_OBSOLETE_CPUMASK_FUNCTIONS |
324 | bool "Disable obsolete cpumask functions" if DEBUG_PER_CPU_MAPS | 324 | bool "Disable obsolete cpumask functions" if DEBUG_PER_CPU_MAPS |
325 | depends on EXPERIMENTAL && BROKEN | 325 | depends on BROKEN |
326 | 326 | ||
327 | config CPU_RMAP | 327 | config CPU_RMAP |
328 | bool | 328 | bool |
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index 67604e599384..e4a7f808fa06 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug | |||
@@ -243,8 +243,7 @@ config BOOTPARAM_SOFTLOCKUP_PANIC_VALUE | |||
243 | default 1 if BOOTPARAM_SOFTLOCKUP_PANIC | 243 | default 1 if BOOTPARAM_SOFTLOCKUP_PANIC |
244 | 244 | ||
245 | config PANIC_ON_OOPS | 245 | config PANIC_ON_OOPS |
246 | bool "Panic on Oops" if EXPERT | 246 | bool "Panic on Oops" |
247 | default n | ||
248 | help | 247 | help |
249 | Say Y here to enable the kernel to panic when it oopses. This | 248 | Say Y here to enable the kernel to panic when it oopses. This |
250 | has the same effect as setting oops=panic on the kernel command | 249 | has the same effect as setting oops=panic on the kernel command |
@@ -455,7 +454,7 @@ config HAVE_DEBUG_KMEMLEAK | |||
455 | 454 | ||
456 | config DEBUG_KMEMLEAK | 455 | config DEBUG_KMEMLEAK |
457 | bool "Kernel memory leak detector" | 456 | bool "Kernel memory leak detector" |
458 | depends on DEBUG_KERNEL && EXPERIMENTAL && HAVE_DEBUG_KMEMLEAK | 457 | depends on DEBUG_KERNEL && HAVE_DEBUG_KMEMLEAK |
459 | select DEBUG_FS | 458 | select DEBUG_FS |
460 | select STACKTRACE if STACKTRACE_SUPPORT | 459 | select STACKTRACE if STACKTRACE_SUPPORT |
461 | select KALLSYMS | 460 | select KALLSYMS |
@@ -605,61 +604,6 @@ config PROVE_LOCKING | |||
605 | 604 | ||
606 | For more details, see Documentation/lockdep-design.txt. | 605 | For more details, see Documentation/lockdep-design.txt. |
607 | 606 | ||
608 | config PROVE_RCU | ||
609 | bool "RCU debugging: prove RCU correctness" | ||
610 | depends on PROVE_LOCKING | ||
611 | default n | ||
612 | help | ||
613 | This feature enables lockdep extensions that check for correct | ||
614 | use of RCU APIs. This is currently under development. Say Y | ||
615 | if you want to debug RCU usage or help work on the PROVE_RCU | ||
616 | feature. | ||
617 | |||
618 | Say N if you are unsure. | ||
619 | |||
620 | config PROVE_RCU_REPEATEDLY | ||
621 | bool "RCU debugging: don't disable PROVE_RCU on first splat" | ||
622 | depends on PROVE_RCU | ||
623 | default n | ||
624 | help | ||
625 | By itself, PROVE_RCU will disable checking upon issuing the | ||
626 | first warning (or "splat"). This feature prevents such | ||
627 | disabling, allowing multiple RCU-lockdep warnings to be printed | ||
628 | on a single reboot. | ||
629 | |||
630 | Say Y to allow multiple RCU-lockdep warnings per boot. | ||
631 | |||
632 | Say N if you are unsure. | ||
633 | |||
634 | config PROVE_RCU_DELAY | ||
635 | bool "RCU debugging: preemptible RCU race provocation" | ||
636 | depends on DEBUG_KERNEL && PREEMPT_RCU | ||
637 | default n | ||
638 | help | ||
639 | There is a class of races that involve an unlikely preemption | ||
640 | of __rcu_read_unlock() just after ->rcu_read_lock_nesting has | ||
641 | been set to INT_MIN. This feature inserts a delay at that | ||
642 | point to increase the probability of these races. | ||
643 | |||
644 | Say Y to increase probability of preemption of __rcu_read_unlock(). | ||
645 | |||
646 | Say N if you are unsure. | ||
647 | |||
648 | config SPARSE_RCU_POINTER | ||
649 | bool "RCU debugging: sparse-based checks for pointer usage" | ||
650 | default n | ||
651 | help | ||
652 | This feature enables the __rcu sparse annotation for | ||
653 | RCU-protected pointers. This annotation will cause sparse | ||
654 | to flag any non-RCU used of annotated pointers. This can be | ||
655 | helpful when debugging RCU usage. Please note that this feature | ||
656 | is not intended to enforce code cleanliness; it is instead merely | ||
657 | a debugging aid. | ||
658 | |||
659 | Say Y to make sparse flag questionable use of RCU-protected pointers | ||
660 | |||
661 | Say N if you are unsure. | ||
662 | |||
663 | config LOCKDEP | 607 | config LOCKDEP |
664 | bool | 608 | bool |
665 | depends on DEBUG_KERNEL && TRACE_IRQFLAGS_SUPPORT && STACKTRACE_SUPPORT && LOCKDEP_SUPPORT | 609 | depends on DEBUG_KERNEL && TRACE_IRQFLAGS_SUPPORT && STACKTRACE_SUPPORT && LOCKDEP_SUPPORT |
@@ -937,6 +881,63 @@ config BOOT_PRINTK_DELAY | |||
937 | BOOT_PRINTK_DELAY also may cause LOCKUP_DETECTOR to detect | 881 | BOOT_PRINTK_DELAY also may cause LOCKUP_DETECTOR to detect |
938 | what it believes to be lockup conditions. | 882 | what it believes to be lockup conditions. |
939 | 883 | ||
884 | menu "RCU Debugging" | ||
885 | |||
886 | config PROVE_RCU | ||
887 | bool "RCU debugging: prove RCU correctness" | ||
888 | depends on PROVE_LOCKING | ||
889 | default n | ||
890 | help | ||
891 | This feature enables lockdep extensions that check for correct | ||
892 | use of RCU APIs. This is currently under development. Say Y | ||
893 | if you want to debug RCU usage or help work on the PROVE_RCU | ||
894 | feature. | ||
895 | |||
896 | Say N if you are unsure. | ||
897 | |||
898 | config PROVE_RCU_REPEATEDLY | ||
899 | bool "RCU debugging: don't disable PROVE_RCU on first splat" | ||
900 | depends on PROVE_RCU | ||
901 | default n | ||
902 | help | ||
903 | By itself, PROVE_RCU will disable checking upon issuing the | ||
904 | first warning (or "splat"). This feature prevents such | ||
905 | disabling, allowing multiple RCU-lockdep warnings to be printed | ||
906 | on a single reboot. | ||
907 | |||
908 | Say Y to allow multiple RCU-lockdep warnings per boot. | ||
909 | |||
910 | Say N if you are unsure. | ||
911 | |||
912 | config PROVE_RCU_DELAY | ||
913 | bool "RCU debugging: preemptible RCU race provocation" | ||
914 | depends on DEBUG_KERNEL && PREEMPT_RCU | ||
915 | default n | ||
916 | help | ||
917 | There is a class of races that involve an unlikely preemption | ||
918 | of __rcu_read_unlock() just after ->rcu_read_lock_nesting has | ||
919 | been set to INT_MIN. This feature inserts a delay at that | ||
920 | point to increase the probability of these races. | ||
921 | |||
922 | Say Y to increase probability of preemption of __rcu_read_unlock(). | ||
923 | |||
924 | Say N if you are unsure. | ||
925 | |||
926 | config SPARSE_RCU_POINTER | ||
927 | bool "RCU debugging: sparse-based checks for pointer usage" | ||
928 | default n | ||
929 | help | ||
930 | This feature enables the __rcu sparse annotation for | ||
931 | RCU-protected pointers. This annotation will cause sparse | ||
932 | to flag any non-RCU used of annotated pointers. This can be | ||
933 | helpful when debugging RCU usage. Please note that this feature | ||
934 | is not intended to enforce code cleanliness; it is instead merely | ||
935 | a debugging aid. | ||
936 | |||
937 | Say Y to make sparse flag questionable use of RCU-protected pointers | ||
938 | |||
939 | Say N if you are unsure. | ||
940 | |||
940 | config RCU_TORTURE_TEST | 941 | config RCU_TORTURE_TEST |
941 | tristate "torture tests for RCU" | 942 | tristate "torture tests for RCU" |
942 | depends on DEBUG_KERNEL | 943 | depends on DEBUG_KERNEL |
@@ -970,7 +971,7 @@ config RCU_TORTURE_TEST_RUNNABLE | |||
970 | 971 | ||
971 | config RCU_CPU_STALL_TIMEOUT | 972 | config RCU_CPU_STALL_TIMEOUT |
972 | int "RCU CPU stall timeout in seconds" | 973 | int "RCU CPU stall timeout in seconds" |
973 | depends on TREE_RCU || TREE_PREEMPT_RCU | 974 | depends on RCU_STALL_COMMON |
974 | range 3 300 | 975 | range 3 300 |
975 | default 21 | 976 | default 21 |
976 | help | 977 | help |
@@ -1008,6 +1009,7 @@ config RCU_CPU_STALL_INFO | |||
1008 | config RCU_TRACE | 1009 | config RCU_TRACE |
1009 | bool "Enable tracing for RCU" | 1010 | bool "Enable tracing for RCU" |
1010 | depends on DEBUG_KERNEL | 1011 | depends on DEBUG_KERNEL |
1012 | select TRACE_CLOCK | ||
1011 | help | 1013 | help |
1012 | This option provides tracing in RCU which presents stats | 1014 | This option provides tracing in RCU which presents stats |
1013 | in debugfs for debugging RCU implementation. | 1015 | in debugfs for debugging RCU implementation. |
@@ -1015,6 +1017,8 @@ config RCU_TRACE | |||
1015 | Say Y here if you want to enable RCU tracing | 1017 | Say Y here if you want to enable RCU tracing |
1016 | Say N if you are unsure. | 1018 | Say N if you are unsure. |
1017 | 1019 | ||
1020 | endmenu # "RCU Debugging" | ||
1021 | |||
1018 | config KPROBES_SANITY_TEST | 1022 | config KPROBES_SANITY_TEST |
1019 | bool "Kprobes sanity tests" | 1023 | bool "Kprobes sanity tests" |
1020 | depends on DEBUG_KERNEL | 1024 | depends on DEBUG_KERNEL |
diff --git a/lib/Kconfig.kgdb b/lib/Kconfig.kgdb index 43cb93fa2651..dbb58ae1b8e0 100644 --- a/lib/Kconfig.kgdb +++ b/lib/Kconfig.kgdb | |||
@@ -5,7 +5,7 @@ config HAVE_ARCH_KGDB | |||
5 | menuconfig KGDB | 5 | menuconfig KGDB |
6 | bool "KGDB: kernel debugger" | 6 | bool "KGDB: kernel debugger" |
7 | depends on HAVE_ARCH_KGDB | 7 | depends on HAVE_ARCH_KGDB |
8 | depends on DEBUG_KERNEL && EXPERIMENTAL | 8 | depends on DEBUG_KERNEL |
9 | help | 9 | help |
10 | If you say Y here, it will be possible to remotely debug the | 10 | If you say Y here, it will be possible to remotely debug the |
11 | kernel using gdb. It is recommended but not required, that | 11 | kernel using gdb. It is recommended but not required, that |
@@ -22,6 +22,7 @@ config KGDB_SERIAL_CONSOLE | |||
22 | tristate "KGDB: use kgdb over the serial console" | 22 | tristate "KGDB: use kgdb over the serial console" |
23 | select CONSOLE_POLL | 23 | select CONSOLE_POLL |
24 | select MAGIC_SYSRQ | 24 | select MAGIC_SYSRQ |
25 | depends on TTY | ||
25 | default y | 26 | default y |
26 | help | 27 | help |
27 | Share a serial console with kgdb. Sysrq-g must be used | 28 | Share a serial console with kgdb. Sysrq-g must be used |
diff --git a/lib/devres.c b/lib/devres.c index 80b9c76d436a..88ad75952a76 100644 --- a/lib/devres.c +++ b/lib/devres.c | |||
@@ -1,3 +1,4 @@ | |||
1 | #include <linux/err.h> | ||
1 | #include <linux/pci.h> | 2 | #include <linux/pci.h> |
2 | #include <linux/io.h> | 3 | #include <linux/io.h> |
3 | #include <linux/gfp.h> | 4 | #include <linux/gfp.h> |
@@ -86,22 +87,24 @@ void devm_iounmap(struct device *dev, void __iomem *addr) | |||
86 | EXPORT_SYMBOL(devm_iounmap); | 87 | EXPORT_SYMBOL(devm_iounmap); |
87 | 88 | ||
88 | /** | 89 | /** |
89 | * devm_request_and_ioremap() - Check, request region, and ioremap resource | 90 | * devm_ioremap_resource() - check, request region, and ioremap resource |
90 | * @dev: Generic device to handle the resource for | 91 | * @dev: generic device to handle the resource for |
91 | * @res: resource to be handled | 92 | * @res: resource to be handled |
92 | * | 93 | * |
93 | * Takes all necessary steps to ioremap a mem resource. Uses managed device, so | 94 | * Checks that a resource is a valid memory region, requests the memory region |
94 | * everything is undone on driver detach. Checks arguments, so you can feed | 95 | * and ioremaps it either as cacheable or as non-cacheable memory depending on |
95 | * it the result from e.g. platform_get_resource() directly. Returns the | 96 | * the resource's flags. All operations are managed and will be undone on |
96 | * remapped pointer or NULL on error. Usage example: | 97 | * driver detach. |
98 | * | ||
99 | * Returns a pointer to the remapped memory or an ERR_PTR() encoded error code | ||
100 | * on failure. Usage example: | ||
97 | * | 101 | * |
98 | * res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 102 | * res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
99 | * base = devm_request_and_ioremap(&pdev->dev, res); | 103 | * base = devm_ioremap_resource(&pdev->dev, res); |
100 | * if (!base) | 104 | * if (IS_ERR(base)) |
101 | * return -EADDRNOTAVAIL; | 105 | * return PTR_ERR(base); |
102 | */ | 106 | */ |
103 | void __iomem *devm_request_and_ioremap(struct device *dev, | 107 | void __iomem *devm_ioremap_resource(struct device *dev, struct resource *res) |
104 | struct resource *res) | ||
105 | { | 108 | { |
106 | resource_size_t size; | 109 | resource_size_t size; |
107 | const char *name; | 110 | const char *name; |
@@ -111,7 +114,7 @@ void __iomem *devm_request_and_ioremap(struct device *dev, | |||
111 | 114 | ||
112 | if (!res || resource_type(res) != IORESOURCE_MEM) { | 115 | if (!res || resource_type(res) != IORESOURCE_MEM) { |
113 | dev_err(dev, "invalid resource\n"); | 116 | dev_err(dev, "invalid resource\n"); |
114 | return NULL; | 117 | return ERR_PTR(-EINVAL); |
115 | } | 118 | } |
116 | 119 | ||
117 | size = resource_size(res); | 120 | size = resource_size(res); |
@@ -119,7 +122,7 @@ void __iomem *devm_request_and_ioremap(struct device *dev, | |||
119 | 122 | ||
120 | if (!devm_request_mem_region(dev, res->start, size, name)) { | 123 | if (!devm_request_mem_region(dev, res->start, size, name)) { |
121 | dev_err(dev, "can't request region for resource %pR\n", res); | 124 | dev_err(dev, "can't request region for resource %pR\n", res); |
122 | return NULL; | 125 | return ERR_PTR(-EBUSY); |
123 | } | 126 | } |
124 | 127 | ||
125 | if (res->flags & IORESOURCE_CACHEABLE) | 128 | if (res->flags & IORESOURCE_CACHEABLE) |
@@ -130,10 +133,39 @@ void __iomem *devm_request_and_ioremap(struct device *dev, | |||
130 | if (!dest_ptr) { | 133 | if (!dest_ptr) { |
131 | dev_err(dev, "ioremap failed for resource %pR\n", res); | 134 | dev_err(dev, "ioremap failed for resource %pR\n", res); |
132 | devm_release_mem_region(dev, res->start, size); | 135 | devm_release_mem_region(dev, res->start, size); |
136 | dest_ptr = ERR_PTR(-ENOMEM); | ||
133 | } | 137 | } |
134 | 138 | ||
135 | return dest_ptr; | 139 | return dest_ptr; |
136 | } | 140 | } |
141 | EXPORT_SYMBOL(devm_ioremap_resource); | ||
142 | |||
143 | /** | ||
144 | * devm_request_and_ioremap() - Check, request region, and ioremap resource | ||
145 | * @dev: Generic device to handle the resource for | ||
146 | * @res: resource to be handled | ||
147 | * | ||
148 | * Takes all necessary steps to ioremap a mem resource. Uses managed device, so | ||
149 | * everything is undone on driver detach. Checks arguments, so you can feed | ||
150 | * it the result from e.g. platform_get_resource() directly. Returns the | ||
151 | * remapped pointer or NULL on error. Usage example: | ||
152 | * | ||
153 | * res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | ||
154 | * base = devm_request_and_ioremap(&pdev->dev, res); | ||
155 | * if (!base) | ||
156 | * return -EADDRNOTAVAIL; | ||
157 | */ | ||
158 | void __iomem *devm_request_and_ioremap(struct device *device, | ||
159 | struct resource *res) | ||
160 | { | ||
161 | void __iomem *dest_ptr; | ||
162 | |||
163 | dest_ptr = devm_ioremap_resource(device, res); | ||
164 | if (IS_ERR(dest_ptr)) | ||
165 | return NULL; | ||
166 | |||
167 | return dest_ptr; | ||
168 | } | ||
137 | EXPORT_SYMBOL(devm_request_and_ioremap); | 169 | EXPORT_SYMBOL(devm_request_and_ioremap); |
138 | 170 | ||
139 | #ifdef CONFIG_HAS_IOPORT | 171 | #ifdef CONFIG_HAS_IOPORT |
diff --git a/lib/digsig.c b/lib/digsig.c index dc2be7ed1765..2f31e6a45f0a 100644 --- a/lib/digsig.c +++ b/lib/digsig.c | |||
@@ -30,11 +30,10 @@ | |||
30 | 30 | ||
31 | static struct crypto_shash *shash; | 31 | static struct crypto_shash *shash; |
32 | 32 | ||
33 | static int pkcs_1_v1_5_decode_emsa(const unsigned char *msg, | 33 | static const char *pkcs_1_v1_5_decode_emsa(const unsigned char *msg, |
34 | unsigned long msglen, | 34 | unsigned long msglen, |
35 | unsigned long modulus_bitlen, | 35 | unsigned long modulus_bitlen, |
36 | unsigned char *out, | 36 | unsigned long *outlen) |
37 | unsigned long *outlen) | ||
38 | { | 37 | { |
39 | unsigned long modulus_len, ps_len, i; | 38 | unsigned long modulus_len, ps_len, i; |
40 | 39 | ||
@@ -42,11 +41,11 @@ static int pkcs_1_v1_5_decode_emsa(const unsigned char *msg, | |||
42 | 41 | ||
43 | /* test message size */ | 42 | /* test message size */ |
44 | if ((msglen > modulus_len) || (modulus_len < 11)) | 43 | if ((msglen > modulus_len) || (modulus_len < 11)) |
45 | return -EINVAL; | 44 | return NULL; |
46 | 45 | ||
47 | /* separate encoded message */ | 46 | /* separate encoded message */ |
48 | if ((msg[0] != 0x00) || (msg[1] != (unsigned char)1)) | 47 | if (msg[0] != 0x00 || msg[1] != 0x01) |
49 | return -EINVAL; | 48 | return NULL; |
50 | 49 | ||
51 | for (i = 2; i < modulus_len - 1; i++) | 50 | for (i = 2; i < modulus_len - 1; i++) |
52 | if (msg[i] != 0xFF) | 51 | if (msg[i] != 0xFF) |
@@ -56,19 +55,13 @@ static int pkcs_1_v1_5_decode_emsa(const unsigned char *msg, | |||
56 | if (msg[i] != 0) | 55 | if (msg[i] != 0) |
57 | /* There was no octet with hexadecimal value 0x00 | 56 | /* There was no octet with hexadecimal value 0x00 |
58 | to separate ps from m. */ | 57 | to separate ps from m. */ |
59 | return -EINVAL; | 58 | return NULL; |
60 | 59 | ||
61 | ps_len = i - 2; | 60 | ps_len = i - 2; |
62 | 61 | ||
63 | if (*outlen < (msglen - (2 + ps_len + 1))) { | ||
64 | *outlen = msglen - (2 + ps_len + 1); | ||
65 | return -EOVERFLOW; | ||
66 | } | ||
67 | |||
68 | *outlen = (msglen - (2 + ps_len + 1)); | 62 | *outlen = (msglen - (2 + ps_len + 1)); |
69 | memcpy(out, &msg[2 + ps_len + 1], *outlen); | ||
70 | 63 | ||
71 | return 0; | 64 | return msg + 2 + ps_len + 1; |
72 | } | 65 | } |
73 | 66 | ||
74 | /* | 67 | /* |
@@ -83,7 +76,8 @@ static int digsig_verify_rsa(struct key *key, | |||
83 | unsigned long mlen, mblen; | 76 | unsigned long mlen, mblen; |
84 | unsigned nret, l; | 77 | unsigned nret, l; |
85 | int head, i; | 78 | int head, i; |
86 | unsigned char *out1 = NULL, *out2 = NULL; | 79 | unsigned char *out1 = NULL; |
80 | const char *m; | ||
87 | MPI in = NULL, res = NULL, pkey[2]; | 81 | MPI in = NULL, res = NULL, pkey[2]; |
88 | uint8_t *p, *datap, *endp; | 82 | uint8_t *p, *datap, *endp; |
89 | struct user_key_payload *ukp; | 83 | struct user_key_payload *ukp; |
@@ -120,7 +114,7 @@ static int digsig_verify_rsa(struct key *key, | |||
120 | } | 114 | } |
121 | 115 | ||
122 | mblen = mpi_get_nbits(pkey[0]); | 116 | mblen = mpi_get_nbits(pkey[0]); |
123 | mlen = (mblen + 7)/8; | 117 | mlen = DIV_ROUND_UP(mblen, 8); |
124 | 118 | ||
125 | if (mlen == 0) | 119 | if (mlen == 0) |
126 | goto err; | 120 | goto err; |
@@ -129,10 +123,6 @@ static int digsig_verify_rsa(struct key *key, | |||
129 | if (!out1) | 123 | if (!out1) |
130 | goto err; | 124 | goto err; |
131 | 125 | ||
132 | out2 = kzalloc(mlen, GFP_KERNEL); | ||
133 | if (!out2) | ||
134 | goto err; | ||
135 | |||
136 | nret = siglen; | 126 | nret = siglen; |
137 | in = mpi_read_from_buffer(sig, &nret); | 127 | in = mpi_read_from_buffer(sig, &nret); |
138 | if (!in) | 128 | if (!in) |
@@ -164,18 +154,15 @@ static int digsig_verify_rsa(struct key *key, | |||
164 | 154 | ||
165 | kfree(p); | 155 | kfree(p); |
166 | 156 | ||
167 | err = pkcs_1_v1_5_decode_emsa(out1, len, mblen, out2, &len); | 157 | m = pkcs_1_v1_5_decode_emsa(out1, len, mblen, &len); |
168 | if (err) | ||
169 | goto err; | ||
170 | 158 | ||
171 | if (len != hlen || memcmp(out2, h, hlen)) | 159 | if (!m || len != hlen || memcmp(m, h, hlen)) |
172 | err = -EINVAL; | 160 | err = -EINVAL; |
173 | 161 | ||
174 | err: | 162 | err: |
175 | mpi_free(in); | 163 | mpi_free(in); |
176 | mpi_free(res); | 164 | mpi_free(res); |
177 | kfree(out1); | 165 | kfree(out1); |
178 | kfree(out2); | ||
179 | while (--i >= 0) | 166 | while (--i >= 0) |
180 | mpi_free(pkey[i]); | 167 | mpi_free(pkey[i]); |
181 | err1: | 168 | err1: |
diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c index 1db1fc660538..5276b99ca650 100644 --- a/lib/dynamic_debug.c +++ b/lib/dynamic_debug.c | |||
@@ -59,7 +59,7 @@ struct ddebug_iter { | |||
59 | 59 | ||
60 | static DEFINE_MUTEX(ddebug_lock); | 60 | static DEFINE_MUTEX(ddebug_lock); |
61 | static LIST_HEAD(ddebug_tables); | 61 | static LIST_HEAD(ddebug_tables); |
62 | static int verbose = 0; | 62 | static int verbose; |
63 | module_param(verbose, int, 0644); | 63 | module_param(verbose, int, 0644); |
64 | 64 | ||
65 | /* Return the path relative to source root */ | 65 | /* Return the path relative to source root */ |
@@ -100,24 +100,32 @@ static char *ddebug_describe_flags(struct _ddebug *dp, char *buf, | |||
100 | return buf; | 100 | return buf; |
101 | } | 101 | } |
102 | 102 | ||
103 | #define vpr_info(fmt, ...) \ | 103 | #define vpr_info(fmt, ...) \ |
104 | if (verbose) do { pr_info(fmt, ##__VA_ARGS__); } while (0) | ||
105 | |||
106 | #define vpr_info_dq(q, msg) \ | ||
107 | do { \ | 104 | do { \ |
108 | /* trim last char off format print */ \ | 105 | if (verbose) \ |
109 | vpr_info("%s: func=\"%s\" file=\"%s\" " \ | 106 | pr_info(fmt, ##__VA_ARGS__); \ |
110 | "module=\"%s\" format=\"%.*s\" " \ | ||
111 | "lineno=%u-%u", \ | ||
112 | msg, \ | ||
113 | q->function ? q->function : "", \ | ||
114 | q->filename ? q->filename : "", \ | ||
115 | q->module ? q->module : "", \ | ||
116 | (int)(q->format ? strlen(q->format) - 1 : 0), \ | ||
117 | q->format ? q->format : "", \ | ||
118 | q->first_lineno, q->last_lineno); \ | ||
119 | } while (0) | 107 | } while (0) |
120 | 108 | ||
109 | static void vpr_info_dq(const struct ddebug_query *query, const char *msg) | ||
110 | { | ||
111 | /* trim any trailing newlines */ | ||
112 | int fmtlen = 0; | ||
113 | |||
114 | if (query->format) { | ||
115 | fmtlen = strlen(query->format); | ||
116 | while (fmtlen && query->format[fmtlen - 1] == '\n') | ||
117 | fmtlen--; | ||
118 | } | ||
119 | |||
120 | vpr_info("%s: func=\"%s\" file=\"%s\" module=\"%s\" format=\"%.*s\" lineno=%u-%u\n", | ||
121 | msg, | ||
122 | query->function ? query->function : "", | ||
123 | query->filename ? query->filename : "", | ||
124 | query->module ? query->module : "", | ||
125 | fmtlen, query->format ? query->format : "", | ||
126 | query->first_lineno, query->last_lineno); | ||
127 | } | ||
128 | |||
121 | /* | 129 | /* |
122 | * Search the tables for _ddebug's which match the given `query' and | 130 | * Search the tables for _ddebug's which match the given `query' and |
123 | * apply the `flags' and `mask' to them. Returns number of matching | 131 | * apply the `flags' and `mask' to them. Returns number of matching |
@@ -141,7 +149,7 @@ static int ddebug_change(const struct ddebug_query *query, | |||
141 | if (query->module && strcmp(query->module, dt->mod_name)) | 149 | if (query->module && strcmp(query->module, dt->mod_name)) |
142 | continue; | 150 | continue; |
143 | 151 | ||
144 | for (i = 0 ; i < dt->num_ddebugs ; i++) { | 152 | for (i = 0; i < dt->num_ddebugs; i++) { |
145 | struct _ddebug *dp = &dt->ddebugs[i]; | 153 | struct _ddebug *dp = &dt->ddebugs[i]; |
146 | 154 | ||
147 | /* match against the source filename */ | 155 | /* match against the source filename */ |
@@ -176,10 +184,10 @@ static int ddebug_change(const struct ddebug_query *query, | |||
176 | continue; | 184 | continue; |
177 | dp->flags = newflags; | 185 | dp->flags = newflags; |
178 | vpr_info("changed %s:%d [%s]%s =%s\n", | 186 | vpr_info("changed %s:%d [%s]%s =%s\n", |
179 | trim_prefix(dp->filename), dp->lineno, | 187 | trim_prefix(dp->filename), dp->lineno, |
180 | dt->mod_name, dp->function, | 188 | dt->mod_name, dp->function, |
181 | ddebug_describe_flags(dp, flagbuf, | 189 | ddebug_describe_flags(dp, flagbuf, |
182 | sizeof(flagbuf))); | 190 | sizeof(flagbuf))); |
183 | } | 191 | } |
184 | } | 192 | } |
185 | mutex_unlock(&ddebug_lock); | 193 | mutex_unlock(&ddebug_lock); |
@@ -213,19 +221,23 @@ static int ddebug_tokenize(char *buf, char *words[], int maxwords) | |||
213 | /* find `end' of word, whitespace separated or quoted */ | 221 | /* find `end' of word, whitespace separated or quoted */ |
214 | if (*buf == '"' || *buf == '\'') { | 222 | if (*buf == '"' || *buf == '\'') { |
215 | int quote = *buf++; | 223 | int quote = *buf++; |
216 | for (end = buf ; *end && *end != quote ; end++) | 224 | for (end = buf; *end && *end != quote; end++) |
217 | ; | 225 | ; |
218 | if (!*end) | 226 | if (!*end) { |
227 | pr_err("unclosed quote: %s\n", buf); | ||
219 | return -EINVAL; /* unclosed quote */ | 228 | return -EINVAL; /* unclosed quote */ |
229 | } | ||
220 | } else { | 230 | } else { |
221 | for (end = buf ; *end && !isspace(*end) ; end++) | 231 | for (end = buf; *end && !isspace(*end); end++) |
222 | ; | 232 | ; |
223 | BUG_ON(end == buf); | 233 | BUG_ON(end == buf); |
224 | } | 234 | } |
225 | 235 | ||
226 | /* `buf' is start of word, `end' is one past its end */ | 236 | /* `buf' is start of word, `end' is one past its end */ |
227 | if (nwords == maxwords) | 237 | if (nwords == maxwords) { |
238 | pr_err("too many words, legal max <=%d\n", maxwords); | ||
228 | return -EINVAL; /* ran out of words[] before bytes */ | 239 | return -EINVAL; /* ran out of words[] before bytes */ |
240 | } | ||
229 | if (*end) | 241 | if (*end) |
230 | *end++ = '\0'; /* terminate the word */ | 242 | *end++ = '\0'; /* terminate the word */ |
231 | words[nwords++] = buf; | 243 | words[nwords++] = buf; |
@@ -235,7 +247,7 @@ static int ddebug_tokenize(char *buf, char *words[], int maxwords) | |||
235 | if (verbose) { | 247 | if (verbose) { |
236 | int i; | 248 | int i; |
237 | pr_info("split into words:"); | 249 | pr_info("split into words:"); |
238 | for (i = 0 ; i < nwords ; i++) | 250 | for (i = 0; i < nwords; i++) |
239 | pr_cont(" \"%s\"", words[i]); | 251 | pr_cont(" \"%s\"", words[i]); |
240 | pr_cont("\n"); | 252 | pr_cont("\n"); |
241 | } | 253 | } |
@@ -257,7 +269,11 @@ static inline int parse_lineno(const char *str, unsigned int *val) | |||
257 | return 0; | 269 | return 0; |
258 | } | 270 | } |
259 | *val = simple_strtoul(str, &end, 10); | 271 | *val = simple_strtoul(str, &end, 10); |
260 | return end == NULL || end == str || *end != '\0' ? -EINVAL : 0; | 272 | if (end == NULL || end == str || *end != '\0') { |
273 | pr_err("bad line-number: %s\n", str); | ||
274 | return -EINVAL; | ||
275 | } | ||
276 | return 0; | ||
261 | } | 277 | } |
262 | 278 | ||
263 | /* | 279 | /* |
@@ -286,11 +302,11 @@ static char *unescape(char *str) | |||
286 | in += 2; | 302 | in += 2; |
287 | continue; | 303 | continue; |
288 | } else if (isodigit(in[1]) && | 304 | } else if (isodigit(in[1]) && |
289 | isodigit(in[2]) && | 305 | isodigit(in[2]) && |
290 | isodigit(in[3])) { | 306 | isodigit(in[3])) { |
291 | *out++ = ((in[1] - '0')<<6) | | 307 | *out++ = (((in[1] - '0') << 6) | |
292 | ((in[2] - '0')<<3) | | 308 | ((in[2] - '0') << 3) | |
293 | (in[3] - '0'); | 309 | (in[3] - '0')); |
294 | in += 4; | 310 | in += 4; |
295 | continue; | 311 | continue; |
296 | } | 312 | } |
@@ -308,8 +324,8 @@ static int check_set(const char **dest, char *src, char *name) | |||
308 | 324 | ||
309 | if (*dest) { | 325 | if (*dest) { |
310 | rc = -EINVAL; | 326 | rc = -EINVAL; |
311 | pr_err("match-spec:%s val:%s overridden by %s", | 327 | pr_err("match-spec:%s val:%s overridden by %s\n", |
312 | name, *dest, src); | 328 | name, *dest, src); |
313 | } | 329 | } |
314 | *dest = src; | 330 | *dest = src; |
315 | return rc; | 331 | return rc; |
@@ -337,40 +353,46 @@ static int ddebug_parse_query(char *words[], int nwords, | |||
337 | int rc; | 353 | int rc; |
338 | 354 | ||
339 | /* check we have an even number of words */ | 355 | /* check we have an even number of words */ |
340 | if (nwords % 2 != 0) | 356 | if (nwords % 2 != 0) { |
357 | pr_err("expecting pairs of match-spec <value>\n"); | ||
341 | return -EINVAL; | 358 | return -EINVAL; |
359 | } | ||
342 | memset(query, 0, sizeof(*query)); | 360 | memset(query, 0, sizeof(*query)); |
343 | 361 | ||
344 | if (modname) | 362 | if (modname) |
345 | /* support $modname.dyndbg=<multiple queries> */ | 363 | /* support $modname.dyndbg=<multiple queries> */ |
346 | query->module = modname; | 364 | query->module = modname; |
347 | 365 | ||
348 | for (i = 0 ; i < nwords ; i += 2) { | 366 | for (i = 0; i < nwords; i += 2) { |
349 | if (!strcmp(words[i], "func")) | 367 | if (!strcmp(words[i], "func")) { |
350 | rc = check_set(&query->function, words[i+1], "func"); | 368 | rc = check_set(&query->function, words[i+1], "func"); |
351 | else if (!strcmp(words[i], "file")) | 369 | } else if (!strcmp(words[i], "file")) { |
352 | rc = check_set(&query->filename, words[i+1], "file"); | 370 | rc = check_set(&query->filename, words[i+1], "file"); |
353 | else if (!strcmp(words[i], "module")) | 371 | } else if (!strcmp(words[i], "module")) { |
354 | rc = check_set(&query->module, words[i+1], "module"); | 372 | rc = check_set(&query->module, words[i+1], "module"); |
355 | else if (!strcmp(words[i], "format")) | 373 | } else if (!strcmp(words[i], "format")) { |
356 | rc = check_set(&query->format, unescape(words[i+1]), | 374 | rc = check_set(&query->format, unescape(words[i+1]), |
357 | "format"); | 375 | "format"); |
358 | else if (!strcmp(words[i], "line")) { | 376 | } else if (!strcmp(words[i], "line")) { |
359 | char *first = words[i+1]; | 377 | char *first = words[i+1]; |
360 | char *last = strchr(first, '-'); | 378 | char *last = strchr(first, '-'); |
361 | if (query->first_lineno || query->last_lineno) { | 379 | if (query->first_lineno || query->last_lineno) { |
362 | pr_err("match-spec:line given 2 times\n"); | 380 | pr_err("match-spec: line used 2x\n"); |
363 | return -EINVAL; | 381 | return -EINVAL; |
364 | } | 382 | } |
365 | if (last) | 383 | if (last) |
366 | *last++ = '\0'; | 384 | *last++ = '\0'; |
367 | if (parse_lineno(first, &query->first_lineno) < 0) | 385 | if (parse_lineno(first, &query->first_lineno) < 0) { |
386 | pr_err("line-number is <0\n"); | ||
368 | return -EINVAL; | 387 | return -EINVAL; |
388 | } | ||
369 | if (last) { | 389 | if (last) { |
370 | /* range <first>-<last> */ | 390 | /* range <first>-<last> */ |
371 | if (parse_lineno(last, &query->last_lineno) | 391 | if (parse_lineno(last, &query->last_lineno) |
372 | < query->first_lineno) { | 392 | < query->first_lineno) { |
373 | pr_err("last-line < 1st-line\n"); | 393 | pr_err("last-line:%d < 1st-line:%d\n", |
394 | query->last_lineno, | ||
395 | query->first_lineno); | ||
374 | return -EINVAL; | 396 | return -EINVAL; |
375 | } | 397 | } |
376 | } else { | 398 | } else { |
@@ -406,19 +428,22 @@ static int ddebug_parse_flags(const char *str, unsigned int *flagsp, | |||
406 | op = *str++; | 428 | op = *str++; |
407 | break; | 429 | break; |
408 | default: | 430 | default: |
431 | pr_err("bad flag-op %c, at start of %s\n", *str, str); | ||
409 | return -EINVAL; | 432 | return -EINVAL; |
410 | } | 433 | } |
411 | vpr_info("op='%c'\n", op); | 434 | vpr_info("op='%c'\n", op); |
412 | 435 | ||
413 | for ( ; *str ; ++str) { | 436 | for (; *str ; ++str) { |
414 | for (i = ARRAY_SIZE(opt_array) - 1; i >= 0; i--) { | 437 | for (i = ARRAY_SIZE(opt_array) - 1; i >= 0; i--) { |
415 | if (*str == opt_array[i].opt_char) { | 438 | if (*str == opt_array[i].opt_char) { |
416 | flags |= opt_array[i].flag; | 439 | flags |= opt_array[i].flag; |
417 | break; | 440 | break; |
418 | } | 441 | } |
419 | } | 442 | } |
420 | if (i < 0) | 443 | if (i < 0) { |
444 | pr_err("unknown flag '%c' in \"%s\"\n", *str, str); | ||
421 | return -EINVAL; | 445 | return -EINVAL; |
446 | } | ||
422 | } | 447 | } |
423 | vpr_info("flags=0x%x\n", flags); | 448 | vpr_info("flags=0x%x\n", flags); |
424 | 449 | ||
@@ -450,16 +475,22 @@ static int ddebug_exec_query(char *query_string, const char *modname) | |||
450 | char *words[MAXWORDS]; | 475 | char *words[MAXWORDS]; |
451 | 476 | ||
452 | nwords = ddebug_tokenize(query_string, words, MAXWORDS); | 477 | nwords = ddebug_tokenize(query_string, words, MAXWORDS); |
453 | if (nwords <= 0) | 478 | if (nwords <= 0) { |
479 | pr_err("tokenize failed\n"); | ||
454 | return -EINVAL; | 480 | return -EINVAL; |
455 | if (ddebug_parse_query(words, nwords-1, &query, modname)) | 481 | } |
482 | /* check flags 1st (last arg) so query is pairs of spec,val */ | ||
483 | if (ddebug_parse_flags(words[nwords-1], &flags, &mask)) { | ||
484 | pr_err("flags parse failed\n"); | ||
456 | return -EINVAL; | 485 | return -EINVAL; |
457 | if (ddebug_parse_flags(words[nwords-1], &flags, &mask)) | 486 | } |
487 | if (ddebug_parse_query(words, nwords-1, &query, modname)) { | ||
488 | pr_err("query parse failed\n"); | ||
458 | return -EINVAL; | 489 | return -EINVAL; |
459 | 490 | } | |
460 | /* actually go and implement the change */ | 491 | /* actually go and implement the change */ |
461 | nfound = ddebug_change(&query, flags, mask); | 492 | nfound = ddebug_change(&query, flags, mask); |
462 | vpr_info_dq((&query), (nfound) ? "applied" : "no-match"); | 493 | vpr_info_dq(&query, nfound ? "applied" : "no-match"); |
463 | 494 | ||
464 | return nfound; | 495 | return nfound; |
465 | } | 496 | } |
@@ -488,8 +519,9 @@ static int ddebug_exec_queries(char *query, const char *modname) | |||
488 | if (rc < 0) { | 519 | if (rc < 0) { |
489 | errs++; | 520 | errs++; |
490 | exitcode = rc; | 521 | exitcode = rc; |
491 | } else | 522 | } else { |
492 | nfound += rc; | 523 | nfound += rc; |
524 | } | ||
493 | i++; | 525 | i++; |
494 | } | 526 | } |
495 | vpr_info("processed %d queries, with %d matches, %d errs\n", | 527 | vpr_info("processed %d queries, with %d matches, %d errs\n", |
@@ -765,7 +797,7 @@ static void *ddebug_proc_next(struct seq_file *m, void *p, loff_t *pos) | |||
765 | struct _ddebug *dp; | 797 | struct _ddebug *dp; |
766 | 798 | ||
767 | vpr_info("called m=%p p=%p *pos=%lld\n", | 799 | vpr_info("called m=%p p=%p *pos=%lld\n", |
768 | m, p, (unsigned long long)*pos); | 800 | m, p, (unsigned long long)*pos); |
769 | 801 | ||
770 | if (p == SEQ_START_TOKEN) | 802 | if (p == SEQ_START_TOKEN) |
771 | dp = ddebug_iter_first(iter); | 803 | dp = ddebug_iter_first(iter); |
@@ -791,14 +823,14 @@ static int ddebug_proc_show(struct seq_file *m, void *p) | |||
791 | 823 | ||
792 | if (p == SEQ_START_TOKEN) { | 824 | if (p == SEQ_START_TOKEN) { |
793 | seq_puts(m, | 825 | seq_puts(m, |
794 | "# filename:lineno [module]function flags format\n"); | 826 | "# filename:lineno [module]function flags format\n"); |
795 | return 0; | 827 | return 0; |
796 | } | 828 | } |
797 | 829 | ||
798 | seq_printf(m, "%s:%u [%s]%s =%s \"", | 830 | seq_printf(m, "%s:%u [%s]%s =%s \"", |
799 | trim_prefix(dp->filename), dp->lineno, | 831 | trim_prefix(dp->filename), dp->lineno, |
800 | iter->table->mod_name, dp->function, | 832 | iter->table->mod_name, dp->function, |
801 | ddebug_describe_flags(dp, flagsbuf, sizeof(flagsbuf))); | 833 | ddebug_describe_flags(dp, flagsbuf, sizeof(flagsbuf))); |
802 | seq_escape(m, dp->format, "\t\r\n\""); | 834 | seq_escape(m, dp->format, "\t\r\n\""); |
803 | seq_puts(m, "\"\n"); | 835 | seq_puts(m, "\"\n"); |
804 | 836 | ||
@@ -845,7 +877,7 @@ static int ddebug_proc_open(struct inode *inode, struct file *file) | |||
845 | kfree(iter); | 877 | kfree(iter); |
846 | return err; | 878 | return err; |
847 | } | 879 | } |
848 | ((struct seq_file *) file->private_data)->private = iter; | 880 | ((struct seq_file *)file->private_data)->private = iter; |
849 | return 0; | 881 | return 0; |
850 | } | 882 | } |
851 | 883 | ||
@@ -1002,8 +1034,7 @@ static int __init dynamic_debug_init(void) | |||
1002 | int verbose_bytes = 0; | 1034 | int verbose_bytes = 0; |
1003 | 1035 | ||
1004 | if (__start___verbose == __stop___verbose) { | 1036 | if (__start___verbose == __stop___verbose) { |
1005 | pr_warn("_ddebug table is empty in a " | 1037 | pr_warn("_ddebug table is empty in a CONFIG_DYNAMIC_DEBUG build\n"); |
1006 | "CONFIG_DYNAMIC_DEBUG build"); | ||
1007 | return 1; | 1038 | return 1; |
1008 | } | 1039 | } |
1009 | iter = __start___verbose; | 1040 | iter = __start___verbose; |
@@ -1030,18 +1061,16 @@ static int __init dynamic_debug_init(void) | |||
1030 | goto out_err; | 1061 | goto out_err; |
1031 | 1062 | ||
1032 | ddebug_init_success = 1; | 1063 | ddebug_init_success = 1; |
1033 | vpr_info("%d modules, %d entries and %d bytes in ddebug tables," | 1064 | vpr_info("%d modules, %d entries and %d bytes in ddebug tables, %d bytes in (readonly) verbose section\n", |
1034 | " %d bytes in (readonly) verbose section\n", | 1065 | modct, entries, (int)(modct * sizeof(struct ddebug_table)), |
1035 | modct, entries, (int)( modct * sizeof(struct ddebug_table)), | 1066 | verbose_bytes + (int)(__stop___verbose - __start___verbose)); |
1036 | verbose_bytes + (int)(__stop___verbose - __start___verbose)); | ||
1037 | 1067 | ||
1038 | /* apply ddebug_query boot param, dont unload tables on err */ | 1068 | /* apply ddebug_query boot param, dont unload tables on err */ |
1039 | if (ddebug_setup_string[0] != '\0') { | 1069 | if (ddebug_setup_string[0] != '\0') { |
1040 | pr_warn("ddebug_query param name is deprecated," | 1070 | pr_warn("ddebug_query param name is deprecated, change it to dyndbg\n"); |
1041 | " change it to dyndbg\n"); | ||
1042 | ret = ddebug_exec_queries(ddebug_setup_string, NULL); | 1071 | ret = ddebug_exec_queries(ddebug_setup_string, NULL); |
1043 | if (ret < 0) | 1072 | if (ret < 0) |
1044 | pr_warn("Invalid ddebug boot param %s", | 1073 | pr_warn("Invalid ddebug boot param %s\n", |
1045 | ddebug_setup_string); | 1074 | ddebug_setup_string); |
1046 | else | 1075 | else |
1047 | pr_info("%d changes by ddebug_query\n", ret); | 1076 | pr_info("%d changes by ddebug_query\n", ret); |
diff --git a/lib/hexdump.c b/lib/hexdump.c index 6540d657dca4..3f0494c9d57a 100644 --- a/lib/hexdump.c +++ b/lib/hexdump.c | |||
@@ -227,6 +227,7 @@ void print_hex_dump(const char *level, const char *prefix_str, int prefix_type, | |||
227 | } | 227 | } |
228 | EXPORT_SYMBOL(print_hex_dump); | 228 | EXPORT_SYMBOL(print_hex_dump); |
229 | 229 | ||
230 | #if !defined(CONFIG_DYNAMIC_DEBUG) | ||
230 | /** | 231 | /** |
231 | * print_hex_dump_bytes - shorthand form of print_hex_dump() with default params | 232 | * print_hex_dump_bytes - shorthand form of print_hex_dump() with default params |
232 | * @prefix_str: string to prefix each line with; | 233 | * @prefix_str: string to prefix each line with; |
@@ -246,4 +247,5 @@ void print_hex_dump_bytes(const char *prefix_str, int prefix_type, | |||
246 | buf, len, true); | 247 | buf, len, true); |
247 | } | 248 | } |
248 | EXPORT_SYMBOL(print_hex_dump_bytes); | 249 | EXPORT_SYMBOL(print_hex_dump_bytes); |
249 | #endif | 250 | #endif /* !defined(CONFIG_DYNAMIC_DEBUG) */ |
251 | #endif /* defined(CONFIG_PRINTK) */ | ||
diff --git a/lib/mpi/mpi-internal.h b/lib/mpi/mpi-internal.h index 77adcf6bc257..60cf765628e9 100644 --- a/lib/mpi/mpi-internal.h +++ b/lib/mpi/mpi-internal.h | |||
@@ -65,10 +65,6 @@ | |||
65 | typedef mpi_limb_t *mpi_ptr_t; /* pointer to a limb */ | 65 | typedef mpi_limb_t *mpi_ptr_t; /* pointer to a limb */ |
66 | typedef int mpi_size_t; /* (must be a signed type) */ | 66 | typedef int mpi_size_t; /* (must be a signed type) */ |
67 | 67 | ||
68 | #define ABS(x) (x >= 0 ? x : -x) | ||
69 | #define MIN(l, o) ((l) < (o) ? (l) : (o)) | ||
70 | #define MAX(h, i) ((h) > (i) ? (h) : (i)) | ||
71 | |||
72 | static inline int RESIZE_IF_NEEDED(MPI a, unsigned b) | 68 | static inline int RESIZE_IF_NEEDED(MPI a, unsigned b) |
73 | { | 69 | { |
74 | if (a->alloced < b) | 70 | if (a->alloced < b) |
diff --git a/lib/mpi/mpicoder.c b/lib/mpi/mpicoder.c index 3962b7f7fe3f..5f9c44cdf1f5 100644 --- a/lib/mpi/mpicoder.c +++ b/lib/mpi/mpicoder.c | |||
@@ -52,7 +52,7 @@ MPI mpi_read_raw_data(const void *xbuffer, size_t nbytes) | |||
52 | else | 52 | else |
53 | nbits = 0; | 53 | nbits = 0; |
54 | 54 | ||
55 | nlimbs = (nbytes + BYTES_PER_MPI_LIMB - 1) / BYTES_PER_MPI_LIMB; | 55 | nlimbs = DIV_ROUND_UP(nbytes, BYTES_PER_MPI_LIMB); |
56 | val = mpi_alloc(nlimbs); | 56 | val = mpi_alloc(nlimbs); |
57 | if (!val) | 57 | if (!val) |
58 | return NULL; | 58 | return NULL; |
@@ -96,8 +96,8 @@ MPI mpi_read_from_buffer(const void *xbuffer, unsigned *ret_nread) | |||
96 | buffer += 2; | 96 | buffer += 2; |
97 | nread = 2; | 97 | nread = 2; |
98 | 98 | ||
99 | nbytes = (nbits + 7) / 8; | 99 | nbytes = DIV_ROUND_UP(nbits, 8); |
100 | nlimbs = (nbytes + BYTES_PER_MPI_LIMB - 1) / BYTES_PER_MPI_LIMB; | 100 | nlimbs = DIV_ROUND_UP(nbytes, BYTES_PER_MPI_LIMB); |
101 | val = mpi_alloc(nlimbs); | 101 | val = mpi_alloc(nlimbs); |
102 | if (!val) | 102 | if (!val) |
103 | return NULL; | 103 | return NULL; |
@@ -193,7 +193,7 @@ int mpi_set_buffer(MPI a, const void *xbuffer, unsigned nbytes, int sign) | |||
193 | int nlimbs; | 193 | int nlimbs; |
194 | int i; | 194 | int i; |
195 | 195 | ||
196 | nlimbs = (nbytes + BYTES_PER_MPI_LIMB - 1) / BYTES_PER_MPI_LIMB; | 196 | nlimbs = DIV_ROUND_UP(nbytes, BYTES_PER_MPI_LIMB); |
197 | if (RESIZE_IF_NEEDED(a, nlimbs) < 0) | 197 | if (RESIZE_IF_NEEDED(a, nlimbs) < 0) |
198 | return -ENOMEM; | 198 | return -ENOMEM; |
199 | a->sign = sign; | 199 | a->sign = sign; |
diff --git a/lib/parser.c b/lib/parser.c index 52cfa69f73df..807b2aaa33fa 100644 --- a/lib/parser.c +++ b/lib/parser.c | |||
@@ -157,7 +157,7 @@ static int match_number(substring_t *s, int *result, int base) | |||
157 | * | 157 | * |
158 | * Description: Attempts to parse the &substring_t @s as a decimal integer. On | 158 | * Description: Attempts to parse the &substring_t @s as a decimal integer. On |
159 | * success, sets @result to the integer represented by the string and returns 0. | 159 | * success, sets @result to the integer represented by the string and returns 0. |
160 | * Returns either -ENOMEM or -EINVAL on failure. | 160 | * Returns -ENOMEM, -EINVAL, or -ERANGE on failure. |
161 | */ | 161 | */ |
162 | int match_int(substring_t *s, int *result) | 162 | int match_int(substring_t *s, int *result) |
163 | { | 163 | { |
@@ -171,7 +171,7 @@ int match_int(substring_t *s, int *result) | |||
171 | * | 171 | * |
172 | * Description: Attempts to parse the &substring_t @s as an octal integer. On | 172 | * Description: Attempts to parse the &substring_t @s as an octal integer. On |
173 | * success, sets @result to the integer represented by the string and returns | 173 | * success, sets @result to the integer represented by the string and returns |
174 | * 0. Returns either -ENOMEM or -EINVAL on failure. | 174 | * 0. Returns -ENOMEM, -EINVAL, or -ERANGE on failure. |
175 | */ | 175 | */ |
176 | int match_octal(substring_t *s, int *result) | 176 | int match_octal(substring_t *s, int *result) |
177 | { | 177 | { |
@@ -185,7 +185,7 @@ int match_octal(substring_t *s, int *result) | |||
185 | * | 185 | * |
186 | * Description: Attempts to parse the &substring_t @s as a hexadecimal integer. | 186 | * Description: Attempts to parse the &substring_t @s as a hexadecimal integer. |
187 | * On success, sets @result to the integer represented by the string and | 187 | * On success, sets @result to the integer represented by the string and |
188 | * returns 0. Returns either -ENOMEM or -EINVAL on failure. | 188 | * returns 0. Returns -ENOMEM, -EINVAL, or -ERANGE on failure. |
189 | */ | 189 | */ |
190 | int match_hex(substring_t *s, int *result) | 190 | int match_hex(substring_t *s, int *result) |
191 | { | 191 | { |
diff --git a/lib/swiotlb.c b/lib/swiotlb.c index 196b06984dec..bfe02b8fc55b 100644 --- a/lib/swiotlb.c +++ b/lib/swiotlb.c | |||
@@ -122,11 +122,18 @@ static dma_addr_t swiotlb_virt_to_bus(struct device *hwdev, | |||
122 | return phys_to_dma(hwdev, virt_to_phys(address)); | 122 | return phys_to_dma(hwdev, virt_to_phys(address)); |
123 | } | 123 | } |
124 | 124 | ||
125 | static bool no_iotlb_memory; | ||
126 | |||
125 | void swiotlb_print_info(void) | 127 | void swiotlb_print_info(void) |
126 | { | 128 | { |
127 | unsigned long bytes = io_tlb_nslabs << IO_TLB_SHIFT; | 129 | unsigned long bytes = io_tlb_nslabs << IO_TLB_SHIFT; |
128 | unsigned char *vstart, *vend; | 130 | unsigned char *vstart, *vend; |
129 | 131 | ||
132 | if (no_iotlb_memory) { | ||
133 | pr_warn("software IO TLB: No low mem\n"); | ||
134 | return; | ||
135 | } | ||
136 | |||
130 | vstart = phys_to_virt(io_tlb_start); | 137 | vstart = phys_to_virt(io_tlb_start); |
131 | vend = phys_to_virt(io_tlb_end); | 138 | vend = phys_to_virt(io_tlb_end); |
132 | 139 | ||
@@ -136,7 +143,7 @@ void swiotlb_print_info(void) | |||
136 | bytes >> 20, vstart, vend - 1); | 143 | bytes >> 20, vstart, vend - 1); |
137 | } | 144 | } |
138 | 145 | ||
139 | void __init swiotlb_init_with_tbl(char *tlb, unsigned long nslabs, int verbose) | 146 | int __init swiotlb_init_with_tbl(char *tlb, unsigned long nslabs, int verbose) |
140 | { | 147 | { |
141 | void *v_overflow_buffer; | 148 | void *v_overflow_buffer; |
142 | unsigned long i, bytes; | 149 | unsigned long i, bytes; |
@@ -150,9 +157,10 @@ void __init swiotlb_init_with_tbl(char *tlb, unsigned long nslabs, int verbose) | |||
150 | /* | 157 | /* |
151 | * Get the overflow emergency buffer | 158 | * Get the overflow emergency buffer |
152 | */ | 159 | */ |
153 | v_overflow_buffer = alloc_bootmem_low_pages(PAGE_ALIGN(io_tlb_overflow)); | 160 | v_overflow_buffer = alloc_bootmem_low_pages_nopanic( |
161 | PAGE_ALIGN(io_tlb_overflow)); | ||
154 | if (!v_overflow_buffer) | 162 | if (!v_overflow_buffer) |
155 | panic("Cannot allocate SWIOTLB overflow buffer!\n"); | 163 | return -ENOMEM; |
156 | 164 | ||
157 | io_tlb_overflow_buffer = __pa(v_overflow_buffer); | 165 | io_tlb_overflow_buffer = __pa(v_overflow_buffer); |
158 | 166 | ||
@@ -169,15 +177,19 @@ void __init swiotlb_init_with_tbl(char *tlb, unsigned long nslabs, int verbose) | |||
169 | 177 | ||
170 | if (verbose) | 178 | if (verbose) |
171 | swiotlb_print_info(); | 179 | swiotlb_print_info(); |
180 | |||
181 | return 0; | ||
172 | } | 182 | } |
173 | 183 | ||
174 | /* | 184 | /* |
175 | * Statically reserve bounce buffer space and initialize bounce buffer data | 185 | * Statically reserve bounce buffer space and initialize bounce buffer data |
176 | * structures for the software IO TLB used to implement the DMA API. | 186 | * structures for the software IO TLB used to implement the DMA API. |
177 | */ | 187 | */ |
178 | static void __init | 188 | void __init |
179 | swiotlb_init_with_default_size(size_t default_size, int verbose) | 189 | swiotlb_init(int verbose) |
180 | { | 190 | { |
191 | /* default to 64MB */ | ||
192 | size_t default_size = 64UL<<20; | ||
181 | unsigned char *vstart; | 193 | unsigned char *vstart; |
182 | unsigned long bytes; | 194 | unsigned long bytes; |
183 | 195 | ||
@@ -188,20 +200,16 @@ swiotlb_init_with_default_size(size_t default_size, int verbose) | |||
188 | 200 | ||
189 | bytes = io_tlb_nslabs << IO_TLB_SHIFT; | 201 | bytes = io_tlb_nslabs << IO_TLB_SHIFT; |
190 | 202 | ||
191 | /* | 203 | /* Get IO TLB memory from the low pages */ |
192 | * Get IO TLB memory from the low pages | 204 | vstart = alloc_bootmem_low_pages_nopanic(PAGE_ALIGN(bytes)); |
193 | */ | 205 | if (vstart && !swiotlb_init_with_tbl(vstart, io_tlb_nslabs, verbose)) |
194 | vstart = alloc_bootmem_low_pages(PAGE_ALIGN(bytes)); | 206 | return; |
195 | if (!vstart) | ||
196 | panic("Cannot allocate SWIOTLB buffer"); | ||
197 | |||
198 | swiotlb_init_with_tbl(vstart, io_tlb_nslabs, verbose); | ||
199 | } | ||
200 | 207 | ||
201 | void __init | 208 | if (io_tlb_start) |
202 | swiotlb_init(int verbose) | 209 | free_bootmem(io_tlb_start, |
203 | { | 210 | PAGE_ALIGN(io_tlb_nslabs << IO_TLB_SHIFT)); |
204 | swiotlb_init_with_default_size(64 * (1<<20), verbose); /* default to 64MB */ | 211 | pr_warn("Cannot allocate SWIOTLB buffer"); |
212 | no_iotlb_memory = true; | ||
205 | } | 213 | } |
206 | 214 | ||
207 | /* | 215 | /* |
@@ -405,6 +413,9 @@ phys_addr_t swiotlb_tbl_map_single(struct device *hwdev, | |||
405 | unsigned long offset_slots; | 413 | unsigned long offset_slots; |
406 | unsigned long max_slots; | 414 | unsigned long max_slots; |
407 | 415 | ||
416 | if (no_iotlb_memory) | ||
417 | panic("Can not allocate SWIOTLB buffer earlier and can't now provide you with the DMA bounce buffer"); | ||
418 | |||
408 | mask = dma_get_seg_boundary(hwdev); | 419 | mask = dma_get_seg_boundary(hwdev); |
409 | 420 | ||
410 | tbl_dma_addr &= mask; | 421 | tbl_dma_addr &= mask; |
diff --git a/lib/vsprintf.c b/lib/vsprintf.c index fab33a9c5318..0d62fd700f68 100644 --- a/lib/vsprintf.c +++ b/lib/vsprintf.c | |||
@@ -1030,6 +1030,7 @@ int kptr_restrict __read_mostly; | |||
1030 | * N no separator | 1030 | * N no separator |
1031 | * The maximum supported length is 64 bytes of the input. Consider | 1031 | * The maximum supported length is 64 bytes of the input. Consider |
1032 | * to use print_hex_dump() for the larger input. | 1032 | * to use print_hex_dump() for the larger input. |
1033 | * - 'a' For a phys_addr_t type and its derivative types (passed by reference) | ||
1033 | * | 1034 | * |
1034 | * Note: The difference between 'S' and 'F' is that on ia64 and ppc64 | 1035 | * Note: The difference between 'S' and 'F' is that on ia64 and ppc64 |
1035 | * function pointers are really function descriptors, which contain a | 1036 | * function pointers are really function descriptors, which contain a |
@@ -1120,6 +1121,12 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr, | |||
1120 | return netdev_feature_string(buf, end, ptr, spec); | 1121 | return netdev_feature_string(buf, end, ptr, spec); |
1121 | } | 1122 | } |
1122 | break; | 1123 | break; |
1124 | case 'a': | ||
1125 | spec.flags |= SPECIAL | SMALL | ZEROPAD; | ||
1126 | spec.field_width = sizeof(phys_addr_t) * 2 + 2; | ||
1127 | spec.base = 16; | ||
1128 | return number(buf, end, | ||
1129 | (unsigned long long) *((phys_addr_t *)ptr), spec); | ||
1123 | } | 1130 | } |
1124 | spec.flags |= SMALL; | 1131 | spec.flags |= SMALL; |
1125 | if (spec.field_width == -1) { | 1132 | if (spec.field_width == -1) { |
diff --git a/lib/xz/Kconfig b/lib/xz/Kconfig index 60a6088d0e5e..82a04d7ba99e 100644 --- a/lib/xz/Kconfig +++ b/lib/xz/Kconfig | |||
@@ -6,42 +6,40 @@ config XZ_DEC | |||
6 | the .xz file format as the container. For integrity checking, | 6 | the .xz file format as the container. For integrity checking, |
7 | CRC32 is supported. See Documentation/xz.txt for more information. | 7 | CRC32 is supported. See Documentation/xz.txt for more information. |
8 | 8 | ||
9 | if XZ_DEC | ||
10 | |||
9 | config XZ_DEC_X86 | 11 | config XZ_DEC_X86 |
10 | bool "x86 BCJ filter decoder" if EXPERT | 12 | bool "x86 BCJ filter decoder" |
11 | default y | 13 | default y if X86 |
12 | depends on XZ_DEC | ||
13 | select XZ_DEC_BCJ | 14 | select XZ_DEC_BCJ |
14 | 15 | ||
15 | config XZ_DEC_POWERPC | 16 | config XZ_DEC_POWERPC |
16 | bool "PowerPC BCJ filter decoder" if EXPERT | 17 | bool "PowerPC BCJ filter decoder" |
17 | default y | 18 | default y if POWERPC |
18 | depends on XZ_DEC | ||
19 | select XZ_DEC_BCJ | 19 | select XZ_DEC_BCJ |
20 | 20 | ||
21 | config XZ_DEC_IA64 | 21 | config XZ_DEC_IA64 |
22 | bool "IA-64 BCJ filter decoder" if EXPERT | 22 | bool "IA-64 BCJ filter decoder" |
23 | default y | 23 | default y if IA64 |
24 | depends on XZ_DEC | ||
25 | select XZ_DEC_BCJ | 24 | select XZ_DEC_BCJ |
26 | 25 | ||
27 | config XZ_DEC_ARM | 26 | config XZ_DEC_ARM |
28 | bool "ARM BCJ filter decoder" if EXPERT | 27 | bool "ARM BCJ filter decoder" |
29 | default y | 28 | default y if ARM |
30 | depends on XZ_DEC | ||
31 | select XZ_DEC_BCJ | 29 | select XZ_DEC_BCJ |
32 | 30 | ||
33 | config XZ_DEC_ARMTHUMB | 31 | config XZ_DEC_ARMTHUMB |
34 | bool "ARM-Thumb BCJ filter decoder" if EXPERT | 32 | bool "ARM-Thumb BCJ filter decoder" |
35 | default y | 33 | default y if (ARM && ARM_THUMB) |
36 | depends on XZ_DEC | ||
37 | select XZ_DEC_BCJ | 34 | select XZ_DEC_BCJ |
38 | 35 | ||
39 | config XZ_DEC_SPARC | 36 | config XZ_DEC_SPARC |
40 | bool "SPARC BCJ filter decoder" if EXPERT | 37 | bool "SPARC BCJ filter decoder" |
41 | default y | 38 | default y if SPARC |
42 | depends on XZ_DEC | ||
43 | select XZ_DEC_BCJ | 39 | select XZ_DEC_BCJ |
44 | 40 | ||
41 | endif | ||
42 | |||
45 | config XZ_DEC_BCJ | 43 | config XZ_DEC_BCJ |
46 | bool | 44 | bool |
47 | default n | 45 | default n |