From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with archive (Exim 4.43) id 1Lgglo-0005mw-KS for mharc-grub-devel@gnu.org; Mon, 09 Mar 2009 10:47:56 -0400 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Lgglm-0005mr-5d for grub-devel@gnu.org; Mon, 09 Mar 2009 10:47:54 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1Lgglj-0005mf-PY for grub-devel@gnu.org; Mon, 09 Mar 2009 10:47:52 -0400 Received: from [199.232.76.173] (port=49734 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Lgglj-0005mc-N7 for grub-devel@gnu.org; Mon, 09 Mar 2009 10:47:51 -0400 Received: from mail-bw0-f172.google.com ([209.85.218.172]:36176) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1Lgglj-0006Ev-31 for grub-devel@gnu.org; Mon, 09 Mar 2009 10:47:51 -0400 Received: by bwz20 with SMTP id 20so1130570bwz.42 for ; Mon, 09 Mar 2009 07:47:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from :user-agent:mime-version:to:subject:content-type; bh=YYxVa7mjqI8YhfemTXocDEEKicWtSkO6C99VgfVLYdA=; b=E7uHg/QUKXRXpI/ydvifoKCs7b/wqW+ai7VbHyX+PWoX6U4SOFZ46CnXKzQatBZtD8 FqMpUOs7K8/uj/H52q+N1VnY4enO4YfIWhEk+sObe0Cpo5rRTOYF5CFg5/btRHTYa1vx VB/vlRFolElhbz+/NZSCp4hS1gC9maAGtEy3w= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:user-agent:mime-version:to:subject :content-type; b=K2HEb8aDh+uwBvQhP7UB0ccfaCLbbscSiqJ1AW+I87BENBgZenB5AJlGb9/3aNXE+o XGKsKTaaFmz2b54PUZ47Ys9gL9ybZkMF+WfOcQecf17Huirqu31xDviT8nlrRo5bFaQG XFGhtDPG8BtMM4lO2o6I9CAtmawaiMMoBY6KY= Received: by 10.223.113.136 with SMTP id a8mr4527556faq.101.1236610067497; Mon, 09 Mar 2009 07:47:47 -0700 (PDT) Received: from ?82.130.80.93? (hg-public-dock-93-dhcp.ethz.ch [82.130.80.93]) by mx.google.com with ESMTPS id k29sm6102627fkk.36.2009.03.09.07.47.46 (version=SSLv3 cipher=RC4-MD5); Mon, 09 Mar 2009 07:47:47 -0700 (PDT) Message-ID: <49B52C12.5080105@gmail.com> Date: Mon, 09 Mar 2009 15:47:46 +0100 From: phcoder User-Agent: Thunderbird 2.0.0.19 (X11/20090105) MIME-Version: 1.0 To: The development of GRUB 2 Content-Type: multipart/mixed; boundary="------------020101050006040706060207" X-detected-operating-system: by monty-python.gnu.org: GNU/Linux 2.6 (newer, 2) Subject: Leak fixes X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: The development of GRUB 2 List-Id: The development of GRUB 2 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 09 Mar 2009 14:47:54 -0000 This is a multi-part message in MIME format. --------------020101050006040706060207 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Hello I discovered some memory leaks. Here is the fix The main one was is that if a hash collision occurs new cache entry overwrites the old one but the old one wasn't freed. When loading a big file it was leaking huge amounts of memory -- Regards Vladimir 'phcoder' Serbinenko --------------020101050006040706060207 Content-Type: text/x-patch; name="leakfix.diff" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="leakfix.diff" Index: kern/disk.c =================================================================== --- kern/disk.c (revision 2023) +++ kern/disk.c (working copy) @@ -157,11 +175,14 @@ grub_disk_cache_store (unsigned long dev_id, unsig { unsigned index; struct grub_disk_cache *cache; - - grub_disk_cache_invalidate (dev_id, disk_id, sector); index = grub_disk_cache_get_index (dev_id, disk_id, sector); cache = grub_disk_cache_table + index; + + cache->lock = 1; + grub_free (cache->data); + cache->data = 0; + cache->lock = 0; cache->data = grub_malloc (GRUB_DISK_SECTOR_SIZE << GRUB_DISK_CACHE_BITS); if (! cache->data) Index: disk/scsi.c =================================================================== --- disk/scsi.c (revision 2023) +++ disk/scsi.c (working copy) @@ -255,6 +255,7 @@ grub_scsi_open (const char *name, grub_disk_t disk scsi->name = grub_strdup (name); if (! scsi->name) { + grub_free (scsi); return grub_errno; } @@ -263,6 +264,7 @@ grub_scsi_open (const char *name, grub_disk_t disk err = grub_scsi_inquiry (scsi); if (err) { + grub_free (scsi); grub_dprintf ("scsi", "inquiry failed\n"); return grub_errno; } @@ -275,6 +277,7 @@ grub_scsi_open (const char *name, grub_disk_t disk if (scsi->devtype != grub_scsi_devtype_direct && scsi->devtype != grub_scsi_devtype_cdrom) { + grub_free (scsi); return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "unknown SCSI device"); } @@ -287,6 +290,7 @@ grub_scsi_open (const char *name, grub_disk_t disk err = grub_scsi_read_capacity (scsi); if (err) { + grub_free (scsi); grub_dprintf ("scsi", "READ CAPACITY failed\n"); return grub_errno; } @@ -303,6 +307,8 @@ grub_scsi_open (const char *name, grub_disk_t disk } } + grub_free (scsi); + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "not a SCSI disk"); } Index: ChangeLog =================================================================== --- ChangeLog (revision 2023) +++ ChangeLog (working copy) @@ -1,3 +1,11 @@ +2009-03-09 Vladimir Serbinenko + + Leak fixes + + * kern/disk.c (grub_disk_cache_store): Invalidate previous cache + in case of collision + * disk/scsi.c (grub_scsi_open): free scsi in case of error + 2009-03-09 Felix Zielcke * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Remove duplicated --------------020101050006040706060207--