Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=05d224468a273a9ee773a0e9d34227ee7f2c0840
Commit:     05d224468a273a9ee773a0e9d34227ee7f2c0840
Parent:     4d4d3d1e8807d6aa9822eeedf7fe8500e1b7e38d
Author:     Patrick McHardy <[EMAIL PROTECTED]>
AuthorDate: Mon Apr 23 22:39:02 2007 -0700
Committer:  David S. Miller <[EMAIL PROTECTED]>
CommitDate: Mon Apr 23 22:39:02 2007 -0700

    [XFRM]: beet: fix pseudo header length value
    
    draft-nikander-esp-beet-mode-07.txt is not entirely clear on how the length
    value of the pseudo header should be calculated, it states "The Header 
Length
    field contains the length of the pseudo header, IPv4 options, and padding in
    8 octets units.", but also states "Length in octets (Header Len + 1) * 8".
    draft-nikander-esp-beet-mode-08-pre1.txt [1] clarifies this, the header 
length
    should not include the first 8 byte.
    
    This change affects backwards compatibility, but option encapsulation didn't
    work until very recently anyway.
    
    [1] 
http://users.piuha.net/jmelen/BEET/draft-nikander-esp-beet-mode-08-pre1.txt
    
    Signed-off-by: Patrick McHardy <[EMAIL PROTECTED]>
    Signed-off-by: David S. Miller <[EMAIL PROTECTED]>
---
 net/ipv4/xfrm4_mode_beet.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/net/ipv4/xfrm4_mode_beet.c b/net/ipv4/xfrm4_mode_beet.c
index f68dfd8..d419e15 100644
--- a/net/ipv4/xfrm4_mode_beet.c
+++ b/net/ipv4/xfrm4_mode_beet.c
@@ -52,7 +52,7 @@ static int xfrm4_beet_output(struct xfrm_state *x, struct 
sk_buff *skb)
 
                ph = (struct ip_beet_phdr *)skb->h.raw;
                ph->padlen = 4 - (optlen & 4);
-               ph->hdrlen = (optlen + ph->padlen + sizeof(*ph)) / 8;
+               ph->hdrlen = optlen / 8;
                ph->nexthdr = top_iph->protocol;
                if (ph->padlen)
                        memset(ph + 1, IPOPT_NOP, ph->padlen);
@@ -85,7 +85,7 @@ static int xfrm4_beet_input(struct xfrm_state *x, struct 
sk_buff *skb)
                ph = (struct ip_beet_phdr *)(skb->h.ipiph + 1);
 
                phlen = sizeof(*ph) + ph->padlen;
-               optlen = ph->hdrlen * 8 - phlen;
+               optlen = ph->hdrlen * 8 + (IPV4_BEET_PHMAXLEN - phlen);
                if (optlen < 0 || optlen & 3 || optlen > 250)
                        goto out;
 
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to