Re: [PATCH 1/1] booke/wdt: fix incorrect WDIOC_GETSUPPORT return path

2012-08-06 Thread Kumar Gala

On Aug 5, 2012, at 10:10 PM, tiejun.chen wrote:

 On 07/30/2012 04:15 PM, Tiejun Chen wrote:
 We miss that correct WDIOC_GETSUPPORT return path when perform
 copy_to_user() properly.
 
 Any comments?
 
 Thanks
 Tiejun

Adding Timur, as he's touched watchdog last.

- k

 Signed-off-by: Tiejun Chen tiejun.c...@windriver.com
 ---
 drivers/watchdog/booke_wdt.c |7 ---
 1 files changed, 4 insertions(+), 3 deletions(-)
 
 diff --git a/drivers/watchdog/booke_wdt.c b/drivers/watchdog/booke_wdt.c
 index 3fe82d0..2be7f29 100644
 --- a/drivers/watchdog/booke_wdt.c
 +++ b/drivers/watchdog/booke_wdt.c
 @@ -162,12 +162,13 @@ static long booke_wdt_ioctl(struct file *file,
  unsigned int cmd, unsigned long arg)
 {
  u32 tmp = 0;
 -u32 __user *p = (u32 __user *)arg;
 +void __user *argp = (u32 __user *)arg;
 +u32 __user *p = argp;
 
  switch (cmd) {
  case WDIOC_GETSUPPORT:
 -if (copy_to_user((void *)arg, ident, sizeof(ident)))
 -return -EFAULT;
 +return copy_to_user(argp, ident,
 +sizeof(ident)) ? -EFAULT : 0;
  case WDIOC_GETSTATUS:
  return put_user(0, p);
  case WDIOC_GETBOOTSTATUS:
 

___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


Re: [PATCH 1/1] booke/wdt: fix incorrect WDIOC_GETSUPPORT return path

2012-08-06 Thread Tabi Timur-B04825
On Mon, Jul 30, 2012 at 3:15 AM, Tiejun Chen tiejun.c...@windriver.com wrote:
 We miss that correct WDIOC_GETSUPPORT return path when perform
 copy_to_user() properly.

Thanks for catching this.  I'm amazed that this driver still has bugs like this.

 diff --git a/drivers/watchdog/booke_wdt.c b/drivers/watchdog/booke_wdt.c
 index 3fe82d0..2be7f29 100644
 --- a/drivers/watchdog/booke_wdt.c
 +++ b/drivers/watchdog/booke_wdt.c
 @@ -162,12 +162,13 @@ static long booke_wdt_ioctl(struct file *file,
 unsigned int cmd, unsigned long arg)
  {
 u32 tmp = 0;
 -   u32 __user *p = (u32 __user *)arg;
 +   void __user *argp = (u32 __user *)arg;
 +   u32 __user *p = argp;

You don't need to create 'argp'.  The existing 'p' variable will work
in the copy_to_user() call.

 +   return copy_to_user(argp, ident,
 +   sizeof(ident)) ? -EFAULT : 0;

This can fit in one line, especially if you use 'p' instead of 'argp'.

-- 
Timur Tabi
Linux kernel developer at Freescale
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


Re: [PATCH 1/1] booke/wdt: fix incorrect WDIOC_GETSUPPORT return path

2012-08-06 Thread Tabi Timur-B04825
On Mon, Aug 6, 2012 at 2:12 PM, Tabi Timur-B04825 b04...@freescale.com wrote:
 On Mon, Jul 30, 2012 at 3:15 AM, Tiejun Chen tiejun.c...@windriver.com 
 wrote:
 We miss that correct WDIOC_GETSUPPORT return path when perform
 copy_to_user() properly.

 Thanks for catching this.  I'm amazed that this driver still has bugs like 
 this.

While you're at it, I found a few related bugs.  Can you fix these, also?

1.  case WDIOC_SETOPTIONS:
if (get_user(tmp, p))
return -EINVAL;

This should return -EFAULT.

2.  case WDIOC_GETBOOTSTATUS:
/* XXX: something is clearing TSR */
tmp = mfspr(SPRN_TSR)  TSR_WRS(3);
/* returns CARDRESET if last reset was caused by the WDT */
return (tmp ? WDIOF_CARDRESET : 0);

This should use put_user() to return the value, instead of returning
it as a return code.

You can title the new patch something like, booke/wdt: some ioctls do
not return values properly

-- 
Timur Tabi
Linux kernel developer at Freescale
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


Re: [PATCH 1/1] booke/wdt: fix incorrect WDIOC_GETSUPPORT return path

2012-08-06 Thread tiejun.chen
On 08/07/2012 09:19 AM, Tabi Timur-B04825 wrote:
 On Mon, Aug 6, 2012 at 2:12 PM, Tabi Timur-B04825 b04...@freescale.com 
 wrote:
 On Mon, Jul 30, 2012 at 3:15 AM, Tiejun Chen tiejun.c...@windriver.com 
 wrote:
 We miss that correct WDIOC_GETSUPPORT return path when perform
 copy_to_user() properly.

 Thanks for catching this.  I'm amazed that this driver still has bugs like 
 this.
 
 While you're at it, I found a few related bugs.  Can you fix these, also?
 
 1.case WDIOC_SETOPTIONS:
   if (get_user(tmp, p))
   return -EINVAL;
 
 This should return -EFAULT.
 
 2.case WDIOC_GETBOOTSTATUS:
   /* XXX: something is clearing TSR */
   tmp = mfspr(SPRN_TSR)  TSR_WRS(3);
   /* returns CARDRESET if last reset was caused by the WDT */
   return (tmp ? WDIOF_CARDRESET : 0);
 
 This should use put_user() to return the value, instead of returning
 it as a return code.
 
 You can title the new patch something like, booke/wdt: some ioctls do
 not return values properly

Will regenerate this patch including these error as v2.

Thanks
Tiejun
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


Re: [PATCH 1/1] booke/wdt: fix incorrect WDIOC_GETSUPPORT return path

2012-08-05 Thread tiejun.chen
On 07/30/2012 04:15 PM, Tiejun Chen wrote:
 We miss that correct WDIOC_GETSUPPORT return path when perform
 copy_to_user() properly.

Any comments?

Thanks
Tiejun

 
 Signed-off-by: Tiejun Chen tiejun.c...@windriver.com
 ---
  drivers/watchdog/booke_wdt.c |7 ---
  1 files changed, 4 insertions(+), 3 deletions(-)
 
 diff --git a/drivers/watchdog/booke_wdt.c b/drivers/watchdog/booke_wdt.c
 index 3fe82d0..2be7f29 100644
 --- a/drivers/watchdog/booke_wdt.c
 +++ b/drivers/watchdog/booke_wdt.c
 @@ -162,12 +162,13 @@ static long booke_wdt_ioctl(struct file *file,
   unsigned int cmd, unsigned long arg)
  {
   u32 tmp = 0;
 - u32 __user *p = (u32 __user *)arg;
 + void __user *argp = (u32 __user *)arg;
 + u32 __user *p = argp;
  
   switch (cmd) {
   case WDIOC_GETSUPPORT:
 - if (copy_to_user((void *)arg, ident, sizeof(ident)))
 - return -EFAULT;
 + return copy_to_user(argp, ident,
 + sizeof(ident)) ? -EFAULT : 0;
   case WDIOC_GETSTATUS:
   return put_user(0, p);
   case WDIOC_GETBOOTSTATUS:
 

___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev