[libvirt] [PATCH] virsh: avoid uninitialized memory usage

2012-04-19 Thread Alex Jia
Detected by valgrind.

* tools/virsh.c (cmdBlockPull): fix uninitialized memory usage.
 
* How to reproduce?
$ qemu-img create /var/lib/libvirt/images/test 1M
$ cat  /tmp/test.xml EOF
domain type='qemu'
  nametest/name
  memory219200/memory
  vcpu1/vcpu
  os
type arch='x86_64'hvm/type
boot dev='hd'/
  /os
  devices
disk type='file' device='disk'
  driver name='qemu' type='raw'/
  source file='/var/lib/libvirt/images/test'/
  target dev='vda' bus='virtio'/
/disk
input type='mouse' bus='ps2'/
graphics type='spice' autoport='yes' listen='0.0.0.0'/
  /devices
/domain
EOF
$ virsh define /tmp/test.xml
$ valgrind -v virsh blockpull test /var/lib/libvirt/images/test --wait

actual result:

==10906== 1 errors in context 1 of 1:
==10906== Syscall param rt_sigaction(act-sa_flags) points to uninitialised 
byte(s)
==10906==at 0x39CF80F5BE: __libc_sigaction (sigaction.c:67)
==10906==by 0x43016C: cmdBlockPull (virsh.c:7638)
==10906==by 0x4150D4: vshCommandRun (virsh.c:18574)
==10906==by 0x425E73: main (virsh.c:20178)
==10906==  Address 0x7fefffae8 is on thread 1's stack


Signed-off-by: Alex Jia a...@redhat.com
---
 tools/virsh.c |1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/tools/virsh.c b/tools/virsh.c
index 95ed7bc..4e4ca57 100644
--- a/tools/virsh.c
+++ b/tools/virsh.c
@@ -7634,6 +7634,7 @@ cmdBlockPull(vshControl *ctl, const vshCmd *cmd)
 
 intCaught = 0;
 sig_action.sa_sigaction = vshCatchInt;
+sigemptyset((sigset_t *)sig_action.sa_flags);
 sigemptyset(sig_action.sa_mask);
 sigaction(SIGINT, sig_action, old_sig_action);
 
-- 
1.7.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


Re: [libvirt] [PATCH] virsh: avoid uninitialized memory usage

2012-04-19 Thread Wen Congyang
At 04/19/2012 04:09 PM, Alex Jia Wrote:
 Detected by valgrind.
 
 * tools/virsh.c (cmdBlockPull): fix uninitialized memory usage.
  
 * How to reproduce?
 $ qemu-img create /var/lib/libvirt/images/test 1M
 $ cat  /tmp/test.xml EOF
 domain type='qemu'
   nametest/name
   memory219200/memory
   vcpu1/vcpu
   os
 type arch='x86_64'hvm/type
 boot dev='hd'/
   /os
   devices
 disk type='file' device='disk'
   driver name='qemu' type='raw'/
   source file='/var/lib/libvirt/images/test'/
   target dev='vda' bus='virtio'/
 /disk
 input type='mouse' bus='ps2'/
 graphics type='spice' autoport='yes' listen='0.0.0.0'/
   /devices
 /domain
 EOF
 $ virsh define /tmp/test.xml
 $ valgrind -v virsh blockpull test /var/lib/libvirt/images/test --wait
 
 actual result:
 
 ==10906== 1 errors in context 1 of 1:
 ==10906== Syscall param rt_sigaction(act-sa_flags) points to uninitialised 
 byte(s)
 ==10906==at 0x39CF80F5BE: __libc_sigaction (sigaction.c:67)
 ==10906==by 0x43016C: cmdBlockPull (virsh.c:7638)
 ==10906==by 0x4150D4: vshCommandRun (virsh.c:18574)
 ==10906==by 0x425E73: main (virsh.c:20178)
 ==10906==  Address 0x7fefffae8 is on thread 1's stack
 
 
 Signed-off-by: Alex Jia a...@redhat.com
 ---
  tools/virsh.c |1 +
  1 files changed, 1 insertions(+), 0 deletions(-)
 
 diff --git a/tools/virsh.c b/tools/virsh.c
 index 95ed7bc..4e4ca57 100644
 --- a/tools/virsh.c
 +++ b/tools/virsh.c
 @@ -7634,6 +7634,7 @@ cmdBlockPull(vshControl *ctl, const vshCmd *cmd)
  
  intCaught = 0;
  sig_action.sa_sigaction = vshCatchInt;
 +sigemptyset((sigset_t *)sig_action.sa_flags);

