diff mbox series

contrib/elf2dmp: add kernel start address checking

Message ID 20190219211936.6466-1-viktor.prutyanov@phystech.edu
State New
Headers show
Series contrib/elf2dmp: add kernel start address checking | expand

Commit Message

Viktor Prutyanov Feb. 19, 2019, 9:19 p.m. UTC
Before this patch, if elf2dmp failed to find NT kernel PE magic in
allowed virtual address range, then it assumes NULL as NT kernel
address and cause segfault.

This patch fix the problem described above by checking NT kernel address
before futher processing.

Signed-off-by: Viktor Prutyanov <viktor.prutyanov@phystech.edu>
---
 contrib/elf2dmp/main.c | 6 ++++++
 1 file changed, 6 insertions(+)

Comments

Paolo Bonzini Feb. 20, 2019, 11:30 a.m. UTC | #1
On 19/02/19 22:19, Viktor Prutyanov wrote:
> Before this patch, if elf2dmp failed to find NT kernel PE magic in
> allowed virtual address range, then it assumes NULL as NT kernel
> address and cause segfault.
> 
> This patch fix the problem described above by checking NT kernel address
> before futher processing.
> 
> Signed-off-by: Viktor Prutyanov <viktor.prutyanov@phystech.edu>
> ---
>  contrib/elf2dmp/main.c | 6 ++++++
>  1 file changed, 6 insertions(+)
> 
> diff --git a/contrib/elf2dmp/main.c b/contrib/elf2dmp/main.c
> index 1a45eaf565..1bfeb89ba7 100644
> --- a/contrib/elf2dmp/main.c
> +++ b/contrib/elf2dmp/main.c
> @@ -524,6 +524,12 @@ int main(int argc, char *argv[])
>          }
>      }
>  
> +    if (!nt_start_addr) {
> +        eprintf("Failed to find NT kernel image\n");
> +        err = 1;
> +        goto out_ps;
> +    }
> +
>      printf("KernBase = 0x%016"PRIx64", signature is \'%.2s\'\n", KernBase,
>              (char *)nt_start_addr);
>  
> 

Queued, thanks.

Paolo
Peter Maydell March 8, 2019, 5:55 p.m. UTC | #2
On Wed, 20 Feb 2019 at 11:30, Paolo Bonzini <pbonzini@redhat.com> wrote:
>
> On 19/02/19 22:19, Viktor Prutyanov wrote:
> > Before this patch, if elf2dmp failed to find NT kernel PE magic in
> > allowed virtual address range, then it assumes NULL as NT kernel
> > address and cause segfault.
> >
> > This patch fix the problem described above by checking NT kernel address
> > before futher processing.
> >
> > Signed-off-by: Viktor Prutyanov <viktor.prutyanov@phystech.edu>
> > ---
> >  contrib/elf2dmp/main.c | 6 ++++++
> >  1 file changed, 6 insertions(+)
> >
> > diff --git a/contrib/elf2dmp/main.c b/contrib/elf2dmp/main.c
> > index 1a45eaf565..1bfeb89ba7 100644
> > --- a/contrib/elf2dmp/main.c
> > +++ b/contrib/elf2dmp/main.c
> > @@ -524,6 +524,12 @@ int main(int argc, char *argv[])
> >          }
> >      }
> >
> > +    if (!nt_start_addr) {
> > +        eprintf("Failed to find NT kernel image\n");
> > +        err = 1;
> > +        goto out_ps;
> > +    }
> > +
> >      printf("KernBase = 0x%016"PRIx64", signature is \'%.2s\'\n", KernBase,
> >              (char *)nt_start_addr);
> >
> >
>
> Queued, thanks.

Hi Paolo -- I noticed this fix wasn't in master yet -- is it in
a tree you're planning on sending a pullreq for soon?

thanks
-- PMM
Paolo Bonzini March 9, 2019, 7:49 a.m. UTC | #3
On 08/03/19 18:55, Peter Maydell wrote:
> On Wed, 20 Feb 2019 at 11:30, Paolo Bonzini <pbonzini@redhat.com> wrote:
>>
>> On 19/02/19 22:19, Viktor Prutyanov wrote:
>>> Before this patch, if elf2dmp failed to find NT kernel PE magic in
>>> allowed virtual address range, then it assumes NULL as NT kernel
>>> address and cause segfault.
>>>
>>> This patch fix the problem described above by checking NT kernel address
>>> before futher processing.
>>>
>>> Signed-off-by: Viktor Prutyanov <viktor.prutyanov@phystech.edu>
>>> ---
>>>  contrib/elf2dmp/main.c | 6 ++++++
>>>  1 file changed, 6 insertions(+)
>>>
>>> diff --git a/contrib/elf2dmp/main.c b/contrib/elf2dmp/main.c
>>> index 1a45eaf565..1bfeb89ba7 100644
>>> --- a/contrib/elf2dmp/main.c
>>> +++ b/contrib/elf2dmp/main.c
>>> @@ -524,6 +524,12 @@ int main(int argc, char *argv[])
>>>          }
>>>      }
>>>
>>> +    if (!nt_start_addr) {
>>> +        eprintf("Failed to find NT kernel image\n");
>>> +        err = 1;
>>> +        goto out_ps;
>>> +    }
>>> +
>>>      printf("KernBase = 0x%016"PRIx64", signature is \'%.2s\'\n", KernBase,
>>>              (char *)nt_start_addr);
>>>
>>>
>>
>> Queued, thanks.
> 
> Hi Paolo -- I noticed this fix wasn't in master yet -- is it in
> a tree you're planning on sending a pullreq for soon?

Yep, I just wanted to flush kconfig and qgraph before everybody starts
sending pull requests for soft freeze.

Paolo
diff mbox series

Patch

diff --git a/contrib/elf2dmp/main.c b/contrib/elf2dmp/main.c
index 1a45eaf565..1bfeb89ba7 100644
--- a/contrib/elf2dmp/main.c
+++ b/contrib/elf2dmp/main.c
@@ -524,6 +524,12 @@  int main(int argc, char *argv[])
         }
     }
 
+    if (!nt_start_addr) {
+        eprintf("Failed to find NT kernel image\n");
+        err = 1;
+        goto out_ps;
+    }
+
     printf("KernBase = 0x%016"PRIx64", signature is \'%.2s\'\n", KernBase,
             (char *)nt_start_addr);