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 for Android: free password hash cracker in your pocket
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <20250213043806.GA2552411-mkhalfella@purestorage.com>
Date: Wed, 12 Feb 2025 20:38:06 -0800
From: Mohamed Khalfella <mkhalfella@...estorage.com>
To: Koichiro Den <koichiro.den@...onical.com>
Cc: linux-next@...r.kernel.org, jan.kiszka@...mens.com, kbingham@...nel.org,
	linux-kernel@...r.kernel.org,
	Thomas Weißschuh <linux@...ssschuh.net>
Subject: Re: [PATCH] scripts/gdb/symbols: follow up on refactoring for const
 struct bin_attribute

On 2025-01-12 21:21:49 +0900, Koichiro Den wrote:
> The work for 'const struct bin_attribute' [1] was merged into linux-next
> but did not include updates to the lx-symbols code. So it now fails with
> the following error:
> Python Exception <class 'gdb.error'>: There is no member named nsections.
> Error occurred in Python: There is no member named nsections.
> 
> Restore its functionality by aligning it with those changes on
> kernel/module/sysfs.c.
> 
> [1] https://lore.kernel.org/all/20241227-sysfs-const-bin_attr-module-v2-0-e267275f0f37@weissschuh.net/
> 
> Signed-off-by: Koichiro Den <koichiro.den@...onical.com>
> ---
>  scripts/gdb/linux/symbols.py | 16 +++++++++++++---
>  1 file changed, 13 insertions(+), 3 deletions(-)
> 
> diff --git a/scripts/gdb/linux/symbols.py b/scripts/gdb/linux/symbols.py
> index f6c1b063775a..8efefd30df49 100644
> --- a/scripts/gdb/linux/symbols.py
> +++ b/scripts/gdb/linux/symbols.py
> @@ -89,16 +89,26 @@ lx-symbols command."""
>                  return name
>          return None
>  
> +    def _iter_bin_attrs(self, bin_attrs):
> +        while True:
> +            try:
> +                bin_attr = bin_attrs.dereference()
> +            except gdb.MemoryError:

This should not result in an exception. The array should at least have
one element on it, that is the NULL terminator.

> +                break
> +            if bin_attr == 0:
> +                break
> +            yield bin_attr
> +            bin_attrs += 1
> +
>      def _section_arguments(self, module, module_addr):
>          try:
>              sect_attrs = module['sect_attrs'].dereference()
>          except gdb.error:
>              return str(module_addr)
>  
> -        attrs = sect_attrs['attrs']
>          section_name_to_address = {
> -            attrs[n]['battr']['attr']['name'].string(): attrs[n]['address']
> -            for n in range(int(sect_attrs['nsections']))}
> +            bin_attr['attr']['name'].string(): bin_attr['private']
> +            for bin_attr in self._iter_bin_attrs(sect_attrs['grp']['bin_attrs'])}
>  
>          textaddr = section_name_to_address.get(".text", module_addr)
>          args = []
> -- 
> 2.45.2
> 

Hello Koichiro,

I hit the same problem came up with similar fix below. Of course I am
biased and I think my change is more concise. Feel free to take from it.
Looks like many commits changed this code and any of them would break
python code. Can you please add Fixes tag at least to the top commit.

34f5ec0f8252 ("module: sysfs: Drop 'struct module_sect_attr'")
4b2c11e4aaf7 ("module: sysfs: Drop member 'module_sect_attr::address'")
d8959b947a8d ("module: sysfs: Drop member 'module_sect_attrs::nsections'")

diff --git a/scripts/gdb/linux/symbols.py b/scripts/gdb/linux/symbols.py
index f6c1b063775a..e4865ec5aebe 100644
--- a/scripts/gdb/linux/symbols.py
+++ b/scripts/gdb/linux/symbols.py
@@ -95,10 +95,15 @@ lx-symbols command."""
         except gdb.error:
             return str(module_addr)

-        attrs = sect_attrs['attrs']
-        section_name_to_address = {
-            attrs[n]['battr']['attr']['name'].string(): attrs[n]['address']
-            for n in range(int(sect_attrs['nsections']))}
+        section_name_to_address = {}
+        gattr = sect_attrs['grp']['bin_attrs']
+        battr = gattr.dereference()
+        while battr:
+            sec_name = battr['attr']['name'].string()
+            sec_addr = battr['private']
+            section_name_to_address[sec_name] = sec_addr
+            gattr = gattr + 1
+            battr = gattr.dereference()

         textaddr = section_name_to_address.get(".text", module_addr)
         args = []

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