ioctl() calls against a character special file with an inappropriate
ioctl operation are incorrectly returning EINVAL rather than ENOTTY:

  [ENOTTY]
      Inappropriate I/O control operation.

In dtlk I also fix the error code for failing to call copy_to_user.

Signed-off-by: Lifeng Sun <[email protected]>
---
 drivers/char/dtlk.c              |    4 ++--
 drivers/char/hpet.c              |    2 +-
 drivers/char/i8k.c               |    5 +----
 drivers/char/ipmi/ipmi_devintf.c |    3 +++
 drivers/char/random.c            |    2 +-
 5 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/drivers/char/dtlk.c b/drivers/char/dtlk.c
index 85156dd..a293431 100644
--- a/drivers/char/dtlk.c
+++ b/drivers/char/dtlk.c
@@ -281,7 +281,7 @@ static long dtlk_ioctl(struct file *file,
                sp = dtlk_interrogate();
                mutex_unlock(&dtlk_mutex);
                if (copy_to_user(argp, sp, sizeof(struct dtlk_settings)))
-                       return -EINVAL;
+                       return -EFAULT;
                return 0;
 
        case DTLK_STATUS:
@@ -289,7 +289,7 @@ static long dtlk_ioctl(struct file *file,
                return put_user(portval, argp);
 
        default:
-               return -EINVAL;
+               return -ENOTTY;
        }
 }
 
diff --git a/drivers/char/hpet.c b/drivers/char/hpet.c
index 7066e80..720de66 100644
--- a/drivers/char/hpet.c
+++ b/drivers/char/hpet.c
@@ -575,7 +575,7 @@ hpet_ioctl_common(struct hpet_dev *devp, int cmd, unsigned 
long arg,
        case HPET_IE_ON:
                return hpet_ioctl_ieon(devp);
        default:
-               return -EINVAL;
+               return -ENOTTY;
        }
 
        err = 0;
diff --git a/drivers/char/i8k.c b/drivers/char/i8k.c
index d72433f..baaa8cc 100644
--- a/drivers/char/i8k.c
+++ b/drivers/char/i8k.c
@@ -317,9 +317,6 @@ i8k_ioctl_unlocked(struct file *fp, unsigned int cmd, 
unsigned long arg)
        unsigned char buff[16];
        int __user *argp = (int __user *)arg;
 
-       if (!argp)
-               return -EINVAL;
-
        switch (cmd) {
        case I8K_BIOS_VERSION:
                val = i8k_get_bios_version();
@@ -370,7 +367,7 @@ i8k_ioctl_unlocked(struct file *fp, unsigned int cmd, 
unsigned long arg)
                break;
 
        default:
-               return -EINVAL;
+               return -ENOTTY;
        }
 
        if (val < 0)
diff --git a/drivers/char/ipmi/ipmi_devintf.c b/drivers/char/ipmi/ipmi_devintf.c
index 2aa3977..e4272f2 100644
--- a/drivers/char/ipmi/ipmi_devintf.c
+++ b/drivers/char/ipmi/ipmi_devintf.c
@@ -624,6 +624,9 @@ static int ipmi_ioctl(struct file   *file,
                rv = ipmi_set_maintenance_mode(priv->user, mode);
                break;
        }
+       default:
+               rv = -ENOTTY;
+               break;
        }
   
        return rv;
diff --git a/drivers/char/random.c b/drivers/char/random.c
index d4ddeba..40aad1c 100644
--- a/drivers/char/random.c
+++ b/drivers/char/random.c
@@ -1157,7 +1157,7 @@ static long random_ioctl(struct file *f, unsigned int 
cmd, unsigned long arg)
                rand_initialize();
                return 0;
        default:
-               return -EINVAL;
+               return -ENOTTY;
        }
 }
 
-- 
1.7.5.rc1


------------------------------------------------------------------------------
WhatsUp Gold - Download Free Network Management Software
The most intuitive, comprehensive, and cost-effective network 
management toolset available today.  Delivers lowest initial 
acquisition cost and overall TCO of any competing solution.
http://p.sf.net/sfu/whatsupgold-sd
_______________________________________________
Openipmi-developer mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openipmi-developer

Reply via email to