2013-10-11 23:06:22

by Roel Kluin

[permalink] [raw]
Subject: lockdep: testing '0' where '\0' intended?

Not entirely sure about the assembly part, but shouldn't it...
--------
Test for the nul character rather than the '0' (== 0x30), in the
__get_user_unknown() case.

Signed-off-by: Roel Kluin <[email protected]>
---
diff --git a/kernel/lockdep_proc.c b/kernel/lockdep_proc.c
index b2c71c5..71b3aba 100644
--- a/kernel/lockdep_proc.c
+++ b/kernel/lockdep_proc.c
@@ -632,7 +632,7 @@ static ssize_t lock_stat_write(struct file *file,
const char __user *buf,
if (get_user(c, buf))
return -EFAULT;

- if (c != '0')
+ if (c != '\0')
return count;

list_for_each_entry(class, &all_lock_classes, lock_entry)


2013-10-12 14:41:09

by Peter Zijlstra

[permalink] [raw]
Subject: Re: lockdep: testing '0' where '\0' intended?

On Sat, Oct 12, 2013 at 01:06:03AM +0200, Roel Kluin wrote:
> Not entirely sure about the assembly part, but shouldn't it...
> --------
> Test for the nul character rather than the '0' (== 0x30), in the
> __get_user_unknown() case.
>
> Signed-off-by: Roel Kluin <[email protected]>
> ---
> diff --git a/kernel/lockdep_proc.c b/kernel/lockdep_proc.c
> index b2c71c5..71b3aba 100644
> --- a/kernel/lockdep_proc.c
> +++ b/kernel/lockdep_proc.c
> @@ -632,7 +632,7 @@ static ssize_t lock_stat_write(struct file *file,
> const char __user *buf,
> if (get_user(c, buf))
> return -EFAULT;
>
> - if (c != '0')
> + if (c != '\0')

No we really meant '0'. Its so that:

echo 0 > /proc/lock_stat

resets the stats.