Commit a5317f3b authored by Eelco Chaudron's avatar Eelco Chaudron Committed by Jakub Kicinski
Browse files

net: openvswitch: add log message for error case



As requested by upstream OVS, added some error messages in the
validate_and_copy_dec_ttl function.

Includes a small cleanup, which removes an unnecessary parameter
from the dec_ttl_exception_handler() function.

Reported-by: default avatarFlavio Leitner <fbl@sysclose.org>
Signed-off-by: default avatarEelco Chaudron <echaudro@redhat.com>
Acked-by: default avatarFlavio Leitner <fbl@sysclose.org>
Link: https://lore.kernel.org/r/161054576573.26637.18396634650212670580.stgit@ebuild


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 3bf679e2
Loading
Loading
Loading
Loading
+5 −7
Original line number Diff line number Diff line
@@ -957,14 +957,14 @@ static int output_userspace(struct datapath *dp, struct sk_buff *skb,

static int dec_ttl_exception_handler(struct datapath *dp, struct sk_buff *skb,
				     struct sw_flow_key *key,
				     const struct nlattr *attr, bool last)
				     const struct nlattr *attr)
{
	/* The first attribute is always 'OVS_DEC_TTL_ATTR_ACTION'. */
	struct nlattr *actions = nla_data(attr);

	if (nla_len(actions))
		return clone_execute(dp, skb, key, 0, nla_data(actions),
				     nla_len(actions), last, false);
				     nla_len(actions), true, false);

	consume_skb(skb);
	return 0;
@@ -1418,11 +1418,9 @@ static int do_execute_actions(struct datapath *dp, struct sk_buff *skb,

		case OVS_ACTION_ATTR_DEC_TTL:
			err = execute_dec_ttl(skb, key);
			if (err == -EHOSTUNREACH) {
				err = dec_ttl_exception_handler(dp, skb, key,
								a, true);
				return err;
			}
			if (err == -EHOSTUNREACH)
				return dec_ttl_exception_handler(dp, skb,
								 key, a);
			break;
		}

+12 −2
Original line number Diff line number Diff line
@@ -2515,15 +2515,25 @@ static int validate_and_copy_dec_ttl(struct net *net,
		if (type > OVS_DEC_TTL_ATTR_MAX)
			continue;

		if (!type || attrs[type])
		if (!type || attrs[type]) {
			OVS_NLERR(log, "Duplicate or invalid key (type %d).",
				  type);
			return -EINVAL;
		}

		attrs[type] = a;
	}

	if (rem) {
		OVS_NLERR(log, "Message has %d unknown bytes.", rem);
		return -EINVAL;
	}

	actions = attrs[OVS_DEC_TTL_ATTR_ACTION];
	if (rem || !actions || (nla_len(actions) && nla_len(actions) < NLA_HDRLEN))
	if (!actions || (nla_len(actions) && nla_len(actions) < NLA_HDRLEN)) {
		OVS_NLERR(log, "Missing valid actions attribute.");
		return -EINVAL;
	}

	start = add_nested_action_start(sfa, OVS_ACTION_ATTR_DEC_TTL, log);
	if (start < 0)