lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Date:	Thu, 01 May 2008 12:48:30 -0700
From:	Harvey Harrison <harvey.harrison@...il.com>
To:	Andrew Morton <akpm@...ux-foundation.org>
Cc:	torvalds@...ux-foundation.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH] kernel: add helpers for ascii character conversion

On Thu, 2008-05-01 at 12:43 -0700, Andrew Morton wrote:
> On Thu, 01 May 2008 12:23:00 -0700
> Harvey Harrison <harvey.harrison@...il.com> wrote:
> 
> > Add helpers for getting an ascii hex char for the high and low
> > nibble of a byte.  Also add a small helper to get an integer
> > value from a given hex char.
> > 
> > Included here are a few of the current places that roll their
> > own versions being moved to the common helper.
> 
> ahh, someone cares ;)

Well, I have an interest in collecting bits of useful infrastructure
everyone and their dog has reimplemented somewhere in the tree.

> 
> Does this mean that
> 
> y:/usr/src/linux-2.6.25> grep -ri '"0123456789abcdef"' . | wc -l
> 40
> 
> will decrease?

Somewhat, I debated between the kernel.h route and adding an out-of-line
version to hexdump.c.  While gcc/ld has gotten better about this, may
as well make it easy.

> 
> > --- a/include/linux/kernel.h
> > +++ b/include/linux/kernel.h
> > @@ -277,6 +277,21 @@ extern void print_hex_dump(const char *level, const char *prefix_str,
> >  extern void print_hex_dump_bytes(const char *prefix_str, int prefix_type,
> >  			const void *buf, size_t len);
> >  #define hex_asc(x)	"0123456789abcdef"[x]
> > +#define hex_asc_lo(x)	hex_asc(((x) & 0x0f))
> > +#define hex_asc_hi(x)	hex_asc(((x) & 0xf0) >> 4)
> 
> umm, this might mean that each .c file which uses hex_asc_lo/hi gets
> its own copy of "0123456789abcdef".  I believe that gcc/ld are getting
> better at handling this, but I haven't checked, and I don't know which
> versions get it right nor in which way.  etc.
> 
> So it might be better to give the kernel the One True Digitstring in
> lib/something.c and export that to modules.
> 
> > +static inline u8 hex_to_int(char ch)
> > +{
> > +	/*
> > +	 * Make ch lower-case, works only for digits and letters
> > +	 */
> > +	ch |= 0x20;
> > +	if ((ch >= 'a') && (ch <= 'f'))
> > +		return (ch - 'a' + 10);
> > +	if ((ch >= '0') && (ch <= '9'))
> > +		return (ch - '0');
> > +	return (-1);
> > +}
> 
> probably should be uninlined.
> 
> return-is-not-a-function ;)

...you didn't even blink at my last-minute change from returning int
to u8 that was, how to say, ill-advised now that I look again :(

In any event, I'll go the lib/hexdump route and send that in a bit.

Cheers,

Harvey

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