diff --git a/net/netrom/nr_route.c b/net/netrom/nr_route.c index b94cb2ffbaf8faec80ffd4f02d277a73d2de7a3b..0ccd277352e48533e8c96e2761cf9341c88b121f 100644 --- a/net/netrom/nr_route.c +++ b/net/netrom/nr_route.c @@ -746,13 +746,13 @@ void nr_link_failed(ax25_cb *ax25, int reason) int nr_route_frame(struct sk_buff *skb, ax25_cb *ax25) { ax25_address *nr_src, *nr_dest; + struct sk_buff *skbn, *oskb; struct nr_neigh *nr_neigh; struct nr_node *nr_node; struct net_device *dev; unsigned char *dptr; ax25_cb *ax25s; int ret; - struct sk_buff *skbn; /* * Reject malformed packets early. Check that it contains at least 2 @@ -817,8 +817,8 @@ int nr_route_frame(struct sk_buff *skb, ax25_cb *ax25) dev_put(dev); return 0; } - kfree_skb(skb); - skb=skbn; + oskb = skb; + skb = skb; skb->data[14]--; dptr = skb_push(skb, 1); @@ -837,6 +837,8 @@ int nr_route_frame(struct sk_buff *skb, ax25_cb *ax25) nr_node_unlock(nr_node); nr_node_put(nr_node); + if (ret) + kfree_skb(oskb); return ret; }