S.Çağlar Onur
2006-Oct-17 19:10 UTC
[Xen-devel] [PATCH] Don''t allow MICROCODE built as a modul
Hi; Attached patch [against xen-3.0.3-testing.hg] fixes "/lib/modules/2.6.12.6-xen/kernel/arch/xen/i386/kernel/microcode.ko needs unknown symbol sys_munlock" problem by not allowing microcode as a module. Cheers -- S.Çağlar Onur <caglar@pardus.org.tr> http://cekirdek.pardus.org.tr/~caglar/ Linux is like living in a teepee. No Windows, no Gates and an Apache in house! _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Keir Fraser
2006-Oct-17 19:54 UTC
Re: [Xen-devel] [PATCH] Don''t allow MICROCODE built as a modul
On 17/10/06 8:10 pm, "S.Çağlar Onur" <caglar@pardus.org.tr> wrote:> Hi; > > Attached patch [against xen-3.0.3-testing.hg] > fixes "/lib/modules/2.6.12.6-xen/kernel/arch/xen/i386/kernel/microcode.ko > needs unknown symbol sys_munlock" problem by not allowing microcode as a > module.That''s not fixing the underlying problem. Why would the microcode driver require sys_munlock()? I''m sure one of the distros would have provided a patch already if they were seeing this problem. -- Keir _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Keir Fraser
2006-Oct-17 20:19 UTC
Re: [Xen-devel] [PATCH] Don''t allow MICROCODE built as a modul
On 17/10/06 9:20 pm, "S.Çağlar Onur" <caglar@pardus.org.tr> wrote:> 17 Eki 2006 Sal 22:54 tarihinde, Keir Fraser şunları yazmıştı: >> That''s not fixing the underlying problem. Why would the microcode driver >> require sys_munlock()? I''m sure one of the distros would have provided a >> patch already if they were seeing this problem. > > Hmm, a little google search shows SUSE already has [1], im not sure original > author submits or not but here it is [2] > > [1] http://lists.opensuse.org/opensuse-commit/2006-04/msg00962.html > [2] http://cekirdek.pardus.org.tr/~caglar/xen-microcode-modularAh yes, that looks sensible. Perhaps if we ask nicely Jan will post it to the list with a signed-off-by attribution. :-) -- Keir _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
S.Çağlar Onur
2006-Oct-17 20:20 UTC
Re: [Xen-devel] [PATCH] Don''t allow MICROCODE built as a modul
17 Eki 2006 Sal 22:54 tarihinde, Keir Fraser şunları yazmıştı:> That''s not fixing the underlying problem. Why would the microcode driver > require sys_munlock()? I''m sure one of the distros would have provided a > patch already if they were seeing this problem.Hmm, a little google search shows SUSE already has [1], im not sure original author submits or not but here it is [2] [1] http://lists.opensuse.org/opensuse-commit/2006-04/msg00962.html [2] http://cekirdek.pardus.org.tr/~caglar/xen-microcode-modular -- S.Çağlar Onur <caglar@pardus.org.tr> http://cekirdek.pardus.org.tr/~caglar/ Linux is like living in a teepee. No Windows, no Gates and an Apache in house! _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Jan Beulich
2006-Oct-18 08:44 UTC
Re: [Xen-devel] [PATCH] Don''t allow MICROCODE built as a modul
>>> Keir Fraser <Keir.Fraser@cl.cam.ac.uk> 17.10.06 22:19 >>> >On 17/10/06 9:20 pm, "S.Ça*lar Onur" <caglar@pardus.org.tr> wrote: > >> 17 Eki 2006 Sal 22:54 tarihinde, Keir Fraser *unlar* yazm**t*: >>> That''s not fixing the underlying problem. Why would the microcode driver >>> require sys_munlock()? I''m sure one of the distros would have provided a >>> patch already if they were seeing this problem. >> >> Hmm, a little google search shows SUSE already has [1], im not sure original >> author submits or not but here it is [2] >> >> [1] http://lists.opensuse.org/opensuse-commit/2006-04/msg00962.html >> [2] http://cekirdek.pardus.org.tr/~caglar/xen-microcode-modular > >Ah yes, that looks sensible. Perhaps if we ask nicely Jan will post it to >the list with a signed-off-by attribution. :-)Eliminating the dependency on sys_m{,un}lock as well as the needless use of static variables. Signed-off-by: Jan Beulich <jbeulich@novell.com> Index: sle10-sp1-2006-10-05/arch/i386/kernel/microcode-xen.c ==================================================================--- sle10-sp1-2006-10-05.orig/arch/i386/kernel/microcode-xen.c 2006-10-05 12:23:01.000000000 +0200 +++ sle10-sp1-2006-10-05/arch/i386/kernel/microcode-xen.c 2006-10-05 13:37:27.000000000 +0200 @@ -50,9 +50,6 @@ MODULE_LICENSE("GPL"); /* no concurrent ->write()s are allowed on /dev/cpu/microcode */ static DECLARE_MUTEX(microcode_sem); - -static void __user *user_buffer; /* user area microcode data buffer */ -static unsigned int user_buffer_size; /* it''s size */ static int microcode_open (struct inode *unused1, struct file *unused2) { @@ -60,21 +57,26 @@ static int microcode_open (struct inode } -static int do_microcode_update (void) +static int do_microcode_update (const void __user *ubuf, size_t len) { int err; - dom0_op_t op; + void *kbuf; - err = sys_mlock((unsigned long)user_buffer, user_buffer_size); - if (err != 0) - return err; - - op.cmd = DOM0_MICROCODE; - set_xen_guest_handle(op.u.microcode.data, user_buffer); - op.u.microcode.length = user_buffer_size; - err = HYPERVISOR_dom0_op(&op); + kbuf = vmalloc(len); + if (!kbuf) + return -ENOMEM; + + if (copy_from_user(kbuf, ubuf, len) == 0) { + dom0_op_t op; + + op.cmd = DOM0_MICROCODE; + set_xen_guest_handle(op.u.microcode.data, kbuf); + op.u.microcode.length = len; + err = HYPERVISOR_dom0_op(&op); + } else + err = -EFAULT; - (void)sys_munlock((unsigned long)user_buffer, user_buffer_size); + vfree(kbuf); return err; } @@ -88,17 +90,9 @@ static ssize_t microcode_write (struct f return -EINVAL; } - if ((len >> PAGE_SHIFT) > num_physpages) { - printk(KERN_ERR "microcode: too much data (max %ld pages)\n", num_physpages); - return -EINVAL; - } - down(µcode_sem); - user_buffer = (void __user *) buf; - user_buffer_size = (int) len; - - ret = do_microcode_update(); + ret = do_microcode_update(buf, len); if (!ret) ret = (ssize_t)len; _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel