
From: Ben Collins <bcollins@debian.org>

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 {

_
