From: Ben Collins You are supposed to be able to pass a NULL handler to register_ioctl32_conversion to signify a compatible translation, IOW, use the 64-bit ioctl handler. Without this patch, we would instead jump to a NULL address. fs/compat.c | 7 ++++--- 1 files changed, 4 insertions(+), 3 deletions(-) diff -puN fs/compat.c~compat-ioctl-fix fs/compat.c --- 25/fs/compat.c~compat-ioctl-fix 2003-04-30 20:38:18.000000000 -0700 +++ 25-akpm/fs/compat.c 2003-04-30 20:38:18.000000000 -0700 @@ -300,7 +300,6 @@ asmlinkage long compat_sys_ioctl(unsigne { struct file * filp; int error = -EBADF; - int (*handler)(unsigned int, unsigned int, unsigned long, struct file * filp); struct ioctl_trans *t; filp = fget(fd); @@ -317,8 +316,10 @@ asmlinkage long compat_sys_ioctl(unsigne while (t && t->cmd != cmd) t = (struct ioctl_trans *)t->next; if (t) { - handler = t->handler; - error = handler(fd, cmd, arg, filp); + if (t->handler) + error = t->handler(fd, cmd, arg, filp); + else + error = sys_ioctl(fd, cmd, arg); } else if (cmd >= SIOCDEVPRIVATE && cmd <= (SIOCDEVPRIVATE + 15)) { error = siocdevprivate_ioctl(fd, cmd, arg); } else { _