Why using sigemptyset here? You should use 'sig_action.sa_flags = 0'.

Thanks
Wen Congyang

  sigemptyset(sig_action.sa_mask);
  sigaction(SIGINT, sig_action, old_sig_action);
  

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


Re: [libvirt] [PATCH] virsh: avoid uninitialized memory usage

2012-04-19 Thread Alex Jia

On 04/19/2012 04:19 PM, Wen Congyang wrote:

At 04/19/2012 04:09 PM, Alex Jia Wrote:

Detected by valgrind.

* tools/virsh.c (cmdBlockPull): fix uninitialized memory usage.

* How to reproduce?
$ qemu-img create /var/lib/libvirt/images/test 1M
$ cat  /tmp/test.xmlEOF
domain type='qemu'
   nametest/name
   memory219200/memory
   vcpu1/vcpu
   os
 type arch='x86_64'hvm/type
 boot dev='hd'/
   /os
   devices
 disk type='file' device='disk'
   driver name='qemu' type='raw'/
   source file='/var/lib/libvirt/images/test'/
   target dev='vda' bus='virtio'/
 /disk
 input type='mouse' bus='ps2'/
 graphics type='spice' autoport='yes' listen='0.0.0.0'/
   /devices
/domain
EOF
$ virsh define /tmp/test.xml
$ valgrind -v virsh blockpull test /var/lib/libvirt/images/test --wait

actual result:

==10906== 1 errors in context 1 of 1:
==10906== Syscall param rt_sigaction(act-sa_flags) points to uninitialised 
byte(s)
==10906==at 0x39CF80F5BE: __libc_sigaction (sigaction.c:67)
==10906==by 0x43016C: cmdBlockPull (virsh.c:7638)
==10906==by 0x4150D4: vshCommandRun (virsh.c:18574)
==10906==by 0x425E73: main (virsh.c:20178)
==10906==  Address 0x7fefffae8 is on thread 1's stack


Signed-off-by: Alex Jiaa...@redhat.com
---
  tools/virsh.c |1 +
  1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/tools/virsh.c b/tools/virsh.c
index 95ed7bc..4e4ca57 100644
--- a/tools/virsh.c
+++ b/tools/virsh.c
@@ -7634,6 +7634,7 @@ cmdBlockPull(vshControl *ctl, const vshCmd *cmd)

  intCaught = 0;
  sig_action.sa_sigaction = vshCatchInt;
+sigemptyset((sigset_t *)sig_action.sa_flags);

Why using sigemptyset here? You should use 'sig_action.sa_flags = 0'.
Yeah, I think 'sig_action.sa_flags = 0' is right, but I don't know what 
the difference are,

could you explain more?

Thanks,
Alex

Thanks
Wen Congyang


  sigemptyset(sig_action.sa_mask);
  sigaction(SIGINT,sig_action,old_sig_action);



--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


Re: [libvirt] [PATCH] virsh: avoid uninitialized memory usage

2012-04-19 Thread Alex Jia

On 04/19/2012 04:40 PM, Alex Jia wrote:

On 04/19/2012 04:19 PM, Wen Congyang wrote:

At 04/19/2012 04:09 PM, Alex Jia Wrote:

Detected by valgrind.

* tools/virsh.c (cmdBlockPull): fix uninitialized memory usage.

* How to reproduce?
$ qemu-img create /var/lib/libvirt/images/test 1M
$ cat  /tmp/test.xmlEOF
domain type='qemu'
nametest/name
memory219200/memory
vcpu1/vcpu
os
type arch='x86_64'hvm/type
boot dev='hd'/
/os
devices
disk type='file' device='disk'
driver name='qemu' type='raw'/
source file='/var/lib/libvirt/images/test'/
target dev='vda' bus='virtio'/
/disk
input type='mouse' bus='ps2'/
graphics type='spice' autoport='yes' listen='0.0.0.0'/
/devices
/domain
EOF
$ virsh define /tmp/test.xml
$ valgrind -v virsh blockpull test /var/lib/libvirt/images/test --wait

