| Kernel v2.4.19-pre4-ac2 /arch/i386/kernel/microcode.c |
|---|
 2.4.19-pre4-ac2
 arch
 i386
 kernel
 microcode.c
diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.19p4/arch/i386/kernel/microcode.c linux.19pre4-ac2/arch/i386/ke+
rnel/microcode.c
--- linux.19p4/arch/i386/kernel/microcode.c Mon Mar 25 17:47:09 2002
+++ linux.19pre4-ac2/arch/i386/kernel/microcode.c Tue Mar 26 18:31:38 2002
@@ -55,6 +55,8 @@
* Tigran Aivazian <tigran@veritas.com>,
* Serialize updates as required on HT processors due to speculative
* nature of implementation.
+ * 1.11 22 Mar 2001 Tigran Aivazian <tigran@veritas.com>
+ * Fix the panic when writing zero-length microcode chunk.
*/
#include <linux/init.h>
@@ -73,7 +75,7 @@
static spinlock_t microcode_update_lock = SPIN_LOCK_UNLOCKED;
-#define MICROCODE_VERSION "1.10"
+#define MICROCODE_VERSION "1.11"
MODULE_DESCRIPTION("Intel CPU (IA-32) microcode update driver");
MODULE_AUTHOR("Tigran Aivazian <tigran@veritas.com>");
@@ -330,11 +332,15 @@
{
ssize_t ret;
- if (len % sizeof(struct microcode) != 0) {
+ if (!len || len % sizeof(struct microcode) != 0) {
printk(KERN_ERR "microcode: can only write in N*%d bytes units\n",
sizeof(struct microcode));
return -EINVAL;
}
+ if ((len >> PAGE_SHIFT) > num_physpages) {
+ printk(KERN_ERR "microcode: too much data (max %d pages)\n", num_physpages);
+ return -EINVAL;
+ }
down_write(µcode_rwsem);
if (!mc_applied) {
mc_applied = kmalloc(smp_num_cpus*sizeof(struct microcode),
|