lkml.org 
[lkml]   [2017]   [Apr]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [PATCH net-next v2 4/6] vxlan: check valid combinations of address scopes
    From
    Date
    On 04/14/2017 07:44 PM, Matthias Schiffer wrote:

    > * Multicast addresses are never valid as local address
    > * Link-local IPv6 unicast addresses may only be used as remote when the
    > local address is link-local as well
    > * Don't allow link-local IPv6 local/remote addresses without interface
    >
    > We also store in the flags field if link-local addresses are used for the
    > follow-up patches that actually make VXLAN over link-local IPv6 work.
    >
    > Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
    > ---
    >
    > v2: was "vxlan: don't allow link-local IPv6 local/remote addresses without
    > interface" before. v2 does a lot more checks and adds the
    > VXLAN_F_IPV6_LINKLOCAL flag.
    >
    > drivers/net/vxlan.c | 35 +++++++++++++++++++++++++++++++++++
    > include/net/vxlan.h | 2 ++
    > 2 files changed, 37 insertions(+)
    >
    > diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
    > index 07f89b037681..95a71546e8f2 100644
    > --- a/drivers/net/vxlan.c
    > +++ b/drivers/net/vxlan.c
    > @@ -2881,11 +2881,39 @@ static int vxlan_config_validate(struct net *src_net, struct vxlan_config *conf,
    > if (conf->saddr.sa.sa_family != conf->remote_ip.sa.sa_family)
    > return -EINVAL;
    >
    > + if (vxlan_addr_multicast(&conf->saddr))
    > + return -EINVAL;
    > +
    > if (conf->saddr.sa.sa_family == AF_INET6) {
    > if (!IS_ENABLED(CONFIG_IPV6))
    > return -EPFNOSUPPORT;
    > use_ipv6 = true;
    > conf->flags |= VXLAN_F_IPV6;
    > +
    > + if (!(conf->flags & VXLAN_F_COLLECT_METADATA)) {
    > + int local_type =
    > + ipv6_addr_type(&conf->saddr.sin6.sin6_addr);
    > + int remote_type =
    > + ipv6_addr_type(&conf->remote_ip.sin6.sin6_addr);
    > +
    > + if (local_type & IPV6_ADDR_LINKLOCAL) {
    > + if (!(remote_type & IPV6_ADDR_LINKLOCAL) &&
    > + (remote_type != IPV6_ADDR_ANY)) {
    > + pr_info("invalid combination of address scopes\n");

    Maybe pr_err()?

    > + return -EINVAL;
    > + }
    > +
    > + conf->flags |= VXLAN_F_IPV6_LINKLOCAL;
    > + } else {
    > + if (remote_type ==
    > + (IPV6_ADDR_UNICAST | IPV6_ADDR_LINKLOCAL)) {
    > + pr_info("invalid combination of address scopes\n");

    Here as well...

    > + return -EINVAL;
    > + }
    > +
    > + conf->flags &= ~VXLAN_F_IPV6_LINKLOCAL;
    > + }
    > + }
    > }
    >
    > if (conf->label && !use_ipv6) {
    [...]

    MBR, Sergei

    \
     
     \ /
      Last update: 2017-04-14 19:28    [W:3.072 / U:0.136 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site