Changeset 37493


Ignore:
Timestamp:
2013-07-21T15:53:54+02:00 (5 years ago)
Author:
nbd
Message:

kernel: fix crash in act_connmark in 3.9 and 3.10 (fixes #13916, #13876)

Signed-off-by: Felix Fietkau <nbd@…>

Location:
trunk/target/linux/generic
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/generic/patches-3.10/621-sched_act_connmark.patch

    r36663 r37493  
    11--- /dev/null 
    22+++ b/net/sched/act_connmark.c 
    3 @@ -0,0 +1,137 @@ 
     3@@ -0,0 +1,148 @@ 
    44+/* 
    55+ * Copyright (c) 2011 Felix Fietkau <nbd@openwrt.org> 
     
    8282+} 
    8383+ 
    84 +static int tcf_connmark_init(struct nlattr *nla, struct nlattr *est, 
    85 +                        struct tc_action *a, int ovr, int bind) 
     84+static int tcf_connmark_init(struct net *net, struct nlattr *nla, 
     85+                            struct nlattr *est, struct tc_action *a, 
     86+                            int ovr, int bind) 
    8687+{ 
    8788+       struct tcf_common *pc; 
     89+       int ret = 0; 
    8890+ 
    89 +       pc = tcf_hash_create(0, est, a, sizeof(*pc), bind, 
    90 +                            &connmark_idx_gen, &connmark_hash_info); 
    91 +       if (IS_ERR(pc)) 
    92 +           return PTR_ERR(pc); 
     91+       pc = tcf_hash_check(0, a, bind, &connmark_hash_info); 
     92+       if (!pc) { 
     93+               pc = tcf_hash_create(0, est, a, sizeof(*pc), bind, 
     94+                                    &connmark_idx_gen, &connmark_hash_info); 
     95+               if (IS_ERR(pc)) 
     96+                   return PTR_ERR(pc); 
    9397+ 
    94 +       tcf_hash_insert(pc, &connmark_hash_info); 
     98+               tcf_hash_insert(pc, &connmark_hash_info); 
     99+               ret = ACT_P_CREATED; 
     100+       } else { 
     101+               if (!ovr) { 
     102+                       tcf_hash_release(pc, bind, &connmark_hash_info); 
     103+                       return -EEXIST; 
     104+               } 
     105+       } 
    95106+ 
    96 +       return ACT_P_CREATED; 
     107+       return ret; 
    97108+} 
    98109+ 
  • trunk/target/linux/generic/patches-3.9/621-sched_act_connmark.patch

    r36008 r37493  
    11--- /dev/null 
    22+++ b/net/sched/act_connmark.c 
    3 @@ -0,0 +1,137 @@ 
     3@@ -0,0 +1,148 @@ 
    44+/* 
    55+ * Copyright (c) 2011 Felix Fietkau <nbd@openwrt.org> 
     
    8282+} 
    8383+ 
    84 +static int tcf_connmark_init(struct nlattr *nla, struct nlattr *est, 
    85 +                        struct tc_action *a, int ovr, int bind) 
     84+static int tcf_connmark_init(struct net *net, struct nlattr *nla, 
     85+                            struct nlattr *est, struct tc_action *a, 
     86+                            int ovr, int bind) 
    8687+{ 
    8788+       struct tcf_common *pc; 
     89+       int ret = 0; 
    8890+ 
    89 +       pc = tcf_hash_create(0, est, a, sizeof(*pc), bind, 
    90 +                            &connmark_idx_gen, &connmark_hash_info); 
    91 +       if (IS_ERR(pc)) 
    92 +           return PTR_ERR(pc); 
     91+       pc = tcf_hash_check(0, a, bind, &connmark_hash_info); 
     92+       if (!pc) { 
     93+               pc = tcf_hash_create(0, est, a, sizeof(*pc), bind, 
     94+                                    &connmark_idx_gen, &connmark_hash_info); 
     95+               if (IS_ERR(pc)) 
     96+                   return PTR_ERR(pc); 
    9397+ 
    94 +       tcf_hash_insert(pc, &connmark_hash_info); 
     98+               tcf_hash_insert(pc, &connmark_hash_info); 
     99+               ret = ACT_P_CREATED; 
     100+       } else { 
     101+               if (!ovr) { 
     102+                       tcf_hash_release(pc, bind, &connmark_hash_info); 
     103+                       return -EEXIST; 
     104+               } 
     105+       } 
    95106+ 
    96 +       return ACT_P_CREATED; 
     107+       return ret; 
    97108+} 
    98109+ 
Note: See TracChangeset for help on using the changeset viewer.