diff -Nru linux-2.4.20/include/linux/netfilter_ipv4/listhelp.h linux-2.4.20-pom2patch/include/linux/netfilter_ipv4/listhelp.h
--- linux-2.4.20/include/linux/netfilter_ipv4/listhelp.h	2001-07-26 15:52:12.000000000 -0500
+++ linux-2.4.20-pom2patch/include/linux/netfilter_ipv4/listhelp.h	2003-05-02 12:54:34.000000000 -0500
@@ -39,6 +39,22 @@
 	(type)__i;				\
 })
 
+/* Just like LIST_FIND but we search backwards */
+#define LIST_FIND_B(head, cmpfn, type, args...)		\
+({							\
+	const struct list_head *__i = (head);		\
+							\
+	ASSERT_READ_LOCK(head);				\
+	do {						\
+		__i = __i->prev;			\
+		if (__i == (head)) {			\
+			__i = NULL;			\
+			break;				\
+		}					\
+	} while (!cmpfn((const type)__i , ## args));	\
+	(type)__i;					\
+})
+
 static inline int
 __list_cmp_same(const void *p1, const void *p2) { return p1 == p2; }
 
diff -Nru linux-2.4.20/net/ipv4/netfilter/ip_conntrack_core.c linux-2.4.20-pom2patch/net/ipv4/netfilter/ip_conntrack_core.c
--- linux-2.4.20/net/ipv4/netfilter/ip_conntrack_core.c	2002-11-28 17:53:15.000000000 -0600
+++ linux-2.4.20-pom2patch/net/ipv4/netfilter/ip_conntrack_core.c	2003-05-02 12:54:34.000000000 -0500
@@ -595,7 +595,7 @@
 	int dropped = 0;
 
 	READ_LOCK(&ip_conntrack_lock);
-	h = LIST_FIND(chain, unreplied, struct ip_conntrack_tuple_hash *);
+	h = LIST_FIND_B(chain, unreplied, struct ip_conntrack_tuple_hash *);
 	if (h)
 		atomic_inc(&h->ctrack->ct_general.use);
 	READ_UNLOCK(&ip_conntrack_lock);
