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]
Message-ID: <c22be6b2-5d80-4168-95cc-f86a79d8cb39@p183>
Date:   Sun, 15 Oct 2023 12:55:17 +0300
From:   Alexey Dobriyan <adobriyan@...il.com>
To:     Andrew Morton <akpm@...ux-foundation.org>
Cc:     linux-kernel@...r.kernel.org, Peter Zijlstra <peterz@...radead.org>
Subject: Re: [PATCH] smp: fix __smp_processor_id() backup macro

On Sat, Oct 14, 2023 at 03:12:21PM -0700, Andrew Morton wrote:
> On Sat, 14 Oct 2023 19:14:15 +0300 Alexey Dobriyan <adobriyan@...il.com> wrote:
> 
> > Every __smp_processor_id usage doesn't have arguments and
> > every raw_smp_processor_id usage doesn't have arguments,
> > therefore "#define __smp_processor_id(x)" can not possibly work.
> > 
> > ...
> >
> > --- a/include/linux/smp.h
> > +++ b/include/linux/smp.h
> > @@ -261,7 +261,7 @@ static inline int get_boot_cpu_id(void)
> >   * regular asm read for the stable.
> >   */
> >  #ifndef __smp_processor_id
> > -#define __smp_processor_id(x) raw_smp_processor_id(x)
> > +#define __smp_processor_id() raw_smp_processor_id()
> >  #endif
> >  
> 
> It's been that way for at least 4 years.  Presumably this is never used
> and should be removed?

Deleting breaks compilation immediately.

C89 6.8.3 §4 says

	"The number of arguments in an invocation of a function-like
	macro shall agree with the number of parameters in the macro
	definition, ..."

C99 relaxes this in 6.10.3 §4

	the number of arguments (including those arguments
	consisting of no preprocesing tokens) ... shall equal
	the number of parameters in the macro definition.

So, "#define M()" works with M() only, but "#define M(a)" worked with
M(1) and started working as M() which is very funny.

In other words changelog is wrong: it can and does work (sort of by
accident).

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