Re: [PATCH,Hurd] Fix deallocation after proc_getprocinfo call

2014-11-23 Thread Samuel Thibault
Joel Brobecker, le Sun 23 Nov 2014 11:44:52 +0400, a écrit :
  -  vm_deallocate (mach_task_self (), (vm_address_t) pi, pi_len);
  +  vm_deallocate (mach_task_self (), (vm_address_t) pi, pi_len * sizeof 
  (*(procinfo_t) 0));
 
 Suggest using sizeof (struct procinfo), which I think is better
 than dereferencing a NULL pointer. This is based on guessing that
 type procinfo_t is a pointer to struct procinfo, as suggested by
 the code in inf_validate_procinfo.

Not, that is not the same: struct procinfo has an open array at its end
(threadinfos[0]), and thus the actually allocated size is variable.

Samuel



Re: [PATCH,Hurd] Fix deallocation after proc_getprocinfo call

2014-11-23 Thread Joel Brobecker
   -  vm_deallocate (mach_task_self (), (vm_address_t) pi, pi_len);
   +  vm_deallocate (mach_task_self (), (vm_address_t) pi, pi_len * 
   sizeof (*(procinfo_t) 0));
  
  Suggest using sizeof (struct procinfo), which I think is better
  than dereferencing a NULL pointer. This is based on guessing that
  type procinfo_t is a pointer to struct procinfo, as suggested by
  the code in inf_validate_procinfo.
 
 Not, that is not the same: struct procinfo has an open array at its end
 (threadinfos[0]), and thus the actually allocated size is variable.

OK. I don't know the code well enough to make any better suggestion.
The above does look unusual to me, but if it works and seems to be
the only correct way, let's go with that.

Should I push your patch?

-- 
Joel



Re: [PATCH,Hurd] Fix deallocation after proc_getprocinfo call

2014-11-23 Thread Samuel Thibault
Joel Brobecker, le Sun 23 Nov 2014 13:56:29 +0400, a écrit :
 The above does look unusual to me, but if it works and seems to be
 the only correct way, let's go with that.

It is a system interface actually, so we don't really have the choice :)

Samuel



Re: [PATCH,Hurd] Fix deallocation after proc_getprocinfo call

2014-11-22 Thread Joel Brobecker
Hello Samuel,

On Sun, Nov 02, 2014 at 04:25:37PM +0100, Samuel Thibault wrote:
 2014-10-02  Samuel Thibault  samuel.thiba...@ens-lyon.org
 
   * gdb/gnu-nat.c (inf_validate_procinfo): Multiply the number of
   elements pi_len by the size of the elements before calling
   vm_deallocate.
 (inf_validate_task_sc): Likewise, and properly deallocate the
 noise array.

Again, sorry about the late review...

I only have a few minor comments, almost trivial in nature. In
the ChangeLog entry above, watch out that the last 2 lines are
indented using spaces intead of tabs.

 diff --git a/gdb/gnu-nat.c b/gdb/gnu-nat.c
 index d17a750..c571190 100644
 --- a/gdb/gnu-nat.c
 +++ b/gdb/gnu-nat.c
 @@ -804,7 +804,7 @@ inf_validate_procinfo (struct inf *inf)
inf-nomsg = !!(pi-state  PI_NOMSG);
if (inf-nomsg)
   inf-traced = !!(pi-state  PI_TRACED);
 -  vm_deallocate (mach_task_self (), (vm_address_t) pi, pi_len);
 +  vm_deallocate (mach_task_self (), (vm_address_t) pi, pi_len * sizeof 
 (*(procinfo_t) 0));

The line is too long (soft limit is 74 characters, hard limit is 80).
Suggest using sizeof (struct procinfo), which I think is better
than dereferencing a NULL pointer. This is based on guessing that
type procinfo_t is a pointer to struct procinfo, as suggested by
the code in inf_validate_procinfo.

if (noise_len  0)
   vm_deallocate (mach_task_self (), (vm_address_t) noise, noise_len);
  }
 @@ -844,9 +844,9 @@ inf_validate_task_sc (struct inf *inf)
  
suspend_count = pi-taskinfo.suspend_count;
  
 -  vm_deallocate (mach_task_self (), (vm_address_t) pi, pi_len);
 +  vm_deallocate (mach_task_self (), (vm_address_t) pi, pi_len * sizeof 
 (*(procinfo_t) 0));

Same as above.

if (noise_len  0)
 -vm_deallocate (mach_task_self (), (vm_address_t) pi, pi_len);
 +vm_deallocate (mach_task_self (), (vm_address_t) noise, noise_len);
  
if (inf-task-cur_sc  suspend_count)
  {

Thank you,
-- 
Joel



[PATCH,Hurd] Fix deallocation after proc_getprocinfo call

2014-11-02 Thread Samuel Thibault
2014-10-02  Samuel Thibault  samuel.thiba...@ens-lyon.org

* gdb/gnu-nat.c (inf_validate_procinfo): Multiply the number of
elements pi_len by the size of the elements before calling
vm_deallocate.
(inf_validate_task_sc): Likewise, and properly deallocate the
noise array.

diff --git a/gdb/gnu-nat.c b/gdb/gnu-nat.c
index d17a750..c571190 100644
--- a/gdb/gnu-nat.c
+++ b/gdb/gnu-nat.c
@@ -804,7 +804,7 @@ inf_validate_procinfo (struct inf *inf)
   inf-nomsg = !!(pi-state  PI_NOMSG);
   if (inf-nomsg)
inf-traced = !!(pi-state  PI_TRACED);
-  vm_deallocate (mach_task_self (), (vm_address_t) pi, pi_len);
+  vm_deallocate (mach_task_self (), (vm_address_t) pi, pi_len * sizeof 
(*(procinfo_t) 0));
   if (noise_len  0)
vm_deallocate (mach_task_self (), (vm_address_t) noise, noise_len);
 }
@@ -844,9 +844,9 @@ inf_validate_task_sc (struct inf *inf)
 
   suspend_count = pi-taskinfo.suspend_count;
 
-  vm_deallocate (mach_task_self (), (vm_address_t) pi, pi_len);
+  vm_deallocate (mach_task_self (), (vm_address_t) pi, pi_len * sizeof 
(*(procinfo_t) 0));
   if (noise_len  0)
-vm_deallocate (mach_task_self (), (vm_address_t) pi, pi_len);
+vm_deallocate (mach_task_self (), (vm_address_t) noise, noise_len);
 
   if (inf-task-cur_sc  suspend_count)
 {