示例#1
0
文件: ktap.c 项目: lsmushroom/ktap
static long ktap_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
{
	struct ktap_user_parm uparm;
	int ret;

	switch (cmd) {
	case KTAP_CMD_VERSION:
		print_version();
		return 0;
	case KTAP_CMD_RUN:
		ret = copy_from_user(&uparm, (void __user *)arg,
				     sizeof(struct ktap_user_parm));
		if (ret < 0)
			return -EFAULT;

		return ktap_main(file, &uparm);
	case KTAP_CMD_USER_COMPLETE: {
		ktap_State *ks = file->private_data;
		kp_user_complete(ks);
		break;
		}
	default:
		return -EINVAL;
	};

        return 0;
}
示例#2
0
文件: ktap.c 项目: awreece/ktap
static long ktap_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
{
	ktap_option_t parm;
	int ret;

	switch (cmd) {
	case KTAP_CMD_IOC_VERSION:
		print_version();
		return 0;
	case KTAP_CMD_IOC_RUN:
		/*
		 * must be root to run ktap script (at least for now)
		 *
		 * TODO: check perf_paranoid sysctl and allow non-root user
		 * to use ktap for tracing process(like uprobe) ?
		 */
		if (!capable(CAP_SYS_ADMIN))
			return -EACCES;

		ret = copy_from_user(&parm, (void __user *)arg,
				     sizeof(ktap_option_t));
		if (ret < 0)
			return -EFAULT;

		return ktap_main(file, &parm);
	default:
		return -EINVAL;
	};

        return 0;
}
示例#3
0
文件: ktap.c 项目: cfregly/ktap
static long ktap_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
{
	ktap_parm parm;
	int ret;

	switch (cmd) {
	case KTAP_CMD_IOC_VERSION:
		print_version();
		return 0;
	case KTAP_CMD_IOC_RUN:
		ret = copy_from_user(&parm, (void __user *)arg,
				     sizeof(ktap_parm));
		if (ret < 0)
			return -EFAULT;

		return ktap_main(file, &parm);
	default:
		return -EINVAL;
	};

        return 0;
}