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]
Message-ID: <4B2BE1BF.60803@zytor.com>
Date:	Fri, 18 Dec 2009 12:10:39 -0800
From:	"H. Peter Anvin" <hpa@...or.com>
To:	Yinghai Lu <yinghai@...nel.org>
CC:	Ingo Molnar <mingo@...e.hu>, Thomas Gleixner <tglx@...utronix.de>,
	Andrew Morton <akpm@...ux-foundation.org>,
	Jesse Barnes <jbarnes@...tuousgeek.org>,
	"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>
Subject: Re: [PATCH 1/9] x86: move range related operation to one file

On 12/18/2009 01:46 AM, Yinghai Lu wrote:
> +
> +struct range {
> +	u64   start;
> +	u64   end;
> +};

Okay, this does bring up two things that I have long griped about.

Firstly, I don't think this is the proper data structure.  Even worse,
the range operations take *inclusive* ranges (e.g. 0x0000 to 0xffff is
64K, not 0x0000 to 0x10000).  It would be one thing if it only affected
the internal representation, but as written, this is exposed through the
interfaces, too.

As far as the choice of data structures, I have used in other places,
with very good success, a data structure which looks like:

struct {
	u64	start;
	u32	attr;
};

Note that there is no end: the end is always given by an end token.  The
"attr" here was an e820 attribute (or 0 for no attribute), but the
payload can be almost anything -- for a simple include/exclude it can
just be boolean.

This data structures doesn't permit things like out-of-order ranges,
overlapping ranges, and so on, and that's a good thing; it means the
data structure itself can never be ambiguous, and the interfaces clean
out most errors inherently.

http://git.kernel.org/?p=boot/syslinux/syslinux.git;a=blob;f=com32/lib/syslinux/zonelist.c;hb=HEAD

... contains an implementation of this data structure using linked lists
for internal storage, and

http://git.kernel.org/?p=boot/syslinux/syslinux.git;a=blob;f=memdisk/e820func.c;hb=HEAD

... contains one based on arrays.  I'm not saying these should be
applied directly, but I think the equivalent concept might be
worthwhile, not just for this but also for the e820 memrange code.

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