tech-net archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: BPF_MISC+BPF_COP and BPF_COPX



Darren Reed <darrenr%netbsd.org@localhost> wrote:
> >
> > I would like propose new BPF instructions for the misc category: BPF_COP
> > and BPF_COPX.  It would provide a capability of calling an external
> > function - think of BPF "coprocessor".
> 
> No.
> 

You do not have to use it.

> A BPF program is an entity that can be verified as correct from a
> security perspective.It is also self contained and requires no
> external references in order to understand.
> 
> This change brakes the BPF security model because now the BPF program
> is calling out to some random function as part of the packet matching.

BPF byte-code can still be verified.  You cannot call random functions,
the functions are predetermined and cannot change during the life-cycle.
There is a difference.  However, it is as secure as calling any other
function in the kernel on packet transmission.  You can make a bug in
your function, but you can as well make it in tcp_input().

> > It provides us a capability to offload more complex packet processing.
> > My primary user would be NPF in NetBSD, e.g. one of the operations is to
> > lookup an IP address in a table/ipset.
> 
> Then add BPF instructions to manipulate address sets (add, remove, lookup)
> and pick a datastore to use to support it.

How adding specialised random instructions is better than having a generic
mechanism?  You mean BPF_SOME_LOOKUP calling some_lookup() suddenly becomes
more secure than BPF_MISC+BPF_COP calling the same some_lookup()?

> In doing that the benefits can thereafter be applied to other programs
> (such as tcpdump) that have a large list of entities that need to be
> matched against.

They can grow such support using coprocessor.  There is no reason why
there could not be a generic (or custom) coprocessor which you could
simply modload, if you trust it (or blacklist if you do not).

-- 
Mindaugas


Home | Main Index | Thread Index | Old Index