svn commit: r235746 - head/sys/net

Jung-uk Kim jkim at FreeBSD.org
Thu May 24 00:18:46 UTC 2012


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 2012-05-21 18:19:20 -0400, Alexander V. Chernikov wrote:
> Author: melifaro Date: Mon May 21 22:19:19 2012 New Revision:
> 235746 URL: http://svn.freebsd.org/changeset/base/235746
> 
> Log: Call bpf_jitter() before acquiring BPF global lock due to
> malloc() being used inside bpf_jitter.
> 
> Eliminate bpf_buffer_alloc() and allocate BPF buffers on descriptor
> creation and BIOCSBLEN ioctl. This permits us not to allocate
> buffers inside bpf_attachd() which is protected by global lock.
> 
> Approved by:      kib(mentor) MFC in:            4 weeks
> 
> Modified: head/sys/net/bpf.c head/sys/net/bpf_buffer.c 
> head/sys/net/bpf_buffer.h
> 
> Modified: head/sys/net/bpf.c 
> ==============================================================================
>
> 
- --- head/sys/net/bpf.c	Mon May 21 22:17:29 2012	(r235745)
> +++ head/sys/net/bpf.c	Mon May 21 22:19:19 2012	(r235746)
...
> @@ -1664,7 +1668,7 @@ bpf_setf(struct bpf_d *d, struct bpf_pro 
> struct bpf_insn *fcode, *old; u_int wfilter, flen, size; #ifdef
> BPF_JITTER -	bpf_jit_filter *ofunc; +	bpf_jit_filter *ofunc,
> *jfunc; #endif int need_upgrade; #ifdef COMPAT_FREEBSD32 @@ -1695,6
> +1699,13 @@ bpf_setf(struct bpf_d *d, struct bpf_pro else fcode =
> NULL; /* Make compiler happy */
> 
> +#ifdef BPF_JITTER +	if (fp->bf_insns != NULL) +		jfunc =
> bpf_jitter(fcode, flen); +	else +		jfunc = NULL; /* Make compiler
> happy */ +#endif + BPF_LOCK();
> 
> if (cmd == BIOCSETWF) {
...

This is completely wrong.  First, fcode has not been initialized with
copyin().  Second, you must not compile random filter code without
validation, i.e., bpf_validate().

Jung-uk Kim
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.19 (FreeBSD)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAk+9fmUACgkQmlay1b9qnVOlBACgtljVNwOiFb7Ds7GgeoQMyRRr
jU4An3b43yEND8yPs8GSn20ZeCRrI9pu
=z4sw
-----END PGP SIGNATURE-----


More information about the svn-src-all mailing list