diff -u --recursive --new-file v1.2.11/linux/Makefile linux/Makefile
--- v1.2.11/linux/Makefile	Thu Jul  6 09:17:25 1995
+++ linux/Makefile	Fri Jul  7 11:17:28 1995
@@ -1,6 +1,6 @@
 VERSION = 1
 PATCHLEVEL = 2
-SUBLEVEL = 11
+SUBLEVEL = 12
 
 ARCH = i386
 
diff -u --recursive --new-file v1.2.11/linux/drivers/net/ppp.c linux/drivers/net/ppp.c
--- v1.2.11/linux/drivers/net/ppp.c	Mon May 29 11:16:07 1995
+++ linux/drivers/net/ppp.c	Sun Jul 16 22:21:35 1995
@@ -505,6 +505,9 @@
     ppp_release (ppp);
 
     PRINTKN (2,(KERN_INFO "ppp: channel %s closing.\n", ppp->dev->name));
+#ifdef MODULE
+    MOD_DEC_USE_COUNT;
+#endif
   }
 }
 
@@ -613,9 +616,6 @@
   PRINTKN (2,(KERN_INFO "ppp: channel %s going down for IP packets!\n",
 	      dev->name));
   CHECK_PPP(-ENXIO);
-#ifdef MODULE
-  MOD_DEC_USE_COUNT;
-#endif
   return 0;
 }
 
diff -u --recursive --new-file v1.2.11/linux/drivers/scsi/buslogic.c linux/drivers/scsi/buslogic.c
--- v1.2.11/linux/drivers/scsi/buslogic.c	Thu Jun  1 13:16:24 1995
+++ linux/drivers/scsi/buslogic.c	Tue Jul  4 07:52:26 1995
@@ -1515,8 +1515,8 @@
 		ip[1] = 32;
 	    }
 #else
