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

Commit 477c6086 authored by Patrick McHardy's avatar Patrick McHardy
Browse files

Merge branch 'ebt_config_compat_v4' of git://git.breakpoint.cc/fw/nf-next-2.6

parents 6457d26b 6e705f56
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -84,6 +84,19 @@ static bool ebt_limit_mt_check(const struct xt_mtchk_param *par)
	return true;
}


#ifdef CONFIG_COMPAT
/*
 * no conversion function needed --
 * only avg/burst have meaningful values in userspace.
 */
struct ebt_compat_limit_info {
	compat_uint_t avg, burst;
	compat_ulong_t prev;
	compat_uint_t credit, credit_cap, cost;
};
#endif

static struct xt_match ebt_limit_mt_reg __read_mostly = {
	.name		= "limit",
	.revision	= 0,
@@ -91,6 +104,9 @@ static struct xt_match ebt_limit_mt_reg __read_mostly = {
	.match		= ebt_limit_mt,
	.checkentry	= ebt_limit_mt_check,
	.matchsize	= sizeof(struct ebt_limit_info),
#ifdef CONFIG_COMPAT
	.compatsize	= sizeof(struct ebt_compat_limit_info),
#endif
	.me		= THIS_MODULE,
};

+31 −0
Original line number Diff line number Diff line
@@ -52,6 +52,32 @@ static bool ebt_mark_tg_check(const struct xt_tgchk_param *par)
		return false;
	return true;
}
#ifdef CONFIG_COMPAT
struct compat_ebt_mark_t_info {
	compat_ulong_t mark;
	compat_uint_t target;
};

static void mark_tg_compat_from_user(void *dst, const void *src)
{
	const struct compat_ebt_mark_t_info *user = src;
	struct ebt_mark_t_info *kern = dst;

	kern->mark = user->mark;
	kern->target = user->target;
}

static int mark_tg_compat_to_user(void __user *dst, const void *src)
{
	struct compat_ebt_mark_t_info __user *user = dst;
	const struct ebt_mark_t_info *kern = src;

	if (put_user(kern->mark, &user->mark) ||
	    put_user(kern->target, &user->target))
		return -EFAULT;
	return 0;
}
#endif

static struct xt_target ebt_mark_tg_reg __read_mostly = {
	.name		= "mark",
@@ -60,6 +86,11 @@ static struct xt_target ebt_mark_tg_reg __read_mostly = {
	.target		= ebt_mark_tg,
	.checkentry	= ebt_mark_tg_check,
	.targetsize	= sizeof(struct ebt_mark_t_info),
#ifdef CONFIG_COMPAT
	.compatsize	= sizeof(struct compat_ebt_mark_t_info),
	.compat_from_user = mark_tg_compat_from_user,
	.compat_to_user	= mark_tg_compat_to_user,
#endif
	.me		= THIS_MODULE,
};

+37 −0
Original line number Diff line number Diff line
@@ -35,6 +35,38 @@ static bool ebt_mark_mt_check(const struct xt_mtchk_param *par)
	return true;
}


#ifdef CONFIG_COMPAT
struct compat_ebt_mark_m_info {
	compat_ulong_t mark, mask;
	uint8_t invert, bitmask;
};

static void mark_mt_compat_from_user(void *dst, const void *src)
{
	const struct compat_ebt_mark_m_info *user = src;
	struct ebt_mark_m_info *kern = dst;

	kern->mark = user->mark;
	kern->mask = user->mask;
	kern->invert = user->invert;
	kern->bitmask = user->bitmask;
}

static int mark_mt_compat_to_user(void __user *dst, const void *src)
{
	struct compat_ebt_mark_m_info __user *user = dst;
	const struct ebt_mark_m_info *kern = src;

	if (put_user(kern->mark, &user->mark) ||
	    put_user(kern->mask, &user->mask) ||
	    put_user(kern->invert, &user->invert) ||
	    put_user(kern->bitmask, &user->bitmask))
		return -EFAULT;
	return 0;
}
#endif

static struct xt_match ebt_mark_mt_reg __read_mostly = {
	.name		= "mark_m",
	.revision	= 0,
@@ -42,6 +74,11 @@ static struct xt_match ebt_mark_mt_reg __read_mostly = {
	.match		= ebt_mark_mt,
	.checkentry	= ebt_mark_mt_check,
	.matchsize	= sizeof(struct ebt_mark_m_info),
#ifdef CONFIG_COMPAT
	.compatsize	= sizeof(struct compat_ebt_mark_m_info),
	.compat_from_user = mark_mt_compat_from_user,
	.compat_to_user	= mark_mt_compat_to_user,
#endif
	.me		= THIS_MODULE,
};

+1048 −127

File changed.

Preview size limit exceeded, changes collapsed.