diff -u --new-file --recursive v1.1.6/linux/Makefile linux/Makefile --- v1.1.6/linux/Makefile Tue Apr 19 22:20:34 1994 +++ linux/Makefile Tue Apr 19 22:07:43 1994 @@ -1,6 +1,6 @@ VERSION = 1 PATCHLEVEL = 1 -SUBLEVEL = 6 +SUBLEVEL = 7 all: Version zImage diff -u --new-file --recursive v1.1.6/linux/mm/memory.c linux/mm/memory.c --- v1.1.6/linux/mm/memory.c Tue Apr 19 10:53:05 1994 +++ linux/mm/memory.c Tue Apr 19 22:07:30 1994 @@ -916,11 +916,23 @@ return; } if (address < PAGE_SIZE) { - printk("Unable to handle kernel NULL pointer dereference"); + printk(KERN_ALERT "Unable to handle kernel NULL pointer dereference"); pg0[0] = PAGE_SHARED; } else - printk("Unable to handle kernel paging request"); - printk(" at address %08lx\n",address); + printk(KERN_ALERT "Unable to handle kernel paging request"); + printk(" at kernel address %08lx\n",address); + address += TASK_SIZE; + __asm__("movl %%cr3,%0" : "=r" (user_esp)); + printk(KERN_ALERT "current->tss.cr3 = %08lx, %%cr3 = %08lx\n", + current->tss.cr3, user_esp); + user_esp = ((unsigned long *) user_esp)[address >> 22]; + printk(KERN_ALERT "*pde = %08lx\n", user_esp); + if (user_esp & PAGE_PRESENT) { + user_esp &= PAGE_MASK; + address &= 0x003ff000; + user_esp = ((unsigned long *) user_esp)[address >> PAGE_SHIFT]; + printk(KERN_ALERT "*pte = %08lx\n", user_esp); + } die_if_kernel("Oops", regs, error_code); do_exit(SIGKILL); } diff -u --new-file --recursive v1.1.6/linux/net/inet/raw.c linux/net/inet/raw.c --- v1.1.6/linux/net/inet/raw.c Tue Apr 19 22:20:35 1994 +++ linux/net/inet/raw.c Tue Apr 19 21:58:43 1994 @@ -197,6 +197,9 @@ if (sin.sin_port == 0) sin.sin_port = sk->protocol; + if (sin.sin_addr.s_addr == INADDR_ANY) + sin.sin_addr.s_addr = ip_my_addr(); + if (sk->broadcast == 0 && ip_chk_addr(sin.sin_addr.s_addr)==IS_BROADCAST) return -EACCES; diff -u --new-file --recursive v1.1.6/linux/net/inet/sock.c linux/net/inet/sock.c --- v1.1.6/linux/net/inet/sock.c Tue Apr 19 22:20:36 1994 +++ linux/net/inet/sock.c Tue Apr 19 21:58:43 1994 @@ -1144,6 +1144,7 @@ { struct sock *sk=(struct sock *)newsock->data; newsock->data=NULL; + sk->dead = 1; destroy_sock(sk); } diff -u --new-file --recursive v1.1.6/linux/net/inet/udp.c linux/net/inet/udp.c --- v1.1.6/linux/net/inet/udp.c Tue Apr 19 22:20:38 1994 +++ linux/net/inet/udp.c Tue Apr 19 21:58:43 1994 @@ -35,6 +35,7 @@ * Alan Cox : No wakeup calls. Instead we now use the callbacks. * Alan Cox : Use ip_tos and ip_ttl * Alan Cox : SNMP Mibs + * Alan Cox : MSG_DONTROUTE, and 0.0.0.0 support. * * * This program is free software; you can redistribute it and/or @@ -395,6 +396,10 @@ * BSD socket semantics. You must set SO_BROADCAST to permit * broadcasting of data. */ + + if(sin.sin_addr.s_addr==INADDR_ANY) + sin.sin_addr.s_addr=ip_my_addr(); + if(!sk->broadcast && ip_chk_addr(sin.sin_addr.s_addr)==IS_BROADCAST) return -EACCES; /* Must turn broadcast on first */