diff -urN linux-2.4.21-rc2-ctx17/arch/i386/kernel/entry.S linux-2.4.21-rc2-ctx17-fixed/arch/i386/kernel/entry.S --- linux-2.4.21-rc2-ctx17/arch/i386/kernel/entry.S Fri May 9 12:33:26 2003 +++ linux-2.4.21-rc2-ctx17-fixed/arch/i386/kernel/entry.S Fri May 9 16:27:01 2003 @@ -663,6 +663,8 @@ .long SYMBOL_NAME(sys_ni_syscall) /* sys_epoll_wait */ .long SYMBOL_NAME(sys_ni_syscall) /* sys_remap_file_pages */ .long SYMBOL_NAME(sys_ni_syscall) /* sys_set_tid_address */ + .long SYMBOL_NAME(sys_new_s_context) + .long SYMBOL_NAME(sys_set_ipv4root) /* 260 */ .rept NR_syscalls-(.-sys_call_table)/4 .long SYMBOL_NAME(sys_ni_syscall) diff -urN linux-2.4.21-rc2-ctx17/fs/ext2/inode.c linux-2.4.21-rc2-ctx17-fixed/fs/ext2/inode.c --- linux-2.4.21-rc2-ctx17/fs/ext2/inode.c Fri May 9 12:33:26 2003 +++ linux-2.4.21-rc2-ctx17-fixed/fs/ext2/inode.c Fri May 9 16:14:56 2003 @@ -887,13 +887,15 @@ { unsigned int flags = inode->u.ext2_i.i_flags; - inode->i_flags &= ~(S_SYNC|S_APPEND|S_IMMUTABLE|S_NOATIME); + inode->i_flags &= ~(S_SYNC|S_APPEND|S_IMMUTABLE_FILE|S_IMMUTABLE_LINK|S_NOATIME); if (flags & EXT2_SYNC_FL) inode->i_flags |= S_SYNC; if (flags & EXT2_APPEND_FL) inode->i_flags |= S_APPEND; - if (flags & EXT2_IMMUTABLE_FL) - inode->i_flags |= S_IMMUTABLE; + if (flags & EXT2_IMMUTABLE_FILE_FL) + inode->i_flags |= S_IMMUTABLE_FILE; + if (flags & EXT2_IMMUTABLE_LINK_FL) + inode->i_flags |= S_IMMUTABLE_LINK; if (flags & EXT2_NOATIME_FL) inode->i_flags |= S_NOATIME; } diff -urN linux-2.4.21-rc2-ctx17/fs/ext3/inode.c linux-2.4.21-rc2-ctx17-fixed/fs/ext3/inode.c --- linux-2.4.21-rc2-ctx17/fs/ext3/inode.c Fri May 9 12:33:26 2003 +++ linux-2.4.21-rc2-ctx17-fixed/fs/ext3/inode.c Fri May 9 16:14:56 2003 @@ -2078,13 +2078,15 @@ { unsigned int flags = inode->u.ext3_i.i_flags; - inode->i_flags &= ~(S_SYNC|S_APPEND|S_IMMUTABLE|S_NOATIME); + inode->i_flags &= ~(S_SYNC|S_APPEND|S_IMMUTABLE_FILE|S_IMMUTABLE_LINK|S_NOATIME); if (flags & EXT3_SYNC_FL) inode->i_flags |= S_SYNC; if (flags & EXT3_APPEND_FL) inode->i_flags |= S_APPEND; - if (flags & EXT3_IMMUTABLE_FL) - inode->i_flags |= S_IMMUTABLE; + if (flags & EXT3_IMMUTABLE_FILE_FL) + inode->i_flags |= S_IMMUTABLE_FILE; + if (flags & EXT3_IMMUTABLE_LINK_FL) + inode->i_flags |= S_IMMUTABLE_LINK; if (flags & EXT3_NOATIME_FL) inode->i_flags |= S_NOATIME; } diff -urN linux-2.4.21-rc2-ctx17/include/asm-i386/unistd.h linux-2.4.21-rc2-ctx17-fixed/include/asm-i386/unistd.h --- linux-2.4.21-rc2-ctx17/include/asm-i386/unistd.h Fri May 9 16:31:35 2003 +++ linux-2.4.21-rc2-ctx17-fixed/include/asm-i386/unistd.h Fri May 9 16:31:05 2003 @@ -257,8 +257,8 @@ #define __NR_alloc_hugepages 250 #define __NR_free_hugepages 251 #define __NR_exit_group 252 -#define __NR_new_s_context 253 -#define __NR_set_ipv4root 254 +#define __NR_new_s_context 259 +#define __NR_set_ipv4root 260 /* user-visible error numbers are in the range -1 - -124: see */ diff -urN linux-2.4.21-rc2-ctx17/net/ipv4/tcp_ipv4.c linux-2.4.21-rc2-ctx17-fixed/net/ipv4/tcp_ipv4.c --- linux-2.4.21-rc2-ctx17/net/ipv4/tcp_ipv4.c Fri May 9 12:33:27 2003 +++ linux-2.4.21-rc2-ctx17-fixed/net/ipv4/tcp_ipv4.c Fri May 9 16:25:28 2003 @@ -514,10 +514,10 @@ #else score = 1; #endif - if(rcv_saddr) { - if (rcv_saddr != daddr) - continue; + if (tcp_addr_in_list(rcv_saddr,daddr,sk->ip_info)) { score+=2; + } else { + continue; } if (sk->bound_dev_if) { if (sk->bound_dev_if != dif) @@ -545,7 +545,7 @@ if (sk) { if (sk->num == hnum && sk->next == NULL && - (!sk->rcv_saddr || sk->rcv_saddr == daddr) && + tcp_addr_in_list(sk->rcv_saddr,daddr,sk->ip_info) && (sk->family == PF_INET || !ipv6_only_sock(sk)) && !sk->bound_dev_if) goto sherry_cache; diff -urN linux-2.4.21-rc2-ctx17/net/ipv4/udp.c linux-2.4.21-rc2-ctx17-fixed/net/ipv4/udp.c --- linux-2.4.21-rc2-ctx17/net/ipv4/udp.c Fri May 9 12:33:27 2003 +++ linux-2.4.21-rc2-ctx17-fixed/net/ipv4/udp.c Fri May 9 16:19:57 2003 @@ -246,6 +246,11 @@ if(sk->rcv_saddr != daddr) continue; score+=2; + } else if (sk->ip_info != NULL) { + if (udp_in_list(sk->ip_info, daddr)) + score += 2; + else + continue; } if(sk->daddr) { if(sk->daddr != saddr) @@ -298,7 +303,7 @@ if ((s->num != hnum) || (s->daddr && s->daddr!=rmt_addr) || (s->dport != rmt_port && s->dport != 0) || - (s->rcv_saddr && s->rcv_saddr != loc_addr) || + (s->rcv_saddr && s->rcv_saddr != loc_addr && s->rcv_saddr2 != loc_addr) || ipv6_only_sock(s) || (s->bound_dev_if && s->bound_dev_if != dif)) continue;