summaryrefslogtreecommitdiffstats
path: root/sys/net/bpf_filter.c
diff options
context:
space:
mode:
authordfr <dfr@FreeBSD.org>1998-10-31 10:45:03 +0000
committerdfr <dfr@FreeBSD.org>1998-10-31 10:45:03 +0000
commit0ef74c4863e57ddfc59f6053aadfb010e2187c79 (patch)
tree918ceb01f35987dd2891f4f2248910fc1162bb74 /sys/net/bpf_filter.c
parent6812cb0412f8b584d79915b6f855ce0cbdc2d962 (diff)
downloadFreeBSD-src-0ef74c4863e57ddfc59f6053aadfb010e2187c79.zip
FreeBSD-src-0ef74c4863e57ddfc59f6053aadfb010e2187c79.tar.gz
* Use explicitly sized types for grovelling around inside packets.
* On the alpha, make sure memory accesses are only made to aligned boundaries. Submitted by: Alex Nash <nash@mcs.net>
Diffstat (limited to 'sys/net/bpf_filter.c')
-rw-r--r--sys/net/bpf_filter.c42
1 files changed, 21 insertions, 21 deletions
diff --git a/sys/net/bpf_filter.c b/sys/net/bpf_filter.c
index 63f78f8..7b30cc9 100644
--- a/sys/net/bpf_filter.c
+++ b/sys/net/bpf_filter.c
@@ -37,7 +37,7 @@
*
* @(#)bpf_filter.c 8.1 (Berkeley) 6/10/93
*
- * $Id: bpf_filter.c,v 1.8 1997/02/22 09:40:57 peter Exp $
+ * $Id: bpf_filter.c,v 1.9 1997/08/02 14:32:31 bde Exp $
*/
#include <sys/param.h>
@@ -46,23 +46,23 @@
#include <netinet/in.h>
#endif
-#if defined(sparc) || defined(mips) || defined(ibm032)
+#if defined(sparc) || defined(mips) || defined(ibm032) || defined(__alpha__)
#define BPF_ALIGN
#endif
#ifndef BPF_ALIGN
-#define EXTRACT_SHORT(p) ((u_short)ntohs(*(u_short *)p))
-#define EXTRACT_LONG(p) (ntohl(*(u_long *)p))
+#define EXTRACT_SHORT(p) ((u_int16_t)ntohs(*(u_int16_t *)p))
+#define EXTRACT_LONG(p) (ntohl(*(u_int32_t *)p))
#else
#define EXTRACT_SHORT(p)\
- ((u_short)\
- ((u_short)*((u_char *)p+0)<<8|\
- (u_short)*((u_char *)p+1)<<0))
+ ((u_int16_t)\
+ ((u_int16_t)*((u_char *)p+0)<<8|\
+ (u_int16_t)*((u_char *)p+1)<<0))
#define EXTRACT_LONG(p)\
- ((u_long)*((u_char *)p+0)<<24|\
- (u_long)*((u_char *)p+1)<<16|\
- (u_long)*((u_char *)p+2)<<8|\
- (u_long)*((u_char *)p+3)<<0)
+ ((u_int32_t)*((u_char *)p+0)<<24|\
+ (u_int32_t)*((u_char *)p+1)<<16|\
+ (u_int32_t)*((u_char *)p+2)<<8|\
+ (u_int32_t)*((u_char *)p+3)<<0)
#endif
#ifdef KERNEL
@@ -174,9 +174,9 @@ bpf_filter(pc, p, wirelen, buflen)
u_int wirelen;
register u_int buflen;
{
- register u_long A = 0, X = 0;
+ register u_int32_t A = 0, X = 0;
register int k;
- long mem[BPF_MEMWORDS];
+ int32_t mem[BPF_MEMWORDS];
if (pc == 0)
/*
@@ -203,7 +203,7 @@ bpf_filter(pc, p, wirelen, buflen)
case BPF_LD|BPF_W|BPF_ABS:
k = pc->k;
- if (k + sizeof(long) > buflen) {
+ if (k + sizeof(int32_t) > buflen) {
#ifdef KERNEL
int merr;
@@ -218,16 +218,16 @@ bpf_filter(pc, p, wirelen, buflen)
#endif
}
#ifdef BPF_ALIGN
- if (((int)(p + k) & 3) != 0)
+ if (((intptr_t)(p + k) & 3) != 0)
A = EXTRACT_LONG(&p[k]);
else
#endif
- A = ntohl(*(long *)(p + k));
+ A = ntohl(*(int32_t *)(p + k));
continue;
case BPF_LD|BPF_H|BPF_ABS:
k = pc->k;
- if (k + sizeof(short) > buflen) {
+ if (k + sizeof(int16_t) > buflen) {
#ifdef KERNEL
int merr;
@@ -271,7 +271,7 @@ bpf_filter(pc, p, wirelen, buflen)
case BPF_LD|BPF_W|BPF_IND:
k = X + pc->k;
- if (k + sizeof(long) > buflen) {
+ if (k + sizeof(int32_t) > buflen) {
#ifdef KERNEL
int merr;
@@ -286,16 +286,16 @@ bpf_filter(pc, p, wirelen, buflen)
#endif
}
#ifdef BPF_ALIGN
- if (((int)(p + k) & 3) != 0)
+ if (((intptr_t)(p + k) & 3) != 0)
A = EXTRACT_LONG(&p[k]);
else
#endif
- A = ntohl(*(long *)(p + k));
+ A = ntohl(*(int32_t *)(p + k));
continue;
case BPF_LD|BPF_H|BPF_IND:
k = X + pc->k;
- if (k + sizeof(short) > buflen) {
+ if (k + sizeof(int16_t) > buflen) {
#ifdef KERNEL
int merr;
OpenPOWER on IntegriCloud