Source-Changes-D archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: CVS commit: src/sys/net
On Dec 29, 10:09pm, alnsn%yandex.ru@localhost (Alexander Nasonov) wrote:
-- Subject: Re: CVS commit: src/sys/net
| Christos Zoulas wrote:
| > Module Name: src
| > Committed By: christos
| > Date: Thu Dec 29 20:50:06 UTC 2011
| >
| > Modified Files:
| > src/sys/net: bpf_filter.c
| >
| > Log Message:
| > PR/45751: Alexander Nasonov: No overflow check in BPF_LD|BPF_ABS
| >
| >
| > To generate a diff of this commit:
| > cvs rdiff -u -r1.48 -r1.49 src/sys/net/bpf_filter.c
| ...
| > @@ -253,7 +254,8 @@ bpf_filter(const struct bpf_insn *pc, co
| >
| > case BPF_LD|BPF_H|BPF_IND:
| > k = X + pc->k;
| > - if (k + sizeof(int16_t) > buflen) {
| > + if (pc->k > buflen || X > buflen - pc->k ||
| > + sizeof(int16_t) > buflen - k) {
| > #ifdef _KERNEL
| > int merr = 0; /* XXX: GCC */
|
| Not sure FreeBSD got BPF_IND case right. They basically disabled using
| big positive values of pc->k for small negative values. They could just
| copy code from BPF_ABS case:
|
| > + if (k > buflen || sizeof(int16_t) > buflen - k) {
|
| but they didn't. Can we assume that loads with negative offsets relative
| to X (e.g. P[X-1:4]) are not allowed by bpf?
I suppose by turning k unsigned, they really want to disable negative offsets.
We could allow them if needed, but at that point it is better to make k signed.
christos
Home |
Main Index |
Thread Index |
Old Index