diff options
Diffstat (limited to 'arch/x86')
-rw-r--r-- | arch/x86/crypto/crc32c-intel.c | 121 | ||||
-rw-r--r-- | arch/x86/ia32/ia32_aout.c | 2 | ||||
-rw-r--r-- | arch/x86/mm/fault.c | 2 |
3 files changed, 63 insertions, 62 deletions
diff --git a/arch/x86/crypto/crc32c-intel.c b/arch/x86/crypto/crc32c-intel.c index 070afc5b6c94..b9d00261703c 100644 --- a/arch/x86/crypto/crc32c-intel.c +++ b/arch/x86/crypto/crc32c-intel.c | |||
@@ -6,13 +6,22 @@ | |||
6 | * Intel(R) 64 and IA-32 Architectures Software Developer's Manual | 6 | * Intel(R) 64 and IA-32 Architectures Software Developer's Manual |
7 | * Volume 2A: Instruction Set Reference, A-M | 7 | * Volume 2A: Instruction Set Reference, A-M |
8 | * | 8 | * |
9 | * Copyright (c) 2008 Austin Zhang <austin_zhang@linux.intel.com> | 9 | * Copyright (C) 2008 Intel Corporation |
10 | * Copyright (c) 2008 Kent Liu <kent.liu@intel.com> | 10 | * Authors: Austin Zhang <austin_zhang@linux.intel.com> |
11 | * Kent Liu <kent.liu@intel.com> | ||
11 | * | 12 | * |
12 | * This program is free software; you can redistribute it and/or modify it | 13 | * This program is free software; you can redistribute it and/or modify it |
13 | * under the terms of the GNU General Public License as published by the Free | 14 | * under the terms and conditions of the GNU General Public License, |
14 | * Software Foundation; either version 2 of the License, or (at your option) | 15 | * version 2, as published by the Free Software Foundation. |
15 | * any later version. | 16 | * |
17 | * This program is distributed in the hope it will be useful, but WITHOUT | ||
18 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
19 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
20 | * more details. | ||
21 | * | ||
22 | * You should have received a copy of the GNU General Public License along with | ||
23 | * this program; if not, write to the Free Software Foundation, Inc., | ||
24 | * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | ||
16 | * | 25 | * |
17 | */ | 26 | */ |
18 | #include <linux/init.h> | 27 | #include <linux/init.h> |
@@ -75,99 +84,92 @@ static u32 __pure crc32c_intel_le_hw(u32 crc, unsigned char const *p, size_t len | |||
75 | * If your algorithm starts with ~0, then XOR with ~0 before you set | 84 | * If your algorithm starts with ~0, then XOR with ~0 before you set |
76 | * the seed. | 85 | * the seed. |
77 | */ | 86 | */ |
78 | static int crc32c_intel_setkey(struct crypto_ahash *hash, const u8 *key, | 87 | static int crc32c_intel_setkey(struct crypto_shash *hash, const u8 *key, |
79 | unsigned int keylen) | 88 | unsigned int keylen) |
80 | { | 89 | { |
81 | u32 *mctx = crypto_ahash_ctx(hash); | 90 | u32 *mctx = crypto_shash_ctx(hash); |
82 | 91 | ||
83 | if (keylen != sizeof(u32)) { | 92 | if (keylen != sizeof(u32)) { |
84 | crypto_ahash_set_flags(hash, CRYPTO_TFM_RES_BAD_KEY_LEN); | 93 | crypto_shash_set_flags(hash, CRYPTO_TFM_RES_BAD_KEY_LEN); |
85 | return -EINVAL; | 94 | return -EINVAL; |
86 | } | 95 | } |
87 | *mctx = le32_to_cpup((__le32 *)key); | 96 | *mctx = le32_to_cpup((__le32 *)key); |
88 | return 0; | 97 | return 0; |
89 | } | 98 | } |
90 | 99 | ||
91 | static int crc32c_intel_init(struct ahash_request *req) | 100 | static int crc32c_intel_init(struct shash_desc *desc) |
92 | { | 101 | { |
93 | u32 *mctx = crypto_ahash_ctx(crypto_ahash_reqtfm(req)); | 102 | u32 *mctx = crypto_shash_ctx(desc->tfm); |
94 | u32 *crcp = ahash_request_ctx(req); | 103 | u32 *crcp = shash_desc_ctx(desc); |
95 | 104 | ||
96 | *crcp = *mctx; | 105 | *crcp = *mctx; |
97 | 106 | ||
98 | return 0; | 107 | return 0; |
99 | } | 108 | } |
100 | 109 | ||
101 | static int crc32c_intel_update(struct ahash_request *req) | 110 | static int crc32c_intel_update(struct shash_desc *desc, const u8 *data, |
111 | unsigned int len) | ||
102 | { | 112 | { |
103 | struct crypto_hash_walk walk; | 113 | u32 *crcp = shash_desc_ctx(desc); |
104 | u32 *crcp = ahash_request_ctx(req); | ||
105 | u32 crc = *crcp; | ||
106 | int nbytes; | ||
107 | |||
108 | for (nbytes = crypto_hash_walk_first(req, &walk); nbytes; | ||
109 | nbytes = crypto_hash_walk_done(&walk, 0)) | ||
110 | crc = crc32c_intel_le_hw(crc, walk.data, nbytes); | ||
111 | 114 | ||
112 | *crcp = crc; | 115 | *crcp = crc32c_intel_le_hw(*crcp, data, len); |
113 | return 0; | 116 | return 0; |
114 | } | 117 | } |
115 | 118 | ||
116 | static int crc32c_intel_final(struct ahash_request *req) | 119 | static int __crc32c_intel_finup(u32 *crcp, const u8 *data, unsigned int len, |
120 | u8 *out) | ||
117 | { | 121 | { |
118 | u32 *crcp = ahash_request_ctx(req); | 122 | *(__le32 *)out = ~cpu_to_le32(crc32c_intel_le_hw(*crcp, data, len)); |
119 | |||
120 | *(__le32 *)req->result = ~cpu_to_le32p(crcp); | ||
121 | return 0; | 123 | return 0; |
122 | } | 124 | } |
123 | 125 | ||
124 | static int crc32c_intel_digest(struct ahash_request *req) | 126 | static int crc32c_intel_finup(struct shash_desc *desc, const u8 *data, |
127 | unsigned int len, u8 *out) | ||
125 | { | 128 | { |
126 | struct crypto_hash_walk walk; | 129 | return __crc32c_intel_finup(shash_desc_ctx(desc), data, len, out); |
127 | u32 *mctx = crypto_ahash_ctx(crypto_ahash_reqtfm(req)); | 130 | } |
128 | u32 crc = *mctx; | ||
129 | int nbytes; | ||
130 | 131 | ||
131 | for (nbytes = crypto_hash_walk_first(req, &walk); nbytes; | 132 | static int crc32c_intel_final(struct shash_desc *desc, u8 *out) |
132 | nbytes = crypto_hash_walk_done(&walk, 0)) | 133 | { |
133 | crc = crc32c_intel_le_hw(crc, walk.data, nbytes); | 134 | u32 *crcp = shash_desc_ctx(desc); |
134 | 135 | ||
135 | *(__le32 *)req->result = ~cpu_to_le32(crc); | 136 | *(__le32 *)out = ~cpu_to_le32p(crcp); |
136 | return 0; | 137 | return 0; |
137 | } | 138 | } |
138 | 139 | ||
140 | static int crc32c_intel_digest(struct shash_desc *desc, const u8 *data, | ||
141 | unsigned int len, u8 *out) | ||
142 | { | ||
143 | return __crc32c_intel_finup(crypto_shash_ctx(desc->tfm), data, len, | ||
144 | out); | ||
145 | } | ||
146 | |||
139 | static int crc32c_intel_cra_init(struct crypto_tfm *tfm) | 147 | static int crc32c_intel_cra_init(struct crypto_tfm *tfm) |
140 | { | 148 | { |
141 | u32 *key = crypto_tfm_ctx(tfm); | 149 | u32 *key = crypto_tfm_ctx(tfm); |
142 | 150 | ||
143 | *key = ~0; | 151 | *key = ~0; |
144 | 152 | ||
145 | tfm->crt_ahash.reqsize = sizeof(u32); | ||
146 | |||
147 | return 0; | 153 | return 0; |
148 | } | 154 | } |
149 | 155 | ||
150 | static struct crypto_alg alg = { | 156 | static struct shash_alg alg = { |
151 | .cra_name = "crc32c", | 157 | .setkey = crc32c_intel_setkey, |
152 | .cra_driver_name = "crc32c-intel", | 158 | .init = crc32c_intel_init, |
153 | .cra_priority = 200, | 159 | .update = crc32c_intel_update, |
154 | .cra_flags = CRYPTO_ALG_TYPE_AHASH, | 160 | .final = crc32c_intel_final, |
155 | .cra_blocksize = CHKSUM_BLOCK_SIZE, | 161 | .finup = crc32c_intel_finup, |
156 | .cra_alignmask = 3, | 162 | .digest = crc32c_intel_digest, |
157 | .cra_ctxsize = sizeof(u32), | 163 | .descsize = sizeof(u32), |
158 | .cra_module = THIS_MODULE, | 164 | .digestsize = CHKSUM_DIGEST_SIZE, |
159 | .cra_list = LIST_HEAD_INIT(alg.cra_list), | 165 | .base = { |
160 | .cra_init = crc32c_intel_cra_init, | 166 | .cra_name = "crc32c", |
161 | .cra_type = &crypto_ahash_type, | 167 | .cra_driver_name = "crc32c-intel", |
162 | .cra_u = { | 168 | .cra_priority = 200, |
163 | .ahash = { | 169 | .cra_blocksize = CHKSUM_BLOCK_SIZE, |
164 | .digestsize = CHKSUM_DIGEST_SIZE, | 170 | .cra_ctxsize = sizeof(u32), |
165 | .setkey = crc32c_intel_setkey, | 171 | .cra_module = THIS_MODULE, |
166 | .init = crc32c_intel_init, | 172 | .cra_init = crc32c_intel_cra_init, |
167 | .update = crc32c_intel_update, | ||
168 | .final = crc32c_intel_final, | ||
169 | .digest = crc32c_intel_digest, | ||
170 | } | ||
171 | } | 173 | } |
172 | }; | 174 | }; |
173 | 175 | ||
@@ -175,14 +177,14 @@ static struct crypto_alg alg = { | |||
175 | static int __init crc32c_intel_mod_init(void) | 177 | static int __init crc32c_intel_mod_init(void) |
176 | { | 178 | { |
177 | if (cpu_has_xmm4_2) | 179 | if (cpu_has_xmm4_2) |
178 | return crypto_register_alg(&alg); | 180 | return crypto_register_shash(&alg); |
179 | else | 181 | else |
180 | return -ENODEV; | 182 | return -ENODEV; |
181 | } | 183 | } |
182 | 184 | ||
183 | static void __exit crc32c_intel_mod_fini(void) | 185 | static void __exit crc32c_intel_mod_fini(void) |
184 | { | 186 | { |
185 | crypto_unregister_alg(&alg); | 187 | crypto_unregister_shash(&alg); |
186 | } | 188 | } |
187 | 189 | ||
188 | module_init(crc32c_intel_mod_init); | 190 | module_init(crc32c_intel_mod_init); |
@@ -194,4 +196,3 @@ MODULE_LICENSE("GPL"); | |||
194 | 196 | ||
195 | MODULE_ALIAS("crc32c"); | 197 | MODULE_ALIAS("crc32c"); |
196 | MODULE_ALIAS("crc32c-intel"); | 198 | MODULE_ALIAS("crc32c-intel"); |
197 | |||
diff --git a/arch/x86/ia32/ia32_aout.c b/arch/x86/ia32/ia32_aout.c index 127ec3f07214..2a4d073d2cf1 100644 --- a/arch/x86/ia32/ia32_aout.c +++ b/arch/x86/ia32/ia32_aout.c | |||
@@ -327,7 +327,7 @@ static int load_aout_binary(struct linux_binprm *bprm, struct pt_regs *regs) | |||
327 | current->mm->cached_hole_size = 0; | 327 | current->mm->cached_hole_size = 0; |
328 | 328 | ||
329 | current->mm->mmap = NULL; | 329 | current->mm->mmap = NULL; |
330 | compute_creds(bprm); | 330 | install_exec_creds(bprm); |
331 | current->flags &= ~PF_FORKNOEXEC; | 331 | current->flags &= ~PF_FORKNOEXEC; |
332 | 332 | ||
333 | if (N_MAGIC(ex) == OMAGIC) { | 333 | if (N_MAGIC(ex) == OMAGIC) { |
diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c index 20ef272c412c..46b5f753ff81 100644 --- a/arch/x86/mm/fault.c +++ b/arch/x86/mm/fault.c | |||
@@ -393,7 +393,7 @@ static void show_fault_oops(struct pt_regs *regs, unsigned long error_code, | |||
393 | if (pte && pte_present(*pte) && !pte_exec(*pte)) | 393 | if (pte && pte_present(*pte) && !pte_exec(*pte)) |
394 | printk(KERN_CRIT "kernel tried to execute " | 394 | printk(KERN_CRIT "kernel tried to execute " |
395 | "NX-protected page - exploit attempt? " | 395 | "NX-protected page - exploit attempt? " |
396 | "(uid: %d)\n", current->uid); | 396 | "(uid: %d)\n", current_uid()); |
397 | } | 397 | } |
398 | #endif | 398 | #endif |
399 | 399 | ||