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:	Wed, 10 Jan 2007 08:46:26 -0500 (EST)
From:	"Robert P. J. Day" <rpjday@...dspring.com>
To:	"linux-os (Dick Johnson)" <linux-os@...logic.com>
cc:	Stefan Richter <stefanr@...6.in-berlin.de>,
	Linux kernel mailing list <linux-kernel@...r.kernel.org>
Subject: Re: macros:  "do-while" versus "({ })" and a compile-time error

On Wed, 10 Jan 2007, linux-os (Dick Johnson) wrote:

>
> On Wed, 10 Jan 2007, Robert P. J. Day wrote:

> > just FYI, the reason i brought this up in the first place is that
> > i noticed that the ALIGN() macro in kernel.h didn't verify that
> > the alignment value was a power of 2, so i thought -- hmmm, i
> > wonder if there are any invocations where that's not true, so i
> > (temporarily) rewrote ALIGN to incorporate that check, and the
> > build blew up including include/net/neighbour.h, which contains
> > the out-of-function declaration:
> >
> > struct neighbour
> > {
> >        ...
> >        unsigned char           ha[ALIGN(MAX_ADDR_LEN, sizeof(unsigned long))];
> >        ...
> >
> > so it's not a big deal, it was just me goofing around and breaking
> > things.
> >
> > rday
>
>
> Hmmm, in that case you would be trying to put code inside a
> structure! Neat --if you could do it!

well, yes, but it does raise a potential issue.  currently, that
ALIGN() macro is being used to define one of the members of that
structure.  since it's a "simple" macro, there's no problem.

but there are *plenty* of macros in the source tree that incorporate
either the "do-while" or "({ })" notation.  what the above implies is
that the ALIGN() macro can *never* be extended in that way because of
the way it's being used in the struct definition above, outside of a
function.

doesn't that place an unnecessarily limit on what might be done with
ALIGN() in the future?  because of how it's being used in that single
structure definition, it is forever restricted from being extended.
isn't that perhaps a dangerous restriction for any macro?

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