[NETFILTER]: Fix CID offset bug in PPTP NAT helper debug message
authorHolger Eitzenberger <heitzenberger@astaro.com>
Tue, 21 Mar 2006 01:58:21 +0000 (17:58 -0800)
committerDavid S. Miller <davem@davemloft.net>
Tue, 21 Mar 2006 01:58:21 +0000 (17:58 -0800)
The recent (kernel 2.6.15.1) fix for PPTP NAT helper introduced a
bug - which only appears if DEBUGP is enabled though.

The calculation of the CID offset into a PPTP request struct is
not correct, so that at least not the correct CID is displayed
if DEBUGP is enabled.

This patch corrects CID offset calculation and introduces a #define
for that.

Signed-off-by: Holger Eitzenberger <heitzenberger@astaro.com>
Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/netfilter/ip_nat_helper_pptp.c

index ac004895781a116d99beca8a05f1a1ccb0ab8d8d..b9c016c063b813f9ced6614d4a2fe3880d8d51be 100644 (file)
@@ -52,6 +52,8 @@
 
 #define IP_NAT_PPTP_VERSION "3.0"
 
+#define REQ_CID(req, off)              (*(u_int16_t *)((char *)(req) + (off)))
+
 MODULE_LICENSE("GPL");
 MODULE_AUTHOR("Harald Welte <laforge@gnumonks.org>");
 MODULE_DESCRIPTION("Netfilter NAT helper module for PPTP");
@@ -198,7 +200,7 @@ pptp_outbound_pkt(struct sk_buff **pskb,
        /* only OUT_CALL_REQUEST, IN_CALL_REPLY, CALL_CLEAR_REQUEST pass
         * down to here */
        DEBUGP("altering call id from 0x%04x to 0x%04x\n",
-               ntohs(*(u_int16_t *)pptpReq + cid_off), ntohs(new_callid));
+               ntohs(REQ_CID(pptpReq, cid_off)), ntohs(new_callid));
 
        /* mangle packet */
        if (ip_nat_mangle_tcp_packet(pskb, ct, ctinfo,
@@ -342,7 +344,7 @@ pptp_inbound_pkt(struct sk_buff **pskb,
 
        /* mangle packet */
        DEBUGP("altering peer call id from 0x%04x to 0x%04x\n",
-               ntohs(*(u_int16_t *)pptpReq + pcid_off), ntohs(new_pcid));
+               ntohs(REQ_CID(pptpReq, pcid_off)), ntohs(new_pcid));
 
        if (ip_nat_mangle_tcp_packet(pskb, ct, ctinfo,
                                     pcid_off + sizeof(struct pptp_pkt_hdr) +
@@ -353,7 +355,7 @@ pptp_inbound_pkt(struct sk_buff **pskb,
 
        if (new_cid) {
                DEBUGP("altering call id from 0x%04x to 0x%04x\n",
-                       ntohs(*(u_int16_t *)pptpReq + cid_off), ntohs(new_cid));
+                       ntohs(REQ_CID(pptpReq, cid_off)), ntohs(new_cid));
                if (ip_nat_mangle_tcp_packet(pskb, ct, ctinfo,
                                             cid_off + sizeof(struct pptp_pkt_hdr) +
                                             sizeof(struct PptpControlHeader),