--- linux-2.6.patch/arch/ppc/syslib/cpm_timer.c.orig 2005-03-31 14:50:29.000000000 -0500 +++ linux-2.6.patch/arch/ppc/syslib/cpm_timer.c 2005-03-31 15:01:39.417496033 -0500 @@ -114,12 +114,16 @@ tm->start = (timer_id>>4)&0xf; tm->end = timer_id & 0xf; - if (tm->start > 3) + if (tm->start > 3) { + kfree(tm); return -EINVAL; + } if ((tm->end != tm->start) && - ((tm->start & 1) || (tm->end != (tm->start+1)))) - return -EINVAL; + ((tm->start & 1) || (tm->end != (tm->start+1)))) { + kfree(tm); + return -EINVAL; + } err = request_resource(&cpm_timer_resource,tm); if (err < 0) {