From: David Teigland We were assuming the success of an allocation. Problem noticed by Stefan Richter Signed-off-by: David Teigland Signed-off-by: Andrew Morton --- drivers/dlm/device.c | 6 ++++-- 1 files changed, 4 insertions(+), 2 deletions(-) diff -puN drivers/dlm/device.c~dlm-device-interface-check-allocation drivers/dlm/device.c --- 25/drivers/dlm/device.c~dlm-device-interface-check-allocation Thu Jan 19 15:59:13 2006 +++ 25-akpm/drivers/dlm/device.c Thu Jan 19 15:59:13 2006 @@ -803,6 +803,8 @@ static int do_user_lock(struct file_info lockinfo again */ if (!li && (kparams->flags & DLM_LKF_PERSISTENT)) { li = allocate_lockinfo(fi, cmd, kparams); + if (!li) + return -ENOMEM; li->li_lksb.sb_lkid = kparams->lkid; li->li_castaddr = kparams->castaddr; @@ -915,12 +917,12 @@ static int do_user_unlock(struct file_in li = get_lockinfo(kparams->lkid); if (!li) { li = allocate_lockinfo(fi, cmd, kparams); + if (!li) + return -ENOMEM; spin_lock(&fi->fi_li_lock); list_add(&li->li_ownerqueue, &fi->fi_li_list); spin_unlock(&fi->fi_li_lock); } - if (!li) - return -ENOMEM; if (li->li_magic != LOCKINFO_MAGIC) return -EINVAL; _