Re: Bug#905116: [PATCH v2] scripts/kernel-doc: Escape all literal braces in regexes

2018-08-06 Thread Ben Hutchings
On Mon, 2018-08-06 at 07:14 -0600, Jonathan Corbet wrote:
> On Sun, 5 Aug 2018 17:41:09 +0100
> Ben Hutchings  wrote:
> 
> > Commit 720ac2ef479d ("PATCH scripts/kernel-doc") fixed the two
> > instances of literal braces that Perl 5.28 warns about, but there are
> > still more than it doesn't warn about.
> 
> So where can I find this commit of which you speak?  I can't find it in
> mainline, -next, or -stable...  
> 
> The patch looks good, I'd like to get it in this coming merge window if
> possible.

Sorry, that was the wrong commit hash.  I mean commit 701b3a3c0ac4.

Ben.

-- 
Ben Hutchings
Larkinson's Law: All laws are basically false.


signature.asc
Description: This is a digitally signed message part


[PATCH v2] scripts/kernel-doc: Escape all literal braces in regexes

2018-08-05 Thread Ben Hutchings
Commit 720ac2ef479d ("PATCH scripts/kernel-doc") fixed the two
instances of literal braces that Perl 5.28 warns about, but there are
still more than it doesn't warn about.

Escape all left braces that are treated as literal characters.  Also
escape literal right braces, for consistency and to avoid confusing
bracket-matching in text editors.

Signed-off-by: Ben Hutchings 
---
v2: Rebase on top of commit 720ac2ef479d; reword accordingly

 scripts/kernel-doc | 20 ++--
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/scripts/kernel-doc b/scripts/kernel-doc
index 31a34ced55a3..8f0f508a78e9 100755
--- a/scripts/kernel-doc
+++ b/scripts/kernel-doc
@@ -1062,7 +1062,7 @@ sub dump_struct($$) {
 my $x = shift;
 my $file = shift;
 
-if ($x =~ /(struct|union)\s+(\w+)\s*{(.*)}/) {
+if ($x =~ /(struct|union)\s+(\w+)\s*\{(.*)\}/) {
my $decl_type = $1;
$declaration_name = $2;
my $members = $3;
@@ -1148,20 +1148,20 @@ sub dump_struct($$) {
}
}
}
-   $members =~ 
s/(struct|union)([^\{\};]+)\{([^\{\}]*)}([^\{\}\;]*)\;/$newmember/;
+   $members =~ 
s/(struct|union)([^\{\};]+)\{([^\{\}]*)\}([^\{\}\;]*)\;/$newmember/;
}
 
# Ignore other nested elements, like enums
-   $members =~ s/(\{[^\{\}]*})//g;
+   $members =~ s/(\{[^\{\}]*\})//g;
 
create_parameterlist($members, ';', $file, $declaration_name);
check_sections($file, $declaration_name, $decl_type, $sectcheck, 
$struct_actual);
 
# Adjust declaration for better display
-   $declaration =~ s/([{;])/$1\n/g;
-   $declaration =~ s/}\s+;/};/g;
+   $declaration =~ s/([\{;])/$1\n/g;
+   $declaration =~ s/\}\s+;/};/g;
# Better handle inlined enums
-   do {} while ($declaration =~ s/(enum\s+{[^}]+),([^\n])/$1,\n$2/);
+   do {} while ($declaration =~ s/(enum\s+\{[^\}]+),([^\n])/$1,\n$2/);
 