actual result:

==10906== 1 errors in context 1 of 1:
==10906== Syscall param rt_sigaction(act-sa_flags) points to 
uninitialised byte(s)

==10906==at 0x39CF80F5BE: __libc_sigaction (sigaction.c:67)
==10906==by 0x43016C: cmdBlockPull (virsh.c:7638)
==10906==by 0x4150D4: vshCommandRun (virsh.c:18574)
==10906==by 0x425E73: main (virsh.c:20178)
==10906==  Address 0x7fefffae8 is on thread 1's stack


Signed-off-by: Alex Jiaa...@redhat.com
---
  tools/virsh.c |1 +
  1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/tools/virsh.c b/tools/virsh.c
index 95ed7bc..4e4ca57 100644
--- a/tools/virsh.c
+++ b/tools/virsh.c
@@ -7634,6 +7634,7 @@ cmdBlockPull(vshControl *ctl, const vshCmd *cmd)

  intCaught = 0;
  sig_action.sa_sigaction = vshCatchInt;
+sigemptyset((sigset_t *)sig_action.sa_flags);

Why using sigemptyset here? You should use 'sig_action.sa_flags = 0'.
Yeah, I think 'sig_action.sa_flags = 0' is right, but I don't know 
what the difference are,

could you explain more?
The sigemptyset() function manipulates sets of signals and initialize 
signal set to be empty.

'sig_action.sa_flags = 0' is right and enough in here.

Thanks,
Alex


Thanks,
Alex

Thanks
Wen Congyang


  sigemptyset(sig_action.sa_mask);
  sigaction(SIGINT,sig_action,old_sig_action);



--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


Re: [libvirt] [PATCH] virsh: avoid uninitialized memory usage

2012-04-19 Thread Wen Congyang
At 04/19/2012 04:40 PM, Alex Jia Wrote:
 On 04/19/2012 04:19 PM, Wen Congyang wrote:
 At 04/19/2012 04:09 PM, Alex Jia Wrote:
 Detected by valgrind.

 * tools/virsh.c (cmdBlockPull): fix uninitialized memory usage.

 * How to reproduce?
 $ qemu-img create /var/lib/libvirt/images/test 1M
 $ cat  /tmp/test.xmlEOF
 domain type='qemu'
nametest/name
memory219200/memory
vcpu1/vcpu
os
  type arch='x86_64'hvm/type
  boot dev='hd'/
/os
devices
  disk type='file' device='disk'
driver name='qemu' type='raw'/
source file='/var/lib/libvirt/images/test'/
target dev='vda' bus='virtio'/
  /disk
  input type='mouse' bus='ps2'/
  graphics type='spice' autoport='yes' listen='0.0.0.0'/
/devices
 /domain
 EOF
 $ virsh define /tmp/test.xml
 $ valgrind -v virsh blockpull test /var/lib/libvirt/images/test --wait

 actual result:

 ==10906== 1 errors in context 1 of 1:
 ==10906== Syscall param rt_sigaction(act-sa_flags) points to
 uninitialised byte(s)
 ==10906==at 0x39CF80F5BE: __libc_sigaction (sigaction.c:67)
 ==10906==by 0x43016C: cmdBlockPull (virsh.c:7638)
 ==10906==by 0x4150D4: vshCommandRun (virsh.c:18574)
 ==10906==by 0x425E73: main (virsh.c:20178)
 ==10906==  Address 0x7fefffae8 is on thread 1's stack


 Signed-off-by: Alex Jiaa...@redhat.com
 ---
   tools/virsh.c |1 +
   1 files changed, 1 insertions(+), 0 deletions(-)

 diff --git a/tools/virsh.c b/tools/virsh.c
 index 95ed7bc..4e4ca57 100644
 --- a/tools/virsh.c
 +++ b/tools/virsh.c
 @@ -7634,6 +7634,7 @@ cmdBlockPull(vshControl *ctl, const vshCmd *cmd)

   intCaught = 0;
   sig_action.sa_sigaction = vshCatchInt;
 +sigemptyset((sigset_t *)sig_action.sa_flags);
 Why using sigemptyset here? You should use 'sig_action.sa_flags = 0'.
 Yeah, I think 'sig_action.sa_flags = 0' is right, but I don't know what
 the difference are,
 could you explain more?

