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

Commit 168c2ba2 authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: ADSPRPC: Handle third party applications"

parents 90f1714b 95811119
Loading
Loading
Loading
Loading
+29 −7
Original line number Diff line number Diff line
@@ -358,6 +358,8 @@ struct fastrpc_channel_ctx {
	void *rh_dump_dev;
	/* Indicates, if channel is restricted to secure node only */
	int secure;
	/* Indicates whether the channel supports unsigned PD */
	bool unsigned_support;
	struct fastrpc_dsp_capabilities dsp_cap_kernel;
	void *ipc_log_ctx;
	/* cpu capabilities shared to DSP */
@@ -2194,12 +2196,15 @@ static void fastrpc_init(struct fastrpc_apps *me)
		me->channel[i].sesscount = 0;
		/* All channels are secure by default except CDSP */
		me->channel[i].secure = SECURE_CHANNEL;
		me->channel[i].unsigned_support = false;
		mutex_init(&me->channel[i].smd_mutex);
		mutex_init(&me->channel[i].rpmsg_mutex);
		spin_lock_init(&me->channel[i].ctxlock);
	}
	/* Set CDSP channel to non secure */
	me->channel[CDSP_DOMAIN_ID].secure = NON_SECURE_CHANNEL;
	/* Set CDSP channel unsigned_support to true*/
	me->channel[CDSP_DOMAIN_ID].unsigned_support = true;
}

static inline void fastrpc_pm_awake(struct fastrpc_file *fl, int channel_type)
@@ -2492,6 +2497,20 @@ static int fastrpc_init_process(struct fastrpc_file *fl,
	struct fastrpc_buf *imem = NULL;
	unsigned long imem_dma_attr = 0;
	char *proc_name = NULL;
	int unsigned_request = (uproc->attrs & FASTRPC_MODE_UNSIGNED_MODULE);
	int cid = fl->cid;
	struct fastrpc_channel_ctx *chan = &me->channel[cid];

	if (chan->unsigned_support &&
		fl->dev_minor == MINOR_NUM_DEV) {
		/* Make sure third party applications */
		/* can spawn only unsigned PD when */
		/* channel configured as secure. */
		if (chan->secure && !unsigned_request) {
			err = -ECONNREFUSED;
			goto bail;
		}
	}

	VERIFY(err, 0 == (err = fastrpc_channel_open(fl)));
	if (err)
@@ -4105,6 +4124,7 @@ static int fastrpc_get_info(struct fastrpc_file *fl, uint32_t *info)
{
	int err = 0;
	uint32_t cid;
	struct fastrpc_apps *me = &gfa;

	VERIFY(err, fl != NULL);
	if (err)
@@ -4112,21 +4132,23 @@ static int fastrpc_get_info(struct fastrpc_file *fl, uint32_t *info)
	err = fastrpc_set_process_info(fl);
	if (err)
		goto bail;
	if (fl->cid == -1) {
	cid = *info;
	if (fl->cid == -1) {
		struct fastrpc_channel_ctx *chan = &me->channel[cid];

		VERIFY(err, cid < NUM_CHANNELS);
		if (err)
			goto bail;
		/* Check to see if the device node is non-secure */
		if (fl->dev_minor == MINOR_NUM_DEV) {
			/*
			 * For non secure device node check and make sure that
			 * the channel allows non-secure access
			 * If not, bail. Session will not start.
			 * cid will remain -1 and client will not be able to
			 * invoke any other methods without failure
			 * If an app is trying to offload to a secure remote
			 * channel by opening the non-secure device node, allow
			 * the access if the subsystem supports unsigned
			 * offload. Untrusted apps will be restricted.
			 */
			if (fl->apps->channel[cid].secure == SECURE_CHANNEL) {
			if (chan->secure == SECURE_CHANNEL &&
				!chan->unsigned_support) {
				err = -EACCES;
				goto bail;
			}
+16 −0
Original line number Diff line number Diff line
@@ -350,4 +350,20 @@ static inline struct smq_phy_page *smq_phy_page_start(uint32_t sc,
	return (struct smq_phy_page *)(&buf[nTotal]);
}

enum fastrpc_proc_attr {
	/* Macro for Debug attr */
	FASTRPC_MODE_DEBUG				= 1 << 0,
	/* Macro for Ptrace */
	FASTRPC_MODE_PTRACE				= 1 << 1,
	/* Macro for CRC Check */
	FASTRPC_MODE_CRC				= 1 << 2,
	/* Macro for Unsigned PD */
	FASTRPC_MODE_UNSIGNED_MODULE	= 1 << 3,
	/* Macro for Adaptive QoS */
	FASTRPC_MODE_ADAPTIVE_QOS		= 1 << 4,
	/* Macro for System Process */
	FASTRPC_MODE_SYSTEM_PROCESS		= 1 << 5,

};

#endif