X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=datapath%2Fflow.c;h=fb339e73e581a6379a726c14fc0ca592b45ab92b;hb=bbdc31bcff1efb9638e479b7e33b701e1159c7fe;hp=5cf0d54a7839860519c9f7337e1890f220c8db95;hpb=8dda8c9b63c8803621f900beaa397c673b736197;p=openvswitch diff --git a/datapath/flow.c b/datapath/flow.c index 5cf0d54a..fb339e73 100644 --- a/datapath/flow.c +++ b/datapath/flow.c @@ -175,7 +175,7 @@ void flow_put(struct sw_flow *flow) return; if (atomic_dec_and_test(&flow->refcnt)) { - kfree(flow->sf_acts); + kfree((struct sf_flow_acts __force *)flow->sf_acts); kmem_cache_free(flow_cache, flow); } } @@ -333,7 +333,8 @@ int flow_extract(struct sk_buff *skb, u16 in_port, struct odp_flow_key *key, key->nw_proto = nh->protocol; /* Transport layer. */ - if (!(nh->frag_off & htons(IP_MF | IP_OFFSET))) { + if (!(nh->frag_off & htons(IP_MF | IP_OFFSET)) && + !(skb_shinfo(skb)->gso_type & SKB_GSO_UDP)) { if (key->nw_proto == IPPROTO_TCP) { if (tcphdr_ok(skb)) { struct tcphdr *tcp = tcp_hdr(skb);