Re: RecursionError when try to check bindings (ubuntu 22.04 / Python3.10)

From: Krzysztof Kozlowski
Date: Mon Sep 04 2023 - 14:18:16 EST


On 03/09/2023 13:08, Frank Wunderlich wrote:
> Hi,
>
> i tried to check a binding-file with 6.5 kernelsource and get this error
>
> GNU nano 6.2 dt.log
> LINT Documentation/devicetree/bindings
> CHKDT Documentation/devicetree/bindings/processed-schema.json
> SCHEMA Documentation/devicetree/bindings/processed-schema.json
> Traceback (most recent call last):
> File "/home/frank/.local/bin/dt-mk-schema", line 38, in <module>
> schemas = dtschema.DTValidator(args.schemas).schemas
> File "/home/frank/.local/lib/python3.10/site-packages/dtschema/validator.py", line 354, in __init__
> self.schemas = process_schemas(schema_files)
> File "/home/frank/.local/lib/python3.10/site-packages/dtschema/validator.py", line 271, in process_schemas
> sch = process_schema(os.path.abspath(filename))
> File "/home/frank/.local/lib/python3.10/site-packages/dtschema/validator.py", line 248, in process_schema
> dtsch.is_valid()
> File "/home/frank/.local/lib/python3.10/site-packages/dtschema/schema.py", line 145, in is_valid
> for error in self.DtValidator(self.DtValidator.META_SCHEMA).iter_errors(self):
> File "/home/frank/.local/lib/python3.10/site-packages/jsonschema/validators.py", line 242, in iter_errors
> for error in errors:
> File "/home/frank/.local/lib/python3.10/site-packages/jsonschema/_validators.py", line 362, in allOf
> yield from validator.descend(instance, subschema, schema_path=index)
> File "/home/frank/.local/lib/python3.10/site-packages/jsonschema/validators.py", line 258, in descend
> for error in self.evolve(schema=schema).iter_errors(instance):
>
> block from line 242-258 repeats many times (~2000 lines in log)
>
> File "/home/frank/.local/lib/python3.10/site-packages/jsonschema/validators.py", line 242, in iter_errors
> for error in errors:
> File "/home/frank/.local/lib/python3.10/site-packages/jsonschema/_legacy_validators.py", line 216, in recursiveRef
> lookup_url, next_target = validator.resolver.resolve(each)
> File "/home/frank/.local/lib/python3.10/site-packages/jsonschema/validators.py", line 835, in resolve
> url = self._urljoin_cache(self.resolution_scope, ref).rstrip("/")
> RecursionError: maximum recursion depth exceeded in comparison
>
> make[2]: *** [Documentation/devicetree/bindings/Makefile:68: Documentation/devicetree/bindings/processed-schema.json] Error 1
> make[2]: *** Deleting file 'Documentation/devicetree/bindings/processed-schema.json'
> make[1]: *** [/media/data_nvme/git/kernel/BPI-R2-4.14/Makefile:1516: dt_binding_check] Error 2
> make: *** [Makefile:234: __sub-make] Error 2
>
> my command is (after importing defconfig, also tried a clean before):
>
> ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- make dt_binding_check
>
> already did an update of dtschema with "pip3 install dtschema --upgrade" and also an uninstall/install of this python-package
>
> $ pip3 show dtschema
> Name: dtschema
> Version: 2023.7
> Summary: DeviceTree validation schema and tools
> Home-page: https://github.com/devicetree-org/dt-schema
> Author: Rob Herring
> Author-email: robh@xxxxxxxxxx
> License: BSD
> Location: /home/frank/.local/lib/python3.10/site-packages
> Requires: jsonschema, pylibfdt, rfc3987, ruamel.yaml
> Required-by:
>
> any idea what can be the cause?

Can you share the reproduction steps? This probably is some error in
schema which is then not nicely handled by dtschema.

Best regards,
Krzysztof