[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Lost] [Patch] init - Memleak beim Laden von Programmen



Am Samstag, 30. August 2008 22.54:59 schrieb Kevin Wolf:
> Am Samstag, 30. August 2008 20:51:21 schrieb Antoine Kaufmann:
> > Index: trunk/src/modules/init/init.c
> > ===================================================================
> > --- trunk.orig/src/modules/init/init.c
> > +++ trunk/src/modules/init/init.c
> > @@ -522,7 +522,7 @@ size_t ainflate(void* src, size_t len, v
> >      stream.avail_in = len - i - 8;
> >
> >      stream.avail_out = *((dword*) (src_buf + len - 4));
> > -    stream.next_out = mem_allocate(stream.avail_out, 0);
> > +    stream.next_out = malloc(stream.avail_out);
> >      *dest_ptr = stream.next_out;
> >
> >
> > @@ -556,6 +556,7 @@ size_t ainflate(void* src, size_t len, v
> >
> >  pid_t start_program(char* path, char* args, pid_t parent_pid)
> >  {
> > +    pid_t pid;
> >      FILE* f = fopen(path, "r");
> >
> >      if(f == NULL)
> > @@ -620,12 +621,14 @@ pid_t start_program(char* path, char* ar
> >      }
> >      else
> >      {
> > -        buffer = mem_allocate(pages * 4096, 0);
> > +        buffer = malloc(pages * 4096);
>
> An der Stelle hätte ich aber wirklich mem_allocate benutzt, wenn du eh
> ganze Pages brauchst.

Dann braucht mem_free aber auch eine Grösse und ich muss ainflate auch noch 
anpasen. ;-)

> >          fread(buffer, 1, size, f);
> >      }
> >      fclose(f);
> >
> > -    return load_single_module((Elf32_Ehdr*) buffer, args, parent_pid);
> > +    pid = load_single_module((Elf32_Ehdr*) buffer, args, parent_pid);
>
> Kann load_single_module denn überhaupt mit nicht page-aligntem Buffer
> umgehen? malloc dürfte sowas theoretisch machen.

Jo das alloziert neue Pages um sie an die neuen Prozesse zu verschenken. ;-)

> > +    free(buffer);
> > +    return pid;
> >  }

Attachment: signature.asc
Description: This is a digitally signed message part.