| From c48a7c44a1d02516309015b6134c9bb982e17008 Mon Sep 17 00:00:00 2001 |
| From: Vegard Nossum <vegard.nossum@oracle.com> |
| Date: Wed, 10 Jan 2024 18:47:58 +0100 |
| Subject: docs: kernel_feat.py: fix potential command injection |
| |
| From: Vegard Nossum <vegard.nossum@oracle.com> |
| |
| commit c48a7c44a1d02516309015b6134c9bb982e17008 upstream. |
| |
| The kernel-feat directive passes its argument straight to the shell. |
| This is unfortunate and unnecessary. |
| |
| Let's always use paths relative to $srctree/Documentation/ and use |
| subprocess.check_call() instead of subprocess.Popen(shell=True). |
| |
| This also makes the code shorter. |
| |
| This is analogous to commit 3231dd586277 ("docs: kernel_abi.py: fix |
| command injection") where we did exactly the same thing for |
| kernel_abi.py, somehow I completely missed this one. |
| |
| Link: https://fosstodon.org/@jani/111676532203641247 |
| Reported-by: Jani Nikula <jani.nikula@intel.com> |
| Signed-off-by: Vegard Nossum <vegard.nossum@oracle.com> |
| Cc: stable@vger.kernel.org |
| Signed-off-by: Jonathan Corbet <corbet@lwn.net> |
| Link: https://lore.kernel.org/r/20240110174758.3680506-1-vegard.nossum@oracle.com |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| Documentation/admin-guide/features.rst | 2 |
| Documentation/arch/arc/features.rst | 2 |
| Documentation/arch/arm/features.rst | 2 |
| Documentation/arch/arm64/features.rst | 2 |
| Documentation/arch/loongarch/features.rst | 2 |
| Documentation/arch/m68k/features.rst | 2 |
| Documentation/arch/mips/features.rst | 2 |
| Documentation/arch/nios2/features.rst | 2 |
| Documentation/arch/openrisc/features.rst | 2 |
| Documentation/arch/parisc/features.rst | 2 |
| Documentation/arch/powerpc/features.rst | 2 |
| Documentation/arch/riscv/features.rst | 2 |
| Documentation/arch/s390/features.rst | 2 |
| Documentation/arch/sh/features.rst | 2 |
| Documentation/arch/sparc/features.rst | 2 |
| Documentation/arch/x86/features.rst | 2 |
| Documentation/arch/xtensa/features.rst | 2 |
| Documentation/sphinx/kernel_feat.py | 55 ++--------- |
| Documentation/translations/zh_CN/arch/loongarch/features.rst | 2 |
| Documentation/translations/zh_CN/arch/mips/features.rst | 2 |
| Documentation/translations/zh_TW/arch/loongarch/features.rst | 2 |
| Documentation/translations/zh_TW/arch/mips/features.rst | 2 |
| 22 files changed, 32 insertions(+), 65 deletions(-) |
| |
| --- a/Documentation/admin-guide/features.rst |
| +++ b/Documentation/admin-guide/features.rst |
| @@ -1,3 +1,3 @@ |
| .. SPDX-License-Identifier: GPL-2.0 |
| |
| -.. kernel-feat:: $srctree/Documentation/features |
| +.. kernel-feat:: features |
| --- a/Documentation/arch/arc/features.rst |
| +++ b/Documentation/arch/arc/features.rst |
| @@ -1,3 +1,3 @@ |
| .. SPDX-License-Identifier: GPL-2.0 |
| |
| -.. kernel-feat:: $srctree/Documentation/features arc |
| +.. kernel-feat:: features arc |
| --- a/Documentation/arch/arm/features.rst |
| +++ b/Documentation/arch/arm/features.rst |
| @@ -1,3 +1,3 @@ |
| .. SPDX-License-Identifier: GPL-2.0 |
| |
| -.. kernel-feat:: $srctree/Documentation/features arm |
| +.. kernel-feat:: features arm |
| --- a/Documentation/arch/arm64/features.rst |
| +++ b/Documentation/arch/arm64/features.rst |
| @@ -1,3 +1,3 @@ |
| .. SPDX-License-Identifier: GPL-2.0 |
| |
| -.. kernel-feat:: $srctree/Documentation/features arm64 |
| +.. kernel-feat:: features arm64 |
| --- a/Documentation/arch/loongarch/features.rst |
| +++ b/Documentation/arch/loongarch/features.rst |
| @@ -1,3 +1,3 @@ |
| .. SPDX-License-Identifier: GPL-2.0 |
| |
| -.. kernel-feat:: $srctree/Documentation/features loongarch |
| +.. kernel-feat:: features loongarch |
| --- a/Documentation/arch/m68k/features.rst |
| +++ b/Documentation/arch/m68k/features.rst |
| @@ -1,3 +1,3 @@ |
| .. SPDX-License-Identifier: GPL-2.0 |
| |
| -.. kernel-feat:: $srctree/Documentation/features m68k |
| +.. kernel-feat:: features m68k |
| --- a/Documentation/arch/mips/features.rst |
| +++ b/Documentation/arch/mips/features.rst |
| @@ -1,3 +1,3 @@ |
| .. SPDX-License-Identifier: GPL-2.0 |
| |
| -.. kernel-feat:: $srctree/Documentation/features mips |
| +.. kernel-feat:: features mips |
| --- a/Documentation/arch/nios2/features.rst |
| +++ b/Documentation/arch/nios2/features.rst |
| @@ -1,3 +1,3 @@ |
| .. SPDX-License-Identifier: GPL-2.0 |
| |
| -.. kernel-feat:: $srctree/Documentation/features nios2 |
| +.. kernel-feat:: features nios2 |
| --- a/Documentation/arch/openrisc/features.rst |
| +++ b/Documentation/arch/openrisc/features.rst |
| @@ -1,3 +1,3 @@ |
| .. SPDX-License-Identifier: GPL-2.0 |
| |
| -.. kernel-feat:: $srctree/Documentation/features openrisc |
| +.. kernel-feat:: features openrisc |
| --- a/Documentation/arch/parisc/features.rst |
| +++ b/Documentation/arch/parisc/features.rst |
| @@ -1,3 +1,3 @@ |
| .. SPDX-License-Identifier: GPL-2.0 |
| |
| -.. kernel-feat:: $srctree/Documentation/features parisc |
| +.. kernel-feat:: features parisc |
| --- a/Documentation/arch/powerpc/features.rst |
| +++ b/Documentation/arch/powerpc/features.rst |
| @@ -1,3 +1,3 @@ |
| .. SPDX-License-Identifier: GPL-2.0 |
| |
| -.. kernel-feat:: $srctree/Documentation/features powerpc |
| +.. kernel-feat:: features powerpc |
| --- a/Documentation/arch/riscv/features.rst |
| +++ b/Documentation/arch/riscv/features.rst |
| @@ -1,3 +1,3 @@ |
| .. SPDX-License-Identifier: GPL-2.0 |
| |
| -.. kernel-feat:: $srctree/Documentation/features riscv |
| +.. kernel-feat:: features riscv |
| --- a/Documentation/arch/s390/features.rst |
| +++ b/Documentation/arch/s390/features.rst |
| @@ -1,3 +1,3 @@ |
| .. SPDX-License-Identifier: GPL-2.0 |
| |
| -.. kernel-feat:: $srctree/Documentation/features s390 |
| +.. kernel-feat:: features s390 |
| --- a/Documentation/arch/sh/features.rst |
| +++ b/Documentation/arch/sh/features.rst |
| @@ -1,3 +1,3 @@ |
| .. SPDX-License-Identifier: GPL-2.0 |
| |
| -.. kernel-feat:: $srctree/Documentation/features sh |
| +.. kernel-feat:: features sh |
| --- a/Documentation/arch/sparc/features.rst |
| +++ b/Documentation/arch/sparc/features.rst |
| @@ -1,3 +1,3 @@ |
| .. SPDX-License-Identifier: GPL-2.0 |
| |
| -.. kernel-feat:: $srctree/Documentation/features sparc |
| +.. kernel-feat:: features sparc |
| --- a/Documentation/arch/x86/features.rst |
| +++ b/Documentation/arch/x86/features.rst |
| @@ -1,3 +1,3 @@ |
| .. SPDX-License-Identifier: GPL-2.0 |
| |
| -.. kernel-feat:: $srctree/Documentation/features x86 |
| +.. kernel-feat:: features x86 |
| --- a/Documentation/arch/xtensa/features.rst |
| +++ b/Documentation/arch/xtensa/features.rst |
| @@ -1,3 +1,3 @@ |
| .. SPDX-License-Identifier: GPL-2.0 |
| |
| -.. kernel-feat:: $srctree/Documentation/features xtensa |
| +.. kernel-feat:: features xtensa |
| --- a/Documentation/sphinx/kernel_feat.py |
| +++ b/Documentation/sphinx/kernel_feat.py |
| @@ -37,8 +37,6 @@ import re |
| import subprocess |
| import sys |
| |
| -from os import path |
| - |
| from docutils import nodes, statemachine |
| from docutils.statemachine import ViewList |
| from docutils.parsers.rst import directives, Directive |
| @@ -76,33 +74,26 @@ class KernelFeat(Directive): |
| self.state.document.settings.env.app.warn(message, prefix="") |
| |
| def run(self): |
| - |
| doc = self.state.document |
| if not doc.settings.file_insertion_enabled: |
| raise self.warning("docutils: file insertion disabled") |
| |
| env = doc.settings.env |
| - cwd = path.dirname(doc.current_source) |
| - cmd = "get_feat.pl rest --enable-fname --dir " |
| - cmd += self.arguments[0] |
| - |
| - if len(self.arguments) > 1: |
| - cmd += " --arch " + self.arguments[1] |
| |
| - srctree = path.abspath(os.environ["srctree"]) |
| + srctree = os.path.abspath(os.environ["srctree"]) |
| |
| - fname = cmd |
| + args = [ |
| + os.path.join(srctree, 'scripts/get_feat.pl'), |
| + 'rest', |
| + '--enable-fname', |
| + '--dir', |
| + os.path.join(srctree, 'Documentation', self.arguments[0]), |
| + ] |
| |
| - # extend PATH with $(srctree)/scripts |
| - path_env = os.pathsep.join([ |
| - srctree + os.sep + "scripts", |
| - os.environ["PATH"] |
| - ]) |
| - shell_env = os.environ.copy() |
| - shell_env["PATH"] = path_env |
| - shell_env["srctree"] = srctree |
| + if len(self.arguments) > 1: |
| + args.extend(['--arch', self.arguments[1]]) |
| |
| - lines = self.runCmd(cmd, shell=True, cwd=cwd, env=shell_env) |
| + lines = subprocess.check_output(args, cwd=os.path.dirname(doc.current_source)).decode('utf-8') |
| |
| line_regex = re.compile(r"^\.\. FILE (\S+)$") |
| |
| @@ -121,30 +112,6 @@ class KernelFeat(Directive): |
| nodeList = self.nestedParse(out_lines, fname) |
| return nodeList |
| |
| - def runCmd(self, cmd, **kwargs): |
| - u"""Run command ``cmd`` and return its stdout as unicode.""" |
| - |
| - try: |
| - proc = subprocess.Popen( |
| - cmd |
| - , stdout = subprocess.PIPE |
| - , stderr = subprocess.PIPE |
| - , **kwargs |
| - ) |
| - out, err = proc.communicate() |
| - |
| - out, err = codecs.decode(out, 'utf-8'), codecs.decode(err, 'utf-8') |
| - |
| - if proc.returncode != 0: |
| - raise self.severe( |
| - u"command '%s' failed with return code %d" |
| - % (cmd, proc.returncode) |
| - ) |
| - except OSError as exc: |
| - raise self.severe(u"problems with '%s' directive: %s." |
| - % (self.name, ErrorString(exc))) |
| - return out |
| - |
| def nestedParse(self, lines, fname): |
| content = ViewList() |
| node = nodes.section() |
| --- a/Documentation/translations/zh_CN/arch/loongarch/features.rst |
| +++ b/Documentation/translations/zh_CN/arch/loongarch/features.rst |
| @@ -5,4 +5,4 @@ |
| :Original: Documentation/arch/loongarch/features.rst |
| :Translator: Huacai Chen <chenhuacai@loongson.cn> |
| |
| -.. kernel-feat:: $srctree/Documentation/features loongarch |
| +.. kernel-feat:: features loongarch |
| --- a/Documentation/translations/zh_CN/arch/mips/features.rst |
| +++ b/Documentation/translations/zh_CN/arch/mips/features.rst |
| @@ -10,4 +10,4 @@ |
| |
| .. _cn_features: |
| |
| -.. kernel-feat:: $srctree/Documentation/features mips |
| +.. kernel-feat:: features mips |
| --- a/Documentation/translations/zh_TW/arch/loongarch/features.rst |
| +++ b/Documentation/translations/zh_TW/arch/loongarch/features.rst |
| @@ -5,5 +5,5 @@ |
| :Original: Documentation/arch/loongarch/features.rst |
| :Translator: Huacai Chen <chenhuacai@loongson.cn> |
| |
| -.. kernel-feat:: $srctree/Documentation/features loongarch |
| +.. kernel-feat:: features loongarch |
| |
| --- a/Documentation/translations/zh_TW/arch/mips/features.rst |
| +++ b/Documentation/translations/zh_TW/arch/mips/features.rst |
| @@ -10,5 +10,5 @@ |
| |
| .. _tw_features: |
| |
| -.. kernel-feat:: $srctree/Documentation/features mips |
| +.. kernel-feat:: features mips |
| |