linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/2] kernel_include.py: fix a regression on linux-next
@ 2025-09-01 13:21 Mauro Carvalho Chehab
  2025-09-01 13:21 ` [PATCH 1/2] docs: kernel_include.py: fix an issue when O= is used Mauro Carvalho Chehab
  2025-09-01 13:21 ` [PATCH 2/2] docs: kernel_include.py: drop some old behavior Mauro Carvalho Chehab
  0 siblings, 2 replies; 3+ messages in thread
From: Mauro Carvalho Chehab @ 2025-09-01 13:21 UTC (permalink / raw)
  To: Jonathan Corbet, Linux Doc Mailing List
  Cc: Mauro Carvalho Chehab, Mauro Carvalho Chehab, linux-kernel

Hi Jon,

My past series broke when O= is used. This small series fix it.

Actually, only the first patch is needed. The second one is
a cleanup. I opted to split on two just because it contains
an incompatible behavior change. Not really a problem, as only
media uses kernel-include, but still I opted to keep it in
separate, just in case someone might be needing it.

Mauro Carvalho Chehab (2):
  docs: kernel_include.py: fix an issue when O= is used
  docs: kernel_include.py: drop some old behavior

 Documentation/sphinx/kernel_include.py | 43 ++++++++++++++++++++------
 1 file changed, 33 insertions(+), 10 deletions(-)

-- 
2.51.0


^ permalink raw reply	[flat|nested] 3+ messages in thread

* [PATCH 1/2] docs: kernel_include.py: fix an issue when O= is used
  2025-09-01 13:21 [PATCH 0/2] kernel_include.py: fix a regression on linux-next Mauro Carvalho Chehab
@ 2025-09-01 13:21 ` Mauro Carvalho Chehab
  2025-09-01 13:21 ` [PATCH 2/2] docs: kernel_include.py: drop some old behavior Mauro Carvalho Chehab
  1 sibling, 0 replies; 3+ messages in thread
From: Mauro Carvalho Chehab @ 2025-09-01 13:21 UTC (permalink / raw)
  To: Jonathan Corbet, Linux Doc Mailing List
  Cc: Mauro Carvalho Chehab, Kees Cook, Mauro Carvalho Chehab,
	linux-kernel, Stephen Rothwell

As reported by Stephen, building docs with O= is now
broken. Fix it by ensuring that it will seek files under
Kernel source tree.

The original logic was defined to accept including files
under Documentation/output. The new logic doesn't need it
anymore for media, but it might still be useful to preserve
the previous behavior. So, I ended preserving it.

Reported-by: Stephen Rothwell <sfr@canb.auug.org.au>
Closes: https://lore.kernel.org/all/20250901142639.4de35a11@canb.auug.org.au/
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
---
 Documentation/sphinx/kernel_include.py | 44 +++++++++++++++++++++++---
 1 file changed, 39 insertions(+), 5 deletions(-)

diff --git a/Documentation/sphinx/kernel_include.py b/Documentation/sphinx/kernel_include.py
index 23566ab74866..661ed978bed8 100755
--- a/Documentation/sphinx/kernel_include.py
+++ b/Documentation/sphinx/kernel_include.py
@@ -314,15 +314,49 @@ class KernelInclude(Directive):
     def run(self):
         """Include a file as part of the content of this reST file."""
         env = self.state.document.settings.env
-        path = os.path.realpath(os.path.expandvars(self.arguments[0]))
 
-        # to get a bit security back, prohibit /etc:
-        if path.startswith(os.sep + "etc"):
-            raise self.severe('Problems with "%s" directive, prohibited path: %s' %
-                              (self.name, path))
+        #
+        # The include logic accepts only patches relative to:
+        #   - Kernel source tree
+        #   - Documentation output directory
+        #
+        # The logic does check it to prevent directory traverse
+        #
+
+        srctree = os.path.abspath(os.environ["srctree"])
+
+        path = os.path.expandvars(self.arguments[0])
+        src_path = os.path.join(srctree, path)
+
+        if os.path.isfile(src_path):
+            base = srctree
+            path = src_path
+        elif os.path.exists(arg):
+            # Allow patches from output dir
+            base = os.getcwd()
+            path = os.path.abspath(path)
+        else:
+            raise self.warning(f'File "%s" doesn\'t exist', path)
+
+        abs_base = os.path.abspath(base)
+        abs_full_path = os.path.abspath(os.path.join(base, path))
+
+        try:
+            if os.path.commonpath([abs_full_path, abs_base]) != abs_base:
+                raise self.severe('Problems with "%s" directive, prohibited path: %s' %
+                                  (self.name, path))
+        except ValueError:
+            # Paths don't have the same drive (Windows) or other incompatibility
+            raise self.severe('Problems with "%s" directive, invalid path: %s' %
+                            (self.name, path))
 
         self.arguments[0] = path
 
+        #
+        # Add path location to Sphinx dependencies to ensure proper cache
+        # invalidation check.
+        #
+
         env.note_dependency(os.path.abspath(path))
 
         # HINT: I had to copy&paste the whole Include.run method. I'am not happy
-- 
2.51.0


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [PATCH 2/2] docs: kernel_include.py: drop some old behavior
  2025-09-01 13:21 [PATCH 0/2] kernel_include.py: fix a regression on linux-next Mauro Carvalho Chehab
  2025-09-01 13:21 ` [PATCH 1/2] docs: kernel_include.py: fix an issue when O= is used Mauro Carvalho Chehab
@ 2025-09-01 13:21 ` Mauro Carvalho Chehab
  1 sibling, 0 replies; 3+ messages in thread
From: Mauro Carvalho Chehab @ 2025-09-01 13:21 UTC (permalink / raw)
  To: Jonathan Corbet, Linux Doc Mailing List
  Cc: Mauro Carvalho Chehab, Kees Cook, Mauro Carvalho Chehab,
	linux-kernel

The old behavior is not using anymore, so let's drop it.

Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
---
 Documentation/sphinx/kernel_include.py | 17 +++--------------
 1 file changed, 3 insertions(+), 14 deletions(-)

diff --git a/Documentation/sphinx/kernel_include.py b/Documentation/sphinx/kernel_include.py
index 661ed978bed8..2c4bb8215b4c 100755
--- a/Documentation/sphinx/kernel_include.py
+++ b/Documentation/sphinx/kernel_include.py
@@ -316,11 +316,9 @@ class KernelInclude(Directive):
         env = self.state.document.settings.env
 
         #
-        # The include logic accepts only patches relative to:
-        #   - Kernel source tree
-        #   - Documentation output directory
-        #
-        # The logic does check it to prevent directory traverse
+        # The include logic accepts only patches relative to the
+        # Kernel source tree.  The logic does check it to prevent
+        # directory traverse issues.
         #
 
         srctree = os.path.abspath(os.environ["srctree"])
@@ -331,10 +329,6 @@ class KernelInclude(Directive):
         if os.path.isfile(src_path):
             base = srctree
             path = src_path
-        elif os.path.exists(arg):
-            # Allow patches from output dir
-            base = os.getcwd()
-            path = os.path.abspath(path)
         else:
             raise self.warning(f'File "%s" doesn\'t exist', path)
 
@@ -359,11 +353,6 @@ class KernelInclude(Directive):
 
         env.note_dependency(os.path.abspath(path))
 
-        # HINT: I had to copy&paste the whole Include.run method. I'am not happy
-        # with this, but due to security reasons, the Include.run method does
-        # not allow absolute or relative pathnames pointing to locations *above*
-        # the filesystem tree where the reST document is placed.
-
         if not self.state.document.settings.file_insertion_enabled:
             raise self.warning('"%s" directive disabled.' % self.name)
         source = self.state_machine.input_lines.source(self.lineno -
-- 
2.51.0


^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2025-09-01 13:21 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-09-01 13:21 [PATCH 0/2] kernel_include.py: fix a regression on linux-next Mauro Carvalho Chehab
2025-09-01 13:21 ` [PATCH 1/2] docs: kernel_include.py: fix an issue when O= is used Mauro Carvalho Chehab
2025-09-01 13:21 ` [PATCH 2/2] docs: kernel_include.py: drop some old behavior Mauro Carvalho Chehab

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).