~ubuntu-branches/ubuntu/quantal/linux-linaro-mx51/quantal

« back to all changes in this revision

Viewing changes to net/core/filter.c

  • Committer: Package Import Robot
  • Author(s): John Rigby, John Rigby
  • Date: 2011-09-26 10:44:23 UTC
  • Revision ID: package-import@ubuntu.com-20110926104423-3o58a3c1bj7x00rs
Tags: 3.0.0-1007.9
[ John Rigby ]

Enable crypto modules and remove crypto-modules from
exclude-module files
LP: #826021

Show diffs side-by-side

added added

removed removed

Lines of Context:
38
38
#include <asm/unaligned.h>
39
39
#include <linux/filter.h>
40
40
#include <linux/reciprocal_div.h>
41
 
 
42
 
enum {
43
 
        BPF_S_RET_K = 1,
44
 
        BPF_S_RET_A,
45
 
        BPF_S_ALU_ADD_K,
46
 
        BPF_S_ALU_ADD_X,
47
 
        BPF_S_ALU_SUB_K,
48
 
        BPF_S_ALU_SUB_X,
49
 
        BPF_S_ALU_MUL_K,
50
 
        BPF_S_ALU_MUL_X,
51
 
        BPF_S_ALU_DIV_X,
52
 
        BPF_S_ALU_AND_K,
53
 
        BPF_S_ALU_AND_X,
54
 
        BPF_S_ALU_OR_K,
55
 
        BPF_S_ALU_OR_X,
56
 
        BPF_S_ALU_LSH_K,
57
 
        BPF_S_ALU_LSH_X,
58
 
        BPF_S_ALU_RSH_K,
59
 
        BPF_S_ALU_RSH_X,
60
 
        BPF_S_ALU_NEG,
61
 
        BPF_S_LD_W_ABS,
62
 
        BPF_S_LD_H_ABS,
63
 
        BPF_S_LD_B_ABS,
64
 
        BPF_S_LD_W_LEN,
65
 
        BPF_S_LD_W_IND,
66
 
        BPF_S_LD_H_IND,
67
 
        BPF_S_LD_B_IND,
68
 
        BPF_S_LD_IMM,
69
 
        BPF_S_LDX_W_LEN,
70
 
        BPF_S_LDX_B_MSH,
71
 
        BPF_S_LDX_IMM,
72
 
        BPF_S_MISC_TAX,
73
 
        BPF_S_MISC_TXA,
74
 
        BPF_S_ALU_DIV_K,
75
 
        BPF_S_LD_MEM,
76
 
        BPF_S_LDX_MEM,
77
 
        BPF_S_ST,
78
 
        BPF_S_STX,
79
 
        BPF_S_JMP_JA,
80
 
        BPF_S_JMP_JEQ_K,
81
 
        BPF_S_JMP_JEQ_X,
82
 
        BPF_S_JMP_JGE_K,
83
 
        BPF_S_JMP_JGE_X,
84
 
        BPF_S_JMP_JGT_K,
85
 
        BPF_S_JMP_JGT_X,
86
 
        BPF_S_JMP_JSET_K,
87
 
        BPF_S_JMP_JSET_X,
88
 
        /* Ancillary data */
89
 
        BPF_S_ANC_PROTOCOL,
90
 
        BPF_S_ANC_PKTTYPE,
91
 
        BPF_S_ANC_IFINDEX,
92
 
        BPF_S_ANC_NLATTR,
93
 
        BPF_S_ANC_NLATTR_NEST,
94
 
        BPF_S_ANC_MARK,
95
 
        BPF_S_ANC_QUEUE,
96
 
        BPF_S_ANC_HATYPE,
97
 
        BPF_S_ANC_RXHASH,
98
 
        BPF_S_ANC_CPU,
99
 
};
 
41
#include <linux/ratelimit.h>
100
42
 
101
43
/* No hurry in this branch */
102
44
static void *__load_pointer(const struct sk_buff *skb, int k, unsigned int size)
145
87
        rcu_read_lock();
146
88
        filter = rcu_dereference(sk->sk_filter);
147
89
        if (filter) {
148
 
                unsigned int pkt_len = sk_run_filter(skb, filter->insns);
 
90
                unsigned int pkt_len = SK_RUN_FILTER(filter, skb);
149
91
 
150
92
                err = pkt_len ? pskb_trim(skb, pkt_len) : -EPERM;
151
93
        }
409
351
                        continue;
410
352
                }
411
353
                default:
412
 
                        WARN_ON(1);
 
354
                        WARN_RATELIMIT(1, "Unknown code:%u jt:%u tf:%u k:%u\n",
 
355
                                       fentry->code, fentry->jt,
 
356
                                       fentry->jf, fentry->k);
413
357
                        return 0;
414
358
                }
415
359
        }
638
582
{
639
583
        struct sk_filter *fp = container_of(rcu, struct sk_filter, rcu);
640
584
 
 
585
        bpf_jit_free(fp);
641
586
        kfree(fp);
642
587
}
643
588
EXPORT_SYMBOL(sk_filter_release_rcu);
672
617
 
673
618
        atomic_set(&fp->refcnt, 1);
674
619
        fp->len = fprog->len;
 
620
        fp->bpf_func = sk_run_filter;
675
621
 
676
622
        err = sk_chk_filter(fp->insns, fp->len);
677
623
        if (err) {
679
625
                return err;
680
626
        }
681
627
 
 
628
        bpf_jit_compile(fp);
 
629
 
682
630
        old_fp = rcu_dereference_protected(sk->sk_filter,
683
631
                                           sock_owned_by_user(sk));
684
632
        rcu_assign_pointer(sk->sk_filter, fp);