From: Andrew Morton <akpm@google.com>
To: Mimi Zohar <zohar@linux.vnet.ibm.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 14:19:11 -0700 [thread overview]
Message-ID: <20110919141911.e13569ab.akpm@google.com> (raw)
In-Reply-To: <1316177430-13167-1-git-send-email-zohar@linux.vnet.ibm.com>
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.
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.
Wouldn't it be better to fix hex2bin() so that it returns -1 on error?
Then the above function becomes a one-liner:
return hex2bin(dst, src, 2);
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.
next prev parent reply other threads:[~2011-09-19 21:19 UTC|newest]
Thread overview: 35+ 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 [this message]
2011-09-19 22:35 ` Mimi Zohar
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-27 19:47 ` Pavel Roskin
2011-09-28 8:11 ` Andy Shevchenko
2011-09-28 9:30 ` [PATCHv3] " Andy Shevchenko
2011-09-28 20:40 ` Pavel Roskin
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=20110919141911.e13569ab.akpm@google.com \
--to=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 \
--cc=zohar@linux.vnet.ibm.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.