dwarf_ranges.c: Prevent null pointer dereference in dwarf_ranges

Message ID 20241023104029.2383733-1-ant.v.moryakov@gmail.com
State Dropped
Delegated to: Mark Wielaard
Headers
Series dwarf_ranges.c: Prevent null pointer dereference in dwarf_ranges |

Commit Message

Anton Moryakov Oct. 23, 2024, 10:40 a.m. UTC
  From: AntonMoryakov <ant.v.moryakov@gmail.com>

Fix a bug that caused a null pointer dereference in the `dwarf_ranges` function.
Added a check for NULL before dereferencing the pointer `d` to prevent potential
segmentation faults.
---
 libdw/dwarf_ranges.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)
  

Comments

Mark Wielaard Oct. 23, 2024, 12:59 p.m. UTC | #1
Hi Anton,

On Wed, 2024-10-23 at 13:40 +0300, ant.v.moryakov@gmail.com wrote:
> Fix a bug that caused a null pointer dereference in the `dwarf_ranges` function.
> Added a check for NULL before dereferencing the pointer `d` to prevent potential
> segmentation faults.

Basically the same comments as for the other patch. Please sign your
work and follow the formatting conventions of the existing code.

Also do you have a testcase for this?
I have some trouble seeing how we would at this point with d equal to
NULL. It seems like other guards would prevent us reaching this point.

> ---
>  libdw/dwarf_ranges.c | 7 ++++---
>  1 file changed, 4 insertions(+), 3 deletions(-)
> 
> diff --git a/libdw/dwarf_ranges.c b/libdw/dwarf_ranges.c
> index b853e4b9..a4a04761 100644
> --- a/libdw/dwarf_ranges.c
> +++ b/libdw/dwarf_ranges.c
> @@ -532,9 +532,10 @@ dwarf_ranges (Dwarf_Die *die, ptrdiff_t offset, Dwarf_Addr *basep,
>  				     secidx, offset, 1))
>  	return -1;
>      }
> -
> -  readp = d->d_buf + offset;
> -  readendp = d->d_buf + d->d_size;
> +  if(d != NULL){
> +  	readp = d->d_buf + offset;
> +  	readendp = d->d_buf + d->d_size;
> +  }
>  
>    Dwarf_Addr begin;
>    Dwarf_Addr end;

Thanks,

Mark
  

Patch

diff --git a/libdw/dwarf_ranges.c b/libdw/dwarf_ranges.c
index b853e4b9..a4a04761 100644
--- a/libdw/dwarf_ranges.c
+++ b/libdw/dwarf_ranges.c
@@ -532,9 +532,10 @@  dwarf_ranges (Dwarf_Die *die, ptrdiff_t offset, Dwarf_Addr *basep,
 				     secidx, offset, 1))
 	return -1;
     }
-
-  readp = d->d_buf + offset;
-  readendp = d->d_buf + d->d_size;
+  if(d != NULL){
+  	readp = d->d_buf + offset;
+  	readendp = d->d_buf + d->d_size;
+  }
 
   Dwarf_Addr begin;
   Dwarf_Addr end;