| From stable-bounces@linux.kernel.org Mon Nov 20 09:11:33 2006 |
| Message-ID: <4561DFB6.9050304@gentoo.org> |
| Date: Mon, 20 Nov 2006 12:02:46 -0500 |
| From: Daniel Drake <dsd@gentoo.org> |
| To: stable@kernel.org |
| Cc: shaohua.li@intel.com |
| Subject: x86 microcode: don't check the size |
| |
| From: Shaohua Li <shaohua.li@intel.com> |
| |
| IA32 manual says if micorcode update's size is 0, then the size is |
| default size (2048 bytes). But this doesn't suggest all microcode |
| update's size should be above 2048 bytes to me. We actually had a |
| microcode update whose size is 1024 bytes. The patch just removed the |
| check. |
| |
| Backported to 2.6.18 by Daniel Drake. |
| |
| Signed-off-by: Daniel Drake <dsd@gentoo.org> |
| Signed-off-by: Chris Wright <chrisw@sous-sol.org> |
| --- |
| arch/i386/kernel/microcode.c | 9 ++------- |
| 1 file changed, 2 insertions(+), 7 deletions(-) |
| |
| --- linux-2.6.18.4.orig/arch/i386/kernel/microcode.c |
| +++ linux-2.6.18.4/arch/i386/kernel/microcode.c |
| @@ -250,14 +250,14 @@ static int find_matching_ucodes (void) |
| } |
| |
| total_size = get_totalsize(&mc_header); |
| - if ((cursor + total_size > user_buffer_size) || (total_size < DEFAULT_UCODE_TOTALSIZE)) { |
| + if (cursor + total_size > user_buffer_size) { |
| printk(KERN_ERR "microcode: error! Bad data in microcode data file\n"); |
| error = -EINVAL; |
| goto out; |
| } |
| |
| data_size = get_datasize(&mc_header); |
| - if ((data_size + MC_HEADER_SIZE > total_size) || (data_size < DEFAULT_UCODE_DATASIZE)) { |
| + if (data_size + MC_HEADER_SIZE > total_size) { |
| printk(KERN_ERR "microcode: error! Bad data in microcode data file\n"); |
| error = -EINVAL; |
| goto out; |
| @@ -460,11 +460,6 @@ static ssize_t microcode_write (struct f |
| { |
| ssize_t ret; |
| |
| - if (len < DEFAULT_UCODE_TOTALSIZE) { |
| - printk(KERN_ERR "microcode: not enough data\n"); |
| - return -EINVAL; |
| - } |
| - |
| if ((len >> PAGE_SHIFT) > num_physpages) { |
| printk(KERN_ERR "microcode: too much data (max %ld pages)\n", num_physpages); |
| return -EINVAL; |