Skip to content

Commit

Permalink
xen-netback: don't de-reference vif pointer after having called xenvi…
Browse files Browse the repository at this point in the history
…f_put()

When putting vif-s on the rx notify list, calling xenvif_put() must be
deferred until after the removal from the list and the issuing of the
notification, as both operations dereference the pointer.

Changing this got me to notice that the "irq" variable was effectively
unused (and was of too narrow type anyway).

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Jan Beulich authored and David S. Miller committed Jun 13, 2013
1 parent 99ffc3e commit 94f950c
Showing 1 changed file with 6 additions and 5 deletions.
11 changes: 6 additions & 5 deletions drivers/net/xen-netback/netback.c
Original file line number Diff line number Diff line change
Expand Up @@ -662,7 +662,7 @@ static void xen_netbk_rx_action(struct xen_netbk *netbk)
{
struct xenvif *vif = NULL, *tmp;
s8 status;
u16 irq, flags;
u16 flags;
struct xen_netif_rx_response *resp;
struct sk_buff_head rxq;
struct sk_buff *skb;
Expand Down Expand Up @@ -771,20 +771,21 @@ static void xen_netbk_rx_action(struct xen_netbk *netbk)
sco->meta_slots_used);

RING_PUSH_RESPONSES_AND_CHECK_NOTIFY(&vif->rx, ret);
irq = vif->irq;
if (ret && list_empty(&vif->notify_list))
list_add_tail(&vif->notify_list, &notify);

xenvif_notify_tx_completion(vif);

xenvif_put(vif);
if (ret && list_empty(&vif->notify_list))
list_add_tail(&vif->notify_list, &notify);
else
xenvif_put(vif);
npo.meta_cons += sco->meta_slots_used;
dev_kfree_skb(skb);
}

list_for_each_entry_safe(vif, tmp, &notify, notify_list) {
notify_remote_via_irq(vif->irq);
list_del_init(&vif->notify_list);
xenvif_put(vif);
}

/* More work to do? */
Expand Down

0 comments on commit 94f950c

Please sign in to comment.