Author: markj
Date: Mon Feb 23 01:24:10 2015
New Revision: 279196
URL: https://svnweb.freebsd.org/changeset/base/279196

Log:
  MFC r278983:
  Free the zlib stream once the CTF section is decompressed.
  
  MFC r278984:
  Remove unnecessary checks for a NULL return value from malloc.
  
  MFC r279089:
  Let vn_rdwr() check for short reads.

Modified:
  stable/10/sys/kern/kern_ctf.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/kern/kern_ctf.c
==============================================================================
--- stable/10/sys/kern/kern_ctf.c       Mon Feb 23 01:17:45 2015        
(r279195)
+++ stable/10/sys/kern/kern_ctf.c       Mon Feb 23 01:24:10 2015        
(r279196)
@@ -68,7 +68,6 @@ link_elf_ctf_get(linker_file_t lf, linke
        int flags;
        int i;
        int nbytes;
-       ssize_t resid;
        size_t sz;
        struct nameidata nd;
        struct thread *td = curthread;
@@ -121,14 +120,11 @@ link_elf_ctf_get(linker_file_t lf, linke
        NDFREE(&nd, NDF_ONLY_PNBUF);
 
        /* Allocate memory for the FLF header. */
-       if ((hdr = malloc(sizeof(*hdr), M_LINKER, M_WAITOK)) == NULL) {
-               error = ENOMEM;
-               goto out;
-       }
+       hdr = malloc(sizeof(*hdr), M_LINKER, M_WAITOK);
 
        /* Read the ELF header. */
        if ((error = vn_rdwr(UIO_READ, nd.ni_vp, hdr, sizeof(*hdr),
-           0, UIO_SYSSPACE, IO_NODELOCKED, td->td_ucred, NOCRED, &resid,
+           0, UIO_SYSSPACE, IO_NODELOCKED, td->td_ucred, NOCRED, NULL,
            td)) != 0)
                goto out;
 
@@ -146,15 +142,12 @@ link_elf_ctf_get(linker_file_t lf, linke
        }
 
        /* Allocate memory for all the section headers */
-       if ((shdr = malloc(nbytes, M_LINKER, M_WAITOK)) == NULL) {
-               error = ENOMEM;
-               goto out;
-       }
+       shdr = malloc(nbytes, M_LINKER, M_WAITOK);
 
        /* Read all the section headers */
        if ((error = vn_rdwr(UIO_READ, nd.ni_vp, (caddr_t)shdr, nbytes,
            hdr->e_shoff, UIO_SYSSPACE, IO_NODELOCKED, td->td_ucred, NOCRED,
-           &resid, td)) != 0)
+           NULL, td)) != 0)
                goto out;
 
        /*
@@ -171,17 +164,12 @@ link_elf_ctf_get(linker_file_t lf, linke
        }
 
        /* Allocate memory to buffer the section header strings. */
-       if ((shstrtab = malloc(shdr[hdr->e_shstrndx].sh_size, M_LINKER,
-           M_WAITOK)) == NULL) {
-               error = ENOMEM;
-               goto out;
-       }
+       shstrtab = malloc(shdr[hdr->e_shstrndx].sh_size, M_LINKER, M_WAITOK);
 
        /* Read the section header strings. */
        if ((error = vn_rdwr(UIO_READ, nd.ni_vp, shstrtab,
            shdr[hdr->e_shstrndx].sh_size, shdr[hdr->e_shstrndx].sh_offset,
-           UIO_SYSSPACE, IO_NODELOCKED, td->td_ucred, NOCRED, &resid,
-           td)) != 0)
+           UIO_SYSSPACE, IO_NODELOCKED, td->td_ucred, NOCRED, NULL, td)) != 0)
                goto out;
 
        /* Search for the section containing the CTF data. */
@@ -200,7 +188,7 @@ link_elf_ctf_get(linker_file_t lf, linke
        /* Read the CTF header. */
        if ((error = vn_rdwr(UIO_READ, nd.ni_vp, ctf_hdr, sizeof(ctf_hdr),
            shdr[i].sh_offset, UIO_SYSSPACE, IO_NODELOCKED, td->td_ucred,
-           NOCRED, &resid, td)) != 0)
+           NOCRED, NULL, td)) != 0)
                goto out;
 
        /* Check the CTF magic number. (XXX check for big endian!) */
@@ -238,10 +226,7 @@ link_elf_ctf_get(linker_file_t lf, linke
                 * Allocate memory for the compressed CTF data, including
                 * the header (which isn't compressed).
                 */
-               if ((raw = malloc(shdr[i].sh_size, M_LINKER, M_WAITOK)) == 
NULL) {
-                       error = ENOMEM;
-                       goto out;
-               }
+               raw = malloc(shdr[i].sh_size, M_LINKER, M_WAITOK);
        } else {
                /*
                 * The CTF data is not compressed, so the ELF section
@@ -254,10 +239,7 @@ link_elf_ctf_get(linker_file_t lf, linke
         * Allocate memory to buffer the CTF data in it's decompressed
         * form.
         */
-       if ((ctftab = malloc(sz, M_LINKER, M_WAITOK)) == NULL) {
-               error = ENOMEM;
-               goto out;
-       }
+       ctftab = malloc(sz, M_LINKER, M_WAITOK);
 
        /*
         * Read the CTF data into the raw buffer if compressed, or
@@ -265,7 +247,7 @@ link_elf_ctf_get(linker_file_t lf, linke
         */
        if ((error = vn_rdwr(UIO_READ, nd.ni_vp, raw == NULL ? ctftab : raw,
            shdr[i].sh_size, shdr[i].sh_offset, UIO_SYSSPACE, IO_NODELOCKED,
-           td->td_ucred, NOCRED, &resid, td)) != 0)
+           td->td_ucred, NOCRED, NULL, td)) != 0)
                goto out;
 
        /* Check if decompression is required. */
@@ -293,7 +275,9 @@ link_elf_ctf_get(linker_file_t lf, linke
                zs.next_in = ((uint8_t *) raw) + sizeof(ctf_hdr);
                zs.avail_out = sz - sizeof(ctf_hdr);
                zs.next_out = ((uint8_t *) ctftab) + sizeof(ctf_hdr);
-               if ((ret = inflate(&zs, Z_FINISH)) != Z_STREAM_END) {
+               ret = inflate(&zs, Z_FINISH);
+               inflateEnd(&zs);
+               if (ret != Z_STREAM_END) {
                        printf("%s(%d): zlib inflate returned %d\n", __func__, 
__LINE__, ret);
                        error = EIO;
                        goto out;
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to