forked from KolibriOS/kolibrios
IPv4: Dont crash when there is no route to host.
git-svn-id: svn://kolibrios.org@6122 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
63743484d7
commit
cbca315c7d
@ -1,6 +1,6 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;
|
||||
;; Copyright (C) KolibriOS team 2004-2015. All rights reserved.
|
||||
;; Copyright (C) KolibriOS team 2004-2016. All rights reserved.
|
||||
;; PROGRAMMING:
|
||||
;; Ivan Poddubny
|
||||
;; Marat Zakiyanov (Mario79)
|
||||
@ -2177,7 +2177,7 @@ sys_end:
|
||||
@@:
|
||||
|
||||
mov eax, [TASK_BASE]
|
||||
mov [eax+TASKDATA.state], 3; terminate this program
|
||||
mov [eax+TASKDATA.state], TSTATE_ZOMBIE
|
||||
call wakeup_osloop
|
||||
|
||||
.waitterm: ; wait here for termination
|
||||
@ -3746,7 +3746,7 @@ nobackgr:
|
||||
align 4
|
||||
markz:
|
||||
push ecx edx
|
||||
cmp [edx+TASKDATA.state], 9
|
||||
cmp [edx+TASKDATA.state], TSTATE_FREE
|
||||
jz .nokill
|
||||
lea edx, [(edx-(CURRENT_TASK and 1FFFFFFFh))*8+SLOT_BASE]
|
||||
cmp [edx+APPDATA.process], sys_proc
|
||||
@ -3760,7 +3760,7 @@ markz:
|
||||
pop edx ecx
|
||||
test eax, eax
|
||||
jz @f
|
||||
mov [edx+TASKDATA.state], byte 3
|
||||
mov [edx+TASKDATA.state], TSTATE_ZOMBIE
|
||||
@@:
|
||||
add edx, 0x20
|
||||
loop markz
|
||||
|
@ -1,6 +1,6 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; Copyright (C) KolibriOS team 2004-2015. All rights reserved. ;;
|
||||
;; Copyright (C) KolibriOS team 2004-2016. All rights reserved. ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;; ;;
|
||||
;; IPv4.INC ;;
|
||||
@ -634,6 +634,8 @@ ipv4_output:
|
||||
push ecx ax edi
|
||||
mov eax, edi
|
||||
call ipv4_route ; outputs device number in edi, dest ip in eax, source IP in edx
|
||||
test eax, eax
|
||||
jz .no_route
|
||||
push edx
|
||||
test edi, edi
|
||||
jz .loopback
|
||||
@ -683,6 +685,12 @@ ipv4_output:
|
||||
xor eax, eax
|
||||
ret
|
||||
|
||||
.no_route:
|
||||
DEBUGF DEBUG_NETWORK_ERROR, "IPv4_output: No route to host!\n"
|
||||
add esp, 2*4+2
|
||||
xor eax, eax
|
||||
ret
|
||||
|
||||
.arp_error:
|
||||
DEBUGF DEBUG_NETWORK_ERROR, "IPv4_output: ARP error=%x\n", eax
|
||||
add esp, 4
|
||||
@ -917,7 +925,7 @@ endp
|
||||
; ebx = outgoing device / 0 ;
|
||||
; edx = Source IP ;
|
||||
; ;
|
||||
; OUT: eax = Destination IP (or gateway IP) ;
|
||||
; OUT: eax = Destination IP (may be gateway), 0 on error ;
|
||||
; edx = Source IP ;
|
||||
; edi = device number*4 ;
|
||||
; ;
|
||||
@ -926,7 +934,7 @@ endp
|
||||
; ;
|
||||
;-----------------------------------------------------------------;
|
||||
align 4
|
||||
ipv4_route: ; TODO: return error if no valid route found
|
||||
ipv4_route:
|
||||
|
||||
test ebx, ebx
|
||||
jnz .got_device
|
||||
@ -979,6 +987,7 @@ ipv4_route: ; TODO: return error if no valid route found
|
||||
ret
|
||||
|
||||
.fail:
|
||||
xor eax, eax
|
||||
ret
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user