From: Clemens Ladisch Fix a wrong memory access in hpet_ioctl_common(). It was not possible to use the HPET_INFO ioctl from kernel space because it always called copy_to_user(). Signed-off-by: Clemens Ladisch Cc: Bob Picco Signed-off-by: Andrew Morton --- drivers/char/hpet.c | 8 ++++++-- 1 files changed, 6 insertions(+), 2 deletions(-) diff -puN drivers/char/hpet.c~hpet-fix-hpet_info-calls-from-kernel-space drivers/char/hpet.c --- devel/drivers/char/hpet.c~hpet-fix-hpet_info-calls-from-kernel-space 2005-10-11 18:08:42.000000000 -0700 +++ devel-akpm/drivers/char/hpet.c 2005-10-11 18:08:42.000000000 -0700 @@ -500,8 +500,12 @@ hpet_ioctl_common(struct hpet_dev *devp, readq(&timer->hpet_config) & Tn_PER_INT_CAP_MASK; info.hi_hpet = devp->hd_hpets->hp_which; info.hi_timer = devp - devp->hd_hpets->hp_dev; - if (copy_to_user((void __user *)arg, &info, sizeof(info))) - err = -EFAULT; + if (kernel) + memcpy((void *)arg, &info, sizeof(info)); + else + if (copy_to_user((void __user *)arg, &info, + sizeof(info))) + err = -EFAULT; break; } case HPET_EPI: _