diff options
Diffstat (limited to 'net/econet/af_econet.c')
-rw-r--r-- | net/econet/af_econet.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/net/econet/af_econet.c b/net/econet/af_econet.c index 13992e1d2726..15dcc1a586b4 100644 --- a/net/econet/af_econet.c +++ b/net/econet/af_econet.c | |||
@@ -661,8 +661,10 @@ static int ec_dev_ioctl(struct socket *sock, unsigned int cmd, void __user *arg) | |||
661 | err = 0; | 661 | err = 0; |
662 | switch (cmd) { | 662 | switch (cmd) { |
663 | case SIOCSIFADDR: | 663 | case SIOCSIFADDR: |
664 | if (!capable(CAP_NET_ADMIN)) | 664 | if (!capable(CAP_NET_ADMIN)) { |
665 | return -EPERM; | 665 | err = -EPERM; |
666 | break; | ||
667 | } | ||
666 | 668 | ||
667 | edev = dev->ec_ptr; | 669 | edev = dev->ec_ptr; |
668 | if (edev == NULL) { | 670 | if (edev == NULL) { |
@@ -849,9 +851,13 @@ static void aun_incoming(struct sk_buff *skb, struct aunhdr *ah, size_t len) | |||
849 | { | 851 | { |
850 | struct iphdr *ip = ip_hdr(skb); | 852 | struct iphdr *ip = ip_hdr(skb); |
851 | unsigned char stn = ntohl(ip->saddr) & 0xff; | 853 | unsigned char stn = ntohl(ip->saddr) & 0xff; |
854 | struct dst_entry *dst = skb_dst(skb); | ||
855 | struct ec_device *edev = NULL; | ||
852 | struct sock *sk = NULL; | 856 | struct sock *sk = NULL; |
853 | struct sk_buff *newskb; | 857 | struct sk_buff *newskb; |
854 | struct ec_device *edev = skb->dev->ec_ptr; | 858 | |
859 | if (dst) | ||
860 | edev = dst->dev->ec_ptr; | ||
855 | 861 | ||
856 | if (! edev) | 862 | if (! edev) |
857 | goto bad; | 863 | goto bad; |