Skip to content

Commit

Permalink
ehea: fix invalid pointer access
Browse files Browse the repository at this point in the history
This patch fixes an invalid pointer access in case the receive queue
holds no pointer to the next skb when the queue is empty.

Signed-off-by: Hannes Hering <hering2@de.ibm.com>
Signed-off-by: Jan-Bernd Themann <themann@de.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Hannes Hering authored and David S. Miller committed May 4, 2009
1 parent 379b026 commit 0b2febf
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 14 deletions.
2 changes: 1 addition & 1 deletion drivers/net/ehea/ehea.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
#include <asm/io.h>

#define DRV_NAME "ehea"
#define DRV_VERSION "EHEA_0100"
#define DRV_VERSION "EHEA_0101"

/* eHEA capability flags */
#define DLPAR_PORT_ADD_REM 1
Expand Down
31 changes: 18 additions & 13 deletions drivers/net/ehea/ehea_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -545,14 +545,17 @@ static inline struct sk_buff *get_skb_by_index(struct sk_buff **skb_array,
x &= (arr_len - 1);

pref = skb_array[x];
prefetchw(pref);
prefetchw(pref + EHEA_CACHE_LINE);

pref = (skb_array[x]->data);
prefetch(pref);
prefetch(pref + EHEA_CACHE_LINE);
prefetch(pref + EHEA_CACHE_LINE * 2);
prefetch(pref + EHEA_CACHE_LINE * 3);
if (pref) {
prefetchw(pref);
prefetchw(pref + EHEA_CACHE_LINE);

pref = (skb_array[x]->data);
prefetch(pref);
prefetch(pref + EHEA_CACHE_LINE);
prefetch(pref + EHEA_CACHE_LINE * 2);
prefetch(pref + EHEA_CACHE_LINE * 3);
}

skb = skb_array[skb_index];
skb_array[skb_index] = NULL;
return skb;
Expand All @@ -569,12 +572,14 @@ static inline struct sk_buff *get_skb_by_index_ll(struct sk_buff **skb_array,
x &= (arr_len - 1);

pref = skb_array[x];
prefetchw(pref);
prefetchw(pref + EHEA_CACHE_LINE);
if (pref) {
prefetchw(pref);
prefetchw(pref + EHEA_CACHE_LINE);

pref = (skb_array[x]->data);
prefetchw(pref);
prefetchw(pref + EHEA_CACHE_LINE);
pref = (skb_array[x]->data);
prefetchw(pref);
prefetchw(pref + EHEA_CACHE_LINE);
}

skb = skb_array[wqe_index];
skb_array[wqe_index] = NULL;
Expand Down

0 comments on commit 0b2febf

Please sign in to comment.