* [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).