[S390]: Fix use of skb after netif_rx

!MAILaRCHIVE_VOTE_RePLACE
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
To: <git-commits-head@...>
Date: Tuesday, December 11, 2007 - 1:59 pm

Gitweb:     http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=9b3efc...
Commit:     9b3efc0133a807070dbd21254102995b65969965
Parent:     299f590f26da9764f20e905879f0090552ff2e86
Author:     Julia Lawall <julia@diku.dk>
AuthorDate: Mon Dec 10 17:17:37 2007 -0800
Committer:  David S. Miller <davem@sunset.davemloft.net>
CommitDate: Tue Dec 11 02:45:29 2007 -0800

    [S390]: Fix use of skb after netif_rx
    
    Recently, Wang Chen submitted a patch
    (d30f53aeb31d453a5230f526bea592af07944564) to move a call to netif_rx(skb)
    after a subsequent reference to skb, because netif_rx may call kfree_skb on
    its argument.  netif_rx_ni calls netif_rx, so the same problem occurs in
    the files below.
    
    I have left the updating of dev->last_rx after the calls to netif_rx_ni
    because it seems time dependent, but moved the other field updates before.
    
    This was found using the following semantic match.
    (http://www.emn.fr/x-info/coccinelle/)
    
    // <smpl>
    @@
    expression skb, e,e1;
    @@
    
    (
     netif_rx(skb);
    |
     netif_rx_ni(skb);
    )
      ... when != skb = e
    (
      skb = e1
    |
    * skb
    )
    // </smpl>
    
    Signed-off-by: Julia Lawall <julia@diku.dk>
    Signed-off-by: David S. Miller <davem@davemloft.net>
---
 drivers/s390/net/ctcmain.c |    6 +++---
 drivers/s390/net/netiucv.c |    4 ++--
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/s390/net/ctcmain.c b/drivers/s390/net/ctcmain.c
index 97adc70..77a5031 100644
--- a/drivers/s390/net/ctcmain.c
+++ b/drivers/s390/net/ctcmain.c
@@ -478,14 +478,14 @@ ctc_unpack_skb(struct channel *ch, struct sk_buff *pskb)
 		skb->dev = pskb->dev;
 		skb->protocol = pskb->protocol;
 		pskb->ip_summed = CHECKSUM_UNNECESSARY;
-		netif_rx_ni(skb);
 		/**
-		 * Successful rx; reset logflags
+		 * reset logflags
 		 */
 		ch->logflags = 0;
-		dev->last_rx = jiffies;
 		privptr->stats.rx_packets++;
 		privptr->stats.rx_bytes += skb->len;
+		netif_rx_ni(skb);
+		dev->last_rx = jiffies;
 		if (len > 0) {
 			skb_pull(pskb, header->length);
 			if (skb_tailroom(pskb) < LL_HEADER_LENGTH) {
diff --git a/drivers/s390/net/netiucv.c b/drivers/s390/net/netiucv.c
index 4d18d64..c7ea938 100644
--- a/drivers/s390/net/netiucv.c
+++ b/drivers/s390/net/netiucv.c
@@ -639,14 +639,14 @@ static void netiucv_unpack_skb(struct iucv_connection *conn,
 		skb->dev = pskb->dev;
 		skb->protocol = pskb->protocol;
 		pskb->ip_summed = CHECKSUM_UNNECESSARY;
+		privptr->stats.rx_packets++;
+		privptr->stats.rx_bytes += skb->len;
 		/*
 		 * Since receiving is always initiated from a tasklet (in iucv.c),
 		 * we must use netif_rx_ni() instead of netif_rx()
 		 */
 		netif_rx_ni(skb);
 		dev->last_rx = jiffies;
-		privptr->stats.rx_packets++;
-		privptr->stats.rx_bytes += skb->len;
 		skb_pull(pskb, header->next);
 		skb_put(pskb, NETIUCV_HDRLEN);
 	}
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[S390]: Fix use of skb after netif_rx, Linux Kernel Mailing List..., (Tue Dec 11, 1:59 pm)