diff options
author | Ivan Gomez Castellanos <ivan.gomez@ti.com> | 2010-08-25 17:08:59 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2010-08-31 11:23:15 -0700 |
commit | 315a1a20aa01138c6469fbdab4df097c35344353 (patch) | |
tree | 56a0049afd182b801d7975c677a40c49964d3280 /drivers | |
parent | e8184e6c2d32eb4418f6084155ac1ffb08c751e8 (diff) |
staging: tidspbridge: Remove cfg_get_exec_file()
As the services directory is going to be removed, the cfg_get_exec_file
function has also to be removed.
This patch also avoids a possible NULL pointer dereference in function
cfg_get_exec_file(), when drv_datap is checked for NULL and then pass
drv_datap->base_img as argument to strlen().
Signed-off-by: Ivan Gomez Castellanos <ivan.gomez@ti.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/staging/tidspbridge/include/dspbridge/cfg.h | 22 | ||||
-rw-r--r-- | drivers/staging/tidspbridge/rmgr/proc.c | 27 | ||||
-rw-r--r-- | drivers/staging/tidspbridge/services/cfg.c | 31 |
3 files changed, 19 insertions, 61 deletions
diff --git a/drivers/staging/tidspbridge/include/dspbridge/cfg.h b/drivers/staging/tidspbridge/include/dspbridge/cfg.h index 9a259a1dddf8..11f5bdebae70 100644 --- a/drivers/staging/tidspbridge/include/dspbridge/cfg.h +++ b/drivers/staging/tidspbridge/include/dspbridge/cfg.h @@ -41,28 +41,6 @@ extern int cfg_get_cd_version(u32 *version); /* - * ======== cfg_get_exec_file ======== - * Purpose: - * Retreive the default executable, if any, for this board. - * Parameters: - * dev_node_obj: Handle to the dev_node who's driver we are querying. - * buf_size: Size of buffer. - * str_exec_file: Ptr to character buf to hold ExecFile. - * Returns: - * 0: Success. - * -EFAULT: dev_node_obj is invalid or str_exec_file is invalid. - * -ENODATA: The resource is not available. - * Requires: - * CFG initialized. - * Ensures: - * 0: Not more than buf_size bytes were copied into str_exec_file, - * and *str_exec_file contains default executable for this - * devnode. - */ -extern int cfg_get_exec_file(struct cfg_devnode *dev_node_obj, - u32 buf_size, char *str_exec_file); - -/* * ======== cfg_get_object ======== * Purpose: * Retrieve the Driver Object handle From the Registry diff --git a/drivers/staging/tidspbridge/rmgr/proc.c b/drivers/staging/tidspbridge/rmgr/proc.c index 44c26e11fc4a..0a7e30b4cbb1 100644 --- a/drivers/staging/tidspbridge/rmgr/proc.c +++ b/drivers/staging/tidspbridge/rmgr/proc.c @@ -393,18 +393,29 @@ static int get_exec_file(struct cfg_devnode *dev_node_obj, { u8 dev_type; s32 len; + struct drv_data *drv_datap = dev_get_drvdata(bridge); dev_get_dev_type(hdev_obj, (u8 *) &dev_type); + + if (!exec_file) + return -EFAULT; + if (dev_type == DSP_UNIT) { - return cfg_get_exec_file(dev_node_obj, size, exec_file); - } else if (dev_type == IVA_UNIT) { - if (iva_img) { - len = strlen(iva_img); - strncpy(exec_file, iva_img, len + 1); - return 0; - } + if (!drv_datap || !drv_datap->base_img) + return -EFAULT; + + if (strlen(drv_datap->base_img) > size) + return -EINVAL; + + strcpy(exec_file, drv_datap->base_img); + } else if (dev_type == IVA_UNIT && iva_img) { + len = strlen(iva_img); + strncpy(exec_file, iva_img, len + 1); + } else { + return -ENOENT; } - return -ENOENT; + + return 0; } /* diff --git a/drivers/staging/tidspbridge/services/cfg.c b/drivers/staging/tidspbridge/services/cfg.c index 587c71a5975f..302eaddaa0d0 100644 --- a/drivers/staging/tidspbridge/services/cfg.c +++ b/drivers/staging/tidspbridge/services/cfg.c @@ -31,37 +31,6 @@ #include <dspbridge/drv.h> /* - * ======== cfg_get_exec_file ======== - * Purpose: - * Retreive the default executable, if any, for this board. - */ -int cfg_get_exec_file(struct cfg_devnode *dev_node_obj, u32 buf_size, - char *str_exec_file) -{ - int status = 0; - struct drv_data *drv_datap = dev_get_drvdata(bridge); - - if (!dev_node_obj) - status = -EFAULT; - - else if (!str_exec_file || !drv_datap) - status = -EFAULT; - - if (strlen(drv_datap->base_img) > buf_size) - status = -EINVAL; - - if (!status && drv_datap->base_img) - strcpy(str_exec_file, drv_datap->base_img); - - if (status) - pr_err("%s: Failed, status 0x%x\n", __func__, status); - DBC_ENSURE(((status == 0) && - (strlen(str_exec_file) <= buf_size)) - || (status != 0)); - return status; -} - -/* * ======== cfg_get_object ======== * Purpose: * Retrieve the Object handle from the Registry |