lkml.org 
[lkml]   [2013]   [Nov]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH 3.2 19/87] net: fix cipso packet validation when !NETLABEL
    3.2.53-rc1 review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Seif Mazareeb <seif@marvell.com>

    [ Upstream commit f2e5ddcc0d12f9c4c7b254358ad245c9dddce13b ]

    When CONFIG_NETLABEL is disabled, the cipso_v4_validate() function could loop
    forever in the main loop if opt[opt_iter +1] == 0, this will causing a kernel
    crash in an SMP system, since the CPU executing this function will
    stall /not respond to IPIs.

    This problem can be reproduced by running the IP Stack Integrity Checker
    (http://isic.sourceforge.net) using the following command on a Linux machine
    connected to DUT:

    "icmpsic -s rand -d <DUT IP address> -r 123456"
    wait (1-2 min)

    Signed-off-by: Seif Mazareeb <seif@marvell.com>
    Acked-by: Paul Moore <paul@paul-moore.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
    ---
    include/net/cipso_ipv4.h | 6 ++++--
    1 file changed, 4 insertions(+), 2 deletions(-)

    diff --git a/include/net/cipso_ipv4.h b/include/net/cipso_ipv4.h
    index a7a683e..a8c2ef6 100644
    --- a/include/net/cipso_ipv4.h
    +++ b/include/net/cipso_ipv4.h
    @@ -290,6 +290,7 @@ static inline int cipso_v4_validate(const struct sk_buff *skb,
    unsigned char err_offset = 0;
    u8 opt_len = opt[1];
    u8 opt_iter;
    + u8 tag_len;

    if (opt_len < 8) {
    err_offset = 1;
    @@ -302,11 +303,12 @@ static inline int cipso_v4_validate(const struct sk_buff *skb,
    }

    for (opt_iter = 6; opt_iter < opt_len;) {
    - if (opt[opt_iter + 1] > (opt_len - opt_iter)) {
    + tag_len = opt[opt_iter + 1];
    + if ((tag_len == 0) || (opt[opt_iter + 1] > (opt_len - opt_iter))) {
    err_offset = opt_iter + 1;
    goto out;
    }
    - opt_iter += opt[opt_iter + 1];
    + opt_iter += tag_len;
    }

    out:


    \
     
     \ /
      Last update: 2013-11-26 03:41    [W:4.050 / U:0.180 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site