diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2018-02-12 11:57:21 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2018-02-12 11:57:21 -0500 |
commit | 178e834c47b0d01352c48730235aae69898fbc02 (patch) | |
tree | 6f00f2fedc0a9c812a686f475c4b56fd405ad087 | |
parent | 7928b2cbe55b2a410a0f5c1f154610059c57b1b2 (diff) | |
parent | 2e7d1d61ea6c0f1c4da5eb82cafac750d55637a7 (diff) |
Merge branch 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6
Pull crypto fixes from Herbert Xu:
"This fixes the following issues:
- oversize stack frames on mn10300 in sha3-generic
- warning on old compilers in sha3-generic
- API error in sun4i_ss_prng
- potential dead-lock in sun4i_ss_prng
- null-pointer dereference in sha512-mb
- endless loop when DECO acquire fails in caam
- kernel oops when hashing empty message in talitos"
* 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6:
crypto: sun4i_ss_prng - convert lock to _bh in sun4i_ss_prng_generate
crypto: sun4i_ss_prng - fix return value of sun4i_ss_prng_generate
crypto: caam - fix endless loop when DECO acquire fails
crypto: sha3-generic - Use __optimize to support old compilers
compiler-gcc.h: __nostackprotector needs gcc-4.4 and up
compiler-gcc.h: Introduce __optimize function attribute
crypto: sha3-generic - deal with oversize stack frames
crypto: talitos - fix Kernel Oops on hashing an empty file
crypto: sha512-mb - initialize pending lengths correctly
-rw-r--r-- | arch/x86/crypto/sha512-mb/sha512_mb_mgr_init_avx2.c | 10 | ||||
-rw-r--r-- | crypto/sha3_generic.c | 218 | ||||
-rw-r--r-- | drivers/crypto/caam/ctrl.c | 8 | ||||
-rw-r--r-- | drivers/crypto/sunxi-ss/sun4i-ss-prng.c | 6 | ||||
-rw-r--r-- | drivers/crypto/talitos.c | 4 | ||||
-rw-r--r-- | include/linux/compiler-gcc.h | 7 | ||||
-rw-r--r-- | include/linux/compiler.h | 4 |
7 files changed, 146 insertions, 111 deletions
diff --git a/arch/x86/crypto/sha512-mb/sha512_mb_mgr_init_avx2.c b/arch/x86/crypto/sha512-mb/sha512_mb_mgr_init_avx2.c index 36870b26067a..d08805032f01 100644 --- a/arch/x86/crypto/sha512-mb/sha512_mb_mgr_init_avx2.c +++ b/arch/x86/crypto/sha512-mb/sha512_mb_mgr_init_avx2.c | |||
@@ -57,10 +57,12 @@ void sha512_mb_mgr_init_avx2(struct sha512_mb_mgr *state) | |||
57 | { | 57 | { |
58 | unsigned int j; | 58 | unsigned int j; |
59 | 59 | ||
60 | state->lens[0] = 0; | 60 | /* initially all lanes are unused */ |
61 | state->lens[1] = 1; | 61 | state->lens[0] = 0xFFFFFFFF00000000; |
62 | state->lens[2] = 2; | 62 | state->lens[1] = 0xFFFFFFFF00000001; |
63 | state->lens[3] = 3; | 63 | state->lens[2] = 0xFFFFFFFF00000002; |
64 | state->lens[3] = 0xFFFFFFFF00000003; | ||
65 | |||
64 | state->unused_lanes = 0xFF03020100; | 66 | state->unused_lanes = 0xFF03020100; |
65 | for (j = 0; j < 4; j++) | 67 | for (j = 0; j < 4; j++) |
66 | state->ldata[j].job_in_lane = NULL; | 68 | state->ldata[j].job_in_lane = NULL; |
diff --git a/crypto/sha3_generic.c b/crypto/sha3_generic.c index a965b9d80559..ded148783303 100644 --- a/crypto/sha3_generic.c +++ b/crypto/sha3_generic.c | |||
@@ -20,6 +20,20 @@ | |||
20 | #include <crypto/sha3.h> | 20 | #include <crypto/sha3.h> |
21 | #include <asm/unaligned.h> | 21 | #include <asm/unaligned.h> |
22 | 22 | ||
23 | /* | ||
24 | * On some 32-bit architectures (mn10300 and h8300), GCC ends up using | ||
25 | * over 1 KB of stack if we inline the round calculation into the loop | ||
26 | * in keccakf(). On the other hand, on 64-bit architectures with plenty | ||
27 | * of [64-bit wide] general purpose registers, not inlining it severely | ||
28 | * hurts performance. So let's use 64-bitness as a heuristic to decide | ||
29 | * whether to inline or not. | ||
30 | */ | ||
31 | #ifdef CONFIG_64BIT | ||
32 | #define SHA3_INLINE inline | ||
33 | #else | ||
34 | #define SHA3_INLINE noinline | ||
35 | #endif | ||
36 | |||
23 | #define KECCAK_ROUNDS 24 | 37 | #define KECCAK_ROUNDS 24 |
24 | 38 | ||
25 | static const u64 keccakf_rndc[24] = { | 39 | static const u64 keccakf_rndc[24] = { |
@@ -35,111 +49,115 @@ static const u64 keccakf_rndc[24] = { | |||
35 | 49 | ||
36 | /* update the state with given number of rounds */ | 50 | /* update the state with given number of rounds */ |
37 | 51 | ||
38 | static void __attribute__((__optimize__("O3"))) keccakf(u64 st[25]) | 52 | static SHA3_INLINE void keccakf_round(u64 st[25]) |
39 | { | 53 | { |
40 | u64 t[5], tt, bc[5]; | 54 | u64 t[5], tt, bc[5]; |
41 | int round; | ||
42 | 55 | ||
43 | for (round = 0; round < KECCAK_ROUNDS; round++) { | 56 | /* Theta */ |
57 | bc[0] = st[0] ^ st[5] ^ st[10] ^ st[15] ^ st[20]; | ||
58 | bc[1] = st[1] ^ st[6] ^ st[11] ^ st[16] ^ st[21]; | ||
59 | bc[2] = st[2] ^ st[7] ^ st[12] ^ st[17] ^ st[22]; | ||
60 | bc[3] = st[3] ^ st[8] ^ st[13] ^ st[18] ^ st[23]; | ||
61 | bc[4] = st[4] ^ st[9] ^ st[14] ^ st[19] ^ st[24]; | ||
62 | |||
63 | t[0] = bc[4] ^ rol64(bc[1], 1); | ||
64 | t[1] = bc[0] ^ rol64(bc[2], 1); | ||
65 | t[2] = bc[1] ^ rol64(bc[3], 1); | ||
66 | t[3] = bc[2] ^ rol64(bc[4], 1); | ||
67 | t[4] = bc[3] ^ rol64(bc[0], 1); | ||
68 | |||
69 | st[0] ^= t[0]; | ||
70 | |||
71 | /* Rho Pi */ | ||
72 | tt = st[1]; | ||
73 | st[ 1] = rol64(st[ 6] ^ t[1], 44); | ||
74 | st[ 6] = rol64(st[ 9] ^ t[4], 20); | ||
75 | st[ 9] = rol64(st[22] ^ t[2], 61); | ||
76 | st[22] = rol64(st[14] ^ t[4], 39); | ||
77 | st[14] = rol64(st[20] ^ t[0], 18); | ||
78 | st[20] = rol64(st[ 2] ^ t[2], 62); | ||
79 | st[ 2] = rol64(st[12] ^ t[2], 43); | ||
80 | st[12] = rol64(st[13] ^ t[3], 25); | ||
81 | st[13] = rol64(st[19] ^ t[4], 8); | ||
82 | st[19] = rol64(st[23] ^ t[3], 56); | ||
83 | st[23] = rol64(st[15] ^ t[0], 41); | ||
84 | st[15] = rol64(st[ 4] ^ t[4], 27); | ||
85 | st[ 4] = rol64(st[24] ^ t[4], 14); | ||
86 | st[24] = rol64(st[21] ^ t[1], 2); | ||
87 | st[21] = rol64(st[ 8] ^ t[3], 55); | ||
88 | st[ 8] = rol64(st[16] ^ t[1], 45); | ||
89 | st[16] = rol64(st[ 5] ^ t[0], 36); | ||
90 | st[ 5] = rol64(st[ 3] ^ t[3], 28); | ||
91 | st[ 3] = rol64(st[18] ^ t[3], 21); | ||
92 | st[18] = rol64(st[17] ^ t[2], 15); | ||
93 | st[17] = rol64(st[11] ^ t[1], 10); | ||
94 | st[11] = rol64(st[ 7] ^ t[2], 6); | ||
95 | st[ 7] = rol64(st[10] ^ t[0], 3); | ||
96 | st[10] = rol64( tt ^ t[1], 1); | ||
97 | |||
98 | /* Chi */ | ||
99 | bc[ 0] = ~st[ 1] & st[ 2]; | ||
100 | bc[ 1] = ~st[ 2] & st[ 3]; | ||
101 | bc[ 2] = ~st[ 3] & st[ 4]; | ||
102 | bc[ 3] = ~st[ 4] & st[ 0]; | ||
103 | bc[ 4] = ~st[ 0] & st[ 1]; | ||
104 | st[ 0] ^= bc[ 0]; | ||
105 | st[ 1] ^= bc[ 1]; | ||
106 | st[ 2] ^= bc[ 2]; | ||
107 | st[ 3] ^= bc[ 3]; | ||
108 | st[ 4] ^= bc[ 4]; | ||
109 | |||
110 | bc[ 0] = ~st[ 6] & st[ 7]; | ||
111 | bc[ 1] = ~st[ 7] & st[ 8]; | ||
112 | bc[ 2] = ~st[ 8] & st[ 9]; | ||
113 | bc[ 3] = ~st[ 9] & st[ 5]; | ||
114 | bc[ 4] = ~st[ 5] & st[ 6]; | ||
115 | st[ 5] ^= bc[ 0]; | ||
116 | st[ 6] ^= bc[ 1]; | ||
117 | st[ 7] ^= bc[ 2]; | ||
118 | st[ 8] ^= bc[ 3]; | ||
119 | st[ 9] ^= bc[ 4]; | ||
120 | |||
121 | bc[ 0] = ~st[11] & st[12]; | ||
122 | bc[ 1] = ~st[12] & st[13]; | ||
123 | bc[ 2] = ~st[13] & st[14]; | ||
124 | bc[ 3] = ~st[14] & st[10]; | ||
125 | bc[ 4] = ~st[10] & st[11]; | ||
126 | st[10] ^= bc[ 0]; | ||
127 | st[11] ^= bc[ 1]; | ||
128 | st[12] ^= bc[ 2]; | ||
129 | st[13] ^= bc[ 3]; | ||
130 | st[14] ^= bc[ 4]; | ||
131 | |||
132 | bc[ 0] = ~st[16] & st[17]; | ||
133 | bc[ 1] = ~st[17] & st[18]; | ||
134 | bc[ 2] = ~st[18] & st[19]; | ||
135 | bc[ 3] = ~st[19] & st[15]; | ||
136 | bc[ 4] = ~st[15] & st[16]; | ||
137 | st[15] ^= bc[ 0]; | ||
138 | st[16] ^= bc[ 1]; | ||
139 | st[17] ^= bc[ 2]; | ||
140 | st[18] ^= bc[ 3]; | ||
141 | st[19] ^= bc[ 4]; | ||
142 | |||
143 | bc[ 0] = ~st[21] & st[22]; | ||
144 | bc[ 1] = ~st[22] & st[23]; | ||
145 | bc[ 2] = ~st[23] & st[24]; | ||
146 | bc[ 3] = ~st[24] & st[20]; | ||
147 | bc[ 4] = ~st[20] & st[21]; | ||
148 | st[20] ^= bc[ 0]; | ||
149 | st[21] ^= bc[ 1]; | ||
150 | st[22] ^= bc[ 2]; | ||
151 | st[23] ^= bc[ 3]; | ||
152 | st[24] ^= bc[ 4]; | ||
153 | } | ||
44 | 154 | ||
45 | /* Theta */ | 155 | static void __optimize("O3") keccakf(u64 st[25]) |
46 | bc[0] = st[0] ^ st[5] ^ st[10] ^ st[15] ^ st[20]; | 156 | { |
47 | bc[1] = st[1] ^ st[6] ^ st[11] ^ st[16] ^ st[21]; | 157 | int round; |
48 | bc[2] = st[2] ^ st[7] ^ st[12] ^ st[17] ^ st[22]; | ||
49 | bc[3] = st[3] ^ st[8] ^ st[13] ^ st[18] ^ st[23]; | ||
50 | bc[4] = st[4] ^ st[9] ^ st[14] ^ st[19] ^ st[24]; | ||
51 | |||
52 | t[0] = bc[4] ^ rol64(bc[1], 1); | ||
53 | t[1] = bc[0] ^ rol64(bc[2], 1); | ||
54 | t[2] = bc[1] ^ rol64(bc[3], 1); | ||
55 | t[3] = bc[2] ^ rol64(bc[4], 1); | ||
56 | t[4] = bc[3] ^ rol64(bc[0], 1); | ||
57 | |||
58 | st[0] ^= t[0]; | ||
59 | |||
60 | /* Rho Pi */ | ||
61 | tt = st[1]; | ||
62 | st[ 1] = rol64(st[ 6] ^ t[1], 44); | ||
63 | st[ 6] = rol64(st[ 9] ^ t[4], 20); | ||
64 | st[ 9] = rol64(st[22] ^ t[2], 61); | ||
65 | st[22] = rol64(st[14] ^ t[4], 39); | ||
66 | st[14] = rol64(st[20] ^ t[0], 18); | ||
67 | st[20] = rol64(st[ 2] ^ t[2], 62); | ||
68 | st[ 2] = rol64(st[12] ^ t[2], 43); | ||
69 | st[12] = rol64(st[13] ^ t[3], 25); | ||
70 | st[13] = rol64(st[19] ^ t[4], 8); | ||
71 | st[19] = rol64(st[23] ^ t[3], 56); | ||
72 | st[23] = rol64(st[15] ^ t[0], 41); | ||
73 | st[15] = rol64(st[ 4] ^ t[4], 27); | ||
74 | st[ 4] = rol64(st[24] ^ t[4], 14); | ||
75 | st[24] = rol64(st[21] ^ t[1], 2); | ||
76 | st[21] = rol64(st[ 8] ^ t[3], 55); | ||
77 | st[ 8] = rol64(st[16] ^ t[1], 45); | ||
78 | st[16] = rol64(st[ 5] ^ t[0], 36); | ||
79 | st[ 5] = rol64(st[ 3] ^ t[3], 28); | ||
80 | st[ 3] = rol64(st[18] ^ t[3], 21); | ||
81 | st[18] = rol64(st[17] ^ t[2], 15); | ||
82 | st[17] = rol64(st[11] ^ t[1], 10); | ||
83 | st[11] = rol64(st[ 7] ^ t[2], 6); | ||
84 | st[ 7] = rol64(st[10] ^ t[0], 3); | ||
85 | st[10] = rol64( tt ^ t[1], 1); | ||
86 | |||
87 | /* Chi */ | ||
88 | bc[ 0] = ~st[ 1] & st[ 2]; | ||
89 | bc[ 1] = ~st[ 2] & st[ 3]; | ||
90 | bc[ 2] = ~st[ 3] & st[ 4]; | ||
91 | bc[ 3] = ~st[ 4] & st[ 0]; | ||
92 | bc[ 4] = ~st[ 0] & st[ 1]; | ||
93 | st[ 0] ^= bc[ 0]; | ||
94 | st[ 1] ^= bc[ 1]; | ||
95 | st[ 2] ^= bc[ 2]; | ||
96 | st[ 3] ^= bc[ 3]; | ||
97 | st[ 4] ^= bc[ 4]; | ||
98 | |||
99 | bc[ 0] = ~st[ 6] & st[ 7]; | ||
100 | bc[ 1] = ~st[ 7] & st[ 8]; | ||
101 | bc[ 2] = ~st[ 8] & st[ 9]; | ||
102 | bc[ 3] = ~st[ 9] & st[ 5]; | ||
103 | bc[ 4] = ~st[ 5] & st[ 6]; | ||
104 | st[ 5] ^= bc[ 0]; | ||
105 | st[ 6] ^= bc[ 1]; | ||
106 | st[ 7] ^= bc[ 2]; | ||
107 | st[ 8] ^= bc[ 3]; | ||
108 | st[ 9] ^= bc[ 4]; | ||
109 | |||
110 | bc[ 0] = ~st[11] & st[12]; | ||
111 | bc[ 1] = ~st[12] & st[13]; | ||
112 | bc[ 2] = ~st[13] & st[14]; | ||
113 | bc[ 3] = ~st[14] & st[10]; | ||
114 | bc[ 4] = ~st[10] & st[11]; | ||
115 | st[10] ^= bc[ 0]; | ||
116 | st[11] ^= bc[ 1]; | ||
117 | st[12] ^= bc[ 2]; | ||
118 | st[13] ^= bc[ 3]; | ||
119 | st[14] ^= bc[ 4]; | ||
120 | |||
121 | bc[ 0] = ~st[16] & st[17]; | ||
122 | bc[ 1] = ~st[17] & st[18]; | ||
123 | bc[ 2] = ~st[18] & st[19]; | ||
124 | bc[ 3] = ~st[19] & st[15]; | ||
125 | bc[ 4] = ~st[15] & st[16]; | ||
126 | st[15] ^= bc[ 0]; | ||
127 | st[16] ^= bc[ 1]; | ||
128 | st[17] ^= bc[ 2]; | ||
129 | st[18] ^= bc[ 3]; | ||
130 | st[19] ^= bc[ 4]; | ||
131 | |||
132 | bc[ 0] = ~st[21] & st[22]; | ||
133 | bc[ 1] = ~st[22] & st[23]; | ||
134 | bc[ 2] = ~st[23] & st[24]; | ||
135 | bc[ 3] = ~st[24] & st[20]; | ||
136 | bc[ 4] = ~st[20] & st[21]; | ||
137 | st[20] ^= bc[ 0]; | ||
138 | st[21] ^= bc[ 1]; | ||
139 | st[22] ^= bc[ 2]; | ||
140 | st[23] ^= bc[ 3]; | ||
141 | st[24] ^= bc[ 4]; | ||
142 | 158 | ||
159 | for (round = 0; round < KECCAK_ROUNDS; round++) { | ||
160 | keccakf_round(st); | ||
143 | /* Iota */ | 161 | /* Iota */ |
144 | st[0] ^= keccakf_rndc[round]; | 162 | st[0] ^= keccakf_rndc[round]; |
145 | } | 163 | } |
diff --git a/drivers/crypto/caam/ctrl.c b/drivers/crypto/caam/ctrl.c index 75d280cb2dc0..e843cf410373 100644 --- a/drivers/crypto/caam/ctrl.c +++ b/drivers/crypto/caam/ctrl.c | |||
@@ -228,12 +228,16 @@ static int instantiate_rng(struct device *ctrldev, int state_handle_mask, | |||
228 | * without any error (HW optimizations for later | 228 | * without any error (HW optimizations for later |
229 | * CAAM eras), then try again. | 229 | * CAAM eras), then try again. |
230 | */ | 230 | */ |
231 | if (ret) | ||
232 | break; | ||
233 | |||
231 | rdsta_val = rd_reg32(&ctrl->r4tst[0].rdsta) & RDSTA_IFMASK; | 234 | rdsta_val = rd_reg32(&ctrl->r4tst[0].rdsta) & RDSTA_IFMASK; |
232 | if ((status && status != JRSTA_SSRC_JUMP_HALT_CC) || | 235 | if ((status && status != JRSTA_SSRC_JUMP_HALT_CC) || |
233 | !(rdsta_val & (1 << sh_idx))) | 236 | !(rdsta_val & (1 << sh_idx))) { |
234 | ret = -EAGAIN; | 237 | ret = -EAGAIN; |
235 | if (ret) | ||
236 | break; | 238 | break; |
239 | } | ||
240 | |||
237 | dev_info(ctrldev, "Instantiated RNG4 SH%d\n", sh_idx); | 241 | dev_info(ctrldev, "Instantiated RNG4 SH%d\n", sh_idx); |
238 | /* Clear the contents before recreating the descriptor */ | 242 | /* Clear the contents before recreating the descriptor */ |
239 | memset(desc, 0x00, CAAM_CMD_SZ * 7); | 243 | memset(desc, 0x00, CAAM_CMD_SZ * 7); |
diff --git a/drivers/crypto/sunxi-ss/sun4i-ss-prng.c b/drivers/crypto/sunxi-ss/sun4i-ss-prng.c index 0d01d1624252..63d636424161 100644 --- a/drivers/crypto/sunxi-ss/sun4i-ss-prng.c +++ b/drivers/crypto/sunxi-ss/sun4i-ss-prng.c | |||
@@ -28,7 +28,7 @@ int sun4i_ss_prng_generate(struct crypto_rng *tfm, const u8 *src, | |||
28 | algt = container_of(alg, struct sun4i_ss_alg_template, alg.rng); | 28 | algt = container_of(alg, struct sun4i_ss_alg_template, alg.rng); |
29 | ss = algt->ss; | 29 | ss = algt->ss; |
30 | 30 | ||
31 | spin_lock(&ss->slock); | 31 | spin_lock_bh(&ss->slock); |
32 | 32 | ||
33 | writel(mode, ss->base + SS_CTL); | 33 | writel(mode, ss->base + SS_CTL); |
34 | 34 | ||
@@ -51,6 +51,6 @@ int sun4i_ss_prng_generate(struct crypto_rng *tfm, const u8 *src, | |||
51 | } | 51 | } |
52 | 52 | ||
53 | writel(0, ss->base + SS_CTL); | 53 | writel(0, ss->base + SS_CTL); |
54 | spin_unlock(&ss->slock); | 54 | spin_unlock_bh(&ss->slock); |
55 | return dlen; | 55 | return 0; |
56 | } | 56 | } |
diff --git a/drivers/crypto/talitos.c b/drivers/crypto/talitos.c index 9c80e0cb1664..6882fa2f8bad 100644 --- a/drivers/crypto/talitos.c +++ b/drivers/crypto/talitos.c | |||
@@ -1138,6 +1138,10 @@ static int talitos_sg_map(struct device *dev, struct scatterlist *src, | |||
1138 | struct talitos_private *priv = dev_get_drvdata(dev); | 1138 | struct talitos_private *priv = dev_get_drvdata(dev); |
1139 | bool is_sec1 = has_ftr_sec1(priv); | 1139 | bool is_sec1 = has_ftr_sec1(priv); |
1140 | 1140 | ||
1141 | if (!src) { | ||
1142 | to_talitos_ptr(ptr, 0, 0, is_sec1); | ||
1143 | return 1; | ||
1144 | } | ||
1141 | if (sg_count == 1) { | 1145 | if (sg_count == 1) { |
1142 | to_talitos_ptr(ptr, sg_dma_address(src) + offset, len, is_sec1); | 1146 | to_talitos_ptr(ptr, sg_dma_address(src) + offset, len, is_sec1); |
1143 | return sg_count; | 1147 | return sg_count; |
diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h index 631354acfa72..73bc63e0a1c4 100644 --- a/include/linux/compiler-gcc.h +++ b/include/linux/compiler-gcc.h | |||
@@ -167,8 +167,6 @@ | |||
167 | 167 | ||
168 | #if GCC_VERSION >= 40100 | 168 | #if GCC_VERSION >= 40100 |
169 | # define __compiletime_object_size(obj) __builtin_object_size(obj, 0) | 169 | # define __compiletime_object_size(obj) __builtin_object_size(obj, 0) |
170 | |||
171 | #define __nostackprotector __attribute__((__optimize__("no-stack-protector"))) | ||
172 | #endif | 170 | #endif |
173 | 171 | ||
174 | #if GCC_VERSION >= 40300 | 172 | #if GCC_VERSION >= 40300 |
@@ -196,6 +194,11 @@ | |||
196 | #endif /* __CHECKER__ */ | 194 | #endif /* __CHECKER__ */ |
197 | #endif /* GCC_VERSION >= 40300 */ | 195 | #endif /* GCC_VERSION >= 40300 */ |
198 | 196 | ||
197 | #if GCC_VERSION >= 40400 | ||
198 | #define __optimize(level) __attribute__((__optimize__(level))) | ||
199 | #define __nostackprotector __optimize("no-stack-protector") | ||
200 | #endif /* GCC_VERSION >= 40400 */ | ||
201 | |||
199 | #if GCC_VERSION >= 40500 | 202 | #if GCC_VERSION >= 40500 |
200 | 203 | ||
201 | #ifndef __CHECKER__ | 204 | #ifndef __CHECKER__ |
diff --git a/include/linux/compiler.h b/include/linux/compiler.h index c2cc57a2f508..e835fc0423ec 100644 --- a/include/linux/compiler.h +++ b/include/linux/compiler.h | |||
@@ -277,6 +277,10 @@ unsigned long read_word_at_a_time(const void *addr) | |||
277 | 277 | ||
278 | #endif /* __ASSEMBLY__ */ | 278 | #endif /* __ASSEMBLY__ */ |
279 | 279 | ||
280 | #ifndef __optimize | ||
281 | # define __optimize(level) | ||
282 | #endif | ||
283 | |||
280 | /* Compile time object size, -1 for unknown */ | 284 | /* Compile time object size, -1 for unknown */ |
281 | #ifndef __compiletime_object_size | 285 | #ifndef __compiletime_object_size |
282 | # define __compiletime_object_size(obj) -1 | 286 | # define __compiletime_object_size(obj) -1 |