Index: kern/sysv_shm.c
===================================================================
RCS file: /cvs/src/sys/kern/sysv_shm.c,v
retrieving revision 1.38
diff -u -r1.38 sysv_shm.c
--- kern/sysv_shm.c	21 Aug 2003 05:20:07 -0000	1.38
+++ kern/sysv_shm.c	10 Oct 2003 01:26:10 -0000
@@ -209,6 +209,12 @@
 int
 sys_shmat(struct proc *p, void *v, register_t *retval)
 {
+	return (sys_shmat1(p, v, retval, 0));
+}
+
+int
+sys_shmat1(struct proc *p, void *v, register_t *retval, int findremoved)
+{
 	struct sys_shmat_args /* {
 		syscallarg(int) shmid;
 		syscallarg(const void *) shmaddr;
@@ -235,7 +241,7 @@
 			shmmap_s->shmid = -1;
 		p->p_vmspace->vm_shm = (caddr_t)shmmap_h;
 	}
-	shmseg = shm_find_segment_by_shmid(SCARG(uap, shmid), 0);
+	shmseg = shm_find_segment_by_shmid(SCARG(uap, shmid), findremoved);
 	if (shmseg == NULL)
 		return (EINVAL);
 	error = ipcperm(cred, &shmseg->shm_perm,
Index: sys/shm.h
===================================================================
RCS file: /cvs/src/sys/sys/shm.h,v
retrieving revision 1.14
diff -u -r1.14 shm.h
--- sys/shm.h	17 Dec 2002 23:11:31 -0000	1.14
+++ sys/shm.h	10 Oct 2003 01:26:21 -0000
@@ -156,6 +156,7 @@
 void shmexit(struct vmspace *);
 void shmid_n2o(struct shmid_ds *, struct oshmid_ds *);
 int sysctl_sysvshm(int *, u_int, void *, size_t *, void *, size_t);
+int sys_shmat1(struct proc *, void *, register_t *, int);
 
 #else /* !_KERNEL */
 
Index: compat/linux/linux_ipc.c
===================================================================
RCS file: /cvs/src/sys/compat/linux/linux_ipc.c,v
retrieving revision 1.8
diff -u -r1.8 linux_ipc.c
--- compat/linux/linux_ipc.c	14 Mar 2002 01:26:50 -0000	1.8
+++ compat/linux/linux_ipc.c	10 Oct 2003 01:26:38 -0000
@@ -538,7 +538,7 @@
 	SCARG(&bsa, shmaddr) = SCARG(uap, ptr);
 	SCARG(&bsa, shmflg) = SCARG(uap, a2);
 
-	if ((error = sys_shmat(p, &bsa, retval)))
+	if ((error = sys_shmat1(p, &bsa, retval, 1)))
 		return error;
 
 	if ((error = copyout(&retval[0], (caddr_t) SCARG(uap, a3),
