lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <9ed5639ec750349acfd243a7f8358acd1d13c2de.camel@redhat.com>
Date: Tue, 20 Jan 2026 08:44:32 +0100
From: Gabriele Monaco <gmonaco@...hat.com>
To: Wander Lairson Costa <wander@...hat.com>, Steven Rostedt
	 <rostedt@...dmis.org>, Nam Cao <namcao@...utronix.de>, open list
	 <linux-kernel@...r.kernel.org>, "open list:RUNTIME VERIFICATION (RV)"
	 <linux-trace-kernel@...r.kernel.org>
Subject: Re: [PATCH 06/26] rv/rvgen: use context managers for file operations

On Mon, 2026-01-19 at 17:45 -0300, Wander Lairson Costa wrote:
> Replace manual file open and close operations with context managers
> throughout the rvgen codebase. The previous implementation used
> explicit open() and close() calls, which could lead to resource leaks
> if exceptions occurred between opening and closing the file handles.
> 
> This change affects three file operations: reading DOT specification
> files in the automata parser, reading template files in the generator
> base class, and writing generated monitor files. All now use the with
> statement to ensure proper resource cleanup even in error conditions.
> 
> Context managers provide automatic cleanup through the with statement,
> which guarantees that file handles are closed when the with block
> exits regardless of whether an exception occurred. This follows PEP
> 343 recommendations and is the standard Python idiom for resource
> management. The change also reduces code verbosity while improving
> safety and maintainability.
> 
> Signed-off-by: Wander Lairson Costa <wander@...hat.com>

Looks reasonable, thanks!

Reviewed-by: Gabriele Monaco <gmonaco@...hat.com>

> ---
>  tools/verification/rvgen/rvgen/automata.py  |  6 ++----
>  tools/verification/rvgen/rvgen/generator.py | 12 ++++--------
>  2 files changed, 6 insertions(+), 12 deletions(-)
> 
> diff --git a/tools/verification/rvgen/rvgen/automata.py
> b/tools/verification/rvgen/rvgen/automata.py
> index ed02d0c69b410..70ff98abea751 100644
> --- a/tools/verification/rvgen/rvgen/automata.py
> +++ b/tools/verification/rvgen/rvgen/automata.py
> @@ -51,13 +51,11 @@ class Automata:
>          cursor = 0
>          dot_lines = []
>          try:
> -            dot_file = open(self.__dot_path)
> +            with open(self.__dot_path) as dot_file:
> +                dot_lines = dot_file.read().splitlines()
>          except OSError as exc:
>              raise AutomataError(f"Cannot open the file: {self.__dot_path}")
> from exc
>  
> -        dot_lines = dot_file.read().splitlines()
> -        dot_file.close()
> -
>          # checking the first line:
>          line = dot_lines[cursor].split()
>  
> diff --git a/tools/verification/rvgen/rvgen/generator.py
> b/tools/verification/rvgen/rvgen/generator.py
> index 6d16fb68798a7..ee75e111feef1 100644
> --- a/tools/verification/rvgen/rvgen/generator.py
> +++ b/tools/verification/rvgen/rvgen/generator.py
> @@ -51,11 +51,8 @@ class RVGenerator:
>          raise FileNotFoundError("Could not find the rv directory, do you have
> the kernel source installed?")
>  
>      def _read_file(self, path):
> -        fd = open(path, 'r')
> -
> -        content = fd.read()
> -
> -        fd.close()
> +        with open(path, 'r') as fd:
> +            content = fd.read()
>          return content
>  
>      def _read_template_file(self, file):
> @@ -199,9 +196,8 @@ obj-$(CONFIG_RV_MON_{name_up}) += monitors/{name}/{name}.o
>              return
>  
>      def __write_file(self, file_name, content):
> -        file = open(file_name, 'w')
> -        file.write(content)
> -        file.close()
> +        with open(file_name, 'w') as file:
> +            file.write(content)
>  
>      def _create_file(self, file_name, content):
>          path = f"{self.name}/{file_name}"


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