aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorYOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>2006-08-23 20:21:29 -0400
committerDavid S. Miller <davem@sunset.davemloft.net>2006-09-22 17:55:49 -0400
commit825e288ef4c55a379a97e104c825eb9b74874099 (patch)
tree38cfe6e2e051dd464a115cd9e9c80e634d159328 /net
parent3fc5e0440be7fab3abae4e801b0ef17e9b3b58c4 (diff)
[IPV6] ROUTE: Make sure we do not exceed args in fib6_lookup_1().
Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org> Acked-by: Ville Nuorvala <vnuorval@tcs.hut.fi> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r--net/ipv6/ip6_fib.c23
1 files changed, 16 insertions, 7 deletions
diff --git a/net/ipv6/ip6_fib.c b/net/ipv6/ip6_fib.c
index 5408b64f3b5f..19ee7375daa9 100644
--- a/net/ipv6/ip6_fib.c
+++ b/net/ipv6/ip6_fib.c
@@ -829,6 +829,9 @@ static struct fib6_node * fib6_lookup_1(struct fib6_node *root,
829 struct fib6_node *fn; 829 struct fib6_node *fn;
830 int dir; 830 int dir;
831 831
832 if (unlikely(args->offset == 0))
833 return NULL;
834
832 /* 835 /*
833 * Descend on a tree 836 * Descend on a tree
834 */ 837 */
@@ -879,16 +882,22 @@ static struct fib6_node * fib6_lookup_1(struct fib6_node *root,
879struct fib6_node * fib6_lookup(struct fib6_node *root, struct in6_addr *daddr, 882struct fib6_node * fib6_lookup(struct fib6_node *root, struct in6_addr *daddr,
880 struct in6_addr *saddr) 883 struct in6_addr *saddr)
881{ 884{
882 struct lookup_args args[2];
883 struct fib6_node *fn; 885 struct fib6_node *fn;
884 886 struct lookup_args args[] = {
885 args[0].offset = offsetof(struct rt6_info, rt6i_dst); 887 {
886 args[0].addr = daddr; 888 .offset = offsetof(struct rt6_info, rt6i_dst),
887 889 .addr = daddr,
890 },
888#ifdef CONFIG_IPV6_SUBTREES 891#ifdef CONFIG_IPV6_SUBTREES
889 args[1].offset = offsetof(struct rt6_info, rt6i_src); 892 {
890 args[1].addr = saddr; 893 .offset = offsetof(struct rt6_info, rt6i_src),
894 .addr = saddr,
895 },
891#endif 896#endif
897 {
898 .offset = 0, /* sentinel */
899 }
900 };
892 901
893 fn = fib6_lookup_1(root, args); 902 fn = fib6_lookup_1(root, args);
894 903