linux-nfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Kinglong Mee <kinglongmee@gmail.com>
To: "J. Bruce Fields" <bfields@fieldses.org>
Cc: Trond Myklebust <trond.myklebust@primarydata.com>,
	"linux-nfs@vger.kernel.org" <linux-nfs@vger.kernel.org>,
	kinglongmee@gmail.com
Subject: Re: [PATCH] Sunrpc: Supports hexadecimal number for sysctl files of sunrpc debug
Date: Sat, 12 Sep 2015 09:34:40 +0800	[thread overview]
Message-ID: <55F38130.7020802@gmail.com> (raw)
In-Reply-To: <20150911212320.GG11677@fieldses.org>

On 9/12/2015 05:23, J. Bruce Fields wrote:
> On Thu, Sep 10, 2015 at 08:41:34PM +0800, Kinglong Mee wrote:
>> The sunrpc debug sysctl files only accept decimal number right now.
>> But all the XXXDBUG_XXX macros are defined as hexadecimal.
>> It is not easy to set or check an separate flag.
>>
>> This patch let those files support accepting hexadecimal number,
>> (decimal number is also supported). Also, display it as hexadecimal.
> 
> That potentially breaks backwards-compatibility if an program that reads
> this file isn't prepared to accept a hexadecimal value.
> 
> That said, rpcdebug seems OK (it uses strtoul(.,.,0), which I think
> should parse that fine?), and it may well be the only program that
> actually parses this, so....  I suppose it's OK with me if it's OK with
> Trond.

Thanks for your comments.
I have test of rpcdebug, it's OK when showing the debug flags.

> 
> --b.
> 
>>
>> Signed-off-by: Kinglong Mee <kinglongmee@gmail.com>
>> ---
>>  net/sunrpc/sysctl.c | 26 +++++++++++++++-----------
>>  1 file changed, 15 insertions(+), 11 deletions(-)
>>
>> diff --git a/net/sunrpc/sysctl.c b/net/sunrpc/sysctl.c
>> index 887f018..8e85e6f 100644
>> --- a/net/sunrpc/sysctl.c
>> +++ b/net/sunrpc/sysctl.c
>> @@ -76,7 +76,7 @@ static int
>>  proc_dodebug(struct ctl_table *table, int write,
>>  				void __user *buffer, size_t *lenp, loff_t *ppos)
>>  {
>> -	char		tmpbuf[20], c, *s;
>> +	char		tmpbuf[20], c, *s = NULL;
>>  	char __user *p;
>>  	unsigned int	value;
>>  	size_t		left, len;
>> @@ -103,23 +103,27 @@ proc_dodebug(struct ctl_table *table, int write,
>>  			return -EFAULT;
>>  		tmpbuf[left] = '\0';
>>  
>> -		for (s = tmpbuf, value = 0; '0' <= *s && *s <= '9'; s++, left--)
>> -			value = 10 * value + (*s - '0');
>> -		if (*s && !isspace(*s))
>> -			return -EINVAL;
>> -		while (left && isspace(*s))
>> -			left--, s++;
>> +		if (tmpbuf[0] == '0' && tmpbuf[1] == 'x')
>> +			value = simple_strtol(tmpbuf, &s, 16);

It's a duplicate of this.

>> +		else
>> +			value = simple_strtol(tmpbuf, &s, 0);
>> +		if (s) {
>> +			if (!isspace(*s))

It's a bug of checking '\0' here.

I will fix those problems in new version.

thanks,
Kinglong Mee

>> +				return -EINVAL;
>> +			left -= (s - tmpbuf);
>> +			while (left && isspace(*s))
>> +				left--, s++;
>> +		} else
>> +			left = 0;
>>  		*(unsigned int *) table->data = value;
>>  		/* Display the RPC tasks on writing to rpc_debug */
>>  		if (strcmp(table->procname, "rpc_debug") == 0)
>>  			rpc_show_tasks(&init_net);
>>  	} else {
>> -		if (!access_ok(VERIFY_WRITE, buffer, left))
>> -			return -EFAULT;
>> -		len = sprintf(tmpbuf, "%d", *(unsigned int *) table->data);
>> +		len = sprintf(tmpbuf, "0x%04x", *(unsigned int *) table->data);
>>  		if (len > left)
>>  			len = left;
>> -		if (__copy_to_user(buffer, tmpbuf, len))
>> +		if (copy_to_user(buffer, tmpbuf, len))
>>  			return -EFAULT;
>>  		if ((left -= len) > 0) {
>>  			if (put_user('\n', (char __user *)buffer + len))
>> -- 
>> 2.5.0
> 

  reply	other threads:[~2015-09-12  1:34 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-10 12:41 [PATCH] Sunrpc: Supports hexadecimal number for sysctl files of sunrpc debug Kinglong Mee
2015-09-11 21:23 ` J. Bruce Fields
2015-09-12  1:34   ` Kinglong Mee [this message]
2015-09-12  1:37     ` [PATCH v2] " Kinglong Mee
2015-11-03 17:38       ` Trond Myklebust
2015-11-03 19:32         ` J. Bruce Fields
2015-11-03 19:49           ` Trond Myklebust

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=55F38130.7020802@gmail.com \
    --to=kinglongmee@gmail.com \
    --cc=bfields@fieldses.org \
    --cc=linux-nfs@vger.kernel.org \
    --cc=trond.myklebust@primarydata.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).