Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 315a1a20 authored by Ivan Gomez Castellanos's avatar Ivan Gomez Castellanos Committed by Greg Kroah-Hartman
Browse files

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: default avatarIvan Gomez Castellanos <ivan.gomez@ti.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent e8184e6c
Loading
Loading
Loading
Loading
+0 −22
Original line number Diff line number Diff line
@@ -40,28 +40,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:
+19 −8
Original line number Diff line number Diff line
@@ -393,20 +393,31 @@ 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) {
		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);
			return 0;
		}
	}
	} else {
		return -ENOENT;
	}

	return 0;
}

/*
 *  ======== proc_auto_start ======== =
 *  Purpose:
+0 −31
Original line number Diff line number Diff line
@@ -30,37 +30,6 @@
#include <dspbridge/cfg.h>
#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: