From mboxrd@z Thu Jan 1 00:00:00 1970 From: Juergen Gross Subject: [PATCH v5 02/11] xen: avoid memleaks on error Date: Thu, 25 Feb 2016 12:33:28 +0100 Message-ID: <1456400017-5789-3-git-send-email-jgross@suse.com> References: <1456400017-5789-1-git-send-email-jgross@suse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1456400017-5789-1-git-send-email-jgross@suse.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: grub-devel@gnu.org Cc: Juergen Gross , phcoder@gmail.com, daniel.kiper@oracle.com, mchang@suse.com, xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org V2hlbiBsb2FkaW5nIGEgWGVuIHB2LWtlcm5lbCBhdm9pZCBtZW1vcnkgbGVha3MgaW4gY2FzZSBv ZiBlcnJvcnMuCgpTaWduZWQtb2ZmLWJ5OiBKdWVyZ2VuIEdyb3NzIDxqZ3Jvc3NAc3VzZS5jb20+ Ci0tLQpWNTogc2V0IGdydWJfZXJybm8gdG8gR1JVQl9FUlJfTk9ORSB0byBhdm9pZCBmYWxzZSBl cnJvciByZXBvcnRzIGFzIHJlcXVlc3RlZAogICAgYnkgRGFuaWVsIEtpcGVyCi0tLQogZ3J1Yi1j b3JlL2xvYWRlci9pMzg2L3hlbi5jICAgICAgICB8ICAyICstCiBncnViLWNvcmUvbG9hZGVyL2kz ODYveGVuX2ZpbGVYWC5jIHwgMTkgKysrKysrKysrKysrKy0tLS0tLQogMiBmaWxlcyBjaGFuZ2Vk LCAxNCBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2dydWItY29y ZS9sb2FkZXIvaTM4Ni94ZW4uYyBiL2dydWItY29yZS9sb2FkZXIvaTM4Ni94ZW4uYwppbmRleCAx NzllODljLi5mNDVmNzBmIDEwMDY0NAotLS0gYS9ncnViLWNvcmUvbG9hZGVyL2kzODYveGVuLmMK KysrIGIvZ3J1Yi1jb3JlL2xvYWRlci9pMzg2L3hlbi5jCkBAIC01NjMsNyArNTYzLDcgQEAgZ3J1 Yl9jbWRfaW5pdHJkIChncnViX2NvbW1hbmRfdCBjbWQgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkp LAogICAgIHsKICAgICAgIGVyciA9IGdydWJfcmVsb2NhdG9yX2FsbG9jX2NodW5rX2FkZHIgKHJl bG9jYXRvciwgJmNoLCBtYXhfYWRkciwgc2l6ZSk7CiAgICAgICBpZiAoZXJyKQotCXJldHVybiBl cnI7CisJZ290byBmYWlsOwogCiAgICAgICBpZiAoZ3J1Yl9pbml0cmRfbG9hZCAoJmluaXRyZF9j dHgsIGFyZ3YsCiAJCQkgICAgZ2V0X3ZpcnR1YWxfY3VycmVudF9hZGRyZXNzIChjaCkpKQpkaWZm IC0tZ2l0IGEvZ3J1Yi1jb3JlL2xvYWRlci9pMzg2L3hlbl9maWxlWFguYyBiL2dydWItY29yZS9s b2FkZXIvaTM4Ni94ZW5fZmlsZVhYLmMKaW5kZXggMWJhNTY0OS4uMzZiNDBlNCAxMDA2NDQKLS0t IGEvZ3J1Yi1jb3JlL2xvYWRlci9pMzg2L3hlbl9maWxlWFguYworKysgYi9ncnViLWNvcmUvbG9h ZGVyL2kzODYveGVuX2ZpbGVYWC5jCkBAIC0yNiw2ICsyNiw4IEBAIHBhcnNlX3hlbl9ndWVzdCAo Z3J1Yl9lbGZfdCBlbGYsIHN0cnVjdCBncnViX3hlbl9maWxlX2luZm8gKnhpLAogICBjaGFyICpi dWY7CiAgIGNoYXIgKnB0cjsKICAgaW50IGhhc19wYWRkciA9IDA7CisKKyAgZ3J1Yl9lcnJubyA9 IEdSVUJfRVJSX05PTkU7CiAgIGlmIChncnViX2ZpbGVfc2VlayAoZWxmLT5maWxlLCBvZmYpID09 IChncnViX29mZl90KSAtMSkKICAgICByZXR1cm4gZ3J1Yl9lcnJubzsKICAgYnVmID0gZ3J1Yl9t YWxsb2MgKHN6KTsKQEAgLTM1LDcgKzM3LDggQEAgcGFyc2VfeGVuX2d1ZXN0IChncnViX2VsZl90 IGVsZiwgc3RydWN0IGdydWJfeGVuX2ZpbGVfaW5mbyAqeGksCiAgIGlmIChncnViX2ZpbGVfcmVh ZCAoZWxmLT5maWxlLCBidWYsIHN6KSAhPSAoZ3J1Yl9zc2l6ZV90KSBzeikKICAgICB7CiAgICAg ICBpZiAoZ3J1Yl9lcnJubykKLQlyZXR1cm4gZ3J1Yl9lcnJubzsKKwlnb3RvIG91dDsKKyAgICAg IGdydWJfZnJlZSAoYnVmKTsKICAgICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURf T1MsIE5fKCJwcmVtYXR1cmUgZW5kIG9mIGZpbGUgJXMiKSwKIAkJCSBlbGYtPmZpbGUtPm5hbWUp OwogICAgIH0KQEAgLTEyMywxNCArMTI2LDE0IEBAIHBhcnNlX3hlbl9ndWVzdCAoZ3J1Yl9lbGZf dCBlbGYsIHN0cnVjdCBncnViX3hlbl9maWxlX2luZm8gKnhpLAogCXsKIAkgIHhpLT52aXJ0X2Jh c2UgPSBncnViX3N0cnRvdWxsIChwdHIgKyBzaXplb2YgKCJWSVJUX0JBU0U9IikgLSAxLCAmcHRy LCAxNik7CiAJICBpZiAoZ3J1Yl9lcnJubykKLQkgICAgcmV0dXJuIGdydWJfZXJybm87CisJICAg IGdvdG8gb3V0OwogCSAgY29udGludWU7CiAJfQogICAgICAgaWYgKGdydWJfc3RybmNtcCAocHRy LCAiVklSVF9FTlRSWT0iLCBzaXplb2YgKCJWSVJUX0VOVFJZPSIpIC0gMSkgPT0gMCkKIAl7CiAJ ICB4aS0+ZW50cnlfcG9pbnQgPSBncnViX3N0cnRvdWxsIChwdHIgKyBzaXplb2YgKCJWSVJUX0VO VFJZPSIpIC0gMSwgJnB0ciwgMTYpOwogCSAgaWYgKGdydWJfZXJybm8pCi0JICAgIHJldHVybiBn cnViX2Vycm5vOworCSAgICBnb3RvIG91dDsKIAkgIGNvbnRpbnVlOwogCX0KICAgICAgIGlmIChn cnViX3N0cm5jbXAgKHB0ciwgIkhZUEVSQ0FMTF9QQUdFPSIsIHNpemVvZiAoIkhZUEVSQ0FMTF9Q QUdFPSIpIC0gMSkgPT0gMCkKQEAgLTEzOCw3ICsxNDEsNyBAQCBwYXJzZV94ZW5fZ3Vlc3QgKGdy dWJfZWxmX3QgZWxmLCBzdHJ1Y3QgZ3J1Yl94ZW5fZmlsZV9pbmZvICp4aSwKIAkgIHhpLT5oeXBl cmNhbGxfcGFnZSA9IGdydWJfc3RydG91bGwgKHB0ciArIHNpemVvZiAoIkhZUEVSQ0FMTF9QQUdF PSIpIC0gMSwgJnB0ciwgMTYpOwogCSAgeGktPmhhc19oeXBlcmNhbGxfcGFnZSA9IDE7CiAJICBp ZiAoZ3J1Yl9lcnJubykKLQkgICAgcmV0dXJuIGdydWJfZXJybm87CisJICAgIGdvdG8gb3V0Owog CSAgY29udGludWU7CiAJfQogICAgICAgaWYgKGdydWJfc3RybmNtcCAocHRyLCAiRUxGX1BBRERS X09GRlNFVD0iLCBzaXplb2YgKCJFTEZfUEFERFJfT0ZGU0VUPSIpIC0gMSkgPT0gMCkKQEAgLTE0 Niw3ICsxNDksNyBAQCBwYXJzZV94ZW5fZ3Vlc3QgKGdydWJfZWxmX3QgZWxmLCBzdHJ1Y3QgZ3J1 Yl94ZW5fZmlsZV9pbmZvICp4aSwKIAkgIHhpLT5wYWRkcl9vZmZzZXQgPSBncnViX3N0cnRvdWxs IChwdHIgKyBzaXplb2YgKCJFTEZfUEFERFJfT0ZGU0VUPSIpIC0gMSwgJnB0ciwgMTYpOwogCSAg aGFzX3BhZGRyID0gMTsKIAkgIGlmIChncnViX2Vycm5vKQotCSAgICByZXR1cm4gZ3J1Yl9lcnJu bzsKKwkgICAgZ290byBvdXQ7CiAJICBjb250aW51ZTsKIAl9CiAgICAgfQpAQCAtMTU0LDcgKzE1 NywxMSBAQCBwYXJzZV94ZW5fZ3Vlc3QgKGdydWJfZWxmX3QgZWxmLCBzdHJ1Y3QgZ3J1Yl94ZW5f ZmlsZV9pbmZvICp4aSwKICAgICB4aS0+aHlwZXJjYWxsX3BhZ2UgPSAoeGktPmh5cGVyY2FsbF9w YWdlIDw8IDEyKSArIHhpLT52aXJ0X2Jhc2U7CiAgIGlmICghaGFzX3BhZGRyKQogICAgIHhpLT5w YWRkcl9vZmZzZXQgPSB4aS0+dmlydF9iYXNlOwotICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKKwor b3V0OgorICBncnViX2ZyZWUgKGJ1Zik7CisKKyAgcmV0dXJuIGdydWJfZXJybm87CiB9CiAKICNw cmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdjYXN0LWFsaWduIgotLSAKMi42LjIKCgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwg bWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHA6Ly9saXN0cy54ZW4ub3Jn L3hlbi1kZXZlbAo= From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.71) id 1aYuBF-0002CK-2m for mharc-grub-devel@gnu.org; Thu, 25 Feb 2016 06:34:01 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58224) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aYuB4-0001ry-PJ for grub-devel@gnu.org; Thu, 25 Feb 2016 06:33:55 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aYuB1-0000Cx-CD for grub-devel@gnu.org; Thu, 25 Feb 2016 06:33:50 -0500 Received: from mx2.suse.de ([195.135.220.15]:34173) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aYuB1-0000C6-70 for grub-devel@gnu.org; Thu, 25 Feb 2016 06:33:47 -0500 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 80123ACD3; Thu, 25 Feb 2016 11:33:45 +0000 (UTC) From: Juergen Gross To: grub-devel@gnu.org Subject: [PATCH v5 02/11] xen: avoid memleaks on error Date: Thu, 25 Feb 2016 12:33:28 +0100 Message-Id: <1456400017-5789-3-git-send-email-jgross@suse.com> X-Mailer: git-send-email 2.6.2 In-Reply-To: <1456400017-5789-1-git-send-email-jgross@suse.com> References: <1456400017-5789-1-git-send-email-jgross@suse.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x (no timestamps) [generic] X-Received-From: 195.135.220.15 Cc: Juergen Gross , phcoder@gmail.com, daniel.kiper@oracle.com, mchang@suse.com, xen-devel@lists.xen.org X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: The development of GNU GRUB List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 25 Feb 2016 11:33:55 -0000 When loading a Xen pv-kernel avoid memory leaks in case of errors. Signed-off-by: Juergen Gross --- V5: set grub_errno to GRUB_ERR_NONE to avoid false error reports as requested by Daniel Kiper --- grub-core/loader/i386/xen.c | 2 +- grub-core/loader/i386/xen_fileXX.c | 19 +++++++++++++------ 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/grub-core/loader/i386/xen.c b/grub-core/loader/i386/xen.c index 179e89c..f45f70f 100644 --- a/grub-core/loader/i386/xen.c +++ b/grub-core/loader/i386/xen.c @@ -563,7 +563,7 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), { err = grub_relocator_alloc_chunk_addr (relocator, &ch, max_addr, size); if (err) - return err; + goto fail; if (grub_initrd_load (&initrd_ctx, argv, get_virtual_current_address (ch))) diff --git a/grub-core/loader/i386/xen_fileXX.c b/grub-core/loader/i386/xen_fileXX.c index 1ba5649..36b40e4 100644 --- a/grub-core/loader/i386/xen_fileXX.c +++ b/grub-core/loader/i386/xen_fileXX.c @@ -26,6 +26,8 @@ parse_xen_guest (grub_elf_t elf, struct grub_xen_file_info *xi, char *buf; char *ptr; int has_paddr = 0; + + grub_errno = GRUB_ERR_NONE; if (grub_file_seek (elf->file, off) == (grub_off_t) -1) return grub_errno; buf = grub_malloc (sz); @@ -35,7 +37,8 @@ parse_xen_guest (grub_elf_t elf, struct grub_xen_file_info *xi, if (grub_file_read (elf->file, buf, sz) != (grub_ssize_t) sz) { if (grub_errno) - return grub_errno; + goto out; + grub_free (buf); return grub_error (GRUB_ERR_BAD_OS, N_("premature end of file %s"), elf->file->name); } @@ -123,14 +126,14 @@ parse_xen_guest (grub_elf_t elf, struct grub_xen_file_info *xi, { xi->virt_base = grub_strtoull (ptr + sizeof ("VIRT_BASE=") - 1, &ptr, 16); if (grub_errno) - return grub_errno; + goto out; continue; } if (grub_strncmp (ptr, "VIRT_ENTRY=", sizeof ("VIRT_ENTRY=") - 1) == 0) { xi->entry_point = grub_strtoull (ptr + sizeof ("VIRT_ENTRY=") - 1, &ptr, 16); if (grub_errno) - return grub_errno; + goto out; continue; } if (grub_strncmp (ptr, "HYPERCALL_PAGE=", sizeof ("HYPERCALL_PAGE=") - 1) == 0) @@ -138,7 +141,7 @@ parse_xen_guest (grub_elf_t elf, struct grub_xen_file_info *xi, xi->hypercall_page = grub_strtoull (ptr + sizeof ("HYPERCALL_PAGE=") - 1, &ptr, 16); xi->has_hypercall_page = 1; if (grub_errno) - return grub_errno; + goto out; continue; } if (grub_strncmp (ptr, "ELF_PADDR_OFFSET=", sizeof ("ELF_PADDR_OFFSET=") - 1) == 0) @@ -146,7 +149,7 @@ parse_xen_guest (grub_elf_t elf, struct grub_xen_file_info *xi, xi->paddr_offset = grub_strtoull (ptr + sizeof ("ELF_PADDR_OFFSET=") - 1, &ptr, 16); has_paddr = 1; if (grub_errno) - return grub_errno; + goto out; continue; } } @@ -154,7 +157,11 @@ parse_xen_guest (grub_elf_t elf, struct grub_xen_file_info *xi, xi->hypercall_page = (xi->hypercall_page << 12) + xi->virt_base; if (!has_paddr) xi->paddr_offset = xi->virt_base; - return GRUB_ERR_NONE; + +out: + grub_free (buf); + + return grub_errno; } #pragma GCC diagnostic ignored "-Wcast-align" -- 2.6.2