diff options
author | truckman <truckman@FreeBSD.org> | 2002-10-03 02:13:00 +0000 |
---|---|---|
committer | truckman <truckman@FreeBSD.org> | 2002-10-03 02:13:00 +0000 |
commit | da2757cbc5b4e67753f56890f45f5f687cc298ae (patch) | |
tree | a99f59036961904f8470031c60cd1319fed1c7b9 /sys/net | |
parent | d86ebf792e644b705a6451c5a934d6fa545b3086 (diff) | |
download | FreeBSD-src-da2757cbc5b4e67753f56890f45f5f687cc298ae.zip FreeBSD-src-da2757cbc5b4e67753f56890f45f5f687cc298ae.tar.gz |
In an SMP environment post-Giant it is no longer safe to blindly
dereference the struct sigio pointer without any locking. Change
fgetown() to take a reference to the pointer instead of a copy of the
pointer and call SIGIO_LOCK() before copying the pointer and
dereferencing it.
Reviewed by: rwatson
Diffstat (limited to 'sys/net')
-rw-r--r-- | sys/net/bpf.c | 4 | ||||
-rw-r--r-- | sys/net/if_tap.c | 4 | ||||
-rw-r--r-- | sys/net/if_tun.c | 4 |
3 files changed, 6 insertions, 6 deletions
diff --git a/sys/net/bpf.c b/sys/net/bpf.c index ee11748..faf89be 100644 --- a/sys/net/bpf.c +++ b/sys/net/bpf.c @@ -866,7 +866,7 @@ bpfioctl(dev, cmd, addr, flags, td) break; case FIOGETOWN: - *(int *)addr = fgetown(d->bd_sigio); + *(int *)addr = fgetown(&d->bd_sigio); break; /* This is deprecated, FIOSETOWN should be used instead. */ @@ -876,7 +876,7 @@ bpfioctl(dev, cmd, addr, flags, td) /* This is deprecated, FIOGETOWN should be used instead. */ case TIOCGPGRP: - *(int *)addr = -fgetown(d->bd_sigio); + *(int *)addr = -fgetown(&d->bd_sigio); break; case BIOCSRSIG: /* Set receive signal */ diff --git a/sys/net/if_tap.c b/sys/net/if_tap.c index 0d46639..5cdeaf7 100644 --- a/sys/net/if_tap.c +++ b/sys/net/if_tap.c @@ -709,7 +709,7 @@ tapioctl(dev, cmd, data, flag, td) return (fsetown(*(int *)data, &tp->tap_sigio)); case FIOGETOWN: - *(int *)data = fgetown(tp->tap_sigio); + *(int *)data = fgetown(&tp->tap_sigio); return (0); /* this is deprecated, FIOSETOWN should be used instead */ @@ -718,7 +718,7 @@ tapioctl(dev, cmd, data, flag, td) /* this is deprecated, FIOGETOWN should be used instead */ case TIOCGPGRP: - *(int *)data = -fgetown(tp->tap_sigio); + *(int *)data = -fgetown(&tp->tap_sigio); return (0); /* VMware/VMnet port ioctl's */ diff --git a/sys/net/if_tun.c b/sys/net/if_tun.c index b4015d7..cb9cb69 100644 --- a/sys/net/if_tun.c +++ b/sys/net/if_tun.c @@ -622,7 +622,7 @@ tunioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct thread *td) return (fsetown(*(int *)data, &tp->tun_sigio)); case FIOGETOWN: - *(int *)data = fgetown(tp->tun_sigio); + *(int *)data = fgetown(&tp->tun_sigio); return (0); /* This is deprecated, FIOSETOWN should be used instead. */ @@ -631,7 +631,7 @@ tunioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct thread *td) /* This is deprecated, FIOGETOWN should be used instead. */ case TIOCGPGRP: - *(int *)data = -fgetown(tp->tun_sigio); + *(int *)data = -fgetown(&tp->tun_sigio); return (0); default: |