From: Mimi Zohar <zohar@linux.vnet.ibm.com>
To: Andrew Morton <akpm@google.com>
Cc: linux-security-module@vger.kernel.org,
Andy Shevchenko <andy.shevchenko@gmail.com>,
Tetsuo Handa <penguin-kernel@i-love.sakura.ne.jp>,
David Safford <safford@watson.ibm.com>,
"Nicholas A. Bellinger" <nab@linux-iscsi.org>,
target-devel@vger.kernel.org, linux-kernel@vger.kernel.org,
Andrew Morton <akpm@linux-foundation.org>
Subject: Re: [RFC][PATCH 1/5] lib: add unpack_hex_byte()
Date: Mon, 19 Sep 2011 18:35:08 -0400 [thread overview]
Message-ID: <1316471708.3191.130.camel@localhost.localdomain> (raw)
In-Reply-To: <20110919141911.e13569ab.akpm@google.com>
On Mon, 2011-09-19 at 14:19 -0700, Andrew Morton wrote:
> On Fri, 16 Sep 2011 08:50:26 -0400
> Mimi Zohar <zohar@linux.vnet.ibm.com> wrote:
>
> > Since converting 2 ascii hex digits into a byte with error checks
> > is commonly used, we can replace multiple hex_to_bin() calls with
> > a single call to unpack_hex_byte().
> >
> > Changelog:
> > - Error checking added based on Tetsuo Handa's patch.
> > - Moved the hex2bin code here, making it into a static inline function.
> > (Andy Shevchenko's request.)
>
> Why, on earth? Not for performance reasons - the code is already quite
> inefficient.
>
> > Signed-off-by: Mimi Zohar <zohar@linux.vnet.ibm.com>
> > ---
> > include/linux/kernel.h | 21 +++++++++++++++++++++
> > 1 files changed, 21 insertions(+), 0 deletions(-)
> >
> > diff --git a/include/linux/kernel.h b/include/linux/kernel.h
> > index 46ac9a5..d8ea13b 100644
> > --- a/include/linux/kernel.h
> > +++ b/include/linux/kernel.h
> > @@ -385,6 +385,27 @@ extern int hex_to_bin(char ch);
> > extern void hex2bin(u8 *dst, const char *src, size_t count);
> >
> > /*
> > + * unpack_hex_byte - convert 2 asii hex digits into a byte
> > + * @byte: binary result
> > + * @buf: ascii hexadecimal byte string
> > + */
> > +static inline bool unpack_hex_byte(u8 *byte, const char *buf)
> > +{
> > + int hi, lo;
> > +
> > + hi = hex_to_bin(buf[0]);
> > + if (hi < 0)
> > + return false;
> > +
> > + lo = hex_to_bin(buf[1]);
> > + if (lo < 0)
> > + return false;
> > +
> > + *byte = (hi << 4) | lo;
> > + return true;
> > +}
>
> Putting the return value into *byte is inefficient too - it forces the
> compiler to place the return value into addressible storage (ie: into a
> stack temporary). Maybe the compiler can avoid doing that if the code
> is inlined, but the code shouldn't be inlined :(
> The return value is undocumented.
Ok, will update.
> Why not copy the hex2bin return value semantics rather than creating a
> new scheme? Returning "bool false" in response to an error is very
> unconventional and unexpected. Kernel code returns a negative value on
> error.
ok
> Wouldn't it be better to fix hex2bin() so that it returns -1 on error?
Yes, that was the original idea, but in order to return a result, it
needs to validate the input. The above code, or something similar,
needs to exist somewhere, either in the new function or in hex2bin().
Would something like this be any better?
int hex2bin(u8 *dst, const char *src, size_t count)
{
while (count--) {
int hi = hex_to_bin(*src++);
int lo = hex_to_bin(*src++);
if ((hi < 0) || (lo < 0))
return -1;
*dst++ = (hi << 4) | lo;
}
return 0;
}
> Then the above function becomes a one-liner:
>
> return hex2bin(dst, src, 2);
Why bother? With something like this, there isn't a need for the new
function. :-)
> Finally, the name is poor. It starts with "unpack_", so it belongs to
> the "unpack" subsystem. There's no such thing. Something like
> hex_byte_to_bin() would be better.
agreed. It was suppose to parallel the existing pack_hex_byte().
Mimi
next prev parent reply other threads:[~2011-09-19 22:35 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-09-16 12:50 [RFC][PATCH 1/5] lib: add unpack_hex_byte() Mimi Zohar
2011-09-16 12:50 ` [RFC][PATCH 2/5] lib: add error checking to hex2bin Mimi Zohar
2011-09-16 13:13 ` Andy Shevchenko
2011-09-19 21:20 ` Andrew Morton
2011-09-16 12:50 ` [RFC][PATCH 3/5] trusted-keys: check hex2bin result Mimi Zohar
2011-09-16 12:50 ` [RFC][PATCH 4/5] encrypted-keys: " Mimi Zohar
2011-09-16 12:50 ` [RFC][PATCH 5/5] target: " Mimi Zohar
2011-09-16 14:07 ` Tetsuo Handa
2011-09-16 20:21 ` Nicholas A. Bellinger
2011-09-19 11:19 ` Mimi Zohar
2011-09-16 13:11 ` [RFC][PATCH 1/5] lib: add unpack_hex_byte() Andy Shevchenko
2011-09-19 21:19 ` Andrew Morton
2011-09-19 22:35 ` Mimi Zohar [this message]
2011-09-19 22:38 ` Andrew Morton
2011-09-20 6:04 ` Andy Shevchenko
2011-09-20 6:26 ` Andrew Morton
2011-09-23 10:47 ` [PATCH 1/2] kernel.h: rename pack_hex_byte to hex_pack_byte Andy Shevchenko
2011-09-23 10:47 ` [PATCH 2/2] wireless: at76c50x: use native hex_pack_byte() method Andy Shevchenko
2011-09-27 11:51 ` [PATCHv2] " Andy Shevchenko
2011-09-27 12:01 ` [PATCHv2.1] " Andy Shevchenko
2011-09-23 20:18 ` [PATCH 1/2] kernel.h: rename pack_hex_byte to hex_pack_byte Andrew Morton
2011-09-27 10:51 ` Andy Shevchenko
2011-09-27 17:32 ` Andrew Morton
2011-10-10 14:33 ` [PATCHv2 1/5] lib: rename pack_hex_byte to hex_byte_pack Andy Shevchenko
2011-10-10 14:33 ` [PATCHv2 2/5] kgdb: follow " Andy Shevchenko
2011-10-10 14:55 ` Jesper Nilsson
2011-10-10 14:33 ` [PATCHv2 3/5] security: " Andy Shevchenko
2011-10-10 14:33 ` [PATCHv2 4/5] fat: " Andy Shevchenko
2011-10-10 20:02 ` OGAWA Hirofumi
2011-10-10 14:33 ` [PATCHv2 5/5] wireless: at76c50x: " Andy Shevchenko
2011-10-11 13:55 ` John W. Linville
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=1316471708.3191.130.camel@localhost.localdomain \
--to=zohar@linux.vnet.ibm.com \
--cc=akpm@google.com \
--cc=akpm@linux-foundation.org \
--cc=andy.shevchenko@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-security-module@vger.kernel.org \
--cc=nab@linux-iscsi.org \
--cc=penguin-kernel@i-love.sakura.ne.jp \
--cc=safford@watson.ibm.com \
--cc=target-devel@vger.kernel.org \
/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).