summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rw-r--r--tools/binman/etype/fdtmap.py5
-rw-r--r--tools/binman/etype/image_header.py1
-rw-r--r--tools/binman/etype/pre_load.py2
-rw-r--r--tools/binman/etype/ti_board_config.py2
-rw-r--r--tools/binman/etype/x509_cert.py1
-rw-r--r--tools/binman/ftest.py1
-rw-r--r--tools/binman/requirements.txt5
-rw-r--r--tools/binman/setup.py2
-rw-r--r--tools/binman/state.py3
-rw-r--r--tools/buildman/builder.py8
-rw-r--r--tools/buildman/builderthread.py2
-rw-r--r--tools/buildman/control.py2
-rw-r--r--tools/buildman/func_test.py2
-rwxr-xr-xtools/buildman/main.py3
-rw-r--r--tools/buildman/requirements.txt7
-rw-r--r--tools/buildman/test.py1
-rw-r--r--tools/docker/Dockerfile9
-rw-r--r--tools/dtoc/setup.py2
-rw-r--r--tools/image-host.c11
-rw-r--r--tools/kwbimage.c6
-rwxr-xr-xtools/microcode-tool.py3
-rw-r--r--tools/patman/__init__.py4
-rwxr-xr-xtools/patman/__main__.py2
-rw-r--r--tools/patman/checkpatch.py2
-rw-r--r--tools/patman/cmdline.py2
-rw-r--r--tools/patman/control.py2
-rw-r--r--tools/patman/func_test.py2
-rw-r--r--tools/patman/get_maintainer.py2
-rw-r--r--tools/patman/patchstream.py2
-rw-r--r--tools/patman/project.py2
-rw-r--r--tools/patman/requirements.txt5
-rw-r--r--tools/patman/series.py2
-rw-r--r--tools/patman/settings.py2
-rw-r--r--tools/patman/test_checkpatch.py3
-rw-r--r--tools/proftool.c3
-rw-r--r--tools/u_boot_pylib/__init__.py4
-rwxr-xr-xtools/u_boot_pylib/__main__.py1
-rw-r--r--tools/u_boot_pylib/gitutil.py (renamed from tools/patman/gitutil.py)0
-rw-r--r--tools/u_boot_pylib/requirements.txt1
-rw-r--r--tools/ublimage.c1
40 files changed, 82 insertions, 38 deletions
diff --git a/tools/binman/etype/fdtmap.py b/tools/binman/etype/fdtmap.py
index f1f6217940f..2259404180c 100644
--- a/tools/binman/etype/fdtmap.py
+++ b/tools/binman/etype/fdtmap.py
@@ -106,6 +106,9 @@ class Entry_fdtmap(Entry):
Returns:
FDT map binary data
"""
+ fsw = libfdt.FdtSw()
+ fsw.finish_reservemap()
+
def _AddNode(node):
"""Add a node to the FDT map"""
for pname, prop in node.props.items():
@@ -134,8 +137,6 @@ class Entry_fdtmap(Entry):
# Build a new tree with all nodes and properties starting from that
# node
- fsw = libfdt.FdtSw()
- fsw.finish_reservemap()
with fsw.add_node(''):
fsw.property_string('image-node', node.name)
_AddNode(node)
diff --git a/tools/binman/etype/image_header.py b/tools/binman/etype/image_header.py
index 24011884958..2114df8159f 100644
--- a/tools/binman/etype/image_header.py
+++ b/tools/binman/etype/image_header.py
@@ -62,6 +62,7 @@ class Entry_image_header(Entry):
def _GetHeader(self):
image_pos = self.GetSiblingImagePos('fdtmap')
+ offset = None
if image_pos == False:
self.Raise("'image_header' section must have an 'fdtmap' sibling")
elif image_pos is None:
diff --git a/tools/binman/etype/pre_load.py b/tools/binman/etype/pre_load.py
index 2e4c72359ff..00f1a896767 100644
--- a/tools/binman/etype/pre_load.py
+++ b/tools/binman/etype/pre_load.py
@@ -112,6 +112,8 @@ class Entry_pre_load(Entry_collection):
# Compute the signature
if padding_name is None:
padding_name = "pkcs-1.5"
+ padding = None
+ padding_args = None
if padding_name == "pss":
salt_len = key.size_in_bytes() - hash_image.digest_size - 2
padding = pss
diff --git a/tools/binman/etype/ti_board_config.py b/tools/binman/etype/ti_board_config.py
index c10d66edcb1..7c6773ac7bc 100644
--- a/tools/binman/etype/ti_board_config.py
+++ b/tools/binman/etype/ti_board_config.py
@@ -119,12 +119,14 @@ class Entry_ti_board_config(Entry_section):
array of bytes representing value
"""
size = 0
+ br = bytearray()
if (data_type == '#/definitions/u8'):
size = 1
elif (data_type == '#/definitions/u16'):
size = 2
else:
size = 4
+ br = None
if type(val) == int:
br = val.to_bytes(size, byteorder='little')
return br
diff --git a/tools/binman/etype/x509_cert.py b/tools/binman/etype/x509_cert.py
index 29630d1b86c..25e6808b7f9 100644
--- a/tools/binman/etype/x509_cert.py
+++ b/tools/binman/etype/x509_cert.py
@@ -84,6 +84,7 @@ class Entry_x509_cert(Entry_collection):
input_fname = tools.get_output_filename('input.%s' % uniq)
config_fname = tools.get_output_filename('config.%s' % uniq)
tools.write_file(input_fname, input_data)
+ stdout = None
if type == 'generic':
stdout = self.openssl.x509_cert(
cert_fname=output_fname,
diff --git a/tools/binman/ftest.py b/tools/binman/ftest.py
index a553ca9e564..d2802f67e2d 100644
--- a/tools/binman/ftest.py
+++ b/tools/binman/ftest.py
@@ -6381,6 +6381,7 @@ fdt fdtmap Extract the devicetree blob from the fdtmap
ename, prop = entry_m.group(1), entry_m.group(3)
entry, entry_name, prop_name = image.LookupEntry(entries,
name, msg)
+ expect_val = None
if prop_name == 'offset':
expect_val = entry.offset
elif prop_name == 'image_pos':
diff --git a/tools/binman/requirements.txt b/tools/binman/requirements.txt
new file mode 100644
index 00000000000..f068ef75a30
--- /dev/null
+++ b/tools/binman/requirements.txt
@@ -0,0 +1,5 @@
+importlib_resources==6.5.2
+jsonschema==4.23.0
+pycryptodomex==3.21.0
+pyelftools==0.31
+yamllint==1.35.1
diff --git a/tools/binman/setup.py b/tools/binman/setup.py
index 9a9206eb044..bec078a3d9b 100644
--- a/tools/binman/setup.py
+++ b/tools/binman/setup.py
@@ -1,6 +1,6 @@
# SPDX-License-Identifier: GPL-2.0+
-from distutils.core import setup
+from setuptools import setup
setup(name='binman',
version='1.0',
license='GPL-2.0+',
diff --git a/tools/binman/state.py b/tools/binman/state.py
index 45bae40c525..6772d3678fe 100644
--- a/tools/binman/state.py
+++ b/tools/binman/state.py
@@ -406,10 +406,13 @@ def CheckSetHashValue(node, get_data_func):
hash_node = node.FindNode('hash')
if hash_node:
algo = hash_node.props.get('algo').value
+ data = None
if algo == 'sha256':
m = hashlib.sha256()
m.update(get_data_func())
data = m.digest()
+ if data is None:
+ raise ValueError(f"Node '{node.path}': Unknown hash algorithm '{algo}'")
for n in GetUpdateNodes(hash_node):
n.SetData('value', data)
diff --git a/tools/buildman/builder.py b/tools/buildman/builder.py
index cbf1345281b..23b1016d0f9 100644
--- a/tools/buildman/builder.py
+++ b/tools/buildman/builder.py
@@ -19,8 +19,8 @@ import time
from buildman import builderthread
from buildman import toolchain
-from patman import gitutil
from u_boot_pylib import command
+from u_boot_pylib import gitutil
from u_boot_pylib import terminal
from u_boot_pylib import tools
from u_boot_pylib.terminal import tprint
@@ -1095,14 +1095,13 @@ class Builder:
diff = result[name]
if name.startswith('_'):
continue
- if diff != 0:
- color = self.col.RED if diff > 0 else self.col.GREEN
+ colour = self.col.RED if diff > 0 else self.col.GREEN
msg = ' %s %+d' % (name, diff)
if not printed_target:
tprint('%10s %-15s:' % ('', result['_target']),
newline=False)
printed_target = True
- tprint(msg, colour=color, newline=False)
+ tprint(msg, colour=colour, newline=False)
if printed_target:
tprint()
if show_bloat:
@@ -1353,6 +1352,7 @@ class Builder:
for line in lines:
if not line:
continue
+ col = None
if line[0] == '+':
col = self.col.GREEN
elif line[0] == '-':
diff --git a/tools/buildman/builderthread.py b/tools/buildman/builderthread.py
index 29e6cf32af1..78c95a67095 100644
--- a/tools/buildman/builderthread.py
+++ b/tools/buildman/builderthread.py
@@ -17,8 +17,8 @@ import sys
import threading
from buildman import cfgutil
-from patman import gitutil
from u_boot_pylib import command
+from u_boot_pylib import gitutil
from u_boot_pylib import tools
RETURN_CODE_RETRY = -1
diff --git a/tools/buildman/control.py b/tools/buildman/control.py
index 55d4d770c5c..5109b1cd5ce 100644
--- a/tools/buildman/control.py
+++ b/tools/buildman/control.py
@@ -20,9 +20,9 @@ from buildman import bsettings
from buildman import cfgutil
from buildman import toolchain
from buildman.builder import Builder
-from patman import gitutil
from patman import patchstream
from u_boot_pylib import command
+from u_boot_pylib import gitutil
from u_boot_pylib import terminal
from u_boot_pylib import tools
from u_boot_pylib.terminal import print_clear, tprint
diff --git a/tools/buildman/func_test.py b/tools/buildman/func_test.py
index 4e12c671a3d..c7c4f506a65 100644
--- a/tools/buildman/func_test.py
+++ b/tools/buildman/func_test.py
@@ -18,8 +18,8 @@ from buildman import bsettings
from buildman import cmdline
from buildman import control
from buildman import toolchain
-from patman import gitutil
from u_boot_pylib import command
+from u_boot_pylib import gitutil
from u_boot_pylib import terminal
from u_boot_pylib import test_util
from u_boot_pylib import tools
diff --git a/tools/buildman/main.py b/tools/buildman/main.py
index a948f36d9c0..72571b226d9 100755
--- a/tools/buildman/main.py
+++ b/tools/buildman/main.py
@@ -50,8 +50,7 @@ def run_tests(skip_net_tests, debug, verbose, args):
# 'entry' module.
result = test_util.run_test_suites(
'buildman', debug, verbose, False, args.threads, test_name, [],
- [test.TestBuild, func_test.TestFunctional,
- 'buildman.toolchain', 'patman.gitutil'])
+ [test.TestBuild, func_test.TestFunctional, 'buildman.toolchain'])
return (0 if result.wasSuccessful() else 1)
diff --git a/tools/buildman/requirements.txt b/tools/buildman/requirements.txt
index 052d0ed5c6f..d48650cd1e5 100644
--- a/tools/buildman/requirements.txt
+++ b/tools/buildman/requirements.txt
@@ -1,5 +1,2 @@
-coverage==6.2
-jsonschema==4.17.3
-pycryptodome==3.20
-pyyaml==6.0
-yamllint==1.26.3
+filelock==3.0.12
+importlib_resources==6.5.2
diff --git a/tools/buildman/test.py b/tools/buildman/test.py
index 385a34e5254..c5feb74a105 100644
--- a/tools/buildman/test.py
+++ b/tools/buildman/test.py
@@ -836,6 +836,7 @@ class TestBuild(unittest.TestCase):
tmpdir = self.base_dir
with (patch('time.time', side_effect=self.get_time),
+ patch('time.perf_counter', side_effect=self.get_time),
patch('time.monotonic', side_effect=self.get_time),
patch('time.sleep', side_effect=self.inc_time),
patch('os.kill', side_effect=self.kill)):
diff --git a/tools/docker/Dockerfile b/tools/docker/Dockerfile
index d2848ab85f3..85d67848327 100644
--- a/tools/docker/Dockerfile
+++ b/tools/docker/Dockerfile
@@ -122,7 +122,6 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
python3 \
python3-dev \
python3-pip \
- python3-pyelftools \
python3-sphinx \
python3-virtualenv \
rpm2cpio \
@@ -308,12 +307,18 @@ USER uboot:uboot
# COPY / ADD directives don't work as we need them to.
RUN wget -O /tmp/pytest-requirements.txt https://source.denx.de/u-boot/u-boot/-/raw/master/test/py/requirements.txt
RUN wget -O /tmp/sphinx-requirements.txt https://source.denx.de/u-boot/u-boot/-/raw/master/doc/sphinx/requirements.txt
+RUN wget -O /tmp/binman-requirements.txt https://source.denx.de/u-boot/u-boot/-/raw/master/tools/binman/requirements.txt
RUN wget -O /tmp/buildman-requirements.txt https://source.denx.de/u-boot/u-boot/-/raw/master/tools/buildman/requirements.txt
+RUN wget -O /tmp/patman-requirements.txt https://source.denx.de/u-boot/u-boot/-/raw/master/tools/patman/requirements.txt
+RUN wget -O /tmp/u_boot_pylib-requirements.txt https://source.denx.de/u-boot/u-boot/-/raw/master/tools/u_boot_pylib/requirements.txt
RUN virtualenv -p /usr/bin/python3 /tmp/venv && \
. /tmp/venv/bin/activate && \
pip install -r /tmp/pytest-requirements.txt \
-r /tmp/sphinx-requirements.txt \
- -r /tmp/buildman-requirements.txt && \
+ -r /tmp/binman-requirements.txt \
+ -r /tmp/buildman-requirements.txt \
+ -r /tmp/patman-requirements.txt \
+ -r /tmp/u_boot_pylib-requirements.txt && \
deactivate && \
rm -rf /tmp/venv /tmp/*-requirements.txt
diff --git a/tools/dtoc/setup.py b/tools/dtoc/setup.py
index 5e092fe0872..ae9ad043b01 100644
--- a/tools/dtoc/setup.py
+++ b/tools/dtoc/setup.py
@@ -1,6 +1,6 @@
# SPDX-License-Identifier: GPL-2.0+
-from distutils.core import setup
+from setuptools import setup
setup(name='dtoc',
version='1.0',
license='GPL-2.0+',
diff --git a/tools/image-host.c b/tools/image-host.c
index e6de34fa059..14e8bd52a65 100644
--- a/tools/image-host.c
+++ b/tools/image-host.c
@@ -729,11 +729,20 @@ static int strlist_add(struct strlist *list, const char *str)
{
char *dup;
+ if (!list || !str)
+ return -1;
+
dup = strdup(str);
+ if(!dup)
+ return -1;
+
list->strings = realloc(list->strings,
(list->count + 1) * sizeof(char *));
- if (!list || !str)
+ if (!list->strings) {
+ free(dup);
return -1;
+ }
+
list->strings[list->count++] = dup;
return 0;
diff --git a/tools/kwbimage.c b/tools/kwbimage.c
index d1cbced28fc..3dcf5ba66b9 100644
--- a/tools/kwbimage.c
+++ b/tools/kwbimage.c
@@ -1653,6 +1653,12 @@ static int image_create_config_parse_oneline(char *line,
char *unknown_msg = "Ignoring unknown line '%s'\n";
keyword = strtok_r(line, delimiters, &saveptr);
+
+ if (!keyword) {
+ fprintf(stderr, "Parameter missing in line '%s'\n", line);
+ return -1;
+ }
+
keyword_id = recognize_keyword(keyword);
if (!keyword_id) {
diff --git a/tools/microcode-tool.py b/tools/microcode-tool.py
index 24c02c4fca1..b726794751a 100755
--- a/tools/microcode-tool.py
+++ b/tools/microcode-tool.py
@@ -279,6 +279,9 @@ def MicrocodeTool():
if (not not options.mcfile) != (not not options.mcfile):
parser.error("You must specify either header files or a microcode file, not both")
+ date = None
+ microcodes = None
+ license_text = None
if options.headerfile:
date, license_text, microcodes = ParseHeaderFiles(options.headerfile)
elif options.mcfile:
diff --git a/tools/patman/__init__.py b/tools/patman/__init__.py
index 08eeffdf6d2..6de0e9fba10 100644
--- a/tools/patman/__init__.py
+++ b/tools/patman/__init__.py
@@ -1,5 +1,5 @@
# SPDX-License-Identifier: GPL-2.0+
__all__ = ['checkpatch', 'commit', 'control', 'func_test', 'get_maintainer',
- 'gitutil', '__main__', 'patchstream', 'project', 'series',
- 'settings','setup', 'status', 'test_checkpatch', 'test_settings']
+ '__main__', 'patchstream', 'project', 'series',
+ 'settings', 'setup', 'status', 'test_checkpatch', 'test_settings']
diff --git a/tools/patman/__main__.py b/tools/patman/__main__.py
index f645b38b647..36f1c08507c 100755
--- a/tools/patman/__main__.py
+++ b/tools/patman/__main__.py
@@ -49,7 +49,7 @@ def run_patman():
result = test_util.run_test_suites(
'patman', False, False, False, None, None, None,
[test_checkpatch.TestPatch, func_test.TestFunctional,
- 'gitutil', 'settings'])
+ 'settings'])
sys.exit(0 if result.wasSuccessful() else 1)
diff --git a/tools/patman/checkpatch.py b/tools/patman/checkpatch.py
index e03cac115e4..2975881705c 100644
--- a/tools/patman/checkpatch.py
+++ b/tools/patman/checkpatch.py
@@ -8,8 +8,8 @@ import os
import re
import sys
-from patman import gitutil
from u_boot_pylib import command
+from u_boot_pylib import gitutil
from u_boot_pylib import terminal
EMACS_PREFIX = r'(?:[0-9]{4}.*\.patch:[0-9]+: )?'
diff --git a/tools/patman/cmdline.py b/tools/patman/cmdline.py
index d6496c0cb78..562bc823f60 100644
--- a/tools/patman/cmdline.py
+++ b/tools/patman/cmdline.py
@@ -13,8 +13,8 @@ import os
import pathlib
import sys
-from patman import gitutil
from patman import project
+from u_boot_pylib import gitutil
from patman import settings
PATMAN_DIR = pathlib.Path(__file__).parent
diff --git a/tools/patman/control.py b/tools/patman/control.py
index b292da9dc27..fb5a4246ced 100644
--- a/tools/patman/control.py
+++ b/tools/patman/control.py
@@ -12,8 +12,8 @@ import os
import sys
from patman import checkpatch
-from patman import gitutil
from patman import patchstream
+from u_boot_pylib import gitutil
from u_boot_pylib import terminal
diff --git a/tools/patman/func_test.py b/tools/patman/func_test.py
index af6c025a441..bf333dc557b 100644
--- a/tools/patman/func_test.py
+++ b/tools/patman/func_test.py
@@ -18,11 +18,11 @@ import unittest
from patman.commit import Commit
from patman import control
-from patman import gitutil
from patman import patchstream
from patman.patchstream import PatchStream
from patman.series import Series
from patman import settings
+from u_boot_pylib import gitutil
from u_boot_pylib import terminal
from u_boot_pylib import tools
from u_boot_pylib.test_util import capture_sys_output
diff --git a/tools/patman/get_maintainer.py b/tools/patman/get_maintainer.py
index 8df3d124bac..200ee96551d 100644
--- a/tools/patman/get_maintainer.py
+++ b/tools/patman/get_maintainer.py
@@ -7,8 +7,8 @@ import os
import shlex
import shutil
-from patman import gitutil
from u_boot_pylib import command
+from u_boot_pylib import gitutil
def find_get_maintainer(script_file_name):
diff --git a/tools/patman/patchstream.py b/tools/patman/patchstream.py
index 4955f6aaab9..08795c4a0a8 100644
--- a/tools/patman/patchstream.py
+++ b/tools/patman/patchstream.py
@@ -15,9 +15,9 @@ import shutil
import tempfile
from patman import commit
-from patman import gitutil
from patman.series import Series
from u_boot_pylib import command
+from u_boot_pylib import gitutil
# Tags that we detect and remove
RE_REMOVE = re.compile(r'^BUG=|^TEST=|^BRANCH=|^Review URL:'
diff --git a/tools/patman/project.py b/tools/patman/project.py
index 4459042b5d4..d6143a67066 100644
--- a/tools/patman/project.py
+++ b/tools/patman/project.py
@@ -4,7 +4,7 @@
import os.path
-from patman import gitutil
+from u_boot_pylib import gitutil
def detect_project():
"""Autodetect the name of the current project.
diff --git a/tools/patman/requirements.txt b/tools/patman/requirements.txt
new file mode 100644
index 00000000000..e8cbc6cf0c3
--- /dev/null
+++ b/tools/patman/requirements.txt
@@ -0,0 +1,5 @@
+ConfigParser==7.1.0
+importlib_resources==6.5.2
+pygit2==1.13.3
+Requests==2.32.3
+setuptools==75.8.0
diff --git a/tools/patman/series.py b/tools/patman/series.py
index 6866e1dbd08..d7f2f010f5d 100644
--- a/tools/patman/series.py
+++ b/tools/patman/series.py
@@ -12,8 +12,8 @@ import sys
import time
from patman import get_maintainer
-from patman import gitutil
from patman import settings
+from u_boot_pylib import gitutil
from u_boot_pylib import terminal
from u_boot_pylib import tools
diff --git a/tools/patman/settings.py b/tools/patman/settings.py
index 68c93e313b3..d66b22be1df 100644
--- a/tools/patman/settings.py
+++ b/tools/patman/settings.py
@@ -12,7 +12,7 @@ import argparse
import os
import re
-from patman import gitutil
+from u_boot_pylib import gitutil
"""Default settings per-project.
diff --git a/tools/patman/test_checkpatch.py b/tools/patman/test_checkpatch.py
index db7860f551d..3bf16febbf6 100644
--- a/tools/patman/test_checkpatch.py
+++ b/tools/patman/test_checkpatch.py
@@ -11,10 +11,10 @@ import tempfile
import unittest
from patman import checkpatch
-from patman import gitutil
from patman import patchstream
from patman import series
from patman import commit
+from u_boot_pylib import gitutil
class Line:
@@ -530,4 +530,3 @@ index 0000000..2234c87
if __name__ == "__main__":
unittest.main()
- gitutil.RunTests()
diff --git a/tools/proftool.c b/tools/proftool.c
index af2cdb6d584..c7b427f3078 100644
--- a/tools/proftool.c
+++ b/tools/proftool.c
@@ -676,6 +676,7 @@ static int read_trace_config(FILE *fin)
if (!tok) {
error("Invalid trace config data on line %d\n",
linenum);
+ free(line);
return -1;
}
if (0 == strcmp(tok, "include-func")) {
@@ -685,6 +686,7 @@ static int read_trace_config(FILE *fin)
} else {
error("Unknown command in trace config data line %d\n",
linenum);
+ free(line);
return -1;
}
@@ -692,6 +694,7 @@ static int read_trace_config(FILE *fin)
if (!tok) {
error("Missing pattern in trace config data line %d\n",
linenum);
+ free(line);
return -1;
}
diff --git a/tools/u_boot_pylib/__init__.py b/tools/u_boot_pylib/__init__.py
index 63c88e85ec0..807a62e0743 100644
--- a/tools/u_boot_pylib/__init__.py
+++ b/tools/u_boot_pylib/__init__.py
@@ -1,4 +1,4 @@
# SPDX-License-Identifier: GPL-2.0+
-__all__ = ['command', 'cros_subprocess','terminal', 'test_util', 'tools',
- 'tout']
+__all__ = ['command', 'cros_subprocess', 'gitutil', 'terminal', 'test_util',
+ 'tools', 'tout']
diff --git a/tools/u_boot_pylib/__main__.py b/tools/u_boot_pylib/__main__.py
index 8f98d7bd9f8..c0762bca733 100755
--- a/tools/u_boot_pylib/__main__.py
+++ b/tools/u_boot_pylib/__main__.py
@@ -13,7 +13,6 @@ if __name__ == "__main__":
sys.path.append(os.path.join(our_path, '..'))
# Run tests
- from u_boot_pylib import terminal
from u_boot_pylib import test_util
result = test_util.run_test_suites(
diff --git a/tools/patman/gitutil.py b/tools/u_boot_pylib/gitutil.py
index 10ea5ff39f5..10ea5ff39f5 100644
--- a/tools/patman/gitutil.py
+++ b/tools/u_boot_pylib/gitutil.py
diff --git a/tools/u_boot_pylib/requirements.txt b/tools/u_boot_pylib/requirements.txt
new file mode 100644
index 00000000000..1087e6f2857
--- /dev/null
+++ b/tools/u_boot_pylib/requirements.txt
@@ -0,0 +1 @@
+concurrencytest==0.1.2
diff --git a/tools/ublimage.c b/tools/ublimage.c
index 8f9b58c7983..a1bd807bfa0 100644
--- a/tools/ublimage.c
+++ b/tools/ublimage.c
@@ -178,6 +178,7 @@ static uint32_t parse_cfg_file(struct ubl_header *ublhdr, char *name)
lineno, fld, &dcd_len);
}
}
+ free(line);
fclose(fd);
return dcd_len;