diff -u --recursive --new-file v1.0.1/linux/Makefile linux/Makefile
--- v1.0.1/linux/Makefile	Fri Mar 18 10:21:32 1994
+++ linux/Makefile	Fri Mar 18 10:31:01 1994
@@ -1,6 +1,6 @@
 VERSION = 1
 PATCHLEVEL = 0
-SUBLEVEL = 1
+SUBLEVEL = 2
 
 all:	Version zImage
 
diff -u --recursive --new-file v1.0.1/linux/drivers/scsi/scsi.c linux/drivers/scsi/scsi.c
--- v1.0.1/linux/drivers/scsi/scsi.c	Mon Mar 14 11:30:54 1994
+++ linux/drivers/scsi/scsi.c	Thu Mar 17 09:31:18 1994
@@ -126,6 +126,7 @@
 
 static struct blist blacklist[] = 
 {
+   {"CHINON","CD-ROM CDS-431","H42"},  /* Locks up if polled for lun != 0 */
    {"DENON","DRD-25X","V"},   /* A cdrom that locks up when probed at lun != 0 */
    {"IMS", "CDD521/10","2.06"},   /* Locks-up when LUN>0 polled. */
    {"MAXTOR","XT-3280","PR02"},   /* Locks-up when LUN>0 polled. */
diff -u --recursive --new-file v1.0.1/linux/drivers/scsi/scsi_ioctl.c linux/drivers/scsi/scsi_ioctl.c
--- v1.0.1/linux/drivers/scsi/scsi_ioctl.c	Wed Dec  1 14:44:16 1993
+++ linux/drivers/scsi/scsi_ioctl.c	Wed Mar 16 19:12:10 1994
@@ -235,7 +235,7 @@
         char scsi_cmd[12];
 
 	if ((cmd != 0 && dev->index > NR_SCSI_DEVICES))
-		return -ENODEV;
+		return -ENXIO;
 	
 	switch (cmd) {
 	        case SCSI_IOCTL_GET_IDLUN:
diff -u --recursive --new-file v1.0.1/linux/drivers/scsi/sd.c linux/drivers/scsi/sd.c
--- v1.0.1/linux/drivers/scsi/sd.c	Wed Dec  1 14:44:16 1993
+++ linux/drivers/scsi/sd.c	Wed Mar 16 19:12:09 1994
@@ -59,7 +59,7 @@
 	target =  DEVICE_NR(MINOR(inode->i_rdev));
 
 	if(target >= NR_SD || !rscsi_disks[target].device)
-	  return -ENODEV;   /* No such device */
+	  return -ENXIO;   /* No such device */
 	
 /* Make sure that only one process can do a check_change_disk at one time.
  This is also used to lock out further access when the partition table is being re-read. */
diff -u --recursive --new-file v1.0.1/linux/drivers/scsi/sg.c linux/drivers/scsi/sg.c
--- v1.0.1/linux/drivers/scsi/sg.c	Wed Dec  1 14:44:16 1993
+++ linux/drivers/scsi/sg.c	Wed Mar 16 19:12:10 1994
@@ -56,7 +56,7 @@
  {
   int dev = MINOR(inode->i_rdev);
   if ((dev<0) || (dev>=NR_SG))
-   return -ENODEV;
+   return -ENXIO
   switch(cmd_in)
    {
     case SG_SET_TIMEOUT:
@@ -74,7 +74,7 @@
   int dev=MINOR(inode->i_rdev);
   int flags=filp->f_flags;
   if (dev>=NR_SG)
-   return -ENODEV;
+   return -ENXIO;
   if (O_RDWR!=(flags & O_ACCMODE))
    return -EACCES;
   if (flags & O_EXCL)
diff -u --recursive --new-file v1.0.1/linux/drivers/scsi/sr.c linux/drivers/scsi/sr.c
--- v1.0.1/linux/drivers/scsi/sr.c	Fri Dec 17 08:20:30 1993
+++ linux/drivers/scsi/sr.c	Wed Mar 16 19:12:09 1994
@@ -260,7 +260,7 @@
 static int sr_open(struct inode * inode, struct file * filp)
 {
 	if(MINOR(inode->i_rdev) >= NR_SR || 
-	   !scsi_CDs[MINOR(inode->i_rdev)].device) return -ENODEV;   /* No such device */
+	   !scsi_CDs[MINOR(inode->i_rdev)].device) return -ENXIO;   /* No such device */
 
         check_disk_change(inode->i_rdev);
 
diff -u --recursive --new-file v1.0.1/linux/drivers/scsi/sr_ioctl.c linux/drivers/scsi/sr_ioctl.c
--- v1.0.1/linux/drivers/scsi/sr_ioctl.c	Sat Jan  8 14:35:09 1994
+++ linux/drivers/scsi/sr_ioctl.c	Wed Mar 16 19:12:10 1994
@@ -98,7 +98,7 @@
 	int result, target;
 
 	target = MINOR(dev);
-	if (target >= NR_SR) return -ENODEV;
+	if (target >= NR_SR) return -ENXIO;
 
 	switch (cmd) 
 		{
diff -u --recursive --new-file v1.0.1/linux/drivers/scsi/st.c linux/drivers/scsi/st.c
--- v1.0.1/linux/drivers/scsi/st.c	Thu Dec 30 11:39:06 1993
+++ linux/drivers/scsi/st.c	Wed Mar 16 19:12:09 1994
@@ -359,7 +359,7 @@
 
     dev = MINOR(inode->i_rdev) & 127;
     if (dev >= NR_ST)
-      return (-ENODEV);
+      return (-ENXIO);
     STp = &(scsi_tapes[dev]);
     if (STp->in_use) {
       printk("st%d: Device already in use.\n", dev);
diff -u --recursive --new-file v1.0.1/linux/include/linux/in.h linux/include/linux/in.h
--- v1.0.1/linux/include/linux/in.h	Thu Dec 30 13:25:45 1993
+++ linux/include/linux/in.h	Fri Mar 18 10:30:26 1994
@@ -135,10 +135,10 @@
 static __inline__ unsigned long int
 __constant_ntohl(unsigned long int x)
 {
-	return (((x & 0x000000ff) << 24) |
-		((x & 0x0000ff00) <<  8) |
-		((x & 0x00ff0000) >>  8) |
-		((x & 0xff000000) >> 24));
+	return (((x & 0x000000ffU) << 24) |
+		((x & 0x0000ff00U) <<  8) |
+		((x & 0x00ff0000U) >>  8) |
+		((x & 0xff000000U) >> 24));
 }
 
 static __inline__ unsigned short int
@@ -164,19 +164,19 @@
 
 #ifdef  __OPTIMIZE__
 #  define ntohl(x) \
-(__builtin_constant_p((x)) ? \
+(__builtin_constant_p((long)(x)) ? \
  __constant_ntohl((x)) : \
  __ntohl((x)))
 #  define ntohs(x) \
-(__builtin_constant_p((x)) ? \
+(__builtin_constant_p((short)(x)) ? \
  __constant_ntohs((x)) : \
  __ntohs((x)))
 #  define htonl(x) \
-(__builtin_constant_p((x)) ? \
+(__builtin_constant_p((long)(x)) ? \
  __constant_htonl((x)) : \
  __htonl((x)))
 #  define htons(x) \
-(__builtin_constant_p((x)) ? \
+(__builtin_constant_p((short)(x)) ? \
  __constant_htons((x)) : \
  __htons((x)))
 #endif
diff -u --recursive --new-file v1.0.1/linux/include/linux/kernel.h linux/include/linux/kernel.h
--- v1.0.1/linux/include/linux/kernel.h	Tue Jan 25 11:35:03 1994
+++ linux/include/linux/kernel.h	Fri Mar 18 10:06:57 1994
@@ -14,6 +14,8 @@
 #define LONG_MAX	((long)(~0UL>>1))
 #define ULONG_MAX	(~0UL)
 
+#define STACK_MAGIC	0xdeadbeef
+
 #define	KERN_EMERG	"<0>"	/* system is unusable			*/
 #define	KERN_ALERT	"<1>"	/* action must be taken immediately	*/
 #define	KERN_CRIT	"<2>"	/* critical conditions			*/
diff -u --recursive --new-file v1.0.1/linux/kernel/exit.c linux/kernel/exit.c
--- v1.0.1/linux/kernel/exit.c	Mon Jan  3 08:06:01 1994
+++ linux/kernel/exit.c	Fri Mar 18 10:10:24 1994
@@ -89,6 +89,8 @@
 		if (task[i] == p) {
 			task[i] = NULL;
 			REMOVE_LINKS(p);
+			if (STACK_MAGIC != *(unsigned long *)p->kernel_stack_page)
+				printk(KERN_ALERT "release: %s kernel stack corruption. Aiee\n", p->comm);
 			free_page(p->kernel_stack_page);
 			free_page((long) p);
 			return;
@@ -395,9 +397,6 @@
 		}
 	}
 
-	current->state = TASK_ZOMBIE;
-	current->exit_code = code;
-	current->rss = 0;
 	/* 
 	 * Check to see if any process groups have become orphaned
 	 * as a result of our exiting, and if they have any stopped
@@ -456,6 +455,9 @@
 		disassociate_ctty(1);
 	if (last_task_used_math == current)
 		last_task_used_math = NULL;
+	current->state = TASK_ZOMBIE;
+	current->exit_code = code;
+	current->rss = 0;
 #ifdef DEBUG_PROC_TREE
 	audit_ptree();
 #endif
diff -u --recursive --new-file v1.0.1/linux/kernel/fork.c linux/kernel/fork.c
--- v1.0.1/linux/kernel/fork.c	Fri Mar  4 14:11:01 1994
+++ linux/kernel/fork.c	Fri Mar 18 10:15:28 1994
@@ -157,8 +157,9 @@
 /*
  * set up new TSS and kernel stack
  */
-	if (!(p->kernel_stack_page = __get_free_page(GFP_KERNEL)))
+	if (!(p->kernel_stack_page = get_free_page(GFP_KERNEL)))
 		goto bad_fork_cleanup;
+	*(unsigned long *)p->kernel_stack_page = STACK_MAGIC;
 	p->tss.es = KERNEL_DS;
 	p->tss.cs = KERNEL_CS;
 	p->tss.ss = KERNEL_DS;
diff -u --recursive --new-file v1.0.1/linux/kernel/sched.c linux/kernel/sched.c
--- v1.0.1/linux/kernel/sched.c	Tue Feb 22 09:05:37 1994
+++ linux/kernel/sched.c	Fri Mar 18 10:18:02 1994
@@ -85,7 +85,7 @@
 extern int timer_interrupt(void);
 asmlinkage int system_call(void);
 
-static unsigned long init_kernel_stack[1024];
+static unsigned long init_kernel_stack[1024] = { STACK_MAGIC, };
 struct task_struct init_task = INIT_TASK;
 
 unsigned long volatile jiffies=0;
@@ -95,7 +95,7 @@
 
 struct task_struct * task[NR_TASKS] = {&init_task, };
 
-long user_stack [ PAGE_SIZE>>2 ] ;
+long user_stack [ PAGE_SIZE>>2 ] = { STACK_MAGIC, };
 
 struct {
 	long * a;
@@ -772,6 +772,7 @@
 
 static void show_task(int nr,struct task_struct * p)
 {
+	int free;
 	static char * stat_nam[] = { "R", "S", "D", "Z", "T", "W" };
 
 	printk("%-8s %3d ", p->comm, (p == current) ? -nr : nr);
@@ -783,8 +784,11 @@
 		printk(" current  ");
 	else
 		printk(" %08lX ", ((unsigned long *)p->tss.esp)[3]);
-	printk("%5lu %5d %6d ",
-		p->tss.esp - p->kernel_stack_page, p->pid, p->p_pptr->pid);
+	for (free = 1; free < 1024 ; free++) {
+		if (((unsigned long *)p->kernel_stack_page)[free])
+			break;
+	}
+	printk("%5lu %5d %6d ", free << 2, p->pid, p->p_pptr->pid);
 	if (p->p_cptr)
 		printk("%5d ", p->p_cptr->pid);
 	else
diff -u --recursive --new-file v1.0.1/linux/kernel/traps.c linux/kernel/traps.c
--- v1.0.1/linux/kernel/traps.c	Mon Mar 14 11:30:56 1994
+++ linux/kernel/traps.c	Fri Mar 18 10:12:02 1994
@@ -101,7 +101,10 @@
 	printk("ds: %04x   es: %04x   fs: %04x   gs: %04x   ss: %04x\n",
 		regs->ds, regs->es, regs->fs, regs->gs, ss);
 	store_TR(i);
-	printk("Pid: %d, process nr: %d (%s)\nStack: ", current->pid, 0xffff & i, current->comm);
+	if (STACK_MAGIC != *(unsigned long *)current->kernel_stack_page)
+		printk("Corrupted stack page\n");
+	printk("Process %s (pid: %d, process nr: %d, stackpage=%08lx)\nStack: ",
+		current->comm, current->pid, 0xffff & i, current->kernel_stack_page);
 	for(i=0;i<5;i++)
 		printk("%08lx ", get_seg_long(ss,(i+(unsigned long *)esp)));
 	printk("\nCode: ");
diff -u --recursive --new-file v1.0.1/linux/mm/kmalloc.c linux/mm/kmalloc.c
--- v1.0.1/linux/mm/kmalloc.c	Fri Mar 18 10:21:33 1994
+++ linux/mm/kmalloc.c	Wed Mar 16 19:28:07 1994
@@ -300,7 +300,6 @@
     }
 size = p->bh_length;
 p->bh_flags = MF_FREE; /* As of now this block is officially free */
-
 save_flags(flags);
 cli ();
 p->bh_next = page->firstfree;
diff -u --recursive --new-file v1.0.1/linux/net/inet/sock.c linux/net/inet/sock.c
--- v1.0.1/linux/net/inet/sock.c	Mon Mar 14 11:30:59 1994
+++ linux/net/inet/sock.c	Thu Mar 17 15:44:36 1994
@@ -1194,8 +1194,11 @@
    * We need to free it up because the tcp module creates
    * it's own when it accepts one.
    */
-  if (newsock->data) kfree_s(newsock->data, sizeof(struct sock));
-  newsock->data = NULL;
+  if (newsock->data) {
+  	struct sock * sk = (struct sock *) newsock->data;
+  	newsock->data = NULL;
+  	kfree_s(sk, sizeof(struct sock));
+  }
 
   if (sk1->prot->accept == NULL) return(-EOPNOTSUPP);
 
diff -u --recursive --new-file v1.0.1/linux/net/unix/sock.c linux/net/unix/sock.c
--- v1.0.1/linux/net/unix/sock.c	Fri Mar  4 09:25:20 1994
+++ linux/net/unix/sock.c	Thu Mar 17 10:01:26 1994
@@ -413,10 +413,13 @@
   old_fs = get_fs();
   set_fs(get_ds());
   i = do_mknod(fname, S_IFSOCK | S_IRWXUGO, 0);
-  if (i == 0) i = open_namei(fname, 0, S_IFSOCK, &upd->inode, NULL);
+  if (i == -EEXIST)
+  	i = -EADDRINUSE;
+  if (i == 0)
+  	i = open_namei(fname, 0, S_IFSOCK, &upd->inode, NULL);
   set_fs(old_fs);
   if (i < 0) {
-	printk("UNIX: bind: can't open socket %s\n", fname);
+	dprintf(1, "UNIX: bind: can't open socket %s\n", fname);
 	return(i);
   }
   upd->sockaddr_len = sockaddr_len;	/* now its legal */
