diff options
Diffstat (limited to 'net/netrom/nr_route.c')
-rw-r--r-- | net/netrom/nr_route.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/net/netrom/nr_route.c b/net/netrom/nr_route.c index 915a87ba23e1..2cf330162d7e 100644 --- a/net/netrom/nr_route.c +++ b/net/netrom/nr_route.c | |||
@@ -670,14 +670,17 @@ int nr_rt_ioctl(unsigned int cmd, void __user *arg) | |||
670 | case SIOCADDRT: | 670 | case SIOCADDRT: |
671 | if (copy_from_user(&nr_route, arg, sizeof(struct nr_route_struct))) | 671 | if (copy_from_user(&nr_route, arg, sizeof(struct nr_route_struct))) |
672 | return -EFAULT; | 672 | return -EFAULT; |
673 | if ((dev = nr_ax25_dev_get(nr_route.device)) == NULL) | 673 | if (nr_route.ndigis > AX25_MAX_DIGIS) |
674 | return -EINVAL; | 674 | return -EINVAL; |
675 | if (nr_route.ndigis < 0 || nr_route.ndigis > AX25_MAX_DIGIS) { | 675 | if ((dev = nr_ax25_dev_get(nr_route.device)) == NULL) |
676 | dev_put(dev); | ||
677 | return -EINVAL; | 676 | return -EINVAL; |
678 | } | ||
679 | switch (nr_route.type) { | 677 | switch (nr_route.type) { |
680 | case NETROM_NODE: | 678 | case NETROM_NODE: |
679 | if (strnlen(nr_route.mnemonic, 7) == 7) { | ||
680 | ret = -EINVAL; | ||
681 | break; | ||
682 | } | ||
683 | |||
681 | ret = nr_add_node(&nr_route.callsign, | 684 | ret = nr_add_node(&nr_route.callsign, |
682 | nr_route.mnemonic, | 685 | nr_route.mnemonic, |
683 | &nr_route.neighbour, | 686 | &nr_route.neighbour, |