Author: adrian
Date: Fri Apr 13 04:22:42 2012
New Revision: 234201
URL: http://svn.freebsd.org/changeset/base/234201

Log:
  Use strdup() on the name (and free it when it's done) so non-static names
  can be used in firmware_register().

Modified:
  head/sys/kern/subr_firmware.c

Modified: head/sys/kern/subr_firmware.c
==============================================================================
--- head/sys/kern/subr_firmware.c       Fri Apr 13 04:21:54 2012        
(r234200)
+++ head/sys/kern/subr_firmware.c       Fri Apr 13 04:22:42 2012        
(r234201)
@@ -175,6 +175,9 @@ firmware_register(const char *imagename,
     unsigned int version, const struct firmware *parent)
 {
        struct priv_fw *match, *frp;
+       char *str;
+
+       str = strdup(imagename, M_TEMP);
 
        mtx_lock(&firmware_mtx);
        /*
@@ -185,16 +188,18 @@ firmware_register(const char *imagename,
                mtx_unlock(&firmware_mtx);
                printf("%s: image %s already registered!\n",
                        __func__, imagename);
+               free(str, M_TEMP);
                return NULL;
        }
        if (frp == NULL) {
                mtx_unlock(&firmware_mtx);
                printf("%s: cannot register image %s, firmware table full!\n",
                    __func__, imagename);
+               free(str, M_TEMP);
                return NULL;
        }
        bzero(frp, sizeof(frp));        /* start from a clean record */
-       frp->fw.name = imagename;
+       frp->fw.name = str;
        frp->fw.data = data;
        frp->fw.datasize = datasize;
        frp->fw.version = version;
@@ -230,7 +235,7 @@ firmware_unregister(const char *imagenam
                err = 0;
        } else if (fp->refcnt != 0) {   /* cannot unregister */
                err = EBUSY;
-       }  else {
+       } else {
                linker_file_t x = fp->file;     /* save value */
 
                /*
@@ -238,6 +243,7 @@ firmware_unregister(const char *imagenam
                 * do not forget anything. Then restore 'file' which is
                 * non-null for autoloaded images.
                 */
+               free((void *) (uintptr_t) fp->fw.name, M_TEMP);
                bzero(fp, sizeof(struct priv_fw));
                fp->file = x;
                err = 0;
_______________________________________________
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