sigset_t is:
# define _SIGSET_NWORDS (1024 / (8 * sizeof (unsigned long int)))
typedef struct
  {
unsigned long int __val[_SIGSET_NWORDS];
  } __sigset_t;

The length of sigset is larger than sizeof(int)

If you use sigemptyset() to clear flags, it will affect the memory after flags.
It is very dangerous!!!

Thanks
Wen Congyang

 
 Thanks,
 Alex
 Thanks
 Wen Congyang

   sigemptyset(sig_action.sa_mask);
   sigaction(SIGINT,sig_action,old_sig_action);

 
 

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


Re: [libvirt] [PATCH] virsh: avoid uninitialized memory usage

2012-04-19 Thread Alex Jia

On 04/19/2012 04:53 PM, Wen Congyang wrote:

At 04/19/2012 04:40 PM, Alex Jia Wrote:

On 04/19/2012 04:19 PM, Wen Congyang wrote:

At 04/19/2012 04:09 PM, Alex Jia Wrote:

Detected by valgrind.

* tools/virsh.c (cmdBlockPull): fix uninitialized memory usage.

* How to reproduce?
$ qemu-img create /var/lib/libvirt/images/test 1M
$ cat   /tmp/test.xmlEOF
domain type='qemu'
nametest/name
memory219200/memory
vcpu1/vcpu
os
  type arch='x86_64'hvm/type
  boot dev='hd'/
/os
devices
  disk type='file' device='disk'
driver name='qemu' type='raw'/
source file='/var/lib/libvirt/images/test'/
target dev='vda' bus='virtio'/
  /disk
  input type='mouse' bus='ps2'/
  graphics type='spice' autoport='yes' listen='0.0.0.0'/
/devices
/domain
EOF
$ virsh define /tmp/test.xml
$ valgrind -v virsh blockpull test /var/lib/libvirt/images/test --wait

actual result:

==10906== 1 errors in context 1 of 1:
==10906== Syscall param rt_sigaction(act-sa_flags) points to
uninitialised byte(s)
==10906==at 0x39CF80F5BE: __libc_sigaction (sigaction.c:67)
==10906==by 0x43016C: cmdBlockPull (virsh.c:7638)
==10906==by 0x4150D4: vshCommandRun (virsh.c:18574)
==10906==by 0x425E73: main (virsh.c:20178)
==10906==  Address 0x7fefffae8 is on thread 1's stack


Signed-off-by: Alex Jiaa...@redhat.com
---
   tools/virsh.c |1 +
   1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/tools/virsh.c b/tools/virsh.c
index 95ed7bc..4e4ca57 100644
--- a/tools/virsh.c
+++ b/tools/virsh.c
@@ -7634,6 +7634,7 @@ cmdBlockPull(vshControl *ctl, const vshCmd *cmd)

   intCaught = 0;
   sig_action.sa_sigaction = vshCatchInt;
+sigemptyset((sigset_t *)sig_action.sa_flags);

Why using sigemptyset here? You should use 'sig_action.sa_flags = 0'.

Yeah, I think 'sig_action.sa_flags = 0' is right, but I don't know what
the difference are,
could you explain more?

sigset_t is:
# define _SIGSET_NWORDS (1024 / (8 * sizeof (unsigned long int)))
typedef struct
   {
 unsigned long int __val[_SIGSET_NWORDS];
   } __sigset_t;

The length of sigset is larger than sizeof(int)

If you use sigemptyset() to clear flags, it will affect the memory after flags.
It is very dangerous!!!

Yeah, thanks for your explanation again.

Thanks
Wen Congyang


Thanks,
Alex

Thanks
Wen Congyang


   sigemptyset(sig_action.sa_mask);
   sigaction(SIGINT,sig_action,old_sig_action);





--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list