Use strdup() on the name (and free it when it's done) so non-static names
can be used in firmware_register().
This commit is contained in:
parent
4b63f702b7
commit
2c73480574
@ -175,6 +175,9 @@ firmware_register(const char *imagename, const void *data, size_t datasize,
|
||||
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, const void *data, size_t datasize,
|
||||
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 *imagename)
|
||||
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 *imagename)
|
||||
* 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;
|
||||
|
Loading…
Reference in New Issue
Block a user