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] [thread-next>] [day] [month] [year] [list]
Date:	Thu, 1 May 2008 12:43:17 -0700
From:	Andrew Morton <akpm@...ux-foundation.org>
To:	Harvey Harrison <harvey.harrison@...il.com>
Cc:	torvalds@...ux-foundation.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH] kernel: add helpers for ascii character conversion

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 ;)

Does this mean that

y:/usr/src/linux-2.6.25> grep -ri '"0123456789abcdef"' . | wc -l
40

will decrease?

> --- 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 ;)

>  #define pr_emerg(fmt, arg...) \
>  	printk(KERN_EMERG fmt, ##arg)
> diff --git a/lib/hexdump.c b/lib/hexdump.c
> index 3435465..32b0bd7 100644
> --- a/lib/hexdump.c
> +++ b/lib/hexdump.c
> @@ -93,8 +93,8 @@ void hex_dump_to_buffer(const void *buf, size_t len, int rowsize,
>  		for (j = 0; (j < rowsize) && (j < len) && (lx + 4) < linebuflen;
>  		     j++) {
>  			ch = ptr[j];
> -			linebuf[lx++] = hex_asc(ch >> 4);
> -			linebuf[lx++] = hex_asc(ch & 0x0f);
> +			linebuf[lx++] = hex_asc_hi(ch);
> +			linebuf[lx++] = hex_asc_lo(ch);
>  			linebuf[lx++] = ' ';
>  		}
>  		ascii_column = 3 * rowsize + 2;

--
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