efivars spinlock fix
PATCH 1/1 efivars spinlock fix
The patch below fixes a couple potential failures in the efivars module. First, it was calling kmalloc, which could sleep, while holding a spinlock. Second, it would fail to free allocated memory if copy_from_user() failed.
David, please apply.
Thanks,
Matt
--
Matt Domsch
Sr. Software Engineer
Dell Linux Solutions
www.dell.com/linux
#2 Linux Server provider with 17% in the US and 14% Worldwide (IDC)! #3 Unix provider with 18% in the US (Dataquest)!
arch/ia64/kernel/efivars.c renamed from arch/ia64/kernel/efivars.c.orig +2 -3
@@ -276,21 +276,20 @@if (!capable (CAP_SYS_ADMIN ))return -EACCES ; -spin_lock (&efivars_lock);MOD_INC_USE_COUNT ; var_data =kmalloc (size,GFP_KERNEL );if (!var_data) {MOD_DEC_USE_COUNT ; -spin_unlock (&efivars_lock);return -ENOMEM ; }if (copy_from_user (var_data, buffer, size)) {MOD_DEC_USE_COUNT ; -spin_unlock (&efivars_lock); +kfree (var_data);return -EFAULT ; } +spin_lock (&efivars_lock);/* Since the data ptr we've currently got is probably for a different variable find the right variable.