From: Thomas Graf <tgraf@suug.ch>
To: David Lebrun <david.lebrun@uclouvain.be>
Cc: netdev@vger.kernel.org
Subject: Re: [PATCH net-next v4 3/9] ipv6: sr: add support for SRH encapsulation and injection with lwtunnels
Date: Fri, 4 Nov 2016 15:21:54 +0100 [thread overview]
Message-ID: <20161104142154.GA19947@pox.localdomain> (raw)
In-Reply-To: <1478255388-32213-4-git-send-email-david.lebrun@uclouvain.be>
On 11/04/16 at 11:29am, David Lebrun wrote:
> +/* insert an SRH within an IPv6 packet, just after the IPv6 header */
> +static int seg6_do_srh_inline(struct sk_buff *skb, struct ipv6_sr_hdr *osrh)
> +{
> + struct ipv6hdr *hdr, *oldhdr;
> + struct ipv6_sr_hdr *isrh;
> + int hdrlen, err;
> +
> + hdrlen = (osrh->hdrlen + 1) << 3;
> +
> + err = pskb_expand_head(skb, hdrlen, 0, GFP_ATOMIC);
> + if (unlikely(err))
> + return err;
> +
> + oldhdr = ipv6_hdr(skb);
> +
> + skb_pull(skb, sizeof(struct ipv6hdr));
> + skb_postpull_rcsum(skb, skb_network_header(skb),
> + sizeof(struct ipv6hdr));
> +
> + skb_push(skb, sizeof(struct ipv6hdr) + hdrlen);
> + skb_reset_network_header(skb);
> + skb_mac_header_rebuild(skb);
> +
> + hdr = ipv6_hdr(skb);
> +
> + memmove(hdr, oldhdr, sizeof(*hdr));
> +
> + isrh = (void *)hdr + sizeof(*hdr);
> + memcpy(isrh, osrh, hdrlen);
> +
> + isrh->nexthdr = hdr->nexthdr;
> + hdr->nexthdr = NEXTHDR_ROUTING;
> +
> + isrh->segments[0] = hdr->daddr;
> + hdr->daddr = isrh->segments[isrh->first_segment];
Where do you verify that isrh->first_segment is not out of bounds?
> + skb_postpush_rcsum(skb, hdr, sizeof(struct ipv6hdr) + hdrlen);
> +
> + return 0;
> +}
> +
> +
> +static int seg6_build_state(struct net_device *dev, struct nlattr *nla,
> + unsigned int family, const void *cfg,
> + struct lwtunnel_state **ts)
> +{
> + struct nlattr *tb[SEG6_IPTUNNEL_MAX + 1];
> + struct seg6_iptunnel_encap *tuninfo;
> + struct lwtunnel_state *newts;
> + struct seg6_lwt *slwt;
> + int tuninfo_len;
> + int err;
> +
> + err = nla_parse_nested(tb, SEG6_IPTUNNEL_MAX, nla,
> + seg6_iptunnel_policy);
> +
> + if (err < 0)
> + return err;
> +
> + if (!tb[SEG6_IPTUNNEL_SRH])
> + return -EINVAL;
> +
> + tuninfo = nla_data(tb[SEG6_IPTUNNEL_SRH]);
> + tuninfo_len = SEG6_IPTUN_ENCAP_SIZE(tuninfo);
Nothing guarantees the size of the Netlink attribute right now. You
need to add a minimal size requirement to seg6_iptunnel_policy and
then check that the additional len provided in the struct itself does
not exceed the Netlink attribute length.
next prev parent reply other threads:[~2016-11-04 14:21 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-11-04 10:29 [PATCH net-next v4 0/9] net: add support for IPv6 Segment Routing David Lebrun
2016-11-04 10:29 ` [PATCH net-next v4 1/9] ipv6: implement dataplane support for rthdr type 4 (Segment Routing Header) David Lebrun
2016-11-04 10:29 ` [PATCH net-next v4 2/9] ipv6: sr: add code base for control plane support of SR-IPv6 David Lebrun
2016-11-04 10:29 ` [PATCH net-next v4 3/9] ipv6: sr: add support for SRH encapsulation and injection with lwtunnels David Lebrun
2016-11-04 14:21 ` Thomas Graf [this message]
2016-11-04 16:26 ` Tom Herbert
2016-11-06 14:02 ` David Lebrun
2016-11-07 2:42 ` [lkp] [ipv6] 3e1ad8cb8a: kmsg.IPv6:Attempt_to_unregister_permanent_protocol kernel test robot
2016-11-04 10:29 ` [PATCH net-next v4 4/9] ipv6: sr: add core files for SR HMAC support David Lebrun
2016-11-04 10:32 ` [PATCH net-next v4 5/9] ipv6: sr: implement API to control SR HMAC structure David Lebrun
2016-11-04 10:32 ` [PATCH net-next v4 6/9] ipv6: sr: add calls to verify and insert HMAC signatures David Lebrun
2016-11-04 10:32 ` [PATCH net-next v4 7/9] ipv6: add source address argument for ipv6_push_nfrag_opts David Lebrun
2016-11-04 10:32 ` [PATCH net-next v4 8/9] ipv6: sr: add support for SRH injection through setsockopt David Lebrun
2016-11-04 10:32 ` [PATCH net-next v4 9/9] ipv6: sr: add documentation file for per-interface sysctls David Lebrun
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20161104142154.GA19947@pox.localdomain \
--to=tgraf@suug.ch \
--cc=david.lebrun@uclouvain.be \
--cc=netdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).