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

Commit e400a6b6 authored by Jiten Patel's avatar Jiten Patel Committed by Gerrit - the friendly Code Review server
Browse files

compat_qseecom: Add new IOCTL for new FDE design



Add new IOCTL COMPAT_QSEECOM_IOCTL_SET_ICE_INFO allow
32-bit userland programs to make ioctl calls on a 64-bit
kernel needed as per new FDE design.

Change-Id: I740eae9d33fc58fe9cedd41c3275c0d366e36fb4
Signed-off-by: default avatarJiten Patel <jitepate@codeaurora.org>
parent 5c051187
Loading
Loading
Loading
Loading
+33 −2
Original line number Diff line number Diff line
/* Copyright (c) 2014-2017, The Linux Foundation. All rights reserved.
/* Copyright (c) 2014-2017,2019 The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
@@ -475,6 +475,18 @@ static int compat_put_qseecom_is_es_activated_req(
	return err;
}

static int compat_get_qseecom_ice_flag(
	struct compat_qseecom_ice_data_t __user *data32,
	struct qseecom_ice_data_t __user *data)
{
	int err;
	compat_int_t ice_flag;

	err = get_user(ice_flag, &data32->flag);
	err |= put_user(ice_flag, &data->flag);
	return err;
}

static unsigned int convert_cmd(unsigned int cmd)
{
	switch (cmd) {
@@ -538,7 +550,8 @@ static unsigned int convert_cmd(unsigned int cmd)
		return QSEECOM_IOCTL_SEND_MODFD_CMD_64_REQ;
	case COMPAT_QSEECOM_IOCTL_SEND_MODFD_RESP_64:
		return QSEECOM_IOCTL_SEND_MODFD_RESP_64;

	case COMPAT_QSEECOM_IOCTL_SET_ICE_INFO:
		return QSEECOM_IOCTL_SET_ICE_INFO;
	default:
		return cmd;
	}
@@ -914,6 +927,24 @@ long compat_qseecom_ioctl(struct file *file,
						(unsigned long)data);
	}
	break;
	case COMPAT_QSEECOM_IOCTL_SET_ICE_INFO: {
		struct compat_qseecom_ice_data_t __user *data32;
		struct qseecom_ice_data_t __user *data;
		int err;

		data32 = compat_ptr(arg);
		data = compat_alloc_user_space(sizeof(*data));
		if (data == NULL)
			return -EFAULT;

		err = compat_get_qseecom_ice_flag(data32, data);
		if (err)
			return err;

		return qseecom_ioctl(file, convert_cmd(cmd),
				(unsigned long)data);
	}
	break;
	default:
		return -ENOIOCTLCMD;
	break;
+7 −0
Original line number Diff line number Diff line
@@ -110,6 +110,10 @@ struct compat_qseecom_qseos_version_req {
	compat_uint_t qseos_version; /* in */
};

struct compat_qseecom_ice_data_t {
	compat_int_t flag; /* in */
};

/*
 * struct compat_qseecom_qseos_app_load_query - verify if app is loaded in qsee
 * @app_name[MAX_APP_NAME_SIZE]-  name of the app.
@@ -329,5 +333,8 @@ extern long compat_qseecom_ioctl(struct file *file,
	_IOWR(QSEECOM_IOC_MAGIC, 42, \
				struct compat_qseecom_ce_info_req)

#define COMPAT_QSEECOM_IOCTL_SET_ICE_INFO \
	 _IOWR(QSEECOM_IOC_MAGIC, 43, struct qseecom_ice_data_t)

#endif
#endif /* _UAPI_COMPAT_QSEECOM_H_ */