<div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
It might be safer to use strncmp and snprintf instead of strcmp and sprintf.<font color="#888888"><br>
</font></blockquote><div><br>Thanks Brad!<br>
<br>
So here is the final version:<br>
<br>
--- net/ipsec/ipsec_rcv.c.orig&nbsp;&nbsp;&nbsp; Tue Dec 23 13:10:46 2008<br>
+++ net/ipsec/ipsec_rcv.c&nbsp;&nbsp;&nbsp; Tue Dec 23 15:29:00 2008<br>
@@ -1619,18 +1619,44 @@ int klips26_rcv_encap(struct sk_buff *sk<br>
&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp; struct ipsec_rcv_state nirs, *irs = &amp;nirs;<br>
&nbsp;&nbsp;&nbsp;&nbsp; struct iphdr *ipp;<br>
+&nbsp;&nbsp;&nbsp; char name[IFNAMSIZ];<br>
+&nbsp;&nbsp;&nbsp; struct net_device *ipsecdev = NULL, *prvdev = NULL;<br>
+&nbsp;&nbsp;&nbsp; struct ipsecpriv *prv = NULL;<br>
+&nbsp;&nbsp;&nbsp; int i;<br>
&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp; /* Don&#39;t unlink in the middle of a turnaround */<br>
&nbsp;&nbsp;&nbsp;&nbsp; KLIPS_INC_USE;<br>
&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp; memset(irs, 0, sizeof(*irs));<br>
&nbsp;<br>
-&nbsp;&nbsp;&nbsp; /* XXX fudge it so that all nat-t stuff comes from ipsec0&nbsp;&nbsp;&nbsp; */<br>
-&nbsp;&nbsp;&nbsp; /*&nbsp;&nbsp;&nbsp;&nbsp; eventually, the SA itself will determine which device<br>
-&nbsp;&nbsp;&nbsp; &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp; it comes from<br>
-&nbsp;&nbsp;&nbsp; &nbsp;*/ <br>
-&nbsp;&nbsp;&nbsp; {<br>
-&nbsp;&nbsp;&nbsp; &nbsp; skb-&gt;dev = ipsec_get_device(0);<br>
+&nbsp;&nbsp;&nbsp; if(skb-&gt;dev) {<br>
+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; KLIPS_PRINT(debug_rcv,<br>
+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &quot;klips_debug:klips26_rcv_encap: &quot;<br>
+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &quot;&lt;&lt;&lt; Info -- &quot;);<br>
+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; KLIPS_PRINTMORE(debug_rcv, &quot;skb-&gt;dev=%s &quot;,<br>
+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; skb-&gt;dev-&gt;name ? skb-&gt;dev-&gt;name : &quot;NULL&quot;);<br>
+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; KLIPS_PRINTMORE(debug_rcv, &quot;\n&quot;);<br>
+<br>
+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(skb-&gt;dev-&gt;name) {<br>
+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for(i = 0; i &lt; IPSEC_NUM_IF; i++) {<br>
+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; snprintf(name, IFNAMSIZ, IPSEC_DEV_FORMAT, i);<br>
+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ipsecdev = __ipsec_dev_get(name);<br>
+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; prv = ipsecdev ? (struct ipsecpriv *)(ipsecdev-&gt;priv) : NULL;<br>
+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; prvdev = prv ? (struct net_device *)(prv-&gt;dev) : NULL;<br>
+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(prvdev &amp;&amp; !strncmp(prvdev-&gt;name, skb-&gt;dev-&gt;name, IFNAMSIZ)) {<br>
+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; skb-&gt;dev = ipsecdev;<br>
+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; KLIPS_PRINT(debug_rcv &amp;&amp; prvdev,<br>
+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &quot;klips_debug:klips26_rcv_encap: &quot;<br>
+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &quot;assigning packet ownership to virtual device %s from physical device %s.\n&quot;,<br>
+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; name, prvdev-&gt;name);<br>
+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; break;<br>
+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
+&nbsp;&nbsp;&nbsp; } else {<br>
+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; KLIPS_PRINT(debug_rcv,<br>
+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &quot;klips_debug:klips26_rcv_encap: &quot;<br>
+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &quot;device supplied with skb is NULL\n&quot;);<br>
&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp; /* set up for decap loop */<br><br></div></div><br>