my @def_args = split /\n/, $declaration;
my $level = 1;
@@ -1171,12 +1171,12 @@ sub dump_struct($$) {
$clause =~ s/\s+$//;
$clause =~ s/\s+/ /;
next if (!$clause);
-   $level-- if ($clause =~ m/(})/ && $level > 1);
+   $level-- if ($clause =~ m/(\})/ && $level > 1);
if (!($clause =~ m/^\s*#/)) {
$declaration .= "\t" x $level;
}
$declaration .= "\t" . $clause . "\n";
-   $level++ if ($clause =~ m/(\{)/ && !($clause =~m/}/));
+   $level++ if ($clause =~ m/(\{)/ && !($clause =~m/\}/));
}
output_declaration($declaration_name,
   'struct',
@@ -1244,7 +1244,7 @@ sub dump_enum($$) {
 # strip #define macros inside enums
 $x =~ s@#\s*((define|ifdef)\s+|endif)[^;]*;@@gos;
 
-if ($x =~ /enum\s+(\w+)\s*{(.*)}/) {
+if ($x =~ /enum\s+(\w+)\s*\{(.*)\}/) {
$declaration_name = $1;
my $members = $2;
my %_members;
@@ -1785,7 +1785,7 @@ sub process_proto_type($$) {
 }
 
 while (1) {
-   if ( $x =~ /([^{};]*)([{};])(.*)/ ) {
+   if ( $x =~ /([^\{\};]*)([\{\};])(.*)/ ) {
 if( length $prototype ) {
 $prototype .= " "
 }


signature.asc
Description: Digital signature


[PATCH] scripts/kernel-doc: Escape all literal braces in regexes

2018-08-05 Thread Ben Hutchings
Braces are usually metacharacters in regexes, used to specify a
number of repetitions or as part of an escape sequence.  If this
interpretation is not possible then Perl currently treats them
as literal characters.

Perl 5.28 has deprecated the literal interpretation of left braces,
and Perl 5.32 will remove it (resulting in a fatal error).

Escape all left braces that are treated as literal characters.  Also
escape literal right braces, for consistency and to avoid confusing
bracket-matching in text editors.

References: https://bugs.debian.org/905116
Signed-off-by: Ben Hutchings 
---
I tested that the output of "make xmldocs" is identical before and
after this change, whether using Perl 5.26 or 5.28.

Ben.

 scripts/kernel-doc | 20 ++--
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/scripts/kernel-doc b/scripts/kernel-doc
index 0057d8eafcc1..8f0f508a78e9 100755
--- a/scripts/kernel-doc
+++ b/scripts/kernel-doc
@@ -1062,7 +1062,7 @@ sub dump_struct($$) {
 my $x = shift;
 my $file = shift;
 
-if ($x =~ /(struct|union)\s+(\w+)\s*{(.*)}/) {
+if ($x =~ /(struct|union)\s+(\w+)\s*\{(.*)\}/) {
my $decl_type = $1;
$declaration_name = $2;
my $members = $3;
@@ -1148,20 +1148,20 @@ sub dump_struct($$) {
}
}
}
-   $members =~ 
s/(struct|union)([^\{\};]+)\{([^\{\}]*)}([^\{\}\;]*)\;/$newmember/;
+   $members =~ 
s/(struct|union)([^\{\};]+)\{([^\{\}]*)\}([^\{\}\;]*)\;/$newmember/;
}
 
# Ignore other nested elements, like enums
-   $members =~ s/({[^\{\}]*})//g;
+   $members =~ s/(\{[^\{\}]*\})//g;
 
create_parameterlist($members, ';', $file, $declaration_name);
check_sections($file, $declaration_name, $decl_type, $sectcheck, 
$struct_actual);
 
# Adjust declaration for better display
-   $declaration =~ s/([{;])/$1\n/g;
-   $declaration =~ s/}\s+;/};/g;
+   $declaration =~ s/([\{;])/$1\n/g;
+   $declaration =~ s/\}\s+;/};/g;
# Better handle inlined enums
-   do {} while ($declaration =~ s/(enum\s+{[^}]+),([^\n])/$1,\n$2/);
+   do {} while ($declaration =~ s/(enum\s+\{[^\}]+),([^\n])/$1,\n$2/);
 
my @def_args = split /\n/, $declaration;
my $level = 1;
@@ -1171,12 +1171,12 @@ sub dump_struct($$) {
$clause =~ s/\s+$//;
$clause =~ s/\s+/ /;
next if (!$clause);
-   $level-- if ($clause =~ m/(})/ && $level > 1);
+   $level-- if ($clause =~ m/(\})/ && $level > 1);
if (!($clause =~ m/^\s*#/)) {
$declaration .= "\t" x $level;
}
$declaration .= "\t" . $clause . "\n";
-   $level++ if ($clause =~ m/({)/ && !($clause =~m/}/));
+   $level++ if ($clause =~ m/(\{)/ && !($clause =~m/\}/));
}
output_declaration($declaration_name,
   'struct',
@@ -1244,7 +1244,7 @@ sub dump_enum($$) {
 # strip #define macros inside enums
 $x =~ s@#\s*((define|ifdef)\s+|endif)[^;]*;@@gos;
 
-if ($x =~ /enum\s+(\w+)\s*{(.*)}/) {
+if ($x =~ /enum\s+(\w+)\s*\{(.*)\}/) {
$declaration_name = $1;
my $members = $2;
my %_members;
@@ -1785,7 +1785,7 @@ sub process_proto_type($$) {
 }
 
 while (1) {
-   if ( $x =~ /([^{};]*)([{};])(.*)/ ) {
+   if ( $x =~ /([^\{\};]*)([\{\};])(.*)/ ) {
 if( length $prototype ) {
 $prototype .= " "
 }


signature.asc
Description: Digital signature


[PATCH] Documentation: Update references to drivers/base/firmware_class.c

2018-04-20 Thread Ben Hutchings
This source file has been renamed in 4.17.

Signed-off-by: Ben Hutchings <b...@decadent.org.uk>
---
 Documentation/driver-api/firmware/request_firmware.rst | 10 +-
 Documentation/driver-api/infrastructure.rst|  2 +-
 Documentation/power/suspend-and-cpuhotplug.txt |  2 +-
 3 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/Documentation/driver-api/firmware/request_firmware.rst 
b/Documentation/driver-api/firmware/request_firmware.rst
index cf4516dfbf96..20f21ed427a5 100644
--- a/Documentation/driver-api/firmware/request_firmware.rst
+++ b/Documentation/driver-api/firmware/request_firmware.rst
@@ -17,17 +17,17 @@ an error is returned.
 
 request_firmware
 
-.. kernel-doc:: drivers/base/firmware_class.c
+.. kernel-doc:: drivers/base/firmware_loader/main.c
:functions: request_firmware
 
 request_firmware_direct
 ---
-.. kernel-doc:: drivers/base/firmware_class.c
+.. kernel-doc:: drivers/base/firmware_loader/main.c
:functions: request_firmware_direct
 
 request_firmware_into_buf
 -
-.. kernel-doc:: drivers/base/firmware_class.c
+.. kernel-doc:: drivers/base/firmware_loader/main.c
:functions: request_firmware_into_buf
 
 Asynchronous firmware requests
@@ -41,7 +41,7 @@ in atomic contexts.
 
 request_firmware_nowait
 ---
-.. kernel-doc:: drivers/base/firmware_class.c
+.. kernel-doc:: drivers/base/firmware_loader/main.c
:functions: request_firmware_nowait
 
 Special optimizations on reboot
@@ -55,7 +55,7 @@ firmare to be loaded.
 
 firmware_request_cache()
 ---
-.. kernel-doc:: drivers/base/firmware_class.c
+.. kernel-doc:: drivers/base/firmware_loader/main.c
:functions: firmware_request_cache
 
 request firmware API expected driver use
diff --git a/Documentation/driver-api/infrastructure.rst 
b/Documentation/driver-api/infrastructure.rst
index 6d9ff316b608..bee1b9a1702f 100644
--- a/Documentation/driver-api/infrastructure.rst
+++ b/Documentation/driver-api/infrastructure.rst
@@ -28,7 +28,7 @@ Device Drivers Base
 .. kernel-doc:: drivers/base/node.c
:internal:
 
-.. kernel-doc:: drivers/base/firmware_class.c
+.. kernel-doc:: drivers/base/firmware_loader/main.c
:export:
 
 .. kernel-doc:: drivers/base/transport_class.c
diff --git a/Documentation/power/suspend-and-cpuhotplug.txt 
b/Documentation/power/suspend-and-cpuhotplug.txt
index 31abd04b9572..6f55eb960a6d 100644
--- a/Documentation/power/suspend-and-cpuhotplug.txt
+++ b/Documentation/power/suspend-and-cpuhotplug.txt
@@ -168,7 +168,7 @@ There are some interesting situations involving CPU hotplug 
and microcode
 
 [Please bear in mind that the kernel requests the microcode images from
 userspace, using the request_firmware() function defined in
-drivers/base/firmware_class.c]
+drivers/base/firmware_loader/main.c]
 
 
 a. When all the CPUs are identical:


signature.asc
Description: Digital signature


Re: [PATCH 2/3] doc-rst: Delete output of failed dot-SVG conversion

2017-01-31 Thread Ben Hutchings
On Tue, 2017-01-31 at 09:36 +0200, Jani Nikula wrote:
> On Tue, 31 Jan 2017, Ben Hutchings <b...@decadent.org.uk> wrote:
> > As we use redirection to create the SVG file, even a failed
> > conversion
> > will create the file and 'make' will consider it up-to-date if the
> > build is retried.  We should delete it in case of failure.
> > 
> > Fixes: ec868e4ee2bc ("docs-rst: media: build SVG from graphviz
> > files")
> > Signed-off-by: Ben Hutchings <b...@decadent.org.uk>
> > ---
> >  Documentation/media/Makefile | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/Documentation/media/Makefile
> > b/Documentation/media/Makefile
> > index 32663602ff25..730d73db7c7a 100644
> > --- a/Documentation/media/Makefile
> > +++ b/Documentation/media/Makefile
> > @@ -36,7 +36,7 @@ quiet_cmd_genpdf = GENPDF  $2
> >    cmd_genpdf = convert $2 $3
> >  
> >  quiet_cmd_gendot = DOT $2
> > -  cmd_gendot = dot -Tsvg $2 > $3
> > +  cmd_gendot = dot -Tsvg $2 > $3 || { rm -f $3; exit 1; }
> 
> I'd just use dot -o.

That does make more sense.  I looked for such an option before writing
this, but the manual page doesn't mention it!

Ben.

> >  
> >  %.pdf: %.svg
> >     @$(call cmd,genpdf,$<,$@)
> > 
> 
> 
-- 
Ben Hutchings
It is easier to write an incorrect program than to understand a correct
one.



signature.asc
Description: This is a digitally signed message part


[PATCH 3/3] doc-rst: Fix recursive make invocation from macros

2017-01-30 Thread Ben Hutchings
In any case where we recurse but don't mention $(MAKE) literally in
the recipe, we need to add a '+' at the start of the command to ensure
that parallel makes and various other options work properly.

Fixes: 609afe6b49ef ("Documentation/sphinx: build the media intermediate ...")
Signed-off-by: Ben Hutchings <b...@decadent.org.uk>
---
 Documentation/Makefile.sphinx | 8 
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/Documentation/Makefile.sphinx b/Documentation/Makefile.sphinx
index 02d84e6dc7fc..e14d82a98062 100644
--- a/Documentation/Makefile.sphinx
+++ b/Documentation/Makefile.sphinx
@@ -66,10 +66,10 @@ quiet_cmd_sphinx = SPHINX  $@ --> file://$(abspath 
$(BUILDDIR)/$3/$4)
$(abspath $(BUILDDIR)/$3/$4)
 
 htmldocs:
-   @$(foreach var,$(SPHINXDIRS),$(call 
loop_cmd,sphinx,html,$(var),,$(var)))
+   @+$(foreach var,$(SPHINXDIRS),$(call 
loop_cmd,sphinx,html,$(var),,$(var)))
 
 latexdocs:
-   @$(foreach var,$(SPHINXDIRS),$(call 
loop_cmd,sphinx,latex,$(var),latex,$(var)))
+   @+$(foreach var,$(SPHINXDIRS),$(call 
loop_cmd,sphinx,latex,$(var),latex,$(var)))
 
 ifeq ($(HAVE_PDFLATEX),0)
 
@@ -85,10 +85,10 @@ pdfdocs: latexdocs
 endif # HAVE_PDFLATEX
 
 epubdocs:
-   @$(foreach var,$(SPHINXDIRS),$(call 
loop_cmd,sphinx,epub,$(var),epub,$(var)))
+   @+$(foreach var,$(SPHINXDIRS),$(call 
loop_cmd,sphinx,epub,$(var),epub,$(var)))
 
 xmldocs:
-   @$(foreach var,$(SPHINXDIRS),$(call 
loop_cmd,sphinx,xml,$(var),xml,$(var)))
+   @+$(foreach var,$(SPHINXDIRS),$(call 
loop_cmd,sphinx,xml,$(var),xml,$(var)))
 
 # no-ops for the Sphinx toolchain
 sgmldocs:


signature.asc
Description: Digital signature


[PATCH 0/3] doc-rst: Build fixes

2017-01-30 Thread Ben Hutchings
This series fixes some bugs I found in the new doc build system.

Ben.

Ben Hutchings (3):
  doc-rst: Break shell command sequences on failure
  doc-rst: Delete output of failed dot-SVG conversion
  doc-rst: Fix recursive make invocation from macros

 Documentation/Makefile.sphinx | 16 
 Documentation/media/Makefile  |  2 +-
 2 files changed, 9 insertions(+), 9 deletions(-)



signature.asc
Description: Digital signature


Sphinx builds always write to the source directory

2017-01-30 Thread Ben Hutchings
I'm having trouble with the Debian packaging of kernel documentation. 
We try to build everything in a separate output directory (underneath
debian/build), but the new Sphinx-based build system writes to the
source directory.

Firstly, Python creates bytecode files alongside the module sources. 
This could be avoided by setting environment variable
PYTHONDONTWRITEBYTECODE=1, at the expense of requiring recompilation
more often.

Secondly, starting with 4.10, Documentation/media/Makefile converts
from dot to SVG and from SVG to PDF in the source directory.  It seems
like it should be possible to put the converted files in the output
directory, but I don't know how to tell Sphinx to find them there.

Are these issues likely to be fixed?

Ben.

-- 
Ben Hutchings
Q.  Which is the greater problem in the world today, ignorance or
apathy?
A.  I don't know and I couldn't care less.


signature.asc
Description: This is a digitally signed message part


Re: [kernel-hardening] Re: [PATCH 2/2] sysctl: allow CLONE_NEWUSER to be disabled

2016-01-22 Thread Ben Hutchings
On Fri, 2016-01-22 at 15:00 -0800, Kees Cook wrote:
> On Fri, Jan 22, 2016 at 2:55 PM, Robert Święcki <rob...@swiecki.net> wrote:
> > 2016-01-22 23:50 GMT+01:00 Kees Cook <keesc...@chromium.org>:
> > 
> > > > Seems that Debian and some older Ubuntu versions are already using
> > > > 
> > > > $ sysctl -a | grep usern
> > > > kernel.unprivileged_userns_clone = 0
> > > > 
> > > > Shall we be consistent wit it?
> > > 
> > > Oh! I didn't see that on systems I checked. On which version did you find 
> > > that?
> > 
> > $ uname -a
> > Linux bc1 4.3.0-0.bpo.1-amd64 #1 SMP Debian 4.3.3-5~bpo8+1
> > (2016-01-07) x86_64 GNU/Linux
> > $ cat /etc/debian_version
> > 8.2
> 
> Ah-ha, Debian only, though it looks like this was just committed to
> the Ubuntu kernel tree too:
> 
> 
> > IIRC some older kernels delivered with Ubuntu Precise were also using
> > it (but maybe I'm mistaken)
> 
> I don't see it there.
> 
> I think my patch is more complete, but I'm happy to change the name if
> this sysctl has already started to enter the global consciousness. ;)
> 
> Serge, Ben, what do you think?

I agree that using the '_restrict' suffix for new restrictions makes
sense.  I also don't think that a third possible value for
kernel.unprivileged_userns_clone would would be understandable.

I would probably make kernel.unprivileged_userns_clone a wrapper for
kernel.userns_restrict in Debian, then deprecate and eventually remove
it.

Ben.

-- 
Ben Hutchings
Life is what happens to you while you're busy making other plans.
   - John Lennon

signature.asc
Description: This is a digitally signed message part