* [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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.