-	    ip[0] = 256;
-	    ip[1] = 64;
+	    ip[0] = 255;
+	    ip[1] = 63;
 #endif
 	} else {
 	    ip[0] = 128;
diff -u --recursive --new-file v1.2.11/linux/drivers/scsi/scsi.c linux/drivers/scsi/scsi.c
--- v1.2.11/linux/drivers/scsi/scsi.c	Mon May 29 11:16:08 1995
+++ linux/drivers/scsi/scsi.c	Mon Jul 17 15:20:24 1995
@@ -457,7 +457,8 @@
 
 	      if (!strncmp(scsi_result+8,"NEC",3)) {
 		  if (!strncmp(scsi_result+16,"CD-ROM DRIVE:84 ",16) ||
-		      !strncmp(scsi_result+16,"CD-ROM DRIVE:25",15))
+		      !strncmp(scsi_result+16,"CD-ROM DRIVE:25",15) ||
+		      !strncmp(scsi_result+16,"CD-ROM DRIVE:83",15))
 		      SDpnt->manufacturer = SCSI_MAN_NEC_OLDCDR;
 		  else
 		      SDpnt->manufacturer = SCSI_MAN_NEC;
diff -u --recursive --new-file v1.2.11/linux/fs/exec.c linux/fs/exec.c
--- v1.2.11/linux/fs/exec.c	Mon Jan 30 13:08:04 1995
+++ linux/fs/exec.c	Thu Jul  6 09:16:51 1995
@@ -509,7 +509,8 @@
 	int ch;
 	char * name;
 
-	current->dumpable = 1;
+	if (current->euid == current->uid && current->egid == current->gid)
+		current->dumpable = 1;
 	name = bprm->filename;
 	for (i=0; (ch = *(name++)) != '\0';) {
 		if (ch == '/')
diff -u --recursive --new-file v1.2.11/linux/fs/proc/inode.c linux/fs/proc/inode.c
--- v1.2.11/linux/fs/proc/inode.c	Thu Jul  6 09:17:26 1995
+++ linux/fs/proc/inode.c	Thu Jul  6 09:16:52 1995
@@ -194,7 +194,8 @@
 		return;
 	}
 	ino &= 0x0000ffff;
-	if (p->dumpable && p->uid == p->euid && p->gid == p->egid) {
+	if (ino == PROC_PID_INO ||
+	    (p->dumpable && p->uid == p->euid && p->gid == p->egid)) {
 		inode->i_uid = p->uid;
 		inode->i_gid = p->gid;
 	}
diff -u --recursive --new-file v1.2.11/linux/kernel/ksyms.c linux/kernel/ksyms.c
--- v1.2.11/linux/kernel/ksyms.c	Mon May 29 11:16:09 1995
+++ linux/kernel/ksyms.c	Sun Jul 16 22:21:35 1995
@@ -286,6 +286,7 @@
 	X(slhc_remember),
 	X(slhc_compress),
 	X(slhc_uncompress),
+	X(slhc_toss),
 #endif
 #endif
 	/* Device callback registration */
diff -u --recursive --new-file v1.2.11/linux/kernel/sys.c linux/kernel/sys.c
--- v1.2.11/linux/kernel/sys.c	Thu Mar  9 20:37:36 1995
+++ linux/kernel/sys.c	Thu Jul  6 09:16:52 1995
@@ -195,6 +195,7 @@
 asmlinkage int sys_setregid(gid_t rgid, gid_t egid)
 {
 	int old_rgid = current->gid;
+	int old_egid = current->egid;
 
 	if (rgid != (gid_t) -1) {
 		if ((old_rgid == rgid) ||
@@ -219,6 +220,8 @@
 	    (egid != (gid_t) -1 && egid != old_rgid))
 		current->sgid = current->egid;
 	current->fsgid = current->egid;
+	if (current->egid != old_egid)
+		current->dumpable = 0;
 	return 0;
 }
 
@@ -227,12 +230,16 @@
  */
 asmlinkage int sys_setgid(gid_t gid)
 {
+	int old_egid = current->egid;
+
 	if (suser())
 		current->gid = current->egid = current->sgid = current->fsgid = gid;
 	else if ((gid == current->gid) || (gid == current->sgid))
 		current->egid = current->fsgid = gid;
 	else
 		return -EPERM;
+	if (current->egid != old_egid)
+		current->dumpable = 0;
 	return 0;
 }
 
@@ -284,6 +291,7 @@
 asmlinkage int sys_setreuid(uid_t ruid, uid_t euid)
 {
 	int old_ruid = current->uid;
+	int old_euid = current->euid;
 
 	if (ruid != (uid_t) -1) {
 		if ((old_ruid == ruid) || 
@@ -308,6 +316,8 @@
 	    (euid != (uid_t) -1 && euid != old_ruid))
 		current->suid = current->euid;
 	current->fsuid = current->euid;
+	if (current->euid != old_euid)
+		current->dumpable = 0;
 	return 0;
 }
 
@@ -324,12 +334,16 @@
  */
 asmlinkage int sys_setuid(uid_t uid)
 {
+	int old_euid = current->euid;
+
 	if (suser())
 		current->uid = current->euid = current->suid = current->fsuid = uid;
 	else if ((uid == current->uid) || (uid == current->suid))
 		current->fsuid = current->euid = uid;
 	else
 		return -EPERM;
+	if (current->euid != old_euid)
+		current->dumpable = 0;
 	return(0);
 }
 
@@ -346,6 +360,8 @@
 	if (uid == current->uid || uid == current->euid ||
 	    uid == current->suid || uid == current->fsuid || suser())
 		current->fsuid = uid;
+	if (current->fsuid != old_fsuid)
+		current->dumpable = 0;
 	return old_fsuid;
 }
 
@@ -359,6 +375,8 @@
 	if (gid == current->gid || gid == current->egid ||
 	    gid == current->sgid || gid == current->fsgid || suser())
 		current->fsgid = gid;
+	if (current->fsgid != old_fsgid)
+		current->dumpable = 0;
 	return old_fsgid;
 }
 
diff -u --recursive --new-file v1.2.11/linux/net/inet/af_inet.c linux/net/inet/af_inet.c
--- v1.2.11/linux/net/inet/af_inet.c	Thu Jul  6 09:17:27 1995
+++ linux/net/inet/af_inet.c	Thu Jul 13 17:33:13 1995
@@ -1259,7 +1259,7 @@
 static int inet_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
 {
 	struct sock *sk=(struct sock *)sock->data;
-	int err;
+	int err, pid;
 
 	switch(cmd) 
 	{
@@ -1268,7 +1268,11 @@
 			err=verify_area(VERIFY_READ,(int *)arg,sizeof(long));
 			if(err)
 				return err;
-			sk->proc = get_fs_long((int *) arg);
+			pid = get_fs_long((int *) arg);
+			/* see inet_fcntl */
+			if (current->pid != pid && current->pgrp != -pid && !suser())
+				return -EPERM;
+			sk->proc = pid;
 			return(0);
 		case FIOGETOWN:
 		case SIOCGPGRP:
diff -u --recursive --new-file v1.2.11/linux/net/inet/tcp.c linux/net/inet/tcp.c
--- v1.2.11/linux/net/inet/tcp.c	Thu Jun  1 13:16:25 1995
+++ linux/net/inet/tcp.c	Thu Jul 13 17:29:39 1995
@@ -135,6 +135,8 @@
  *		Alan Cox	:	tcp_data() doesn't ack illegal PSH
  *					only frames. At least one pc tcp stack
  *					generates them.
+ *		Mark Yarvis	:	In tcp_read_wakeup(), don't send an
+ *					ack if stat is TCP_CLOSED.
  *
  *
  * To Fix:
@@ -1801,6 +1803,13 @@
 
 	if (!sk->ack_backlog) 
 		return;
+
+	/*
+	 * If we're closed, don't send an ack, or we'll get a RST
+	 * from the closed destination.
+	 */
+	if ((sk->state == TCP_CLOSE) || (sk->state == TCP_TIME_WAIT))
+		return; 
 
 	/*
 	 * FIXME: we need to put code here to prevent this routine from
