diff options
author | Robert Shearman <rshearma@brocade.com> | 2015-04-22 11:14:39 +0100 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-04-22 14:24:54 -0400 |
commit | 5a9ab0176198d91dfc153f5e6c5fdc5afa613607 (patch) | |
tree | e18ac4586481309da81bc43a30f3677e46a38858 /net/mpls | |
parent | 37bde79979c3862c79294c62ddcef7efc477e4bf (diff) | |
download | op-kernel-dev-5a9ab0176198d91dfc153f5e6c5fdc5afa613607.zip op-kernel-dev-5a9ab0176198d91dfc153f5e6c5fdc5afa613607.tar.gz |
mpls: Prevent use of implicit NULL label as outgoing label
The reserved implicit-NULL label isn't allowed to appear in the label
stack for packets, so make it an error for the control plane to
specify it as an outgoing label.
Suggested-by: "Eric W. Biederman" <ebiederm@xmission.com>
Signed-off-by: Robert Shearman <rshearma@brocade.com>
Reviewed-by: "Eric W. Biederman" <ebiederm@xmission.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/mpls')
-rw-r--r-- | net/mpls/af_mpls.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/net/mpls/af_mpls.c b/net/mpls/af_mpls.c index 9fdd94c..954810c 100644 --- a/net/mpls/af_mpls.c +++ b/net/mpls/af_mpls.c @@ -646,6 +646,15 @@ int nla_get_labels(const struct nlattr *nla, if ((dec.bos != bos) || dec.ttl || dec.tc) return -EINVAL; + switch (dec.label) { + case LABEL_IMPLICIT_NULL: + /* RFC3032: This is a label that an LSR may + * assign and distribute, but which never + * actually appears in the encapsulation. + */ + return -EINVAL; + } + label[i] = dec.label; } *labels = nla_labels; |